软件构建与质量
软件构建与质量涉及工作代码的规范化创建,以及通过测试、验证、评审和度量等技术来建立和确保软件满足其需求和质量目标。
用 PaperMind 寻找选题即将推出Find papers & topics
Tools & resources
Learn & explore
视频即将推出
Definition
软件构建是通过编码、验证、单元测试和调试来详细创建工作软件的过程,而软件质量是指软件满足其明示和隐含要求的程度,并通过验证、确认和质量管理活动来确保。
Scope
此领域涵盖软件构建实践,包括编码标准、防御性编程和单元测试;软件测试的级别和技术;验证与确认;静态分析和动态分析;代码评审和重构;软件质量属性和度量;以及用于证明正确性的形式化方法。它统一了生产和确保可靠软件的各项活动。
Sub-topics
Core questions
- 哪些实践可以产生正确、可读和可维护的代码?
- 如何通过测试、评审和分析来检测缺陷?
- 软件质量如何定义、度量和保证?
- 何时可以通过形式化证明而非仅仅通过测试来确立正确性?
Key theories
- 测试揭示缺陷的存在,而非不存在
- 测试可以证明缺陷存在,但不能证明其不存在;因此,有效的测试旨在通过系统化的用例选择而非穷尽执行来最大化发现故障的可能性。
- 验证与确认
- 验证检查软件是否按照其规范正确构建,而确认检查是否构建了满足用户需求的正确软件;它们共同涵盖了整个生命周期中的评审、分析和测试。
- 质量是构建出来的,而非测试出来的
- 质量源于构建实践、设计和过程纪律,而非最终的检查;缺陷预防和早期检测远比后期纠正成本低廉。
Clinical relevance
构建和质量活动决定了系统的可靠性、安全性、可维护性,并主导了缺陷成本;早期和系统的验证可以减少现场故障和返工,这对于交付可靠的软件至关重要。
Evidence & guidelines
ISO/IEC 25010 定义了软件产品质量模型,而 SWEBOK 软件构建、测试和质量知识领域提供了共识性的参考指导。
History
系统测试由 Myers 在 20 世纪 70 年代阐述,结构化编程和验证由 Dijkstra 和 Hoare 在同一时期提出,构建工艺由 McConnell 在 20 世纪 90 年代提出;ISO/IEC 25010 等质量模型和标准巩固了质量属性和度量。
Debates
- 测试与形式化验证
- 关于正确性的信心应基于广泛的测试还是形式化证明存在争议;测试适用于大型系统但不能保证正确性,而形式化方法以更高的成本提供强有力的保证,并通常保留用于关键组件。
Key figures
- Glenford Myers
- Steve McConnell
- C. A. R. Hoare
- Edsger Dijkstra
Related topics
Seminal works
- myers2011
- mcconnell2004
- swebok2014
Frequently asked questions
- 测试能否证明程序是正确的?
- 不能。测试执行有限的输入集,可以揭示缺陷但不能证明其不存在;要证明所有输入的正确性需要形式化验证,这仅对系统的受限或关键部分可行。
- 质量是否等同于没有错误?
- 不是。软件质量是多维度的,包括功能正确性以及可靠性、性能、安全性、可用性和可维护性等属性;一个错误很少的程序如果不可维护或不安全,其质量可能仍然很差。