昌平休闲农家院:软件可测试性分析方法的研究

来源:百度文库 编辑:偶看新闻 时间:2024/04/28 03:44:22

软件可测试性分析方法的研究

来源:现代电子技术(转摘)         摘 要:软件可测试性在软件质量度量中占有的位置越来越突出,各种度量方法也在不断发展成型。本文对现有的软件可测试性分析方法进行了讨论,并对每一类方法进行了分析比较。

  关键词:软件可测试性;软件复杂性度量;信息论;信息流图;PIE技术;UML类图

1 引 言

  软件可测试性这一概念的解释最早是由1990年的IEEEstd.610.12中给出。Freedman在1991年提出把可测试性定义为可控制性(Domain-controllable)和可观察性(Domain-observable)的集合,随时间推移这一概念不断丰富完善。目前软件可测试性要求主要包含以下几个方面:可操作性、可控制性、可观察性、简单性、适宜性和稳定性等。
  从软件的可测试性被提出以来,一方面他逐步成为软件度量的重要标准,成为衡量软件产品质量优劣的一个重要尺度;另一方面,软件的设计人员也通过新的设计方法,来逐步将这一标准应用于从软件分析开始的一系列软件过程,提高软件质量。在基于构件的软件系统中,构件的生产者与使用者的完全分离,使良好的可测试性成为构件高可靠性和可信任的重要保证。
  不论是以上哪一方面,合理并有效的可测试性分析都是问题中重要环节。不同于普通的质量度量,这种分析不能只是一种定性的评判。我们需要一些可直接观测的数据,这些数据并不需要很精确,但必须具 有直观性。从而为软件的改进提供最可靠的数值依据,以实现对软件开发过程的辅助决策。而且这种分析在软件生产过程中,开始得越早,对于节省软件开发投入,提高效能所发挥的作用也就越大。

2 软件可测试性分析方法

  如何进行可测试性的分析,单从各种可测试性定义来看,就可能有多种不同的方法,因为这些方法可能针对的是不同软件属性。加之各种软件之间结构的差异、设计方法的差异、不同设计层面的差异和测试方法的差异等,这些因素使得可测试性分析方法也呈现出很多种类。比较典型的归纳起来大致有4类:
  第1类:与软件复杂性度量的思路基本一致,并部分借鉴了其相应的方法(McCabe′s metric和Nejmeh′smetric)。主体思想都是基于某种流图,对图中各种结构信息(点、边、路径数、循环数等)进行统计计算。这些信息的统计可以以模块为单位,不依赖于程序的执行和测试策略,所得出的结果可用于不同的程序结构的优劣比较,找出软件中的重点测试部位,指导软件的改进。Jin-Cherng Lin和Pu-Lin Yeh提出的基于数据流的方法、宫云战等提出的基于程序流图的方法和TaghiM.Khoshgoftaar等人提出的基于神经网络的方法都属于这一类。
  第2类:主要由Robach等人提出,基于信息流图,按信息论理论,以模块的输入输出信息为依据对可控制性和可观察性进行定量计算,从而确定其可测试性。从1995年的第一篇论文开始,到目前他们不断对其方法进行完善和改进。
  第3类:以PIE(Propagation analysis,Infectionanalysis and Execution analysis)技术为基本原型,针对程序中的某一处(Location)进行分析,计算在该处故障能被检测到的概率。对程序中关键语句的这种分析结果,可以用来指导相应的测试工作,节省资源,提高效率。
  第4类:基于UML类图的分析技术。他主要以UML类图为主要分析对象,找出并消除构件中类之间的复杂依赖关系,以提高软件的可测试性。
  除以上几种大的方法类外,也有一些从其他角度对可测试性进行研究。如对软件全局可测试性和局部可测试性相关性的形式化分析。

3 基于信息论的分析方法

  基于信息论的分析方法主要是由Robach等人提出,主要综合了信息转换图的分析和基于信息论的可测试性计算等2种技术。
  (1)信息转换图(Information Transfer Graph)分析技术
  该技术最早在硬件测试中得以应用,并取得良好效果。其核心是在一个信息转换图的基础上提取图中的结构信息,用以帮助对软件测试的过程辅助。信息转换图简单形式如图1所示。
  信息转换图中最重要的是定义了流(Flow)的概念:一个流就是图中从输入到输出的一条信息路径。其实质是在给定一组输入的情况下,数据在图中所经过的所有结点的集合。尽管信息转换图本身会作为后续以信息论技术进行计算的依据,但其自身已包含了很多与可测试性相关的信息。Robach对此进行了描述,主要有以下2点:
  ①信息转换图中所包含的流的个数与程序复杂性度量的多种标准,如环计数和N路径数有确定关系,这使得信息转换图中的流的个数同时可以作为程序复杂度度量的标准。而这种复杂性也可以看作可测试性度量的一个方面。
  ②有助于生成合理的测试用例,因为在信息转换图中流的覆盖强度高于代码覆盖和控制流图的路径覆盖。所以是一种更严格的测试标准。
   (2)基于信息论的可测试性计算与分析
  该方法主要是在已有信息转换图的基础上,以图中的各个模块为单位,按信息论中信息量的计算方法,分别计算该模块在不同信息流中的可控制性和可观测 性。计算中用到的主要公式如下:

