评估软件质量属性

软件已经成为我们日常生活的一个重要部分。软件已经成为许多组织的生命线。我们从来没有想象到会如此依赖软件来工作。软件越来越重要,对其质量要求也越来越高。

软件体系结构评估技术

作为在软件生命周期早期保障软件质量的重要手段之一,软件体系结构评估技术,是软件体系结构研究中的一个重要组成部分。对软件的体系结构进行评估,是为了在系统被构建之前预测质量,通过分析体系结构对于系统质量的影响,进而提出改进意见。

质量定义

软件质量是许多质量属性的综合体现,各种质量属性反映了软件质量的方方面面。人们通过改善软件的各种质量属性,从而提高软件的整体质量。
ISO/IEC Draft9126-1标准定义了软件质量模型。依照这个模型,共有六种特征:
功能性、可靠性、可用性、有效性、可维护性、可移植性

什么是高质量的软件?

具有质量的软件是那些与他们的最初目的相一致的软件。符合商业目标和用户需求。正确的功能和优良的属性。“能用管用好用”。

软件质量属性

外部质量

外部质量对于用户而言是显而易见的。

正确性

正确性是指软件按照需求正确执行任务的能力。正确性无疑是第一重要的软件质量属性。技术评审和测试的第一关都是检查工作成果的正确性。

健壮性

健壮性是指在异常情况下,软件能够正常运行的能力。在无法预测的环境中具有合理的行为。如果说正确性描述的是需求范围之内的行为,那么健壮性就是描述软件在需求范围之外的行为。健壮性包括容错能力和恢复能力,恢复能力不及容错能力那么健壮。

可靠性

可靠性是指在一定的环境下,在给定的时间内,系统不发生故障(可以正常运行)的概率。软件可靠性分析统筹采用统计方法度量指标。可靠性问题主要来源于编程时期(很难测试出来)。

性能

性能通常指软件的“时间-空间”效率,而不仅仅是软件的运行速度。人们总希望软件的运行速度高,并且占用的资源少。性能优化的关键工作是找出限制性能的瓶颈。

安全性

安全性是指防止系统被非法入侵的能力,既属于技术问题又属于管理问题。如果黑客为非法入侵花费的代价高于得到的好处,那么这样的系统可以认为是安全的。

易用性

易用性是指使用软件的容易程度。“界面友好”、“方便易用”。

兼容性

兼容性是指不同产品(或者新老产品)相互交换信息的能力。例如两个字处理软件的文件格式兼容,那么它们都可以操作对方的文件,这种能力对用户很有好处。兼容性又称为互操作性。
兼容性商业规则:弱者设法与强者兼容,否则无容身之地;强者应当避免被兼容,否则市场将被瓜分。

内部质量

内部质量只有开发人员关心,他们可以帮助开发人员实验外部质量。

易理解性

易理解性是开发人员理解软件产品的能力,意味着所有的工作成果要易读、易理解,可以提高团队开发效率,降低维护代价。

可测试性

可测试性指的是测试软件组件或集成产品时查找缺陷的简易程度,又称为可验证性。如果产品中包含复杂的算法和逻辑,或如果具有复杂的功能性的相互关系,那么对于可测试性的设计就很重要。如果经常更改产品,那么可测试性也是很重要的,因为将经常对产品进行回归测试来判断更改是否破坏了现有的功能性。

可维护性

可维护性表明了在软件中纠正一个缺陷或做一次更改的简易程度。可维护性取决于理解软件、更改软件和测试软件的简易程度,可维护性与灵活性密切相关。高可维护性对于那些经历周期性更改的产品或快速开发的产品很重要。你可以根据修复一个问题所花的平均时间和修复正确的百分比来衡量可维护性。

可扩展性

可扩展性反映软件适应“变化”的能力。在软件开发过程中,“变化”是司空见惯的事情,如需求、设计的变化,算法的改进,程序的变化等等。现代软件产品通常采用“增量开发模式”,不断推出新版本,获取增值利润。可扩展性越来越重要。可扩展性是系统设计阶段重点考虑的质量属性。

可移植性

可移植性指的是软件不经修改或稍加修改就可以运行于不同软硬件环境(CPU、OS和编译器)的能力,主要体现为代码的可移植性。编程语言越低级,用它编写的程序越难移植,反之则越容易。这是因为,不同的硬件体系结构(例如Intel CPU和SPARC CPU)使用不同的指令集和字长,而OS和编译器可以屏蔽这种差异,所以高级语言的可移植性更好。Java程序号称“一次编译,到处运行”,具有100%的可移植性。

可复用性

可复用性是指一个软件的组成部分可以在同一个项目的不同地方甚至在不同的项目中重复使用的能力。传统的软件复用技术包括代码的复用、算法的复用和数据结构的复用,但这些复用有时候会破坏系统的可维护性,可以通过设计模式、面向对象的继承和多态等机制提高软件可复用性。

过程质量

如果想保持一如既往的开发高质量的产品,过程必须是可靠的。如果想适应无法预计的工具或环境改变,过程必须是稳健的。过程的执行必须是高效的。如果想适应新的管理方式或组织形式,过程必须是可扩展的。如果想跨项目和组织来使用,过程必须是可重用的。

评估的必要性

软件架构是软件工程早期设计阶段的产物,对软件系统或软件项目的开发,具有深远的影响,主要表现在以下两个方面。

(1)不恰当的架构,会给软件系统或软件项目的开发带来灾难。

  • 如果软件架构不恰当,就无法满足系统的性能要求,则系统的安全性也就无法实现。
  • 当客户要求提高可用性时,开发小组将会因忙于修改发现错误,而影响开发的进度、预算,这样,会使整个系统或项目的成本大幅提高,甚至会使整个软件系统或软件项目的开发因成本太高而终止。

(2)架构决定着项目的结构

  • 如配置控制库、进度与预算、性能指标、开发小组结构、文档组织、测试、维护活动,都是围绕着架构展开的。
  • 假如在开发过程中发现错误,中途修改架构,会使整个项目的工作陷入混乱。
  • 鉴于以上架构对项目和系统的影响,需要对软件架构进行评估,这是降低项目和系统成本及避免灾难的有效手段。

发表回复

Breeze Wang

A student majoring in Software Engineering at Central South University has an understanding of software development techniques, software architecture, and is able to use Godot to develop game projects. I am currently in the Game Development Laboratory at Central South University. I have experience participating in Global Game Jam. Loving game development.