认识到应该把质量做到软件产品中或至少预防软件“产品质量问题。因此,软件测试呈现向软件开发的前软件复用是提高软件产品质量与生产效率的关期发展、与软件开发的设计和编程阶段相融合的趋键技术。软件构件概念的提出为软件复用提供了技势,软件的易测试性设计正在成为新的研究热点。构术基础。构件的高质量是构件能被成功复用的前提。件测试一个重要的发展方向是基于合约的构件易测构件测试是保证构件质量的重要手段之一。构件的试性设计。开发者和复用者必须对构件进行充分的测试,以确本文提出一种基于合约的构件易测试性设计方保它在新的环境中正常工作。
例如1996年Ariane5法,在构件的设计和编码阶段由设计人员和编程人运载火箭的飞行失败表明,复用的构件在新的环境员在构件的接口和内部根据构件的规约增加构件的中未经过充分测试会引起灾难性的后果。合约,然后由工具自动检查合约语法、语义的正确与传统的软件测试相比,构件测试有其自身的性,插装合约检查代码,以便在软件运行时自动对固有特点:⑴不能?对构件的执行环境和用户的使用合约进行检查,当发生合约违反时自动抛出异常。模式进行完全准确的预测,故构件开发者不能完全、本文还开发相应的支持工具,并且进行实验。彻底地对构件进行测试,并且很难确定何时结束测_试;(2)构件复用者和第二方测试人员通常无法翻构件的源代码及详细的设计知识,故通常只能对构软件的易测试性是一个系统或构件有利于建立件进行黑盒测试,即调用构件的方法后只能通过观测试准则和执行测试以便确定该测试准则是否被满察执行的结果判断构件的行为是否正确,无法检查足的难易程度Pl。
直观上我们也可以将软件的易测试执行过程中的构件的内部状态,使得构件执行过程性理解为对软件进行测试以保证其无缺陷和满足其中的一些故障被隐藏。这些困难对构件测试提出了规约的难易程度。软件的易测试性包括可控制性、可严峻的挑战。传统的软件测试技术不能完全适用于观察性、可操作性、可分解性、简单性、稳定性等几个构件测试。方面,其中可控制性是通过软件的'输入来控制它的长期以来,虽然人们将软件测试作为一种重要输出,而可观察性是通过输出能更好地分析测试的的软件质量保证手段,但是通常都是在软件开发的结果。
后期,即编码阶段结束之后才开始对软件进行测试。软件的易测试性是衡量软件质量的一项重要指此时已为时太晚,软件已经开发成型。近年来,人们标。对软件的易测试性的研究可以分为软件的易测试性分析和易测试性设计两个方面。常,便于就近定位故障。软件的易测试性分析研究如何对软件的易测试DBC方法不仅能够让用户按一定的格式书写合性进行度量,其目的为:(1)为软件的易测试性度约,而且提供相应的机制自动对合约进行处理和检量提供有效手段;(2)为软件的测试提供指导;查,并且当程序在运行过程中违反合约时及时给出(3)为软件的易测试性设计,进而为软件的设计提出错信息。软件的内建式测试方法是在程序中添加供帮助。额外的测试机制,使软件能够工作在测试模式下。软软件易测试性设计即是在软件的设计和编码件的内建式自测试方法就是在此基础上再增加测试中考虑测试问题,它借鉴了硬件易测试性设计的用例生成机制。思想。软件易测试性设计的目的是在不增加或者
2.软件合约的定义方法少增加软件复杂性的基础上,将易于测试的原则现在主要有二种定义软件合约的方法,第一种融合到设计和编码之中。软件易测试性设计符合方法利用面向对象程序设计语言的继承机制专门设软件测试的一个原则:尽早开始软件测试工作,计一个负责测试的超类、第二种方法在程序代码不断进行软件测试工作。软件易测试性设计体现的注释中嵌入合约,并且使用预处理器在编译之前软件测试的如下观点:软件产品的质量是生产对程序进行插装;第〒种方法设计一种独立的语言(包括分析、设计、编码、测试)出来的,而不是框架,它所描述的合约与目标程序设计语言相分仅仅依靠软件测试来保证。软件易测试性设计也离。体现了软件测试的一个发展趋势:向软件开发的嵌入式合约语言的原型是C语言中的assert。目前期发展,与软件开发的设计和编码阶段相融合。前比较有代表性的嵌入式合约语言包括ANNA(AN-易于测试的软件本身所包含的缺陷也会减少。软Notated燗da)141、APP(Annotation燩re-Processor)爘51、件易测试性设计将有效地提高软件测试的效率和Nan#以及Eiffel等。质量,提高软件设计和编程的质量,进而提高软ADL(Assertion燚efinition燣anguage)171是一种独立件产品的质量。的语言框架,它是一组可以翻译成不同编程语言语软件的易测试性设计方法包^合约式设计法的通用概念。AD1VC是专为C语言接口设计的(Design燘y燙ontract,简称DBC)、内建式测试ADL框架。ADL/Java扩展了燗DL方法,使之适应面(Built-in燭esting,简称BIT)和内建式自测试等几向对象的概念,如继承、多态、重载等。
种方法。尽管第一种方法容易实现、易于理解,但是它存合约是管理对象之间交互的一组规则,其主要在以下缺点:对于某些不支持多继承的程序设计语来源是软件的规约。常见的表达合约的种类有:前言(例如java),该方法不能从未插装类进行特化;更置条件、后置条件、不变式、断言、循环变式、循严重的是,当父类中的方法在子类中被重新定义后,环不变式和轨迹等。例如,在一个求平方根的方法父类的方法中的合约将被遗忘|81。float燬quareRoot(float爊um)中定义的合约为:米用嵌人式合约语目设计合约可以提高可观察@爌re爊um>=0性,使得软件失效与软件故障点更加接近,从而节省@爌ost燤ath.abs((result*result)-num)<=0.001测试和调试的开销,并且还能够保持合约随程序代合约表明了过程调用方(客户方)与实现方相互码同步更新,不会产生歧义。的职责和利益:客户方只有在满足前置条件的情3一种基于合约的构件易测试性设计方法后置条件指明的工作将被完成,并且不变式仍然满我们定义了描述构件合约的巴科斯-诺尔范式足。合约可用于区分软件失效时的责任:如果前置条(BNF范式)、然后在此基础上提出一种基于合约的件被违反,则应该在客户方寻找错误;如果后置条件构件易测试性设计方法。或不变式被违反,责任在实现方。
合约有助于减少冗3.1构件合约信息的表达余的检查代码,提高软件设计的效率和运行的性能;为了便于用户定义合约,我们在Java语言语法利用自动检查合约的工具,能够减轻用户的负担,减的基础上提出了如图1所示的描述构性令约的巴科少用户犯错误的机会;并且合约被违反时将引发异斯-诺尔范式。牬雍显急泶锸讲唤隹梢允遣级表达式,还可以是初始标量的语句,这使得invariant(循环不变式)和forall(全称量词)表达式(描述一个集合中的元素同variant(循环变式)的表达式中可以具有更加复杂的时满足某个条件)、exist(存在量词)表达式(描述一语句,增强了爈oop合约的描述能力。由于Sun燡DK1.4个集合中存在满足某个条件的元素),以及implies提供了断言检查的check语句,故我们在图1中没(蕴涵)表达式(描述当某一条件满足的时候,另一个有提供断言的描述。条件必须满足)。增加的这几种表达式的类型增强了3.2基于合约的构件易测试性设计方法合约的描述能力,使得用布尔表达式很难表达的意犜谏鲜雒枋龉辜合约的巴科斯-诺尔范式基础思能够较为简洁地表达出来。
同时,loop合约(包括上,我们所提出的基于合约的构件易测试性设计方循环不变式和循环变式)在循环之前具有设置循环法包括以下步骤:5结束语Pacific燬oftware燛ngineering燙onference,燤acau燬AR,燙hina,2001.431-434.构件测试是保证构件质量的重要技术手段之牎2丨ANSIAEEE爏td610.12.營EEE燬tandard燝lossary爋f燬oftware一。本文提出一种基于合约的构件易测试性设计方Engineering燭enninology,1990.法’在构件的设计和编码阶段由设计人员和编程人.[3]燤artins燛’燭_a燙燤’燳anagawa燫燣.燙cmstrucUng爏elf-testable员在构件的接口和内部根据构件的规约增加构件的牐:1"5comp°nnents,th;2001mnaiConlerence爋n燚ependable燽ystems燼nd燦etworks,燝oteborg,燬weden,合约,提高了构件的易测试性。本文所提出的方法将2001151_160營EEE构件的质量保证活动向构件开发的前期发展、与构[4]燣uckham燚燙,爒on燞enke燜燱.燨verview爋f燗NNA,燗燬pecification件开发的设计和编码阶段相融合,从而能够更好地燣anguage爁or燗da.營EEE燬oftware,1985,2(2):9-22.保证构件的质量。
本文还开发相应的支持工具JD-【5】Rosenblum燚燬.燗燩ractical燗pproach爐o燩rogramming爓ithBCT,并且进行了实验,验证了我们所提出的方法有燗sserti°ns’IEEE燭ransac,ions°n燬oflware燛ngineering‘1995’21(1):效性和燡DBCT牭耐酚眯浴[6]燤aker燩燡.燝NU燦ana-燯ser'爏燝uide(version2.4).燭echnical目前JDBCT能够支持的合约的类型包括前置report,燬chool爋f營nformation燭echnology,燦orthern燭erritory条件、后置条件、不变式、循环变式和循环不变式,下University,爅uly1998.一步将提供对轨迹等类型合约的支持。
构件的合约燵7]燬ankar燬,Hayes燗DL:燗n營nterface燚efinition燣anguage爁or来源于软件的规约,可以作为我们进行测试工作的燬pedfying311(1燭esting‘ACM燬IGPLAN燦otices'I994,29f8V13—21依据。在今后的工作中,我们将进一步完善我们藤⑷Jezequel风Dev飄D燭raon燳燣.燫eliable爋bjefts燯ghtweight出的方法,并&研究如何与变异测试技术相结合,即TeSting爁or00燣anguages.營EEE燬oftware,2001,18(4):76-83研究如何针对构件合约进爁T变异测试。
【一种基于合约的构件易测试性设计方式论文】相关文章:
本文来源:https://www.010zaixian.com/shiyongwen/2161917.htm