前言
随着软件规模加大与软件项目开发管理越来越复杂,软件组织对软件从业人员的要求也随之增加。一个软件工程技术人员,除了具备专业知识与技术以外,还要求具有团队协作能力、交流沟通能力、文档写作表达能力、互相学习的能力、项目组织与管理能力、应用软件过程改进的能力等。在软件开发技术的许多课程中,主要培养学生的软件设计、编码与测试能力,而软件工程课程教授软件生命周期内使用的工程技术、辅助工具。但是这些课程在培养学生团队协作、交流沟通、过程管理与控制技术等方面存在明显不足。本教材根据软件协同开发教学的特点,将团队的规模设定为5~6人,项目也通常限制于15~20人。在团队中每名成员都担任一个经理角色,而每名经理又都是一个设计开发工程师。通过这么一个特定的团队协同开发项目,使每个成员熟悉项目计划的制定、每名成员工作规划和工作量的分配与平衡、每项工作的质量缺陷跟踪度量、个人工作的生产率与缺陷。通过这个协同开发实践,总结出在管理与技术层面的不足,并为进一步的改进找到方向。
本教材遵循工业界软件开发实践并根据软件协同开发过程组织教学内容。第1章介绍了软件开发过程、团队开发的实践与协同软件设计的过程。第2章给出了高效团队所应具备的特征,阐述了团队成员的角色及其目标,介绍了团队成员与开发步骤的对应关系,并就团队成员间如何进行良好的沟通进行了探讨。第3章根据软件项目的特点介绍了项目规划的必要性,分析了项目规划的内涵及制定过程,介绍了项目规划中产生的项目范围说明书和项目章程以及项目范围说明书的撰写方法与内容。通过案例向读者介绍了项目章程的制定和项目范围说明书的编写。第4章介绍了计划对项目开发的作用及重要性,并重点介绍了软件协同开发的计划过程以及脚本的编制; 最后就如何编写进度计划、质量计划,如何进行工程跟踪进行了讨论。第5章首先分析了需求开发阶段的主要工作,包括获取用户需求、制定需求优先级、建立业务规则、制定通用词汇表、获取外部接口需求、制定非功能性需求、撰写软件需求规格说明、需求确认; 同时描述了需求开发阶段相关角色、交付物以及交付物的模板; 最后给出了相关案例分析。第6章论述了设计原则和设计过程,分析了设计阶段所关注的系统总体结构。讨论了软件设计说明书(SDS)的制作以及高层设计的文档撰写。第7章描述了产品实现过程,包括详细设计与编码、缺陷与预防、详细设计审查与代码走查、部件质量复核等内容,介绍了依据产品总体设计开发产品的流程。第8章介绍了协同软件开发中软件测试测略与开发过程的集成,在软件开发的不同阶段,测试角色所具有的工作目标和任务。描述了集成测试策略、系统测试策略、测试计划的制定、测试用例与测试说明书的撰写规范、测试数据收集以及测试分析等概念。介绍了软件协同开发的集成与系统测试草案。第9章介绍了项目的计划跟踪与度量对团队协同开发项目的产品质量形成、项目管理过程以及团队软件过程改进的意义。通过对开发进度、开发效率、产品的缺陷密度、引入缺陷的比率等质量指标,跟踪并分析质量问题的来源,识别造成质量缺陷的系统因素,采取相应的措施予以排除,使软件开发过程更加稳健,进而提高开发过程的能力。
作者于2004年首次为软件专业学生开设协同软件设计课程,经过5年的实践与探索,在教学内容、课程组织、课程实践等方面积累了较丰富的经验。从2008年起,该课程在计算机科学与技术专业本科生中开设,取得了良好的效果。参与本书编写的教师要么是该课程主讲,要么是该课程中团队开发指导教师。因而,教材在内容组织上,力求针对计算机专业本科生的能力与知识,重点围绕软件项目开发中管理过程、计划与任务分配、高质量的产品设计、团队的协作与交流等薄弱环节组织教材内容,并通过一个具体的软件项目,指导学生进行初步需求分析、项目规划、质量规划、任务分解,最后制定详细的开发计划。根据开发进度计划,指导并驱动项目分析、设计与实施,并根据质量计划,采用产品复审技术,指导开发团队审核每个阶段的产品,并采取措施以保证其符合质量计划。最后通过项目的事后分析与讨论,找出团队开发活动的薄弱环节与缺陷,然后制定改进措施予以改进。
赵逢禹教授编写了本书的第1、8章,并负责全书的统稿; 曹春萍副教授编写了第3、4章; 欧广宇编写了第2、9章; 赵海燕编写了第5章与附录A; 郝聚涛编写了第6章; 霍欢编写了第7章。
本书可作为普通高等院校计算机科学与技术专业、软件工程专业“软件协同设计”课程的教材,也可供从事相关工作的技术人员参考。由于本教材涉及的内容较多,各学校的教学情况也不尽相同,因此在组织教学时,教师可以适当调整学习内容。
由于作者水平有限,难免有错误与不当之处,恳请读者见谅并不吝赐教。
编者2011年7月