软件质量属性是衡量软件产品性能和特性的关键指标,它们反映了软件在满足用户需求和期望方面的特性。尽管存在众多可能被视为质量属性的产品特性,但在实际项目中,开发者通常关注少数几个关键属性以确保系统的成功。这些属性根据不同的视角和关注点可以分为两类:一类是运行时可识别的,如可靠性、效率、完整性、可用性、可维护性、测试性、灵活性、可移植性和可重用性等;另一类是非运行时可见但对开发者和维护者至关重要的,如修改性(灵活性)、软件的适应性和兼容性(互操作性)。
McCall提出了11个核心质量特性,每个特性都有其特定含义:
1. **正确性**:程序是否准确地符合规格说明并达成用户业务目标,通过询问“它做了该做的事吗?”来评估。
2. **可靠性**:程序是否能在预定条件下持续稳定地执行其功能,涉及“它总能准确地工作吗?”这样的问题。
3. **效率**:衡量程序在执行功能时对计算资源的需求,考量的是“它能在硬件上尽力工作吗?”
4. **完整性**:确保软件或数据免受未经授权的访问和操纵,即“它是安全吗?”
5. **可用性**:包括学习成本、操作难度和数据输入输出的易用性,通过“它可用吗?”来评估。
6. **可维护性**:开发者修复错误和进行修改的难易程度,即“它可调整吗?”
7. **测试性**:为了验证功能而进行的测试工作量,考察的是“它可测试吗?”
8. **灵活性**:修改运行中的程序所需的精力,体现为“它可修改吗?”
9. **可移植性**:将程序从一个平台或环境迁移到另一个的成本,即“可以在另一台机器上用它吗?”
10. **可重用性**:程序能否用于其他相关应用的问题解决,意味着“可以重复使用它的某些部分吗?”
11. **互操作性**:系统与其他系统协同工作的便利程度,涉及“它能够与其他系统连接吗?”
这11个质量特性相互关联,共同构成了软件工程中必须重视的基石。理解并优化这些属性对于软件产品的设计、开发、维护和升级都至关重要,因为它们直接影响着用户体验、系统的稳定性以及项目的经济效益。开发者通过选择合适的软件工程方法和技术,旨在确保这些质量属性达到最优,以实现项目的成功。