其中:IM为进入模块M的变量;
   OM为模块M送出的变量;
   IF为经流F进入模块的变量;OF为经流F流出模块的变量;
   T(IF,IM)为模块M由流F所接收的最大信息量,他总小于C(IM);
   C(IM)为模块M所接收的总信息量;
   T(OF,OM)为流F从模块M的输出所能得到的最大信息量,他总小于C(OM);
   C(OM)为模块M输出所产生的全部信息量。  
  每个测试用例会按确定的流运行,每一个模块对应于不同的流也有不同的可控制性和可观测性。所以计算结果反映了测试用例针对具体模块中可能含有的错误,在最好的情况下的提示能力。一般而言,针对计算结果大致有以下几个方面的工作可做:

①以达到模块覆盖为标准,找出测试能力比较强的一组流,并生成相应的测试用例。
  ②各个流中可测试性都比较差的模块,是测试的薄弱环节,要进行一些有针对性的测试。
  ③当使用层次式设计模型时,针对高层中可测试性相对较弱的模块,要对其下一层次的细化结构进行重点测试。
  ④对以上方法均不便于解决的问题,可通过部分调整或修改程序结构的方法。如修改分支结构,在适当位置添加输入或输出结点等方法;从而改变信息转换图,提高可测试性。

4 基于PIE技术的分析方法

  PIE技术最早是由Voas等人提出的,他基于fault/failure model,估计程序中的某一处的3种属性:  
  ①E:在假定输入呈均匀分布的情况下,某部分程序被执行的可能性;
  ②I:某部分程序中如果存在变异,该变异会错误的改变数据状态的可能性;
  ③P:如果数据状态被错误的改变,这种改变会影响到程序输出的可能性。
  对这3种属性分别进行分析,分析结果决定该处的可测试性。下面对文献[3]中所述方法进行简单描述。该方法主要以结构分析的方法、以程序的语句为对象进行定量计算。
  ①E是对执行的可能性的估计,其上限为1。顺序语句因为一般都要执行,所以其E值为1。而分支语句一般要对其是否执行进行估算,或以平均值来计算。在分支语句中则要取各分支E值的总和。
  ②I是对错误产生的可能性进行分析。对于输入或输出语句,每一个输入/输出变量都有一个I值,一般为1。表达式语句的计算则较为复杂,语句的I值取决于其中所包含的运算符、变量、常量的数目和类型。而这每一个元素都会有自己的I值,加权平均后得到语句的I值。操作数为常量时I值为1,为变量时,取该变量最后一次被定义的语句的I值。运算符的I值如表1所示。

  ③对P值进行估计时,追踪语句所赋值的变量在后续执行过程中的使用,直到输出,中间记录经过的所有语句。这些语句的I值(Infection estimate)之积就是P值。如果无法到达输出结点,则P值为0。
   当计算出语句l的El,Il,Pl后,三者的乘积就是可 测试性值。与文献[4]中所提出的方法相比,该方法侧重于结构上的分析。而文献[4]中提出的方法,更多的是基于统计的方法。通过对程序的进行插装或变异体的执行,根据结果的统计规律,近似估计3种值。程序变体执行的越多,得出的估计结果也就越准确。

5 基于UML类图的分析方法

  UML类图是面向对象设计过程中系统分析和设计的重要工具。现有基于类图的可测试性分析主要是针对类图中所反映的类之间的相互关系;相互关系越复杂,意味着程序结构也就越复杂,也更容易隐藏程序错误。合理的分析和度量这种相互关系,并以分析结果为指导,改善系统结构,降低复杂度,就是这类方法的主要目标。
  在文献[5]中,作者定义当2个类之间存在着2条以上的依赖路径时,就称这样的一种拓朴结构为“Class Interaction”。并认为按类图进行测试设计时,最应注意的是“Class Interaction”。因为这样的结构将是测试的难点。文中提出了使用类依赖关系图(ClassDependency Graph,CDG)。CDG可由类图一定的规则转化而来。在得到CDG图后,按一定的规定与算法,度量整个软件中Class Interaction结构的数量,最后根据度量结果提出设计上的改进意见,以降低其复杂度。改进工作的流程图如图2所示。

  在设计的改进方面,提出了以下几种方法:  
  ①在允许的情况下减少继承的使用,尤其是复杂的继承关系,用接口关系进行替代。
  ②定义并使用变体(Stereotypes)如:′create′,′use′,′use-consult′,′use-def′等,对类之间的关系进行更清楚的表示。

