前言 对于很多学生来说,“软件质量保证和管理”这门课的内容有些教科书的味道,因为管理对于没有工作经验的学生来说比较陌生; 提起“质量”,很多时候又被“测试”这个词汇所替代。相对而言,软件工程的学生更愿意写代码而不愿意写过程文档,这门课似乎与代码不沾边。如何改变大家这样的感觉或看法呢?如何让学生喜欢上这门课呢? 在工业界,“软件质量保证”(Software Quality Assurance,SQA)与“软件测试”分设为两个部门,它们有各自的定位和职责。SQA强调过程质量和构建质量,测试侧重产品质量的检验。随着敏捷开发模式的盛行,测试与开发渐渐融合,更强调质量反馈。是不是说SQA就不再重要了?或者说,通过测试工具就可以解决质量问题?如果迭代越快、开发速度越快,构建高质量是不是更重要呢?质量管理的影响是否更为深远、SQA更具价值呢? 事实上,软件质量保证和管理的外延远比软件测试大得多,软件测试只是软件质量控制的一部分。质量管理也绝非纸上谈兵,而是要落实于实实在在的实践之中,落实到企业的管理制度、研发流程、具体操作方式和质量工具之中,如质量闭环、质量反馈、流程化、持续质量改进、问题管理等。我们常说的质量文化,是指企业将质量价值观、质量保证思想、质量管理方法论等化为无形,融入日常工作之中,如品管圈(Quality Control Circle,QCC)、合理化建议等。 那么,又如何将看似无形的质量管理方法论提取出来,更易于复制落地呢? 随着质量理念的发展,持续集成(CI)、测试左移和右移、DevOps成为主潮流,大家更关注技术与工具,新的软件质量实践越来越具有工程化特点,软件质量管理不仅过程可见,其结果也越来越可见。如何将最新的前沿技术和实践也糅合到课程中? 所有这些,都是此次改版的初衷,除了基础理论外,此版整合了学界和业界的优秀经验,更新了软件质量体系,并力求体现它的模块化、工程化、过程化、工具化等特点。 (1) 教材编排的模块化。此版将全书分为三大模块: 基础篇、实践篇和过程篇。基础篇讲述软件质量的概念和基本方法,从质量、软件质量入手,扩展到软件质量管理的层次和模式,最终构筑起软件质量的工程体系。实践篇从工程的角度讲述软件质量工程的关键活动与实践,包括软件质量度量、质量控制、评审、配置管理等。为避免与软件测试课程重复,软件测试的内容不展开讨论。过程篇以软件开发生命周期过程为主线,讲述如何保证软件开发过程各个阶段的交付件的质量,包括需求质量、设计质量、代码质量、测试质量、发布和维护质量等。 (2) 软件质量活动的工程化。基于软件质量的多年实践,软件质量归根结底是构建出来的,软件质量工程是软件工程的一个剖面。为凸显其工程化的特点,此版中强化了软件工程中与质量相关的实践活动。除了配置、评审等软件质量工程中固有的工程活动外,还有一些为提高软件质量所开展的具体工程实践。例如,持续集成、持续交付(CD)、质量管理平台、度量数据库、经验库、工具集等,都属于工程化的一部分。此版中加强了CI、CD和DevOps等最新的软件质量工具的应用。 (3) 软件质量管理的过程化。在软件工程知识体系SWEBOK V3中,对于软件质量知识域,提到了软件质量管理过程。可以把软件质量管理视作与需求管理、测试管理一样,将其过程化。从PDCA的角度看,软件质量管理过程由质量计划、质量保证、质量控制、质量改进等阶段构成。大过程套小过程,而且这几个阶段也不是绝对串行的,例如软件质量改进是贯穿始末的,质量控制和保证过程中也会调整质量计划。软件质量管理的过程化也体现在软件研发生命周期,贯穿软件研发和运维整个过程,即在软件需求、设计、编码、测试等不同活动中不断思考如何保证和提升软件质量,依靠质量标准指导流程控制、方法落地等,全过程构建高质量的产品。此版重构了全书结构,软件质量管理过程更加清晰,教师授课更加自然。 (4) 质量工具箱的整合。在质量界,有质量老七工具、新七工具之说,同时在实践中,又出现了一些实用的质量分析手法,如FMEA、5WHY等。这些工具各有特点,应用于质量过程的不同方面,有定性的、有定量的,按应用场景又可分为创意、过程分析、数据分析、根因分析等。此版将与软件质量相关的分析工具抽取出来,加以汇总。在此书中同时介绍了一些新的工具或平台,并给出了这些质量工具在实际软件质量活动中选择和应用的建议。 另外,考虑到软件质量度量具有较强的软件技术特点,在此版中强化了这部分内容。软件质量度量从大的方面分为产品质量和过程质量,产品质量又包括内部质量和外部质量; 软件复杂性度量属于内部质量度量,可用性、可靠性等软件质量属性度量则属于外部质量度量。此版中用了较多篇幅描述软件产品质量度量,不同于软件测试的执行、观察和结果比对,此处更多体现如何用数据描述软件产品特征、如何对软件质量属性进行度量和指标计算。 此版中更为强调软件质量相关理论和方法的实践和可操作性,具体来说,增强了以下4个方面。 (1) 理论实践案例。结合案例阐述,增强对理论的理解。例如,在阐述PDCA时结合研发流程说明如何设置质量控制点。 (2) 课后配套练习。设置问题场景,增强对方法的实践。例如,针对软件开发过程中某项具体活动,设计检查表。 (3) 引入软件工具,固化了质量管理的方法。例如,结合软件度量工具Metrics说明各类软件度量集是如何实现的。 (4) 配套课程实验。关键工程活动设置配套实验,体现工程实践中是如何应用的。例如,结合SVN工具说明如何在实际软件开发过程中配置管理。 本书经过两年的准备和修订,终于和大家见面了,但仍会存在不足,希望后续能加快修订频率,未来不久能出第3版、第4版,以不辜负长期以来选择本书的各位教师的期望。本教材第1版10年前就已出版,且不断重印,被许多老师选用,而我们迟迟未能及时更新本教材,借此机会郑重地对选用本书的各位教师说一声“对不起”。 为便于教学,本书提供教学大纲、教学课件、教学进度表,扫描封底的课件二维码可以下载。 参与本书修订工作的作者有3位老师,他们分别是同济大学朱少民(第3、6、9、第10~14章)、南京晓庄学院张玲玲(第4、5、8章)、西南科技大学潘娅(第1、2、7、15章)。全书结构由大家讨论协商确定,最后由朱少民老师统稿。 最后,感谢选用本书作为教材的各位老师!感谢清华大学出版社魏江江及其他编辑的大力支持,感谢我们家人的大力支持,使本书再上一个台阶,延续其生命力,更好地为教学提供服务。 编者于2019年5月