《快速软件开发》学习笔记 之一
第1章 软件开发策略
1.1 软件开发中的四维
任何软件项目,都有四个重要的维: people、process、product和technology。为使项目能顺利进行,软件经理必须充分发挥这四维的作用。下表是对这四维的总结。
表 1–1 软件开发中的四维
维度 |
如何优化 |
People |
l 为团队挑选胜任称职的成员 l 选择合适的团队结构 l 使用恰当的人员激励措施 |
Process |
l 采用标准的软件工程实践,避免开发过程失控 l 做好风险管理 l 为项目选择合适的生命期模型 l 形成良好的质量保证机制 l 选择客户导向的开发方法,使开发的产品真正满足客户需求 |
Product |
l 较准确地估算product size(产品规模)和effort(工作量),以便制定出现实的进度安排 l 采取恰当措施防止软件开发过程中product size或product scope失控 l 为产品设定合理的product characteristic(如内存占用、稳定性、可靠性等)。 |
Technology |
l 选择恰当的、能确实提升生产率的工具(包括新的编程语言、新的开发实践、新的代码库等) |
许多软件经理倾向于只关注这四维中的某一维而忽视其它维度,而高水平的软件经理却努力做到同时优化项目的四个维度。
1.2 软件开发的总体策略
一个软件进行的软件项目应该遵循如下的4点策略:
1. Avoid classic mistakes. (避免典型错误)
2. Apply development fundamentals. (采用软件开发的基础性实践)
3. Manage risks to avoid catastrophic setbacks. (管理风险,以避免灾难性的结果)
4. Apply schedule-oriented practices. (采用面向进度的实践)
这4点策略可以 用下图来形象地表示。
这4点策略就像是4根支柱,共同支撑起一个成功的软件项目。尤其是前面3点策略,是每个软件项目高效进行的关键。
第2章 典型错误
迈克尔·杰克逊曾唱过:“孩子,一个坏不要坏了整筐苹果”。但在软件开发领域,一个坏苹果是可以毁掉一筐苹果的!软件经理必须记住:一个软件项目只要犯了一个典型错误,就会滑向慢速开发的深渊;要实现快速开发,就“必须”避免所有的典型错误。
软件经理怎样做到避开这所有的典型错误呢?使用“典型错误列表”。
最佳实践:典型错误列表 1. 以表2-1作为初始的典型错误列表。 2. 从投入到某个项目的第一天起,每天在下班之前检查一遍典型错误列表,反省自己或团队有没有犯典型错误。如果有,思考一下怎么改变。 3. 在每个项目结束之后,分析总结在项目中所犯的典型错误。如果是典型错误列表中不存在的,把它加入到典型错误列表中,供下个项目使用。 |
表 2–1 典型错误列表
相关维度 |
典型错误 |
解决办法 |
People |
1. Undermined motivation. (挫伤积极性) |
激励开发人员,详见第10章。 |
2. Weak personnel. (人员不能胜任) |
招聘可胜任的人员,详见第11章。 |
|
3. Uncontrolled problem employees. (对问题员工失去控制) |
尽快处理问题员工,详见第11章。 |
|
4. Heroics. (英雄主义) 团队领导或成员对自身能力过于自信。 |
客观认识自身能力,避免盲目自信。 |
|
5. Adding people to a late project. (向已落后进度的项目增加人员) |
不向落后进度的项目增加人员。如果实在要增加,可增加行政人员,帮助技术人员处理杂务。 |
|
6. Noisy, crowded offices. (办公环境拥挤嘈杂) |
营造安静、整洁的办公环境,详见第10.3.1节。 |
|
7. Friction between developers and customers. (开发人员与客户之间产生摩擦) |
维持良好的客户关系,详见第9章。 |
|
8. Unrealistic expectations. (不现实的预期) |
进行准确的软件估算,制定合理的进度计划,详见第7章和第8章。 |
|
9. Lack of effective project sponsorship. (缺乏高层对项目的有效支持) |
请求高层对于项目的支持。 |
|
10. Lack of stakeholder buy-in. (干系人没有全身心投入项目) |
请求干系人的全身心投入。 |
|
11. Lack of user input. (缺乏用户介入) |
在软件项目的全过程都重视用户反馈,详见第9章。 |
|
12. Politics placed over substance. (玩弄政治) |
实施有效措施保证项目和团队成功高于个人成功,详见第11章。 |
|
13. Wishful thinking. (充满想象) 根据主观愿望而非客观事实对项目状况进行判断。 |
破除一厢情愿的想象,把项目执行落到实地。 |
|
Process |
14. Overly optimistic schedules. (过于乐观的进度计划) |
进行准确的软件估算,制定合理的进度计划,详见第7章和第8章。 |
15. Insufficient risk management. (风险管理不到位) |
进行充分的风险管理,详见第4章。 |
|
16. Contractor failure. (外包承包方违约) |
有效管理外包项目的风险,详见第16章。 |
|
17. Insufficient planning. (项目规划不到位) |
完成有效的项目规划,详见第3.1.1节。 |
|
18. Abandonment of planning under pressure. (在压力下放弃项目规划) |
在压力下更要坚持规划,但需要根据项目进展状况及时调整和重新规划。 |
|
19. Wasted time during the fuzzy front end. (在项目前期浪费时间) |
不在项目前期浪费时间,争取尽快立项并进入执行阶段。 |
|
20. Shortchanged upstream activities. (走样的上游任务) 草草完成需求分析、概要设计和详细设计。 |
认真进行需求分析、概要设计和详细设计,并进行technical review。 |
|
21. Inadequate design. (低劣的软件设计) |
进行高质量的软件设计。 |
|
22. Shortchanged quality assurance. (走样的质量保证) 取消design review、code review和test planning。 |
任何时候都不放松对软件质量的要求,详见第3.6节。 |
|
23. Insufficient management controls. (管理控制不到位) |
加强对项目major milestone和miniature milestone的管理和监控,详见第3.1.2.1节。 |
|
24. Premature or overly frequent convergence. (过早或过于频繁地开展项目收尾工作) |
不要过早或过于频繁地开展项目收尾工作。 |
|
25. Omitting necessary tasks from estimates. (项目估算中遗漏必要的任务) |
把项目估算中易遗漏的任务列于显著位置,防止遗漏,详见第7.2节。 |
|
26. Planning to catch up later. (试图赶上进度) |
进度落后之后,不要试图赶上进度,而应该根据项目新的状况重新制定进度计划,详见第7.3节。 |
|
27. Code-like-hell programming. (地狱式编程) 项目采用急就章式的、自由散漫的、“代码写到哪儿算哪儿”式的编程模式。 |
绝对避免急就章式的编程,任何代码必须经过严格的质量保证措施,详见第3.6节。 |
|
Product |
28. Requirements gold-plating. (需求镀金) 项目的需求规格书中具有用户不需要的、复杂的需求。 |
不要在需求规格书中加入用户不需要的需求。 |
29. Feature creep. (功能蔓延) 项目进行过程中频繁出现需要变更(requirement change)。 |
采取措施防止功能蔓延,详见第13.2节。 |
|
30. Developer gold-plating. (开发人员镀金) 开发人员为了学习新技术而给产品加入用户不需要的功能。 |
不要为了让开发人员学习新技术而加入不需要的功能。 |
|
31. Push-me, pull-me negotiation. 软件经理一面批准了进度拖延,一面又向拖延的项目中加入新的需求。 |
在项目已经拖延的情况下,必须稳定需求,不再加入新的需求,详见第15.1.3节。 |
|
32. Research-oriented development. (研究导向的开发) 把软件研究(如新算法)当成工程项目来做。 |
不在软件工程项目中搞软件研究。 |
|
Technology |
33. Sliver-bullet syndrome. (银弹综合症) 项目把解决进度问题的希望寄托在单独某一种新实践、新技术或新开发方法论上。 |
破除银弹综合症,详见第14.2节。 |
34. Overestimated savings from new tools or methods. (过高估计了新技术或新方法带来的收益) |
对新技术或新方法带来的收益有较理性的认识,详见第14章。 |
|
35. Switching tools In the middle of a project. (在项目进行期间更换开发工具) |
持续使用久经考验的旧工具,详见第14章。 |
|
36. Lack of automated source-code control. (缺少自动化源代码控制) |
必须使用自动化源代码控制系统。 |
最佳实践:Source Code Control System 给整个项目乃至整个公司选择一个source code control system。这个source code control system可以是商业软件系统(如ClearCase,Perforce等),也可以是免费软件。只有在source code control system就绪之后,才开始启动你的项目。 |