180 likes | 402 Views
开源软件开发实践. 高雅 00448017 黄顺平 00448261. 项目介绍. 网络问卷调查/分析系统 网络调查问卷的撰写、发布、回收、统计分析的综合系统 “ 泰兆基金 ” 项目 目前已用于学校教务的网上教学评估. 项目介绍. 名称 PAPO 提供不同于纸质问卷全新调查形式,网络上无形的 paper. 来源: papyrus 解释: PAPO,a paper online. 采用 php 编写 php+mysql, 天生开源 支持 sybase 数据库. 程序开发. 开发语言/数据库的选择 组织分工 软件结构设计 代码风格 开发流程
E N D
开源软件开发实践 高雅 00448017 黄顺平 00448261
项目介绍 • 网络问卷调查/分析系统 • 网络调查问卷的撰写、发布、回收、统计分析的综合系统 • “泰兆基金” 项目 • 目前已用于学校教务的网上教学评估
项目介绍 • 名称PAPO • 提供不同于纸质问卷全新调查形式,网络上无形的paper. • 来源:papyrus • 解释:PAPO,a paper online. • 采用php编写 • php+mysql,天生开源 • 支持sybase数据库
程序开发 • 开发语言/数据库的选择 • 组织分工 • 软件结构设计 • 代码风格 • 开发流程 • 版本控制 • BUG管理
开发语言/数据库的选择 • 适合网页形式,存储大量数据 • 网页脚本语言(php,jsp,asp) • 数据库(MySQL, PostgreSQL, SQL Server) • 尽量避免版权/费用问题,开源 • php vs asp • mysql vs 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统一文件名 • dbi.php, data_functions.php, system_ functions.php, template_functions.php • 功能层web页,每个功能统一前缀 • user_add.php, user_edit.php, user_update.php • 目录结构 • --web功能页 • --style目录,存储外观模版 • --includes目录,存储Lib • 代码制定统一标准 • 有一定原则 • 不限制(也难以限制)具体细节
代码风格 • 函数/变量的命名风格 • 函数名:小写字母、下划线 • get_result(), not getResult() • 局部变量:小写字母、下划线 • 全局变量大写,统一前缀 • $G_ENV,$G_TABLE • 尽量不使用常量,用全局变量统一控制 • $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! 欢迎大家多提建议~