系统分析与设计课程之电影售票与服务系统项目开发实践小结
Introduction
敏捷(agile)的面向对象的分析设计方法(OOAD)可以帮助开发者掌握软件开发基本过程,课程倡导的分析设计方法与工具是
- 建立面向客户、能快速适应变化的软件开发迭代过程(iterative process);
- 在系统架构和对象设计中运用设计模式(design patterns),控制并减少软件变化对程序的影响,提升软件的可重用、可维护和可扩展能力。
- 使用软件建模语言(UML),提升分析与设计质量,减少团队内部沟通成本;
基于此,我们尝试进行电影购票与服务网站开发。
参考书籍Scrum and XP from the Trenches(硝烟中的Scrum和XP)完整地描写了如何进行敏捷软件开发,下图较好地概括了敏捷Scrum项目管理要点:

注:较大的图片推荐“在新标签页打开图片”,放大阅读。
该书为我们提供了编写产品BACKLOG(产品特性)、制定SPRINT计划等的指导,但我们的项目并不完全按照敏捷Scrum管理。例如在开发初期,我们进行了大量UML建模。
下面就我们的“单身社交与电影智能购票网站”所进行的部分分析设计进行记录。更多关于项目所用技术、迭代周期等可访问GitHub: movie-ticket-and-service-website
项目思维导图
项目初期通过第一次会议小组成员就项目需求和设计达成共识,现场/会后各自画思维导图,有助于整理思路,相互补充。
产品BACKLOG(产品特性)
我们怎样编写产品BACKLOG
Reference: 硝烟中的Scrum和XP
产品backlog是Scrum的核心,也是一切的起源。从根本上说,它就是一个需求、或故事、或特性等组成的列表,按照重要性的级别进行了排序。它里面包含的是客户想要的东西,并用客户的术语加以描述。我们叫它故事(story),有时候也叫做backlog条目。
我们的故事包括这样一些字段:
- ID 统一标识符。
- Name 简短的、描述性的故事名。比如“查看你自己的交易明细”。它必须要含义明确,这样开发人员和产品负责人才能大致明白我们说的是什么东西,跟其他故事区分开。它一般由2到10个字组成。
- Importance 产品负责人评出一个数值,指示这个故事有多重要。例如10或150。分数越高越重要。
- Initial estimate 团队的初步估算,表示与其他故事相比,完成该故事所需的工作量。最小的单位是故事点(story point),一般大致相当于一个“理想的人天(man-day)”。
- 问一下你的团队,“如果可以投入最适合的人员来完成这个故事(人数要适中,通常为2个),把你们锁到一个屋子里,有很多食物,在完全没有打扰的情况下工作,那么需要几天,才能给出一个经过测试验证,可以交付的完整实现呢?”如果答案是“把3个人关在一起,大约需要4天时间”,那么初始估算的结果就是12个故事点。
- 不需要保证这个估值绝对无误(比如两个故事点的故事就应该花两天时间),而是要保证相对的正确性(即,两个点的故事所花费的时间应该是四个点的故事所需的一半)
- How to demo 它大略描述了这个故事应该如何在sprint 演示上进行示范,本质就是一个简单的测试规范。“先这样做,然后那样做,就应该得到……的结果”。
- Notes 相关信息、解释说明和对其它资料的引用等等。一般都非常简短
我们的产品BACKLOG
| ID | Name | Imp | Est | How to demo | Notes |
|---|---|---|---|---|---|
| 1 | 购票 | 100 | 14 | 登录,打开正在上映电影列表,选择想看的电影,选择所在地区,选择影院,转到选择座位界面,选择座位,点击购票,确认付款,跳转至购票成功界面,可点击查看我的电影票详情 | 需要UML顺序图。目前不需要考虑付款的问题。要考虑座位表如何呈现和选择 |
| 2 | 电影推荐 | 50 | 8 | 进入网站首页,点击“发现电影”,看到根据个人口味(如浏览历史、观看记录、兴趣爱好等)生成的个性推荐电影列表。包括不同电影类型、导演、演员、语言、时代等分类 | 使用分页技术避免大规模的数据库查询。和看电影资讯的设计相似 |
| 3 | 邻座交友 | 40 | 10 | 单人购票,进入选座界面,点击购票张数为一张,座位表中自动标识出其他已购单人票且尚未匹配的异性旁边的座位推荐选座,并可点击查看他们主动留下的交友信息。若选择不相邻空位,弹出是否愿意留下交友信息选项,可选择留下社交信息。若选择相邻座位,社交信息自动保存至个人购票记录中。 | 暂不考虑复杂的社交信息界面,设计合理的交友模式作为亮点 |
| 4 | 看电影资讯 | 45 | 8 | 进入电影首页,看到滚动的电影资讯头条画报。下拉看到即将上映和正在热映的电影预告片。再下拉看到经典电影、分类电影的图片和一句简短的介绍。点击后都转入详情页,看到更详细的资讯例如看资讯、预告片、影评、演员资料照片等等 | 考虑用豆瓣API获取信息 |
Personal Software Process (PSP)
PSP各项指标及技能要求
PSP软件开发的工作量和质量的衡量工具,通过记录工程师实现需求的时间来计算效率。(具体可参考现代软件工程讲义)
下表第三列统计了项目全过程的PSP各指标的时间花费比例(第三列)。
| PSP2.1 | Personal Software Process Stages | Time (%) |
|---|---|---|
| Planning | 计划 | 6 |
| Estimate | 估计这个任务需要多少时间 | 6 |
| Development | 开发 | 80 |
| Analysis | 需求分析 | 8 |
| Design Spec | 生成设计文档 | 6 |
| Design Review | 设计复审 (和同事审核设计文档) | 4 |
| Coding Standard | 代码规范 (为目前的开发制定合适的规范) | 2 |
| Design | 具体设计 | 10 |
| Coding | 具体编码 | 32 |
| Code Review | 代码复审 | 8 |
| Test | 测试(自我测试,修改代码,提交修改) | 10 |
| Reporting | 报告 | 14 |
| Record Time Spent | 记录时间花费 | 1 |
| Test Report | 测试报告 | 2 |
| Size Measurement | 计算工作量 | 1 |
| Postmortem | 事后总结 | 8 |
| Process Improvement Plan | 提出过程改进计划 | 2 |
如何统计每项数据
Time Measures
- 时间管理的逻辑原理
- 为了制定切实可行的计划,必须对所用的时间进行跟踪。
- 为了检查时间估计和计划的准确性,必须把它们写成文档并在今后与实际情况进行比较。
- 为了制定出更准确的计划,需要知道以前的计划中存在哪些错误,哪些地方可以进行改进。当按照计划进行工作时,记录下所花费的时间。通过比较文档化的计划和实际的结果,就可以发现计划中存在哪些错误以及如何改进做计划的过程。制定准确计划的关键就是要坚持制定计划,并把每个计划与实际结果相比较,然后就会知道如何才能制定出更好的计划。
- 为了管理好时间,首先制定时间分配计划,然后按照计划去做。
- 按照计划进行工作有三点好处:
- 了解计划存在哪些问题,有助于更好的计划下一个项目。
- 按照好的计划完成工作。这看起来不重要,但是事实上软件工程中的许多错误都是由于考虑不周、粗心大意或是不注意的小细节而造成的,按照好的计划工作是避免这些错误的最好途径。
- 改变你的工作方式,有了计划就不用浪费时间去考虑下一步要干什么,它会帮助你把精力集中在所中的事情上,很少分心,从而提高了工作效率。
- 了解时间的使用情况
- 将主要活动分类。
- 记录每项主要活动所花费的时间。坚持记录时间需要很强的自我约束能力,要想进行精确的记录,必须记录下每件主要工作开始和结束的时间。
- 用标准的方法记录时间。必须使用标准的时间日志。因为需要采集的时间数据的数量增加得很快,如果不认真记录和存储这些数据,它们很可能丢失或变得混乱,这样很不利于查找或对它们进行解释。
- 以分钟为测量单位。工程师在完成任务中不间断工作的时间一般都少于1小时,因此以小时为单位对工作时间进行测量不能提供用以计划和管理工作所需要的详细数据,而用分钟跟踪时间容易得多。一旦决定进行时间跟踪,用分钟作为测量单位将比用小时更恰当。
- 处理中断时间。一个常见的问题就是中断。电话、聊天、偶尔的烦恼以及必要的休息打断的次数多得令人吃惊。中断的时间不是有效的工作时间,并且变化幅度很大,如果不对它进行测量,实际上就在时间记录中加入了一个随机数,也就很难使用时间数据来计划和管理时间了。事件日志中的数据能帮助你了解工作被打断的频率。多数中断不仅浪费时间,还会打断你的思路,导致效率降低和错误的产生,因此了解被打断的频率有助于提高工作的质量和效率。
- 将时间数据保存在合适的地方。记录时间花费情况值得推荐的方法就是用工程记事本来记录时间以及其他的事情。对一个软件专业人员,工程记事本用途很多,可以记录时间日志、程序设计方案以及运算结果,可以作为你所遵循正确的工程实施方案的凭证,可以记录下脑子里面一闪而过的想法。推荐的方法是从工程记事本的第一页开始向后记录主要活动及其所花费的时间,最后一页开始向前记录时间日志。
- 周活动总结表。通过采用时间日志收集时间数据后,你就能渐渐明白自己是如何支配时间的。但是时间日志中的数据过于详细,需要用一种更有用的表格来总结这些数据,周活动总结表能够很好的完成这个任务。当然我们关心的时间不会只有一周这么短,还需要一段时间内在各类任务上花费的平均时间、最大时间和最小时间。
- 记录时间的提示。随时准备好工程记事本;当偶尔忘了记录开始时间、结束事件或中断时间,凭记忆尽早作出估计;及时总结记录的时间数据。
Size Measures
表格中还有计算工作量的要求。根据PSP文档,首先要计算计划开发的产品的工作量,完成后再估计生产出的产品的工作量。代码行数(LOC)是主要的衡量指标。还可记录LOC的类别(Size Categories)用以跟踪程序工作量是如何随着开发变化的。类别包括基础的、新增的、修改的、删除的、重用的、总的代码行数。