《软件项目管理应用》书评
很多关于软件项目管理或者软件工程的书都很枯燥无味并且阐述过度复杂。但是这本书却是不同的:它的语言描述清楚却不是过分简单,作者对于细节程度的把握恰到好处。看起来他们很了解这本书的读者群,所以可以恰如其分地提供非常实践性的帮助。他们绝对做到了这一点。
书的第一部分涵盖了适用于项目工作的技巧和方法。项目规划、估算、工期安排、评估、设计制作和测试都分别各占一个章节。第二部分则侧重在如何高效地管理软件项目,包括了关于变更管理、管理和领导力、外包项目管理和流程改良的章节。
整本书有一条清晰的主线,那就是识别出软件项目团队常常面临的典型问题:必需条件不足;变更管理问题;项目的每个阶段缺乏质量保证;无休止的测试和故障修复环节;软件工程师和商业客户之间的误解和压力等等。这些问题都是关于项目组织和管理方面的,而不是软件工程技术方面。Stellman和Greene凭借他们在类似项目上的经验为读者提供了解决这些问题的实践性建议。
Stellman和Greene的确非常了解软件项目团队可能面对的困难。在前言部分作者描述了一个克服项目中长期问题的需要,并且这一要点在整本书里贯穿始终。对于每一个问题,现实中总是存在不止一种的解决方法。作者在这里描述了一个极为常见的情形,那就是项目的高层经理常常会怀疑技术队伍对于工程的估算,不知怎么地他会认为技术队伍会人为地夸大估算来给他们自己留出懈怠时间。作者建议的方法是让这些经理参与整个估算过程,从而了解到估算是用一个系统并且透明的方式来完成的。作者继而具体地阐述了如何使用Wideband Delphi估算方法,并且提供了一些在此过程中可能用到的模板和文件的示例。作者同时还提供了一个对项目团队有指导意义的流程表。
随后的章节涵盖了规划、工期安排、评估、需求、设计和测试的内容。除了关于设计的一章,大部分的章节对其论题的描述的具体程度都比较合理。关于设计的一章比较缺乏细节,另外作者没有对可能产生的设计交付物提供必要阐述,也没有说明这些设计交付物可能包含的内容。这与讨论需求的章节形成了鲜明的对比:在需求一章里作者详尽的叙述了需求诱发和分析以及针对用户的软件需求说明书。
这本书的另外一个优点是在每一个项目管理或者软件工程相关论题之后都给出了一个清单。清单是一个重要的质量保证方法,作者正确地指出,应当将清单运用到整个软件项目中来尽早地发现错误。比如说,如果一个软件需求清单发现了一个重要需求的缺失或者定义不清,那么这个错误可以在分析的阶段就得到解决。作者还指出,尽早地发现和修改错误所消耗的资源比在较晚的阶段再解决问题所消耗的资源要少得多。作者用清单这个技巧来举例说明项目中质量保证技术的重要性是非常有实践帮助的。
我认为作者也许应该重新考虑一些实例的采用。比如说,他们在描述为了更好地维护而采用的程式重整时,用了一些Java语言中多次反复重整的例子。最后作者说明了为什么程式重整在程序编码比较长的情况下仍然可用。这个论述是没有问题的,问题在于作者在这里采用了一个很不恰当的Java编码来重整。这样一来好像作者也掉进了一个很常见的程序员陷阱:用太多的时间来改写原本就功能完整的编码来实现“完美”程序。在我的实践经验中,项目的时间安排常常比较紧张,根本不可能有寻找“完美”程序的时间。另外,这些所谓的完美程序并不能够给利益相关者带来更多的业务收益。当然,这只是这本书中一个很小的瑕疵。
另外我认为如果这本书可以增加一些关于风险管理的内容的话会更完善。缺少风险管理常常会导致项目失败。作者在这本书里只是粗略的介绍了在项目规划阶段的风险管理,增加一段关于为什么和怎样在整个项目中实现风险管理的内容是很有价值的。
我觉得这本书缺少的另一个内容就是对迭代方法的详细分析。书中一个隐含的假设就是软件项目应当采用瀑布方法,这一点我是不同意的。在过去的20年里已经有不少基于迭代法而发展出来的不同于瀑布法的方法。瀑布法的一个最主要的弱点在于它的前提假设是在项目的开始阶段就已经识别了项目中的所有需求。
另一方面,迭代法认为项目需求是会因为客户加深对所需产品的理解或者因为业务环境的变化而改变的。基于这个假设而设计的迭代法能够更好地应对环境的变化。对于瀑布法而言,各种变更则要求对之前的项目阶段进行回顾,相应的就会增加项目的财力和人力消耗。作者只用了不到一页的篇幅来介绍软件建模方法(RUP),而作者应该更加关注如何将软件建模方法的实践过程运用到其他迭代式的方法中。
最后,我觉得这本书因为试图面向3类不同的读者而使得内容过于广泛。第一部分是写给软件项目团队的(项目经理、分析师、程序师和测试员);第二部分则面向于那些项目管理方面的顾问以及负责管理外包软件项目的项目经理。如果能够专注于第一类读者的话会更好。
讲述外包项目管理的倒数第二章内容很粗略,容易让人误会作者之所以提到外包是因为外包是当今一个非常流行的业务方式。关于流程改良的最后一章也是过于简短,不足以有效地阐述这样一个宽泛的论题。把这些项目管理方面的问题放在单独的书籍中讨论应该更为恰当。
结论
尽管如此,这本书对于参与软件项目的读者,无论是项目经理还是技术人员,都是一个很好的指导。他们能够从这本书中找到很多可以直接运用到实践中去的知识和技巧。
我愿意将这本书推荐给每一个从事软件开发的团队成员,因为它的许多实践指导能够帮助人们提高开发软件的质量。我也把它推荐给那些对其软件开发队伍持怀疑态度的高层管理者,也许这样一来他们能够更好地了解为什么注重流程改良是一项最有回报的投资。