软件质量控制的必要性随着软件规模和复杂度的增加而增加。20世纪60年代中期到70年代末期的十余年,多任务、多用户系统引入了人机交互的新概念,软件规模和复杂度快速增加,同时“软件危机”的出现,促使软件质量控制手段的出现和应用,如检视、决策、审计、测试等。进入20世纪80年代后,随着计算机硬件高度的标准化、模块化,软件数量和代码量呈指数级增长,使得系统的软件质量控制方法得以形成,以1989年美国卡内基梅隆大学软件工程研究所(SEI)建立了的软件能力成熟度模型(CMM)最为代表性。进入20世纪90年代中后期,互联网业快速发展,软件以在线服务形式快速小颗粒迭代交付,软件质量控制的自主化、工具化和自动化程度迅速发展,同时还诞生了灰度发布、AB测试等新的质量控制方法。
软件质量控制
一系列为开发高质量的软件产品所应用的流程和方法。
- 英文名称
- software quality control
- 所属学科
- 计算机科学技术
软件质量是软件产品或服务本身所具有的一组可以度量的特性。开发组织和质量组织使用软件质量控制可以做到在最低的成本条件和时间条件下,提供满足客户质量要求的软件产品,并且不断地改进开发过程和组织本身。为了保证软件能满足其目标用户需求,而应用于整个开发周期中的一系列审查、复查、测试、验证、用户反馈、变更控制、缺陷分析与改进等环节。在软件研发过程中包括一个反馈循环和改进循环,度量和反馈相结合,使得在软件开发过程中及时发现偏差并调整;将每个阶段教训与优秀实践,作为下一个相同活动的输入,持续提升软件开发质量。
软件过程质量控制,包括软件需求质量控制、软件架构与设计质量控制、软件开发质量控制、软件测试与验证质量控制、软件发布质量控制和软件维护质量控制,只有每一个环节都做到位,才能最终获得高质量的软件。在各个环节中,越是处于软件研发过程早期的质量控制其收益越大,但质量控制难度也越大。
在软件生命周期中,通过软件度量与分析,快速给出软件质量客观评价,对于及时发现问题乃至预防问题大有好处;软件配置管理,着力于软件研发资产的安全管理和协同效率,确保过程可重复、可管理、可追溯。这两大支撑性手段,越来越得到软件生产者的重视,特别对于大型软件项目,它们更是必不可少的基础质量保障手段。
除了常用的软件质量控制方法外,美国卡内基梅隆大学软件工程研究所建立了软件能力成熟度模型,用于系统的评估软件生产企业的能力,该模型是国际上最流行、最实用的软件生产过程标准以及软件企业成熟度认证标准。通过该模型的牵引,使得越来越多的软件生产企业的质量控制能力得到提升。
软件质量控制主要包括控制活动、度量活动、配置管理3个方面。此外,从持续改进和优化看,软件缺陷根因分析与基于最优质量代价原理(PONC=COST–EFC–POC,即:质量代价=总成本–无失误运作成本–质量成本)改进或预防活动也是非常重要的内容。
软件质量控制活动,主要包括:①检视。是一种常用的控制手段,由除作者之外的某人或某个小组仔细检查软件需求、设计或代码,以找出其中的问题或提出建议。②决策。是由资深领域专家对软件质量给出权威分析评估,对备选技术给予仲裁,充分发挥专家的作用。③审计。在活动进行中和结束后,根据明确定义的标准,而对于一个或多个软件生产活动和交付件进行的客观抽样督查。④软件测试。是一种实际输出与预期输出间的审核或者比较过程。软件测试的定义是:在规定的条件下对程序进行操作,以发现程序错误,衡量软件质量,并对其是否能满足设计要求进行评估的过程。
软件质量度量,可分为三类:①产品度量。是描述诸如规模、复杂性、设计特征、性能和质量等级的产品特征的度量。②过程度量。是可用于改善软件开发和维护过程的度量,例如开发过程中缺陷排除的有效性、测试缺陷出现的模式和维修过程的响应时间等。③项目度量。是描述项目特征和执行的度量,例如包括软件开发人员的数目、软件生命周期上的雇工模式、成本、进度安排和生产率等。软件质量度量用于衡量软件质量控制的过程和结果,同时也为质量改进提供直接或间接的参考依据。
软件配置管理,软件的质量最终是通过用户使用可执行程序交互得以实现,特别是对于复杂的软件系统,软件质量最终由软件运行上下文、用户的操作方式、逻辑处理、操作说明等综合因素决定。而这些因素,记录在文档、接口、软件架构、源代码和资料中,软件业称为配置项,针对软件配置项的识别、计划、基线、变更、发布等活动综称软件配置管理。软件配置管理是软件质量控制的基础。
软件质量控制的主要发展方向是:①软件系统运营。是由关注软件缺陷与改进,转变为关注软件价值与体验。传统的软件质量控制以控制缺陷为抓手,通过更早的发现与纠正缺陷来提升质量。而在以云计算、软件服务化的大趋势下,伴随研发工具链的高度发展,缺陷能够被更快、更低成本的发现,软件质量控制开始侧重于关注软件运行与运营,比如软件功能的正确使用量、吸引的用户量、用户驻留时长、卸载或离开的原因等,通过深层次的运营分析提升软件质量和价值。②快速试错。与传统方法大相径庭,传统方法是要求良好的、预计好的软件需求、设计、开发、测试、交付使用,每个阶段达到质量再进入下一个环节,当最后软件交付用户使用时,用户不满意的情况常有发生。快速试错,是在看清楚大方向的前提下,快速构筑一个最小可行产品(MVP),选择合适的少量用户使用,根据反馈快速滚动迭代交付,最终低成本、高质量的交付满足市场和用户的产品。③智能软件质量控制。是采用机器学习的方法,通过大量软件设计和编程过程样本训练,形成“智能”机器人。当软件工程师进行软件设计和编程时,训练后的机器会自动推荐最优的设计模式、复用组件、程序代码、应用程序接口(API)、测试用例等,极大地提升软件质量和开发效率。
扩展阅读
- 朱少民.软件质量保证和管理.北京:清华大学出版社,2014.
- 普雷斯曼 R S.软件工程——实践者的研究方法.4版.北京:机械工业出版社,1999.
- 阚 S H.软件质量工程的度量与模型.北京:机械工业出版社,2003.