(计算机软件与理论专业论文)嵌入式软件可测试性研究.pdf_第1页
(计算机软件与理论专业论文)嵌入式软件可测试性研究.pdf_第2页
(计算机软件与理论专业论文)嵌入式软件可测试性研究.pdf_第3页
(计算机软件与理论专业论文)嵌入式软件可测试性研究.pdf_第4页
(计算机软件与理论专业论文)嵌入式软件可测试性研究.pdf_第5页
已阅读5页,还剩59页未读 继续免费阅读

(计算机软件与理论专业论文)嵌入式软件可测试性研究.pdf.pdf 免费下载

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

摘要 摘要 嵌入式软件的应用与开发是当今计算机软件发展领域的一个热点,保证嵌入 式软件的质量是非常重要的。嵌入式软件的可测试性作为一个软件度量指标,是 指软件在任意给定输入集合下进行测试的过程中,错误能够被揭示出来的概率。 开展对嵌入式软件可测试性的研究有助于确定嵌入式软件为了达到一定的可靠性 而需要被测试的程度,并最合理地分配测试资源,提高测试的效率。而且,可测 试性分析也能够用于指导软件设计者合理地设计软件结构,以降低测试的开销以 及提高测试的可行性和有效性,从而使软件的可靠性和可信度达到新的水平。 本文针对嵌入式软件可测试性的量化检测给出了一套完整的解决方案。基于 软件的故障失效模型,构建了嵌入式软件可测试性量化检测的s e t m 理论模型, 并设计实现了基于该理论模型的可测试性检测工具。 本文首先介绍了嵌入式系统、嵌入式软件测试和可测试性的基本概念等用于 检测软件可测试性的理论基础,并详细分析了一些理论检测模型及各自的优缺点; 接下来,针对这些可测试性检测模型中所存在的阀题,根据对软件错误导致软件 失效过程的研究分析,本文提出了一种改进的解决方案s e t m 用于对软件的可测 试性进行量化检测,文章在最后设计并实现了构建在此s e l m 模型基础之上的一 个软件可测试性检测工具,该工具能够对c 源程序进行可测试性检测并得出量化 结果数据,验证了该模型的有效性。 关键词:嵌入式软件测试,可测试性,故障,失效,p 模型 a b 刚t a c t a b s t r a c t t h ea p p l i c a t i o a n dd e v e l o p m e n t0 ft l l ee m b e d d e ds o f l w a r ca r eaf o c u so ft h e d e v e l o p m e tf i e l do fc i l r r e n tc o m p u t e rs o f t w a r c ;g l l a m n t e et h cq u a l i t yo ft h ee m b e d d e d s o f t w a r ei sv e r yi m p o n a n t m e a s u r i n gt h ej n d e xt e s t a b i l i t ya sap i e c eo fs o f t w a r e ,r e f c r t ot h es o 行w a r ew h i l e 舀v ea n di n p u tt h es e tt ot e s to fe m b e d d e ds o f t w a r e ,p m b a b i l i t y t h a tm em i s t a k ee x i s t i ga m o n gt h e mc a nb ea 蛐o u n c e d 1 tc o n t r i b u t e st oc o n f i n i i l gt h e d e g r e et h a tt h ee m b e d d e ds o n w a r en e e d st e s t i n gi i lo r d e rt or e a c hc c n a i nd e p e n d a b i l i t y t ol a u n c bt h er e s e a r c ht e s t a b i l i t yt ot h ee m b e d d e ds o f t w a r e ,a n da s s i g na n dt e s t r e s o u r c e sm o s tr a t i o n a n y ,i m p m v et h ee f f i c i e c yt c s t e d b u ti t c m ,t h e t e s t a b i l i t y a n a l y s i sa l s o c a nu s ei n i n s t r u c t i n gt h es o f t w a r ed e s i g n e r sr e a s o n a b l yt od e s i g nt h e s o f t w a r ea r c h i t e c t i l r e ,b yr e d u c c st e s tt h ee x p e n s e sa sw e l la st h ee n h a n c e m e n tt e s t f e a s i b 王l i t yt oan e wl c v e l t h ep a p e rp m d u c e sas e to fc o m p l e t es o l u t i 伽so fe m b e d d e ds o f 研a r et e s t a b i l i t y b a s e do nf a u l t f a i l u r em o d e l ,t h i sa n i d eh a sc o n s t m c t e dt h es o f t w a r et e s t a b i u t y q u a n “f i c a t i o ne x 锄i n a t i o ns mm o d e l ,a n dh a sd e s i g n e d 粕dr e a l i z e dt t l em e a s u r i n g t o o lb a s e do nm j sm o d e l t h ep a p e rh a sr e c o m m e n d e de m b e d d e ds o f l w a r et e s ta n d t e s t a b i l i t yb a s i c c o n c e p t i o n ,e t c t ou s ef b fm e a s u r i n gt h et l l e o i 弓t i c a lf o u n d a t j o nw i t hs o 矗w a r et e s n ga t f i r s t ,a i l dh a sa n a l y z e di n d e t a i ls o m et h e o r i e sm e a 眦em o d e l s a n dt h e n ,d i r e c ta g a i n s t t h eq u e s t j o nt h a te x i s ti nt h e s em o d e l s ,a c c o r d i n gt o c a u s j n gt h er e s e a r c h i n ga l l d a n a l y z i go fi n v a l i dc o u r s eo f t h es o 脚a r et ot h em i s t a l 【e0 ft h es o 腑a r e ,t h i sp a p e r p m p o s eo n ei m p m v e ds o l u t i o ns f r mu s e sf o ft ob eg e n i n gt e s t a b i l i i yt oq u 锄t i z e m e a s u r i n gt os o f t w a r e ,t h ep a p e rf i a l l yi sd e s j g n i n ga n dr e a l i z e st h es o 抒w a r et e s t a b i l i t y e x a m i n a t i o nt o o la b o v et h es e l mm o d e lo o u l dc a 玎) ro nt h et e s t a b i l i t yi ot h ecs o u 雠 p m g r 锄e x a m i n e s 越do b t a i n st l l eq u 卸t i f i c a t i o 咒s u l td a t a ,c o f i 珊e dt h i sm o d e l v a l i d i ty 1 【e l m o r d :e m b e d d e ds o 脚a r et e s t j l l g ,t c s t a b 豫y ,f a l l i 恤i l u r e ,p i em o d e l 独创性( 或创新性) 声明 y8 5 8 7 5 8 本人声明所呈交的论文是我个人在导师的指导下进行的研究工作及所取得 的研究成果。尽我所知,除了文中特别加以标注和致谢中所罗列的内容以外,论 文中不包含其它人己发表或撰写过的研究成果;也不包含为获得西安电子科技大 学或其它教育机构的学位或证书而使用过的材料。与我一同工作的同志为本研究 所做的任何贡献均已在论文中做了明确的说明并表示了谢意。 申请学位论文与资料若有不实之处,本人承担一切相关责任。 本人签名:墨丛日期:兰盟z ! 盟:2 关于论文使用授权的说明 本人完全了解西安电子科技大学有关保留和使用学位论文的规定,即:研究 生在校攻读学位论文期间论文工作的知识产权单位属西安电子科技大学。本人保 证毕业离校后,发表论文或使用论文工作成果时署名单位仍然为西安电子科技大 学。学校有权保留送交论文的复印件,允许查阅和借阅论文;学校可以公布论文 的全部或部分内容,可以允许采用影印、缩印、或其它复制手段保存论文。( 保密 的论文在解密后遵守此规定) 。 本人签名:墨翻盎 导师签名:珑址 日期:呈亟:丝:丝 日期:2 w ,三二f 第一章绪论 第一章绪论 1 1 研究背景及意义 随着计算机技术的发展,嵌入式系统的应用范围越来越广泛,涉及到我们生 活的众多方面,如电器制造、数字通信、航空航天、工业生产以及军事电子领域。 随着工业制造技术的不断进步,系统硬件设计生产日益完善,嵌入式系统发展到 了一个崭新的阶段智能化阶段,这一阶段,软件在系统中已逐步取代硬件成 为系统的主要组成部分,原先用硬件实现的许多功能改由软件实现,从而使系统 具有更好的灵活性、适应性和扩展性。 面对许多系统复杂性的增加,越来越需要功能强大、性能稳定的应用软件与 之相适应。所以,在嵌入系统开发中软件的代码量也越来越大,但这随之带来的 问题就是软件的复杂程度也越来越高,软件产品的质量也越来越难以保证。同时, 系统又要求应用要精简高效、稳定可靠,使软件的开发在整个系统开发中所占的 时间也越来越长,软件的质量对产品的最终质量起到了决定性的作用。 曾经是上个世纪软件界最热门的话题“软件危机”1 1 j 便是上述问题的集中 体现。其实,软件危机仅仅是一种问题的表现形式,这个问题就是软件在开发中 不可避免地要存在错误。正是这些错误导致了软件开发在成本、进度和质量上的 失控。 事实上,软件错误对于软件来说,是一种固有的属性,是无法改变的。无论 采取怎样新型的开发语言、先进的开发方式、完善的开发过程,软件错误都只能 是尽量减少,但不可能完全杜绝。而对于软件中所存在的错误,最终只能通过一 个方法来解决:软件测试。 软件测试是软件工程过程的一个重要阶段,是在软件投入运行前,对软件需 求分析、设计和编码等各阶段产品的最终检查,是为了保证软件开发产品的正确 性、完全性和一致性,从而检测软件错误、修正软件错误的过程。软件开发的目 的是开发出实现用户需求的高质量、高性能的软件产品,软件测试则以检查软件 产品内容和功能特性为核心,是软件质量保证的关键步骤,也是成功完成软件开 发目标的重要保障。软件测试的目的是尽可能发现多的软件中所存在的错误,它 是保证软件质量的关键,是及其重要的。而嵌入式软件与别的软件相比,它具有专 用性,它只能在需求所指定的硬件平台上执行,并且嵌入式软件的开发环境和运行 环境是不一致的,因此即使宿主机环境下测试再充分,也不能说明在目标机环境下 2 嵌凡式软件可测试性研究 运行该软件就不出问题。因而,嵌入式软件还而l | f j i 着目标环境的测试。这不仅增加 了测试的代价 而且还带来r 嵌入式软件的测试策略问题,即哪些测试分配在宿主 环境进行,哪些攫8 试分配到日标环境下进行。嵌入式系统由于自己本身的特点,如实 时性强、内存不丰富、o 通道少、开发工具昂贵并且与硬件紧密相关、c p u 种 类繁多等等,决定了不同的嵌入式系统必须有不同的测试方法,但对嵌入式软件的 测试与传统软件测试还是存在着许多相似的问题和相似的解决方法。 软件的珂测试性恰为这样一个软件度量指标,正是软件的可测试性的高低决 定了对该软件进行测试的难易程度,或者说是软件中的故障被揭示出来的可能性。 开展对软件可试性的研究有助于确定软件为了达到一定的可靠性而需要被测试 的程度、指导最合理地分配测试资源,并提高测试性的覆盏率。而且,可测试性 分析也能够用于指导软件设计者们合理地设计软件结构,以降低测试的开销以及 提高测试的可行性;由于改善了软件的结构,也能直接避免了一些软件错误,从 而使软件的可靠性和可信度达到新的水平。考虑到软件测试固有的复杂性,在软 件开发中测试的成奉越来越高,但软件的可靠性仍得币到保证。所以,关注软件 可测试性的目的就是为了将其应用在软件质量保证中,合理分配测试资源,在减 轻测试工作量的同时,提高软件的可靠性。研究软件的可测试性,将是对传统的 通过大量测试来保障软件质量的方法的一种完善。因此说,研究软件可铡试性及 其量化力法不仅对评价软测试难易程度有重要意义,而且对软件的测试、软件的 质量保证,以及改进软件结构设计也具有现实的指导意义。 1 2 目前的研究现状 “可测试性”的概念最早是在7 0 年代初针对硬件测试而被提出来的。当时, 由于一些硬件电路系统膨胀到一定的数量级,对其进行测试就显得异常复杂,于 足,众多学者纷纷提出了对硬件电路的可瀑i 试性度量方法,于是形成了可测试性 设计的一个重要分支可测试性分析。 硬件可测试性分析的含义是:“对一个已初步完成设计的电路,或者待测电路, 不具体生成钡试码就能定量地估算出电路测试难度的一类方法”。它有两条基本要 求:a ) 准确性,要求得到的电路的可控制性、可观察性,以及可测试性的相对大 小关系能真实描述故障检测的难易;b ) 易计算性,要求可测试性分析方法的计算 复杂性必须大大低于测试生成,否则将失去其存在价值。 到了9 0 年代,人们逐渐把硬件的可测试性分析研究应用到软件上,软件可测 试性研究蜀益成为人们关注的焦点。然丽,软件可测试性作为软件的一种质量特 性,并没有一个统一的定义,人们根据各自研究的出发点的不同,对软件可测试 性给予了不同的定义。比如t 第一章绪论 3 1 ) m e e ( 1 9 9 0 ) 标准1 3 j :a ) 为一个系统或构件建立测试标准并通过执行测 试来确定该标准被满足的难易程度;b ) 对每一个声明的需求建立一个测试标准 并通过执行测试来确定该标准被满足的难易程度。 21s t i 丑b 标准1 7 j :一个软件能够被测试的有效程度的判断。这个定义要求观 察程序中使测试变得困难的每个方面。 3 ) j e f e r e y 、,o a s 标准【3 】:如果软件中存在错误,它在下一次被测试执行( 基于 一定的程序输入域) 时产生失效的概率。 一个更为一般的观点把软件的可测试性定义为软件中存在的错误在给定任意 输入集合的测试过程中,能够被揭示出来的概率。 综合分析以上这些可测试性定义我们就会发现,软件可测试性实质上就是对 软件进行有效测试的难易程度的一个指标。但是,仅仅有这些定义是不够的,这 些定义没有给出量化可测试性的指标,如果能把可测试性指标用具体的数值进行 量化,那么评价软件测试难易程度就会更加方便。同时,也可以将该量化值用于 评估指导软件的可靠性度量及可测试性设计。 国际上对软件可测试性的研究至今已有1 0 年,并提出了从各个不同角度来分 析软件可测试性并对它进行检测的方法。这些方法根据其实现的方式可以分为两 类:一类是用动态执行的方法来检测,主要以p m 【1 2 l 模型,语义故障模型等方 案为代表;另一类则是用静态分析的方法来检测,如f r e e m a n 提出的域可测试性1 1 0 】, j e f f r e ym 、b a s 提出d r r 模型【3 】以及软件故障佚效模型【捌,j i n c h e m gi j n 等人提 出的静态程序可测试性分析模型【8 】【h 】等。动态方法强调动态运行被测程序,借助于 插装程序变异因子的方法观察其对程序执行过程和程序输出的影响,进而评估程 序的可测试性;而静态方法多为基于对程序代码的静态结构分析,依据一定的规 则,实现对程序的可测试性分析。 国内对软件可测试性的研究起步比较晚,从己有的文献来看,都着重于对软 件可测试性进行定性研究,或者着重于可测试性设计策略的制定上,但并没有哪 个单位或个人对软件可测试性的检测方法提出新的见解或新的解决方法。 目前,关于软件可测试性的研究已经越来越受到重视,软件可测试性的研究 成果也不仅仅应用于指导测试资源的合理分配上,还被应用到软件设计模式改进、 软件可靠性模型建立等方面。而且软件可测试性研究的内容范围也越来越广泛。 1 3 论文主要研究成果和组织结构 嵌入式软件可测试性检测方法的研究无论是对嵌入式软件测试,还是对嵌入 式软件质量保证都有着非常重要的意义。本文的工作旨在研究嵌入式软件可测试 性的检测方法,给出可测试性检测的量化指标,并实现用于嵌入式软件可测试性 4 嵌入式软件可测试性研究 检测的工具,帮助软件测试人员和质量保证人员合理安排软件测试的资源,保证 软件质量,并为软件的可测试性设计提供有益的借鉴和参考。 本文的内容组织方式如下: 第一章:绪论。阐述研究工作的背景和意义,分析国内外的研究状况,并介 绍论文主要内容。 第二章:嵌入式软件可测试性检测方法的理论基础。介绍嵌入式系统、软件 测试及可测试性检测的基本概念和理论基础,对几种现有的可测试性检测方法和 模型进行简单的介绍和实效分析。 第三章:嵌入式软件静态可测试性检测模型( s e l m ) 研究。详细地分析了现 有可测试性检测模型的不足和缺陷:并根据高准确性和低计算复杂性的原则,提 出了一套过程检测的改进解决方案,在此基础上建立了一个基于静态分析方法的 软件可测试性检测模型。 第四章:嵌入式软件可测试性检测系统的设计与实现。依据s e t m 检测过程 理论,设计并实现了实用的检测工具。本章描述系统设计和实现的总体思路和其 中关键问题的解决方法,并针对s e t m 可测试性检测过程举了一个简单的例子进 行说明。 第五章:总结与展望,对本文的工作进行了总结,并对需进一步研究的工作 进行了探讨和展望。 丝三皇堂垒塞塾堡里型堇堡墨堕茎型 ! 第二章嵌入式软件可测试性理论基础 软件的可测试性是指软件错误在软件测试过程中被揭示的容易程度,它的理 论基础依然是软件测试。本章将首先介绍嵌入式软件和软件可测试性关系紧密的 一些概念和理论基础,然后再对嵌入式软件的可测试性及其检测过程进行探讨。 2 1 1 嵌入式系统概述 2 1 嵌入式系统概述 随着计算机技术的发展,一种不为人们所熟悉但却被广泛应用的计算机系统 逐渐发展壮大,那就是嵌入式系统。对于嵌入式系统,至今没有确切的定义,多 指置于电子设备内部,完成某种特定功能的计算机系统,具有软件代码小、高度 自动化、响应速度快等特点。 嵌入式系统是以应用为中心,以计算机技术为基础,并且软硬件可裁剪,适 用于应用系统对功能、可靠性、成本、体积、功耗有严格要求的专用计算机系统。 它一般由嵌入式微处理器、外围硬件设备、嵌入式操作系统以及用户的应用程序 等四个部分组成,用于实现对其他设备的控制、监视或管理等功能。 嵌入式系统一般指非p c 系统,它包括硬件和软件两部分。硬件包括处理器 微处理器、存储器及外设器件和帕端口、图形控制器等。软件部分包括操作系统 软件( o s ) ( 要求实时和多任务操作) 和应用程序。有时设计人员把这两种软件组 合在一起。应用程序控制着系统的运作和行为:而操作系统控制着应用程序编程 与硬件的交互作用。 嵌入式系统的核心是嵌入式微处理器。嵌入式微处理器一般就具备以下4 个 特点: 1 ) 对实时多任务有很强的支持能力,能完成多任务并且有较短的中断响应时 间,从而使内部的代码和实时内核心的执行时间减少到最低限度。 2 ) 具有功能很强的存储区保护功能。这是由于嵌入式系统的软件结构已模块 化,而为了避免在软件模块之间出现错误的交叉作用,需要设计强大的存储区保 护功能,同时也有利于软件诊断。 3 ) 可扩展的处理器结构,以能最迅速地开发出满足最高性能的嵌入式微处理 器。 嵌入式软件可测试性研究 :嵌入式微处理器必须功耗很低,尤其是用于便携式的无线及移动的计算和 通信设备中靠电池供电的嵌入式系统更是如此,如需要功耗只有m w 甚至口w 级。 2 1 2 嵌入式系统特点 一、嵌入式计算机系统特点: 1 嵌入式系统通常是面向特定应用的嵌入式c p u 与通用型的最大不同就是嵌 入式c p u 大多工作在为特定用户群设计的系统中,能够把通用c p u 中许多由板卡 完成的任务集成在芯片内部,从而有利于嵌入式系统设计趋于小型化,移动能力 大大增强,跟网络的耦合也越来越紧密。 2 嵌入式系统是将先进的计算机技术、半导体技术和电子技术与各个行业的具 体应用相结合后的产物。 3 嵌入式系统的硬件和软件都必须高效率地设计,量体裁衣、去除冗余,力争 在同样的硅片面积上实现更高的性能。 4 嵌入式系统和具体应用有机地结合在一起,它的升级换代也是和具体产品同 步进行,因此嵌入式系统产品一旦进入市场,具有较长的生命周期。 5 为了提高执行速度和系统可靠性,嵌入式系统中的软件一般都固化在存储器 芯片或单片机本身中,而不是存贮于磁盘等载体中。 6 嵌入式系统本身不具备自举开发能力,即使设计完成以后用户通常也是不能 对其中的程序功能进行修改的,必须有一套开发工具和环境才能进行开发。 二、嵌入式软件的特点: 1 、开发调试困难,需要使用交叉开发环境。一般嵌入式软件的开发平台和运 行平台是不同的,开发完成后需要倒入运行平台,使用交叉开发环境进行调试, 这就增大了开发和调试的难度。 2 、满足实时性要求。一般的嵌入式软件是连续运行的,对外部事件的触发给 予实时响应,满足时限要求。 3 、具有处理异步并发事件的能力。嵌入式系统多为事件驱动的,所处理的事 件多是随机的、并发的事件,一般提供多任务处理机制来处理复杂的环境。 4 、具有快速启动、自动复位等功能。由于嵌入式系统的实时性要求较高,所 以系统多具有快速启动的功能,在出现故障时一般具有容错能力和自动修复能力。 第二章嵌入式软件可测试性理论基础 2 2 嵌入式软件测试与软件可测试性简介 2 2 1 嵌入式软件测试简介 嵌入式软件测试与普通的软件测试既有相同点又有所不同,嵌入式软件测试 其自身的特点,使得嵌入式软件的开发和测试与一般的软件开发和测试策略有很 大的不同。尽管嵌入式软件的新特性使得传统的测试不再充分,但已有的测试方 法和技术在嵌入式软件的测试中仍然可用。我们可以参照一般的软件测试来研究 嵌入式软件的测试,一般软件测试定义为:软件测试是使用人工或自动手段来运 行或测定某个系统的过程,其目的在于检验它是否满足规定的需求或是比较预期 结果与实际结果之间的差别1 4 】。 g 1 e nm y e f 在他的软件测试著作中陈述了一系列关于测试目标的规则【1 8 l : 1 、测试是为了寻找错误而运行程序的过程; 2 、一个好的测试用例是指可能找到迄今为止尚未发现错误的用例; 3 、一个成功的测试是指揭示了迄今为止尚未发现错误的测试。 软件测试涉及到软件程序代码,执行环境需求规范,设计文档,操作手册等 诸多方面内容。一个完整的软件测试过程包括了测试计划,测试准则,测试目标, 测试用例,驱动模块,测试环境等许多相关内容。在软件测试过程中,最为关键 的就是软件测试用例设计问题。在过去的3 0 多年里,出现了大量的测试用例设计 方法,这些方法大致可分为两大类:静态测试和动态测试。 一、静态测试技术 静态测试技术是不执行程序代码而寻找程序代码中可能存在的错误或评估程 序代码的过程。由于嵌入式软件的运行需要加载到目标机上,因而静态测试技术 有利于展开嵌入式软件测试。它具有以下特点: 1 、静态测试不必动态地运行程序,也不必进行测试用例设计和结果判断等工 作。 2 、静态测试可以由人工进行,充分发挥人的逻辑思维优势。 3 、静态测试实施不需要特别的条件,容易开展。 静态测试包括: 1 ) 代码评审c 0 d ei i i s p e c t i o n 或c o d er e v i e w 2 ) 代码走读w a l k i l l r o u g h 3 ) 技术评审( 软件需求分析和设计评审) 二、 动态测试技术 动态测试是在抽样测试数据上执行程序并分析输出以发现错误的过程。针对 嵌入式软件可测试性研究 嵌入式软件具有以下特点: l 、将代码编译加载到目标机上实际运行被测试程序,取得程序运行的真实情 况、动态情况,进而进行分析。 2 、必须生成测试数据来运行程序,测试质量依赖于测试数据。 3 、由于目标机的资源相当匮乏,测试所得的信息在目标机上不便分析导致生成 测试数据难以收集,使开展测试工作费时、费力、费人。 4 、动态测试中涉及多方面工作,人员多、设备多、数据多,要求有较好的管 理和工作规程。 动态测试包括三部分核心内容:生成测试数据、执行程序与验证程序的输出 结果。这其中最为关键的是生成测试数据。目前,生成测试数据的策略有黑盒测 试和白盒测试,它们构成动态测试技术的基本内容。 2 2 2 软件的可测试性 过去,关于软件测试的大量研究都集中于选择测试的方法和策略上,它们可 基于软件需求说明,程序设计结构,或者其它一些关于软件错误的假设。进行测 试的目标是通过将运行软件所得到测试结果与需求正确的结果进行比较,进而去 发现软件中所存在的错误。在上述过程中,测试工程师都共同关注一个问题:软 件在测试中运行失败的概率会有多大呢? 除非对软件进行穷尽测试,不然是不能 够得出上述问题的精确量化指标的。为了使测试能够足够有效,应该使该测试能 够从某种程度上给出对被测程序的可靠度度量。软件可测试性分析便是着重与此。 为了更好地理解软件可测试性的含意,我们首先做一个简单的类比。如果把 软件错误比作成金子,软件测试则可比作是开采金矿,软件可测试性分析则是开 采金矿之前地质学家所做的勘探工作。开矿掘金并不是地质学家的工作,但是, 地质学家却能够预见在某处可以掘到金予的可能性概率。比如,他可以说:“在此 处可能也可能不存在金子,但如果存在,则是在地下5 0 英尺,而且将会遍布整个 该处地域。”在另一处,他可能又说,“如果此处下面1 0 英尺内没有金子,那么, 该处便不会存在金子。” 在软件开始测试之前,这样的起始勘探相对于盲目测试有着明显的优点。可 测试性分析能够给出对软件特定模块进行测试过程中发现错误的容易程度,预见 为了达到一定可靠性的测试强度。如果针对可测试性分析得出的结论而进行的软 件测试之后,并没有发现错误,那就可以更为理智地推断该软件没有错误。 我们的目标是能够精确地评估目标软件,以确定其是否具有高质量,高可靠 性。如果只用黑盒测试来评估软件的质量,那么就需要大量的测试用例来满足质 量需求。 第二章嵌入式软件可测试性理论基础9 为了减少测试的次数,可用以下两种方法之一: 1 、设计并选取那些更有能力揭示软件错误的测试用例。 2 、设计出存在错误时错误更容易被发现的软件。 设计高效的测试用例并不是一件容易的事。为了达到这个目标,需要能够设 计出针对于软件中更容易出现错误之处的测试用例,或软件中更容易隐藏错误之 处的测试用例,软件的可测试性分析便是着重于此。通过对软件可测试性的定量 分析,便可以更有针对性地开展测试工作,合理分配测试资源,安排测试进度, 提高测试效率;进而提高软件的可靠性。 上述第二点意味着我们需要开发出具有下列特点的软件:1 ) 对于每种输入代 码都具有更大的被运行的概率。2 ) 包含了如果本身就含有错误,则很可能也会引 发整个程序状态出现异常的数据结构,并将该异常直接导致为软件失效而被检测 发现。软件的可测试性设计便是重点于上述问题。 当前对可测试性分析的研究,主要着重于分析一段包含缺陷的程序运行时导 致软件失效的概率,一般有静态分析和动态分析两种分析方法。静态分析主要采 用软件代码分析、功能规约研究等方法,研究软件的信息丢失【6 j ( i n f o 册a t i o n l o s t ) 现象及其解决办法、软件故障导致软件失效的过程及其预测方法等。动态分析主 要采用敏感性分析【3 】( s e n s i t i v i t y a n a l y s i s ) ,缺陷注入( f a u l t 珂e c t j o n ) ,变异测 试l ”】( m u t a t i o nt e s t ) 等方法,研究软件缺陷的可达性状态异常和故障产生的概率。 与静态分析相比,动态分析具有较为准确的度量结果,但复杂度代价较高,不适 用于对大规模软件进行检测分析;静态分析方法则是对其较好的补充,可以适用 于更为广泛的检测领域。 2 2 3 软件可测试性与软件测试、软件验证的关系 软件测试( s o f t w a r et c s t ) ,形式化验证( f 6 m l a lv e f i f i c a t i o n ) 和软件可测试性 分析是软件验证( s o f t w a r ev e r i f i c a t i o n ) 1 3 j 三个方面,软件测试是一个动态验证过 程,形式化验证主要做程序正确性证明,是一个静态数学推理过程,而软件可测 试性分析可对前两者作补充,为前两者提供有益的信息。需要指出的是,软件的 可测试性与软件的测试和验证都相关,但又有明显不同。同软件测试一样,可测 试性分析需要经验性质的工作来创建评估;又与软件测试不同的是可测试性分析 并不需要测试用例。因此测试和可测试性分析可以互为补充:测试揭示错误( 可 测试性分析不能) ,但可测试性分析能够指出测试应该针对软件更会隐藏错误之 处。同样,软件验证是评估软件可被接受程度的过程,这里的“可被接受”程度 是由该软件的具体需求而确定的,包括安全性和可靠性等。可测试性则检查与其 不同的行为特征:包含错误的代码在运行时产生错误的概率。 1 0 嵌入式软件可测试性研究 软件可测试性分析,软件测试和软件验证都能够提供软件质量方面的信息, 每种技巧也都提供了软件分析中需要考虑的不同方面。 作为一个假定的关于该三种软件分析如何能够协同工作的例子,我们考虑一 个拥有5 0 个模块的系统。每个模块都经历了1 0 0 次的随机测试,每个模块也都通 过了这些测试:而且,整个系统也经历了1 0 0 次的随机测试。这其中的1 0 个最为 复杂、也是要求最为严格的模块在开发过程中也经受了形式化验证。但可测试性 分析结果揭示了在其中的5 个模块中存在测试很难发现错误的代码区域,而这5 个中也只有一个通过了形式化验证。从这点来说,验证资源应当集中到那4 个具 有低可测试性且没有被形式化验证的模块中,因为它们更容易隐含错误。 上述实例说明了可测试性信息不能取代测试和验证,但一方面也说明了软件 测试和软件验证不能完全彼此依赖。最有效的软件从业者应当利用所有可以利用 的信息来构建高质量软件。 2 - 3 嵌入式软件可测试性检测模型 由于软件的可测试性分析是针对于软件中存在的错误在测试过程中被发现的 概率,而且嵌入式软件可测试性仍参照软件的可测试性进行研究的。所以,本节 首先介绍可测试性检测中的一些相关基本概念,并对软件错误进行分析,然后, 再介绍几个现有的软件可测试性检测模型。 2 3 1 可测试性检测基本概念 一、 软件错误( s o n w a r ef a u l t ,也称软件故障,软件缺陷) 软件错误指在软件设计中存在的缺陷,该缺陷使得软件并不能满足预定的软 件功能需求。就其发生的环境来说,它通常可以分类如下: l 、功能错误:说明书不完整、模糊、自相矛盾,从而导致对系统功能的误解。 2 、逻辑错误:程序设计算法逻辑上存在错误,并不能满足功能需求。 3 、系统错误:与外部接口交互的协议错误,外部操作错误以及操作系统接口 错误,控制序列错误,资源管理问题等。 4 、过程错误:参数调用错误,子程序调用错误,运算错误,初始化错误等。 5 、数据错误:动态数据与静态数据混淆。信息、参数与控制数据混淆,数据 格式、内容、结构与属性错误等。 6 、编码错误:语法错误、变量名错误、局部与全局变量混淆、数据操作错误、 变量引用错误等。 二、 软件失效( s o f t w a r ef a i l l l r e ) 第二章嵌入式软件可测试性理论基础1 1 软件失效:对于一定的软件输入,软件输出( 运行) 结果错误或并不满足预 定的软件功能需求。 程序错误( 程序故障,程序缺陷) ,程序失效的概念类似于上述概念。应该注 意,软件错误的表现形式是软件失效,但它并不是软件失效的充分条件,也就是 说并不是所有软件错误都会在测试或运行时引起软件失效,这一点本文将在后面 的章节中进行详细分析。 三、 程序位置( i j d c a t i o n ) 程序位置是一条高级程序设计语言的语句或一条机器指令。譬如,它可以是 赋值语句、输入语句、输出语句或w h i l e 的条件表达式等。 四、数据状态( d a t es t a t e ) 数据状态指的是当程序执行至某一程序位置时,当前程序中所有己定义的变 量的值和程序指针的值。数据状态的取样是在两个连续执行的程序位置之间进行 的。 2 3 2 软件错误分析 软件一旦包含错误,它将潜伏在软件中,直到被发现和正确修改。如果软件 在运行时没有运行到有错误的部分,软件就可以正常运行并且正确工作;若运行 到了有错误的部分,软件的计算或判断就会与规定的需求产生不符,这种不符便 有可能使软件丧失执行要求的功能的能力,进而产生软件失效。 对软件进行测试的目的就是使用测试用例观察软件是否在运行过程中有失效 的发生。如果测试过程中,软件失效发生了,那么就可以判定,软件中一定存在 有软件错误:但另一个问题出现了:如果软件中存在错误,那么它一定会在测试 中被发现吗? 也就是说,软件错误是在什么条件下才会导致软件产生失效呢? 为了理解上述概念以及分析所提出的问题,下面看一个简单的函数程序实现 的例子: 该函数功能需求为:当满足条件a o ,且酽一4 a + c = o 时,输出1 ,否则输 出0 ;并假设在程序设计中编码如下; 1 i n t m n c ( i n ta i n t b ,i n tc ) 2 j n t x ,y ,n s l t 3 i “a = = 0 ) 4 r e s u n = 0 : 5e l s e 6 x = b b ; 7 y = 2 + a + c ; 嵌入式软件可测_ ;式性研究 8 i 取一y 2o ) 9m h h = l : 1 0e l 舱 1 ln 0 i l l t = 0 : 1 2 ) 1 3冲t l l mr e s u n : 1 4 例挥2 1 在上述函数f u c ( ) 中,根据功能需求,在函数第7 行存在一个软件错误e 即 原本应该是4 + a + c ,却被误写成了2 a t c 。现在考虑对该程序进行测试,我们会 随机选取了若干个攫l 试用例,即若干个程序输入输出值对。然面,在执行测试用 例的过程中,会有什么情况发生呢? 比如,采用如下四组测试数据:a ( 0 ,2 ,4 ) 、b ( 2 ,3 ,o ) 、c ( 1 ,2 ,1 ) 、 d ( 1 ,3 ,3 ) 代表函数的输入参数,按照功能需求,各测试用例的输出结果应分 别为:0 、1 、1 、0 。接下来考查各测试用例在测试上述错误函数中对错误代 码的检铡情况。 1 、测试用例a :在该用例中a 值为0 ,故函数语句执行顺序为:2 、3 、4 、 1 3 ,输出结果为o 。可以看出,该测试用例使得错误e 并设存被执行,于是,程序 输出结果是难确的。所咀,该测试用例并不能发现该处错误。 2 、钡4 试用例b :在该用例中,易知函数执行语句顺序为:2 、3 、5 、6 、7 、8 、 9 、1 3 ,输出结果为1 。该测试用例虽然使错误e 得到了执行,但是并没有改变变 量y 的赋值结果( y 芷常应为0 ,现在仍为0 ) ,所以,程序的接f 来的执行并产牛 的输出结果也还是正确的,所以该测试用例也没有发现错误e 。 3 、测试用例c :该用例使得程序的语句执行顺序为:2 、3 、5 、6 、7 、8 、9 、 1 3 ,输出结果为1 。在该用例执行测试过程中,错误e 首先得到了执行,然后,将 该错误传染给了变量y ,郄改变了变量y 的数据状态,但是当程序执行q 第8 条语 句时,变量y 错误的数据状态并没有继续向后传播,也就是说,程序接卜_ 来的执 行效果与程序正确编写时的执行效果是等同的,所以,由于在该处错误e 的传播 被“停止”了,从而导致程序的测试结果仍是正确的,故该测试用例也并没有发 现错误e 。 4 、测试用例d :当测试执行该用例时,程序语句的执行顺序也为2 、3 、5 、 6 、7 、8 、9 、1 3 ,输出结果为1 。但是,程序正确的执行顺序为2 、3 、6 、7 、8 、 1 0 、1l 、1 3 ,输出结果为o ;所阻,该测试用例能够使得程序错误e 首先被执行, 并且罐误e 被传染给了其后的数据状态,错误的数据状态通过层层传递,最终导 致程序输出结果错误,这样,就得到了程序中存在错误的结论。 第二章嵌入式软件可测试性理论基础 由上例可以看出,如果在渊试过程中程序错误并没有导致程序失效,那么, 可箍是由于以下原因:1 ) 程序错误根术就没有得到执行;i ) 程序错误虽然被执行 了,但并没有导致其后的数据状态发生错误变化;3 ) 错误的数据状态并没有被继 续传播到程序辕出。所咀软件故障只是软件失效的充分条件而非必要条什,软件 故障导致软 牛失效是由。系列予过程 同决定的,其中任何一个子过程都可能终 止软件错误向软件输出结果的传播,如果该传播过程被终止了+ 那么软件失效便 不会发生,湖4 试也就不能如期发现软件故障。 为了能够预测测试过程中软件错误被揭示的概率,可测试性分析的技巧应该 能够预测软件错误是否能被执行,被执行的软件错误是否会导致数据状态错误, 以及错误的数据状态错误是再会坡传播到程序输出中。如果数据状态错误并没有 传播4 任何数据输出中,就可以说数据状态错误被“取消了”,如果测试中所有的 数据状态错误都被取消了,那么引起该数据状态错误的错误便没有被发现,于是 便导致了该程序的低可测试性。 2 3 3 软忭故障失效模型 软件故障失效模型的理论基础是前面所讨论的软件故障导致软件失效需要三 个充分必要条件: l 、程序的输入使这个软件放障得到了执行; 2 、被执行的故障使该程序位置之后的数据状态发生变化( 错误的变化) ; 3 、错误的程序数据状态被传播到程序输出,并使输出结果错谡( 产生失效) 。 这三个充分必要条件实质上也反映了散障产生失效的整个过程( 如图2 1 所 示) 。总的来说,软件故障导致软件失效的整个过程是一个顺序的过程,在程序执 行故障之后,这个故障健该故障之后的数据状态被传染,在数据状态被传染之后, 经过若干次的迭代过程,错误的数据状态将该错误传播到程序的输出。只有当这 三个条件都满足时,故障才能产生失效,才能被检测出来。 匾乒匠己僵 图2 l 敲障导致失嫂的过程 由j e 雠ym v b a s 的可澳4 试性定义,软件可测试性采用软件中的故障被检测出 来的概率束表示,因此,可以根据同时满足故障被检测出来的这三个充分必要条件 的概率来计算软件的可测试性。如果用事件e 、事件1 和事件p 分别表示这三十 1 4嵌入式软件可测试性研究 条件,显然,这三个事件是相互独立的,那么故障被检测出来的概率为这三个事 件的交集,即: p ( 故障被检测出) = p ( e n i n p l = p ) + p ( i ) 8 p ( p ) 因此,可测试性可以用下面的公式来计算: t e s t a b i l “y = p ( e ) + p ( i ) 4 p 口) 上述的过程便是软件故障失效模型。 2 3 4p i e 过程检测模型 式( 2 1 ) j e 脏e vm v o a s 于1 9 9 1 年提出了软件可测试性的定义,并在此基础之上,以故 障失效模型为理论基础,提出了p m 过程检测模型【1 2 】。 依据j e f f r e vm 、b a s 对可测试性的定义,“在特定的输入分布下对程序进行随 机黑盒测试时,程序暴露故障的能力”,p i e 模型通过对某个特定程序位置的故障 揭示能力的分析来达到对其可测试性进行检测的目的:揭示故障能力强的,其可 测试性也就越强;反之,则可测试性较弱。p i e 模型由三个子算法组成:执行分 析、传染分析和传播分析。 一、执行分析 执行分析评估的是一个程序位置的执行概率。 执行分析首先需要确定一个程序的输入分布。然后,对任意一个特定的程序 位置l ,都做如下的工作:在输入分布中随机地选择n 个程序输入,执行程序若 在这个n 次执行过程中,l 被执行了k 次,则程序位置l 处的执行概率为k ,n 。 二、 传染分析 传染分析评估当某个程序位置包含故障,且该故障被执行时,导致程序数据 状态发生变化的概率。 传染分析的实现需要用到语法变异的注入技术。其主要步骤为:首先,在某 个程序位置l 处使用某种变异算子注入语义变异p ;然后,随机选择l 中的n 个 输入数据状态,并分别执行变化前的l 与变异后的l ;最后,比较得到的结果状 态,若两者有k 次不同,则变异p 下l 处的传染分析结果( 即传染概率) 为k 小。 三、 传播分析 传播分析评估的是变化的程序状态将其影响传播到程序输出的概率。在此分 析过程中,程序状态的变化通过改变该程序状态中的一个活动变量( 对程序输出 有任何潜在影响的变量) 的值来实现。传播分析的主要步骤为:首先改变某个程 序位

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论