软件质量及其度量、分析、预测、评价等无不与时间密切相关。对于不同对象,时间含义不一样。通常,软件运行、测试、维护等过程中,使用执行时间(Execution Time)、时钟时间(Clock Time)、日历时间(Calendar Time)三种时间度量。执行时间是指软件运行时实际占用CPU的时间;时钟时间是软件从运行开始到运行结束所经历的时长,包括等待时间和辅助时间,但不包括停机时间;日历时间是日常生活中所使用的时间。如果计算机资源被软件连续占用,该软件占用CPU的一个时间段,则执行时间与时钟时间成正比。
对于上述三种时间单位,较日历时间,执行时间能更好地表征软件系统的运行行为,是软件测试及软件质量度量常用的时间度量,但为了便于理解及使用,最终与日历时间关联,尤其是不同系统之间进行比较时,尤为如此。因此,需要在日历时间与执行时间之间进行转换。如果难以得到执行时间,可用其他时间的近似值,如时钟时间、加权时钟时间、主要运行时间或其他计时单位代替。
在软件系统运行、维护、测试等过程中,一旦确定时间基准,即可用累积失效函数(Cumulative Failure Function,CFF)、失效密度函数(Failure Intensity Function,FIF)、失效平均时间函数(Mean Time to Failure Function,MTFF)、平均无故障间隔时间(Mean Time Between Failure,MTBF)、平均失效时间(Mean Time To Failure,MTTF)、平均修复时间(Mean Time To Repair,MTTR)等任一种描述软件失效行为。CFF表示与每一时间点相关的平均累积失效;FIF表示累积失效函数的变化率;MTFF表示观察到下次失效的期望时间。这三种度量密切相关且可以相互转化。例如,失效密度是累积失效函数相对于时间的瞬时值,如果可靠性函数呈指数分布,其平均失效时间即为失效密度函数的导数。
2.6.1.1 平均无故障间隔时间
平均无故障间隔时间是软件系统在当前时间到下一次失效时间的均值,是反映软件故障行为的一个重要参数。假设软件系统从当前时间到下一次失效时间的间隔为 ξ , 具有累积概率密度函数
(2-14)
则
(2-15)
2.6.1.2 平均失效时间
平均失效时间是指软件系统两次相邻失效时间间隔的均值。设两次相邻失效时间间隔为 ξ , ξ 具有累积概率密度函数
(2-16)
2.6.1.3 平均修复时间
平均修复时间是指在观察到失效后,经维护到恢复所需要时间的平均值。硬件修复过程是在完成故障诊断及定位之后,用同样或等效部件替换,精确地测量或估计平均修复时间。软件运行过程中,对于偶然出现的非关键性失效,可以通过复位和重启来解决,尽管可能会发生部分数据丢失,但能够快速恢复运行。
对于关键故障触发的失效,永久性恢复需要进行故障分析、故障定位、软件更改、回归测试、确认和重新安装运行。而现场使用的软件,是否可以进行排错和维护,取决于软件的配置和使用状况。软件维护的难易程度及时间,可用维护时间或停工时间来度量。
维护时间包括查错、纠错、验证及重新启动等过程所需要的时间。在现场使用条件下,用户可能不具备纠错能力,那么,维护时间就只包括软件重新载入和重启时间。MTTR因系统维护性质而异。
2.6.1.4 可用性
可用性(Software Availability)是指软件系统在任一随机时刻需要开始执行任务时,处于工作或可使用状态的程度,即“开则能用,用则成功”的能力,可表示为
(2-17)
Musa认为,执行时间是最基本的软件失效时间测度之一,执行时间模型以及对数泊松执行时间模型均以执行时间作为基本时间量度单位。故障发生时间、故障间隔时间、到指定时刻为止的累积故障数以及在一个给定时间区间内发生的故障数,都是通过执行时间来刻画的。图2-17给出了平均故障数 、故障密度 λ ( τ ) 与执行时间 之间的关系。
图2-18给出的是在一段执行时间内,软件可靠度随着执行时间增长的变化情况以及与执行时间的关系。
图2-17 μ ( τ ) 、 与执行时间 τ 的关系
图2-18 一段执行时间内软件可靠度的变化
由图2-18可见,在一段无故障执行时间内,软件可靠度由1向0变化:开始执行时,软件未发生故障,可靠度为1,随着执行时间逐渐增加,可靠度逐渐下降,一旦发生故障,则软件可靠度变为0。当然,实际情况并非如此,除非软件故障所导致的是系统失效。即便如此,在整个软件生命周期过程中,基于概率观点,这种曲线是不会出现的。
软件失效是因其内部缺陷所致,而非软件开发及测试过程中的表象。那么,对于软件缺陷的揭示,以及软件可靠度的测定、分析、评估,时间的意义是什么?时间的作用是什么?决定软件测试释放时间的因素是什么?都是需要研究和回答的问题。
充裕的时间使得我们有更多的机会开发更多测试用例,以便进行更充分的测试,但时间的长短并不是测试完备性的决定因素。用户所关注的是系统的可靠性及预期寿命,迫切的需求是能否通过测试,有效检出错误,评价并证明软件是否满足需求。对于不同能力的测试人员,一个给定的时间并无实际意义。