6 软件可测试性分析方法的对比与分析

  对比几种可测试性的分析方法,可以看出:定量的计算对可测试性给出了严格的度量,他的结果对测试用例的生成与选择,测试结果的分析,系统结构的优化,及软件的进一步复用都有巨大的作用。并能反映出很多无法从各种图形表面直观获取的内在信息,这是他们共同的优势所在。但相比较而言,他们之间也有很大的不同。
  基本方法中的第1类方法,主要是从传统的软件复杂度的度量方法转化而来。虽然软件复杂度与可测试性有一定必然联系,但完全靠复杂度来说明可测试性则并不充分。这种方法忽略了要针对测试这一特殊的要求,无法得出各种复杂结构对测试所带来的具体影响,从所得出的结果也无法得到对于改进程序可测试性的有针对性的具体方法。而在第2,3类方法中,这一问题明显得到了很好的解决。不论是基于信息流图,还是基于PIE技术,一方面他们都对软件的可测试性提出了一套具体的、量化的评测指标;另一方面他们都有另一目标,就是以具体的量化数据来分析测试中的难点,找出薄弱环节,使测试不再盲目,更有针对性,从而达到更好的测试效果。
  虽然基于信息论的方法与基于PIE技术的方法在目标上有着明确的相似,但他们实现目标的方法却各有特色。基于信息论的方法以构成软件的模块为最小的计量单位(最小的模块可以是过程调用),以黑盒模式考查每个模块对信息、数据的影响,但不考虑代码实现的细节。使得这种方法可以适用于软件设计的不同层次,对软件的整体设计会有很深刻的影响。而通过增加辅助的输入输出信息来改变信息流的方法,一方面可以在代价很小的情况下,有效改善软件的可测试性;另一方面,他也与构件测试技术中的BIT(Build In Test)技术不谋而合,为该技术的实现提供了最好的指导。
  基于PIE技术的方法与前者相比则更多的侧重了软件的代码实现。该方法严格分析了代码中每一个细小元素(包括变量、运算符、表达式等)自身的正确性及他们的累积效应给整个程序的正确性所带来的影响。这样的措施虽然使分析变的更严格,但同时也将方法的使用范围限定为对白盒分析。如果要将这种方法在更高的设计层次上使用,就必须对三种分析提出新的合理的量化标准,这一点在实现上有一定的难度。  纵观这3种基本方法发展历程,可以看出他们都明显带有结构化程序设计的烙印,与之相比基于UML类图的可测试性分析方法更多的强调和运用了面向对象的设计工具。对软件的复杂度,尤其是与测试相关的复杂性给出了新的度量标准。从根本上讲他只是第1类用复杂度分析来度量软件的可测试性思想在面向对象领域的一个延伸。其标准的选择具有一定的合理性和充分的可操作性。 由于与相应的面向对象的开发工具相结合,使得这种方法更容易通过相应的自动化工具来辅助实现。

7 结 语

  Jeffrey M.Voas提出“今后的十年将是发展软件质量的十年”。在对软件质量要求越来越高,测试工作量越来越大,测试工作越来越复杂的情况下,具有良好可测试性的软件对节省开发投资,缩短开发周期,降低维护费用等方面都有着重大意义。
  软件可测试性分析通过对软件自身结构的量化分析,得出对软件测试具体的分析和指导。如果在软件的分析和设计阶段就开始这种分析,就可以及早的发现软件中所存在的不合理结构或是不利于今后测试工作展开的结构,从而做出针对性的调整。现在的方法已充分证明了这一点,但对于在面向对象的设计方法中产生的新问题,虽然已部分得到了解决,但其性能还有待于进一步的提高,这将是今后研究工作的一个重要方向。

参考文献

[1]PuLin Yeh,JinCherng Lin.Software testability measurements derived from data flowanalysis,software maintenance andreengineering[J].Second Euromicro Conference,1998,(3):8-11.
[2]Le Traon Y,Robach C.Fromhardware tosoftware testability[J].TestConference 1995Washington,DC,USA1995,(10):21-25.
[3]JinCherng Lin,SzuWen Lin,IanHo An,Estimated method for software testabilitymeasurement[J].Software Technology andEngineering Practice,Eighth IEEEInternational Workshop on[incorporatingComputer Aided Software Engineering].Location:London,UK,1997,(6):14-18.
[4]宫云战,刘海燕,万琳,等.软件测试性的分析与设计技术研究[D].2000年全国测试学术会议(CTC′2000,北京).
[5]Baudry B,Le Traon Y,Sunye G.Testabilityanalysis of a UML class diagram[J].Software Metrics.Eighth IEEE Symposium,2002:54-63.