《快速软件开发》学习笔记 之一

第1章 软件开发策略

1.1 软件开发中的四维

任何软件项目,都有四个重要的维: peopleprocessproducttechnology为使项目能顺利进行,软件经理必须充分发挥这四维的作用。下表是对这四维的总结。

 

1-1 软件开发中的四维

维度

如何优化

People

l  为团队挑选胜任称职的成员

l  选择合适的团队结构

l  使用恰当的人员激励措施

Process

l  采用标准的软件工程实践,避免开发过程失控

l  做好风险管理

l  为项目选择合适的生命期模型

l  形成良好的质量保证机制

l  选择客户导向的开发方法,使开发的产品真正满足客户需求

Product

l  较准确地估算product size(产品规模)和effort(工作量),以便制定出现实的进度安排

l  采取恰当措施防止软件开发过程中product sizeproduct 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点策略可以 用下图来形象地表示。

clip_image002

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 reviewcode reviewtest planning

任何时候都不放松对软件质量的要求,详见第3.6节。

23.     Insufficient management controls. (管理控制不到位)

加强对项目major milestoneminiature 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可以是商业软件系统(如ClearCasePerforce等),也可以是免费软件。只有在source code control system就绪之后,才开始启动你的项目。

posted @ 2012-03-04 21:19  李嘉 (Justin)  阅读(1358)  评论(0编辑  收藏  举报