(1)正确性
正确性是指软件按照需求正确执行任务的能力。 “正确性”的语义涵盖了“精
确性”。
正确性无疑是第一重要的软件质量属性。
技术评审和测试的第一关都是检查工作成果的正确性。
(2)健壮性
健壮性是指在异常情况下,软件能够正常运行的能力。
正确性描述软件在需求范围之内的行为,而健壮性描述软件在需求范围之外
的行为。
开发者往往把异常情况错当成正常情况而不作处理,结果降低了健壮性。 健壮性有两层含义:一是容错能力,二是恢复能力。
从语义上理解,恢复不及容错那么健壮。
Unix容错能力很强,可惜不好用。
Windows容错能力较差,但是恢复能力很好,而且很好用。占了90%的操作系统市场。
(3)可靠性
可靠性是指在一定的环境下,在给定的时间内,系统不发生故障的概率。 平时软件运行得好好的,说不准哪一天就不正常了,如(千年等一回的“千年
虫”问题)等。
软件可靠性分析通常采用统计方法
时隐时现的错误一般都属于可靠性问题,纠错的代价很高。例如当维护人员
十万火急地赶到现场时,错误消失了;等维护人员回家后,错误又出现了。… 软件可靠性问题主要是在编程时候埋下的祸害(很难测试出来),应当提倡
规范化程序设计,预防可靠性祸害。
(4)性能
性能通常是指软件的“时间-空间”效率,而不仅是指软件的运行速度。
既要马儿跑得快,又要马儿吃的少。
性能优化的关键工作是找出限制性能的“瓶颈”,不要在无关痛痒的地方瞎忙
乎。
性能优化就好像从海绵里挤水一样,你不挤,水就不 出来,你越挤海绵越
干。
(5)易用性
易用性是指用户使用软件的容易程度
导致软件易用性差的根本原因 :
理工科大学教育存在缺陷
开发人员犯了“错位”的毛病
软件的易用性要让用户来评价。
(6)清晰性
清晰意味者所有的工作成果易读、易理解,可以提高团队开发效率,降低维
护代价。
开发人员只有在自己思路清晰的时候才可能写出让别人易读、易 理解的程
序和文档。
可理解的东西通常是简洁的。
(7)安全性
这里安全性是指信息安全,英文是Security而不是Safety。
安全性是指防止系统被非法入侵的能力,既属于技术问题又属于管理问题。 黑客:真是“道高一尺,魔高一丈”!
开发商和客户愿意为提高安全性而投入的资金是有限的,他们要考虑值不值得。
究竟什么样的安全性是令人满意的呢?
一般地,如果黑客为非法入侵花费的代价(考虑时间、费用、风险等因素)高于得到的好处,那么这样的系统可以认为是安全的。
对于普通软件,并不一点要追求很高的安全性,也不能完全忽视安全性,要先分析黑客行为。
(8)可扩展性
可扩展性反映软件适应“变化”的能力。
在软件开发过程中,“变化”是司空见惯的事情,如需求、设计的变化,算法
的改进,程序的变化等等。由于软件是“软”的,是否它天生就容易修改以适应“变化”?关键要看软件的规模和复杂性。
现代软件产品通常采用“增量开发模式”,不断推出新版本,获取增值利润。
可扩展性越来越重要。可扩展性是系统设计阶段重点考虑的质量属性。
(9)兼容性
兼容性是指不同产品(或者新老产品)相互交换信息的能力。
金山软件公司的WPS与微软的Word之争。
(10)可移植性
软件的可移植性指的是软件不经修改或稍加修改就可以运行于不同软硬件
环境(CPU、OS和编译器)的能力,主要体现为代码的可移植性。
编程语言越低级,用它编写的程序越难移植,反之则越容易。这是因为,不同的硬件体系结构(例如Intel CPU和SPARC CPU)使用
不同的指令集和字长,而OS和编译器可以屏蔽这种差异,所以高
级语言的可移植性更好。
Java程序号称“一次编译,到处运行”,具有100%的可移植性。为了提高Java程序的性能,最新的Java标准允许人们使用一些与平台
相关的优化技术,这样优化后的Java程序虽然不能“一次编译,到
处运行”,仍然能够 “一次编程,到处编译”。
软件设计时应该将“设备相关程序”与“设备无关程序”分开,将“功能模块”与
“用户界面”分开。
(1)正确性
正确性是指软件按照需求正确执行任务的能力。 “正确性”的语义涵盖了“精
确性”。
正确性无疑是第一重要的软件质量属性。
技术评审和测试的第一关都是检查工作成果的正确性。
(2)健壮性
健壮性是指在异常情况下,软件能够正常运行的能力。
正确性描述软件在需求范围之内的行为,而健壮性描述软件在需求范围之外
的行为。
开发者往往把异常情况错当成正常情况而不作处理,结果降低了健壮性。 健壮性有两层含义:一是容错能力,二是恢复能力。
从语义上理解,恢复不及容错那么健壮。
Unix容错能力很强,可惜不好用。
Windows容错能力较差,但是恢复能力很好,而且很好用。占了90%的操作系统市场。
(3)可靠性
可靠性是指在一定的环境下,在给定的时间内,系统不发生故障的概率。 平时软件运行得好好的,说不准哪一天就不正常了,如(千年等一回的“千年
虫”问题)等。
软件可靠性分析通常采用统计方法
时隐时现的错误一般都属于可靠性问题,纠错的代价很高。例如当维护人员
十万火急地赶到现场时,错误消失了;等维护人员回家后,错误又出现了。… 软件可靠性问题主要是在编程时候埋下的祸害(很难测试出来),应当提倡
规范化程序设计,预防可靠性祸害。
(4)性能
性能通常是指软件的“时间-空间”效率,而不仅是指软件的运行速度。
既要马儿跑得快,又要马儿吃的少。
性能优化的关键工作是找出限制性能的“瓶颈”,不要在无关痛痒的地方瞎忙
乎。
性能优化就好像从海绵里挤水一样,你不挤,水就不 出来,你越挤海绵越
干。
(5)易用性
易用性是指用户使用软件的容易程度
导致软件易用性差的根本原因 :
理工科大学教育存在缺陷
开发人员犯了“错位”的毛病
软件的易用性要让用户来评价。
(6)清晰性
清晰意味者所有的工作成果易读、易理解,可以提高团队开发效率,降低维
护代价。
开发人员只有在自己思路清晰的时候才可能写出让别人易读、易 理解的程
序和文档。
可理解的东西通常是简洁的。
(7)安全性
这里安全性是指信息安全,英文是Security而不是Safety。
安全性是指防止系统被非法入侵的能力,既属于技术问题又属于管理问题。 黑客:真是“道高一尺,魔高一丈”!
开发商和客户愿意为提高安全性而投入的资金是有限的,他们要考虑值不值得。
究竟什么样的安全性是令人满意的呢?
一般地,如果黑客为非法入侵花费的代价(考虑时间、费用、风险等因素)高于得到的好处,那么这样的系统可以认为是安全的。
对于普通软件,并不一点要追求很高的安全性,也不能完全忽视安全性,要先分析黑客行为。
(8)可扩展性
可扩展性反映软件适应“变化”的能力。
在软件开发过程中,“变化”是司空见惯的事情,如需求、设计的变化,算法
的改进,程序的变化等等。由于软件是“软”的,是否它天生就容易修改以适应“变化”?关键要看软件的规模和复杂性。
现代软件产品通常采用“增量开发模式”,不断推出新版本,获取增值利润。
可扩展性越来越重要。可扩展性是系统设计阶段重点考虑的质量属性。
(9)兼容性
兼容性是指不同产品(或者新老产品)相互交换信息的能力。
金山软件公司的WPS与微软的Word之争。
(10)可移植性
软件的可移植性指的是软件不经修改或稍加修改就可以运行于不同软硬件
环境(CPU、OS和编译器)的能力,主要体现为代码的可移植性。
编程语言越低级,用它编写的程序越难移植,反之则越容易。这是因为,不同的硬件体系结构(例如Intel CPU和SPARC CPU)使用
不同的指令集和字长,而OS和编译器可以屏蔽这种差异,所以高
级语言的可移植性更好。
Java程序号称“一次编译,到处运行”,具有100%的可移植性。为了提高Java程序的性能,最新的Java标准允许人们使用一些与平台
相关的优化技术,这样优化后的Java程序虽然不能“一次编译,到
处运行”,仍然能够 “一次编程,到处编译”。
软件设计时应该将“设备相关程序”与“设备无关程序”分开,将“功能模块”与
“用户界面”分开。