从第4章中所描述的“双人合作”中的一个2个组合进化成一群人的团队,本第5章则介绍不同软件团队可能拥有的工作模式和常用的开发流程。
团队并不会是一群乌合之众临时聚集所组成的,一个标准团队有一致的团体目标,团队要一起完成这目标。而且一个团队的成员不一定要同时工作,成员间有各自的分工,互相依赖合作,共同完成任务。
软件团队有各种形式,适用于不同的人员和需求。有不成熟的“一窝蜂模式”,一人主管的“主治医师模式”和“明星模式”,志愿合作的“社区模式”和“业余剧团模式”,团队自由度高且没有干扰的“秘密团队”,专门解决棘手时间的“特工团队”,软件处于稳定成长阶段且大多软件公司采用的“交响乐团模式”(门类齐全,各司其职,听从指挥,重在执行),强调个性化,有创意的回应的“爵士乐模式”(与“交响乐团模式”对立)。还有,很多软件团体最后往往都变为“功能团队模式”,就是具备不同能力的同事平等协助,共同完成一个功能。项目完成后又重新组织,去完成下一个功能。最后,一个“官僚模式”使得团队有了组织上领导和被领导的关系,使得合作变难。
除了团队结构模式,一个软件团队的开发工作流程也各有不同,各有好坏。其中,最出名的就是在软件刚兴起时从别的成熟行业(硬件设计、建筑工程)借鉴改成的“瀑布模型”。其遵循“前期程序设计、分析、程序设计、编码、测试、使用”这个基本模式步骤。因为用户的及早介入、讨论、复审都是很重要的,应该让顾客正式的、深入的、持续的参与到项目中来,但瀑布模式要完成后才能发现一些问题 ,使回去修改会很困难。使用瀑布模式要对软件定义明确,每一步都要验证,技术成熟且成员熟悉流程和技术。
统一流程(RUP),想瀑布模式一样重计划,重事先设计、重文档表达,特点是把软件开发的各个阶段整合在一个统一的框架里。RUP的规程(工作流)分为业务建模、需求、分析和设计、实现、测试、部署、配置和变更管理、项目管理、环境。RUP的流程分为初试阶段、细化阶段、构造阶段和交付阶段。(迭代开发图P99)还有渐渐开发的流程,MVP(最小可行产品)和MBP(最强最美产品)。都是为了从“开发、发布、听取反馈、根据反馈做改进”循环中走出来。
团队软件工程的原则是:
1.使用妥善定义的流程,流程中的每一步都是可以重复,可以衡量结果的。
2.团队的各个成员对团队的目标、角色、产品都有统一的理解。
3.尽量使用成熟的技术和做法。
4.尽量多收集数据,并用数据为团队做理性决定。
5.制定切合实际的计划和承诺,团队计划要由负责具体执行的角色来制定
6.增加团队的自我管理能力
7.专注于提高质量,争取在软件开发早期发现问题,做全面且细致的设计工作。