《软件构造的多维度视图和质量目标》
-
软件系统的构成维度
- 阶段视图(Build-time vs. Run-time):在构建阶段和运行阶段的不同视图。
- 动态视图(Moment vs. Period):在特定时刻与阶段性变化的视图。
- 层次视图(Code vs. Component):代码层次和组件层次的视图。
-
软件构造中的转换
- 软件构造是不同视图之间的转换,如从代码到组件,从构建时到运行时等。
-
质量属性
- 外部质量因素:如性能、可靠性。
- 内部质量因素:如可维护性、可理解性。
- 质量属性之间的权衡。
-
五个关键质量目标
- 易理解性:优雅和美观的代码。
- 可维护性和适应性:易于修改和扩展。
- 开发成本:设计可重用性。
- 鲁棒性:减少缺陷和错误。
- 性能:高效运行。
-
软件的构成要素
- 软件不仅仅是程序代码,还包括数据、文档、模块、控制流等。
-
多维度软件视图的具体细节
- 构建时视图:源码的逻辑和物理组织。
- 运行时视图:程序在内存中的状态和在物理环境中的部署情况。
- 代码变化(Code Churn):随时间变化的代码增删改情况。
- 组件层次的演变:文件、包、库的变化和版本控制。
从《Views and Quality Objectives of Software Construction》中总结的知识点包括以下几个方面:
-
软件构建视角
- 工程视角:关注成本、时间和资源的优化,确保软件按时按预算交付。
- 设计视角:强调软件系统的结构和设计模式,确保系统可扩展、易维护。
- 用户视角:关注用户体验和用户需求的满足,确保软件易用且功能满足用户需求。
- 流程视角:强调软件开发流程和实践的标准化和系统化,确保开发过程有序可控。
-
软件质量目标
- 正确性:确保软件功能实现符合需求规格说明书的描述。
- 可靠性:保证软件在特定条件下能够稳定运行,减少故障发生。
- 效率:软件应在资源使用和响应时间方面表现良好。
- 可维护性:代码应易于理解、修改和扩展,以适应未来需求的变化。
- 可移植性:软件应能在不同环境下运行,适应多种操作系统和硬件平台。
《测试与测试优先编程》
-
测试的基本概念
- 测试是软件开发的重要环节,旨在发现并修复软件中的缺陷。
- 测试的分类:单元测试、集成测试、系统测试和验收测试。
-
测试优先编程(Test-First Programming, TFP)
- 测试驱动开发(Test-Driven Development, TDD):在编写功能代码之前先编写测试代码。
- **红-绿-重构(Red-Green-Refactor)**循环:
- 红:编写失败的测试。
- 绿:编写实现代码使测试通过。
- 重构:优化代码,确保测试仍然通过。
-
TFP的优点
- 提高代码质量和可维护性。
- 提前发现缺陷,降低修复成本。
- 确保代码的可测试性和可理解性。
-
测试优先的具体实践
- 明确需求:理解并明确功能需求。
- 编写测试用例:根据需求编写具体的测试用例。
- 实现功能:编写最简单的代码使测试通过。
- 重构代码:优化代码结构和质量。
-
常见的测试技术和工具
- 单元测试框架:如JUnit, TestNG。
- 自动化测试工具:如Selenium, Appium。
- 代码覆盖率工具:如JaCoCo。
-
测试优先编程中的挑战
- 需要开发者具备测试和编码的双重技能。
- 初期编写测试用例可能增加开发时间,但长期看有助于降低维护成本。
从《Testing and Test-First Programming》中总结的知识点包括以下几个方面:
-
自动化测试
- 自动化的重要性:自动化测试比手工测试更高效,更可靠。自动化测试包括自动调用被测函数、自动判断测试结果和自动计算覆盖率。
- 回归测试:修改代码后应重新运行所有测试,以防止引入新的错误。
-
测试策略
- 单元测试策略:单元测试应尽量隔离模块,确保测试结果的准确性。
- 测试用例选择:测试用例应覆盖代码的不同分区和边界情况,确保测试的充分性和有效性。
-
测试优先编程
- 测试优先的动机:测试应尽早进行,以便及早发现和修正缺陷。编写测试用例有助于更好地理解需求和规约。
- 过程:先编写函数的规格说明,再编写测试用例,最后编写实现代码。
-
测试用例
- 定义和特征:测试用例包括输入、执行条件和预期结果。好的测试用例应能最有效地发现错误,不重复、不冗余、既不简单也不复杂。
- 价值:测试用例是项目中的重要资产,应保存和重复使用。
通过以上第一、二章的内容,可以看出,软件构建和测试在软件开发过程中都是至关重要的环节。合理的视角和质量目标指导着软件的设计和开发,而测试和测试优先编程确保了软件的质量和稳定性。这两者结合,才能保证软件产品的成功。