软件质量的几个特性

上一篇 / 下一篇  2015-05-22 15:30:41 / 天气: 热 / 心情: 平静 / 个人分类:分享

正确性
  正确性是指软件按照需求正确执行任务的能力。这里“正确性”的语义涵盖了“精确性”。正确性无疑是第一重要的软件质量属性。如果软件运行不正确,将会给用户造成不便甚至损失。技术评审和测试的第一关都是检查工作成果的正确性。
  正确性说起来容易做起来难。因为从“需求开发”到“系统设计”再到“实现”,任何一个环节出现差错都会降低正确性。机器不会主动欺骗人,软件运行出错通常都是人造成的,所以不要找借口埋怨机器有毛病。开发任何软件,开发者都要为“正确”两字竭尽全力。
健壮性
  健壮性是指在异常情况下,软件能够正常运行的能力。正确性与健壮性的区别是:前者描述软件在需求范围之内的行为,而后者描述软件在需求范围之外的行为。可是正常情况与异常情况并不容易区分,开发者往往要么没想到异常情况,要么把异常情况错当成正常情况而不做处理,结果降低了健壮性。用户才不管正确性与健壮性的区别,反正软件出了差错都是开发方的错。所以提高软件的健壮性也是开发者的义务。
  健壮性有两层含义:一是容错能力,二是恢复能力。
  容错是指发生异常情况时系统不出错误的能力,对于应用于航空航天、武器、金融等领域的这类高风险系统,容错设计非常重要。
  容错是非常健壮的意思,比如UNIX的容错能力很强,很难使系统出问题。而恢复则是指软件发生错误后(不论死活)重新运行时,能否恢复到没有发生错误前的状态的能力。
  从语义上理解,恢复不及容错那么健壮。
  例如,某人挨了坏蛋一顿拳脚,特别健壮的人一点事都没有,表示有容错能力;比较健壮的人,虽然被打倒在地,过了一会还能爬起来,除了皮肉之痛外倒也不用去医院,表示恢复能力比较强;而虚弱的人可能短期恢复不过来,得在病床上躺很久。
  恢复能力是很有价值的。Microsoft公司早期的窗口系统,如Windows 3.x和Windows 9x,动不动就死机,其容错性的确比较差。但它们的恢复能力还不错,机器重新启动后一般都能正常运行,看在这个份上,人们也愿意将就着用。
可靠性
  可靠性不同于正确性和健壮性,软件可靠性问题通常是由于设计中没有料到的异常和测试中没有暴露的代码缺陷引起的。可靠性是一个与时间相关的属性,指的是在一定环境下,在一定的时间段内,程序不出现故障的概率,因此是一个统计量,通常用平均无故障时间(MTTF, mean-time to fault)来衡量。
  可靠性本来是硬件领域的术语。比如某个电子设备在刚开始工作时挺好的,但由于器件在工作中其物理性质会发生变化(如发热、老化等),慢慢地系统的功能或性能就会失常。所以一个从设计到生产完全正确的硬件系统,在工作中未必就是可靠的。人们有时把可靠性叫做稳定性。
  软件在运行时不会发生物理性质的变化,人们常认为如果软件的某个功能是正确的,那么它一辈子都是正确的。可是我们无法对软件进行彻底的测试,无法根除软件中潜在的错误。平时软件运行得好好的,说不准哪一天就不正常了,如有千年等一回的“千年虫”问题、司空见惯的“内存泄露”问题、“误差累积”问题,等等。因此把可靠性引入软件领域是很有意义的。
  软件可靠性分析通常采用统计方法,遗憾的是目前可供第一线开发人员使用的成果很少见,大多数文章限于理论研究。我曾买了一本关于软件可靠性的著作,此书充满了数学公式,实在难以看懂,更不知道怎样应用。请宽恕我的愚昧,我把此“天书”给“供养”起来,没敢用笔画一处记号。
  口语中的可靠性含义宽泛,几乎囊括了正确性、健壮性。只要人们发现系统有毛病,便归结为可靠性差。从专业角度讲,这种说法是不对的,可是我们并不能要求所有的人都准确地把握质量属性的含义。
  有必要搞清楚“故障”和“错误”这两个容易混淆的概念。
  在《现代英汉词典》里,“故障(Fault)”一词的定义是:使设备、部件或元件不能按所要求的方式运行的一种意外情况,可能是物理的也可能是逻辑的。
  那些潜伏在代码中的错误往往是不明显的,之所以在测试的时候没有暴露,是因为测试时的环境和条件不足以使之暴露,更何况我们无法对代码进行最彻底的测试。由此可见,故障是在经过日积月累,满足了一定的条件之后才出现的。例如,“千年虫”问题,“内存泄漏(吃内存)”导致内存耗尽,“误差累积”导致计算错误进而导致连锁反应,“性能开销累积”导致性能显著下降,等等。因此,故障通常都是不可预料的、灾难性的。
  “错误”的含义要广泛得多,例如,语法错误、语义错误、文件打开失败、动态存储分配失败等。一般说来,程序错误是可以预料的,因此可以预设错误处理程序,运行时这些错误一旦发生,就可以调用错误处理程序把它干掉,程序还可以继续运行。因此,错误的结果一般来说不是灾难性的。
性能
  性能通常是指软件的“时间—空间”效率,而不仅是指软件的运行速度。人们总希望软件的运行速度快些,并且占用资源少些。旧社会地主就是这么对待长工的:干活要快点,吃得要少点。
  程序员可以通过优化数据结构、算法和代码来提高软件的性能。算法复杂度分析是很好的方法,可以达到“未卜先知”的功效。
  性能优化的目标是“既要马儿跑得快,又要马儿吃得少”,关键任务是找出限制性能的“瓶颈”,不要在无关痛痒的地方瞎忙活。例如,在大学里当教师,光靠卖力气地讲课或者埋头做实验,职称是升不快的。有些人找到了突破口,一年之内“造”几十篇文章,争取破格升副教授、教授。在学术上走捷径,这类“学者”的质量真让人担忧。
  性能优化就好像从海绵里挤水一样,你不挤,水就不出来,你越挤海绵越干。有些程序员认为现在的计算机不仅速度越来越快,而且内存越来越大,因此软件性能优化的必要性下降了。这种看法是不对的,殊不知随着机器的升级,软件系统也越来越庞大和复杂了,性能优化仍然大有必要。最具有代表性的是三维游戏软件,如《Delta Force》、《古墓丽影》、《反恐精英》等,如果不对软件(关键是游戏引擎)做精益求精的优化,要想在一台普通的PC上顺畅地玩游戏是不太可能的。

TAG: 软件

 

评分:0

我来说两句

我的栏目

日历

« 2024-04-15  
 123456
78910111213
14151617181920
21222324252627
282930    

我的存档

数据统计

  • 访问量: 8944
  • 日志数: 3
  • 建立时间: 2015-05-22
  • 更新时间: 2015-05-28

RSS订阅

Open Toolbar