开源软件开发实践

Download Report

Transcript 开源软件开发实践

开源软件开发实践
高雅 00448017
黄顺平 00448261
项目介绍

网络问卷调查/分析
系统

网络调查问卷的撰写、
发布、回收、统计分
析的综合系统
“泰兆基金” 项目
 目前已用于学校教务
的网上教学评估

项目介绍

名称PAPO




提供不同于纸质问卷
全新调查形式,网络上
无形的paper.
来源:papyrus
解释:PAPO,a paper
online.
采用php编写


php+mysql,天生开源
支持sybase数据库
程序开发
 开发语言/数据库的选择
 组织分工
 软件结构设计
 代码风格
 开发流程
 版本控制
 BUG管理
开发语言/数据库的选择

适合网页形式,存储大量数据



尽量避免版权/费用问题,开源



php vs asp
mysql vs SQL Server
简单,易于上手,可用资料多


网页脚本语言(php,jsp,asp)
数据库(MySQL, PostgreSQL, SQL Server)
php vs perl/jsp
最终选择 — 所谓LAMP开发框架


Linux-Apache-MySQL-PHP, support sybase
妥协:MS windows
组织分工

充分利用每个人的优势 — “扬长避短”


每个人熟悉的技术不同:PHP,SQL,XML,HTML,
CSS,Javascript… 分工尽量侧重自己熟悉的方面
开发经历



设计数据库/软件结构 — “统一调度”



制作过网页-CSS/HTML/Javascript
接触过数据库-SQL/XML
集中讨论商定
中途个人不得擅自更改,除非讨论商定
按功能模块化 — “各自为战”


联系紧密的模块交由一个人负责
模块间接口尽量统一
软件结构设计

阅读代码,向“大牛s” 学习


Wordpress, Discuz! ,Xoops
学习代码风格/组织结构
在保证功能前提下,尽量兼顾低版本
 尽量使用php默认库,而非可选库
 模块划分


技术层—做成Library,要统一



数据库访问,XML解析,图表生成
外观模版,sessions/权限控制
功能层—做成web页面,要灵活


基本功能:用户管理,问卷设计,答案统计,数据分析
定制功能:课程管理,流程控制,数据库对接
代码风格

文档结构高度统一

技术层Lib统一文件名


功能层web页,每个功能统一前缀


user_add.php, user_edit.php, user_update.php
目录结构




dbi.php, data_functions.php, system_ functions.php,
template_functions.php
--web功能页
--style目录,存储外观模版
--includes目录,存储Lib
代码制定统一标准


有一定原则
不限制(也难以限制)具体细节
代码风格

函数/变量的命名风格

函数名:小写字母、下划线



局部变量:小写字母、下划线
全局变量大写,统一前缀


$G_ENV,$G_TABLE
尽量不使用常量,用全局变量统一控制


get_result(), not getResult()
$G_ENV["charset_html"], not “gb2312"
Tab缩进
 Include统一位于文件头
 简单注释
开发流程
 准备工作
 需求调查
管理者:教务
 使用者:学生、教师

 定义“常量”——统一规则

开发语言,代码风格
 设计框架
模块划分,组织分工
 数据库结构



按照范式设计,避免冗余
给经常访问的表建立索引
开发流程(cont.)
 分头编写
 不同部分独立编写
 阶段性的合并调试
展示自己成果
 挑对方的不足

 关键性备份
要修改公用lib时
 有新进展时(可能会带来bug)

开发流程(cont.)
 内部测试


开发者自己测试
小范围内试用(06级信科分流)——有效测试途径
 得到反馈意见并完善

教务意见(改变选择题样式、滑动条…)

学生意见(润色界面,增加问卷反馈…)
 交付使用

本学期的教学评估工作
版本控制
 开始没有考虑到
 旧文件覆盖新文件
 发送信息提醒更新
 问题常出现在全局配置文件的修改
 A:
“我修改了xxx.php,快更新.”
 B: “我也正在改呢……” -_-///
 选用SVN
 对代码版本控制更加方便
 编写前update,编写完commit
Bug管理
 SVN管理Bug
 创建Bug汇报文件
把bug文件看成代码来管理
 以表单格式存放bug信息



发现bug的时间,bug表现,涉及的模块,简单解决办法
Bug发现者填写前两部分,解决者填写后两部分
 在阶段合并的时候重新测试以前的bug
Bug管理(cont.)
 有些bug事先无法预期
 复杂事物难以考虑周全
 Bug举例

原因



表现


系统中的XML, 以text属性存放于数据库.
Sybase对text属性预先保留2K磁盘空间
当表中数据太多时,保留空间耗费过多,造成服务器崩溃
解决办法



尽量减少用text
对短字符串使用char,varchar
对较长字符串使用文件保存.
License
 GNU
General Public License (GPL)
 传染性
 调用的
GPL Lib
 Jpgraph—绘制统计图
 Phpdomxml—XML解析(php<5.0)
项目主页
 暂存于实验室服务器
 http://162.105.71.47/~webtest/papo/
Thanks!
欢迎大家多提建议~