软件工程(2012版)-编码与测试8.ppt_第1页
软件工程(2012版)-编码与测试8.ppt_第2页
软件工程(2012版)-编码与测试8.ppt_第3页
软件工程(2012版)-编码与测试8.ppt_第4页
软件工程(2012版)-编码与测试8.ppt_第5页
已阅读5页,还剩62页未读 继续免费阅读

下载本文档

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

文档简介

1、软件工程,哈尔滨工业大学(威海)计算机科学与技术学院 孟凡超 Email: Tele参考教材,软件工程-原理、方法与应用(第3版).史济民等,高等教育出版社。 软件工程. 张海藩. 人民邮电出版社。 Software Engineering: Theory and Practice(软件工程). Shari Lawrence等,人民邮电出版社。 UML2 and the Unified Process Practical Object-Oriented Analysis and Design(UML2.0和统一过程).Jim Arlow.机械工业出版社。 ,1. 绪论

2、 2. 软件生存周期与软件过程 3. 结构化分析与设计 4. 面向对象与UML 5. 需求工程与需求分析 6. 面向对象分析 7. 面向对象设计 8. 编码与测试 9. 软件维护 10. 软件复用 11. 软件工程管理,主要内容,软件编码,编码的目的 使用选定的程序设计语言,把设计模型翻译为用该语言书写的原程序。 常用的编程语言 基础语言:FORTRAN、COBOL、BASIC 结构化语言:PASCAL、C、Ada 面向对象语言:C+、Java、C# 脚本语言:JSP、ASP 选择语言的标准 应用领域 算法与计算复杂性 数据结构的复杂性 效率考虑,软件编码,软件编码,编码的风格:编码产生的源程

3、序应该正确可靠、简明清晰,而且具有较高的效率是好程序的一个主要标准为了达到这一点,应该遵循如下规则: 程序内部文档。包含适当的标识符、适当的注解和程序的视觉组织等。 数据说明:数据说明的次序应该标准化;当多个变量名在同一语句中说明时,应按字母顺序排列这些变量;对于复杂数据结构应该注释说明。 语句构造: 不要为节省空间将多个语句写在一行; 避免大量使用循环嵌套和条件嵌套; 利用括号使逻辑表达式或算术表达式的运算次序清晰直观。,软件编码,输入/输出 所有输入数据都进行校验; 明确提示交互式输入的请求、详细说明可用的选择或边界数值; 当程序设计语言对格式有严格要求时,应保持输入格式一致。 设计良好的

4、输出报表。 效率 程序运行时间 存储效率 输入/输出效率,软件测试,软件测试的基本概念 目的与任务 测试(Testing):测试的目的是发现程序错误;测试的任务是通过在计算机上执行程序,暴露程序中潜在的错误。 纠错(Debugging):纠错的目的是定位和纠正错误;纠错的任务是消除软件故障,保证程序的可靠运行。,测试数据,程序,期望结果,测试结果,错误信息,改正信息,软件测试,测试的特性 挑剔性:测试是对质量的监督与保证,所以“挑短”和“揭短”很自然成为测试人员的奉行的信条。 复杂性:设计测试用例是一项需要细致和高度技巧的工作。 不彻底性。程序测试只能证明错误存在,但不能证明错误不存在。 经济

5、性。选择一些典型的、有代表性的测试用例,进行有限测试。,软件测试,测试的分类,静态测试 (程序不执行),程序测试,动态测试 (程序执行),静态分析器分析,代码评审,(人工方式),代码会审,走查,办工桌检查,黑盒测试(测试程序功能),白盒测试(测试程序结构),(自动方式),软件测试,静态分析:通过被测程序的静态审查,发现代码中潜在的错误。 静态分析器分析:借助静态分析器在计算机上以自动方式进行检查,但不要求程序本身在计算机上运行。 代码评审:用人工方式进行脱机完成。代码评审可分为:代码会审、走查和办公作桌检查。 代码会审:程序员逐句朗读并解释程序,其他人员集中精力,捕捉可能存在的问题。参与人员有

6、设计人员、测试人员和程序员。优点是同行之间的互相启发,更易发现错误,有利于互相学习交流经验;缺点是人力、物力投入大。,软件测试,走查:根据已经提出的测试用例,用人工的方法来运行程序,即让人代替机器沿着程序的逻辑“走”一遍。走查的目的是不断地提出对程序的询问,结合疑问展开讨论和争议,以发现更多的问题。参与人员有测试人员和程序员。 办公桌检查:由一个人(程序员自己)参加的代码复审,可按错误检查表来检查程序或走查程序。,软件测试,测试的文档 测试计划:测试计划的主体是“测试内容说明”,包括测试项目的名称、各项测试的目的、步骤和进度,以及测试用例的设计等。 测试报告:测试报告的主体是“测试结果”,它包

7、含测试项目的名称、实际测试结果与期望测试结果比较,发现问题,以及测试达到的效果。,测试用例=测试数据+期望结果 测试结果=测试数据+期望结果+实际结果,软件测试,黑盒测试:等价分类法、边界值法和错误猜错法。 等价分类法 把输入数据的可能值划分为若干个等价类,使每类中的任何一个测试用例,都能代表同一等价类中的其它测试用例。 采用等价测试注意以下两点: 划分等价类不仅要考虑代表“有效”输入值的有效等价类,还要考虑代表“无效”输入值得无效等价类; 每一无效等价类至少要用一个测试用例,不然可能漏掉某一类错误,但允许若干个有效等价类合用一个测试用例,以便进一步减少测试的次数。,软件测试,例:某工厂公开招

8、工,规定报名者年龄在16周岁至35周岁(在1967年2月到1986年3月)。如果出生年月不在上述范围内,将拒绝接受,并显示“年龄不合格”等出错信息。试用等价分类法设计这一程序功能的测试用例。 第一步:划分等价类,软件测试,第二步:设计有效等价类需要的测试用例,第二步:为每一无效等价类设计一个测试用例,软件测试,边界测试 实践表明,程序员在处理边界情况时,很容易因忽略或考虑不周发生编码错误。例如,数组容量、循环次数以及输入数据与输出数据在边界值附近程序出错概率往往较大。 采用边界值分析法就是要这样来选择测试用例,使得被测试程序能在边界值及其附近运行,从而更有效地暴露程序中潜在的错误。 例如,程序

9、可能设有语句,If(196702=value(birthdate)=198603) then read(birthdate) else write “invalid age”,写成,写成,以上所有测试都不能发现该错误,软件测试,“出生年月”的测试用例(边界分析法),输入无效,输入有效,合格年龄,不合格年龄,软件测试,输入无效,输入有效,软件测试,错误猜测法 猜错就是猜测被测程序放在哪些地方容易出错,然后针对可能的薄弱环节来设计测试用例。 一般先用等价分类法和边界值分析法设计测试用例,然后用猜错法补充一些例子作为辅助的手段。 其它黑盒测试法 因果图,软件测试,白盒测试 逻辑覆盖测试:用流程图来设

10、计测计用例。主要考察的重点是图中的判定框(选择或循环)。按照被测试程序所作测试的有效程度,逻辑测试可由弱到强区分5种覆盖标准: 语句覆盖:每条语句至少执行一次。 判定覆盖:每一判定的每个分支至少执行一次。 条件覆盖:每一判定中的每个条件,分别按“真”、“假”至少各执行一次。 判定/条件覆盖:同时满足判定覆盖和条件覆盖的要求。 条件组合覆盖:求出判定中所有条件的各种可能组合值,每一可能的条件子和至少执行一次。,软件测试,5种测试标准示例,AB,T,F,AB,T,F,AB,T,F,软件测试,5种测试标准示例(续),软件测试,冒泡排序算法流程图,软件测试,执行不到,执行不到,如果将写成=,则测试数据

11、8,4不能发现错误,如果将写成=,则测试数据8,4不能发现错误,语句覆盖:只要送入先大后小的两个数,程序执行时就可以遍历流程图中的所有框。因此,仅需要选择一组测试数据如A=8,4, K=2就能够实现语句覆盖。,软件测试,如果将写成=,则测试数据8,4,8不能发现错误,如果将写成=,则测试数据8,4,4不能发现错误,判定覆盖:要实现判定覆盖,还需要在语句覆盖的基础上,增加两个能使程序从非正常出口(AE标志)退出的测试数据。因此,用以下两组数据A=8,4,8,K=3 ,A=8,4,4,K=3或 A=8,4,8,4,K=4,则程序将在满足(Ai=Ai-1)或(Aj=Aj-1)的条件下通过非正常出口,

12、也能实现判定覆盖。,软件测试,条件覆盖:使复合条件占的每个条件分别按“真”、“假”出现一次,才能克服前述缺点。因此,可以选择如下测试数据 A=8,4,9,6,K=4, A=8,4,8,4,K=4 就能对程序实现条件覆盖。此时Ai(或Aj)大于、等于或小于Ai-1(或Aj-1)的3种将分别至少出现一次,无论把“”误写为“”或“=”,都可用这两组数据检查出来。 因此,对于本例测试数据可以选择 A=8,4,9,6,K=4,A=8,4,8,4,K=4 或合成一组 A=8,4,8,4,9,6,K=6,软件测试,判定覆盖与条件覆盖差别: 判定覆盖把判定看成一个整体,后者则着眼于其中的一个条件。 如果一个判

13、定含有一个以上条件,采用判定覆盖可能出现如下漏洞,即判定中有些条件得到测试,另一些条件却被忽略,从而掩盖程序的错误。 条件覆盖要求对每一条件进行单独的检查,一般来说它的差错能力比判定覆盖强,但也不尽然。,软件测试,A真,A假,B真,B假,A假,B真,A真,B假,A的逻辑值 B的逻辑值 可能的测试数据,用以上数据测试的结果 ,只覆盖左分支,只覆盖右分支,只覆盖一个分支的条件覆盖的实例,软件测试,路径测试法 程序图:是一种简化的流程图。,流程图,程序图,软件测试,程序图的说明: 顺序执行的多个节点,在程序图中可以合并画成一个结点。 含有复合条件的判定框,在程序图中常常分解成几个简单的条件判定框,然

14、后再画。,1,1,合并节点的程序图,分解为简单条件节点后的程序图,T,F,T,T,F,软件测试,从流程图导出程序图,(AE),(AE),软件测试,1,2,9,3,4,7,8,5,6,(AE),(AE),1,2,3,4,5,6,7,8,9,a,b,c,d,e,f,g,h,i,j,k,l,m,q,n,复合判定条件被分解成简单的判定条件,软件测试,路径测试:对程序图中每一条可能的程序执行路径至少测试一次。如果程序中含有循环(在程序中表现为环),则每个循环至少执行一次。 路径测试具有如下特征: 满足结构测试的最低要求。语句覆盖加判定覆盖是对白盒测试的最低要求,同时满足这两种标准的覆盖为“完全覆盖”。从

15、对路径测试的要求可见,它本身就包含了语句覆盖和判定覆盖(在程序图上分别为点覆盖与边覆盖)。,软件测试,有利于安排循环测试 单循环结构的测试: 1)零次循环,即不执行循环体,直接从循环入口跳到出口; 2)一次循环,循环体仅执行一次,主要检查在循环初始化中可能存在错误; 3)典型次数的循环; 4)最大值次循环,如果循环次数存在最大值,应按次最大值进行循环,需要时还可以增加比最大次数少一次或多一次的循环测试。 多重嵌套循环:可以对某一指定的循环层遍历单循环测试,而在其它各循环层取最小或典型次数进行循环测试。,软件测试,选择测试路径的原则 选择具有功能含义的路径; 尽量用短路径代替长路径; 从上一条测

16、试路径到下一条测试路径,应尽量减少变动的部分(包括变动的边和节点); 由简入繁,如果可能,应先考虑不含循环的测试路径,然后补充对循环的测试; 除非不得已(如为了要覆盖某条边),不要选取没有明显功能含义的复杂路径。,软件测试,1,2,9,3,4,7,8,5,6,(AE),(AE),a,b,c,d,e,f,g,h,k,j,l,m,n,=,=,q,1,2,9,3,4,7,8,5,6,(AE),(AE),a,b,c,d,e,f,g,h,k,j,l,m,n,=,=,q,1,2,9,3,4,7,8,5,6,(AE),(AE),a,b,c,d,e,f,g,h,k,j,l,m,n,=,=,q,i,i,i,(1

17、),(2),(3),软件测试,1,2,9,3,4,7,8,5,6,(AE),(AE),a,b,c,d,e,f,g,h,k,j,l,m,n,=,=,q,i,1,2,9,3,4,7,8,5,6,(AE),(AE),a,b,c,d,e,f,g,h,k,j,l,m,n,=,=,q,i,1,2,9,3,4,7,8,5,6,(AE),(AE),a,b,c,d,e,f,g,h,k,j,l,m,n,=,=,q,i,(4),(5),(6),软件测试,测试用例设计 黑盒测试用例设计 测试三角形分类程序,该程序的功能是:读入三角形边长的3个整数,判断它们能否构成三角形。如果能够,则输出三角形是等边、等腰或任意三角形

18、的分类信息。,软件测试,1,2,3,4,5,8,9,10,11,7,12,软件测试,软件的纠错 纠错的策略,纠错策略,凑试法,跟踪法,推理法,正向跟踪,反向跟踪(回溯法),归纳推理,演绎推理,适用于小程序,适用于大、小程序,软件测试,凑试法:根据在测试中暴露的错误征兆,首先可设置一个可疑区,然后采用一些简单的纠错手段(例如在程序中插入打印语句),进一步获取与可疑区有关的信息,借以肯定或者修改原来的设想。 跟踪法:让带错的程序“分步执行”,即每执行完一条语句,就暂时停止下来检查执行的结果,确认正常后再继续执行。,正向跟踪 反向跟踪,软件测试,推理法:分为归纳法和演绎法。 归纳法:是从个别到整体的

19、推理过程。它从收集个别故障症状开始,分析各种症状的相互关系后,就有可能将它们归纳为某一假想的错误,如果这一假想错误被证实,就找到了真实的病根。 演绎法:是从一般到特殊的推理过程。根据测试获得的错误症状,可以先列出一批可能的病因,接着在这一大范围的设想中,逐一地排队根据不足或其它测试结果有明显矛盾的病因,然后对余下的一种或数种病因作详细的鉴别,确定真正的病因。,软件测试,软件测试,常用的纠错技术 插入打印语句 设置断点 掩盖部分程序 蛮力纠错技术,软件测试,程序错误的类型:从层次测试的角度,可以把程序错误划分为语法错误、结构性错误和接口错误。 语法错误:刚结束编码的程序,常或多或少地含有语法错误

20、,通过编译工具可以发现编译错误。 结构性错误:包括结构异常、结构不全和结构多余等错误,它们是代码评审的主要检查内容,也可以利用专门设计工具的软件工具对代码静态分析发现。,软件测试,部分常见结构性错误,软件测试,功能性错误:指程序功能与用户需求不相符引起的错误,功能性错误主要依靠动态测试来发现。功能性错误发生原因: 需求分析阶段定的需求说明比较含糊,导致疏忽或遗漏; 设计阶段对软件需求理解有错,或设计考虑不周; 开发过程中有过返工,需要多次修改需求说明或软件设计说明,出现设计走样、偏离用户需求错误。 接口错误:主要表现在调用子程序或函数时实际参数的类型、个数及顺序与形式参数不相一致;对全局量的引

21、用不当;相关模块对全局性数据的相互矛盾等。接口错误是集成测试检测的重点,也可以通过代码评审来发现。 系统错误:系统本身错误和对系统使用不当引起错误。,软件测试,多模块程序的测试策略 测试的层次性:单元测试、集成测试、确认测试、系统测试。,软件测试,单元测试:是层次测试的第一步,也是整体测试的基础。,软件测试,单元测试的目的:通过对模块的静态分析与动态测试,使其代码达到模块说明的需求。 单元测试的任务: 对模块代码进行编译,发现并纠正其语法错误; 进行静态分析,验证模块结构及其内部调用序列是否正确; 确定模块的测试策略,并据此设计出一组测试用例和必要的测试软件; 用选定的测试用例对模块进行测试,

22、直至满足测试终止标准为止。 静态分析与动态测试的重点,均应放在模块内部的重要执行路径、出错处理路径和局部数据结构,也要重视模块的对外接口。 编制测试报告。,软件测试,单元测试的实施步骤:,编译,静态分析器分析,代码评审,动态测试,检查代码中的语法错误,检查代码中的结构性错误,重点发现功能性错误,发现程序在结构、功能与编码风格方面的问题和错误。,测试软件:在多模块程序中,每一模块都可能调用其它模块或者被其它模块所调用。所以在单元测试时,需要为被测试模块编制若干测试软件,给它的上级模块或下级模块作替身。代替上级模块的称为测试驱动模块,代替下级模块的称为测试桩模块。,软件测试,集成测试:通过单元测试

23、的模块要按照一定的策略组装为完整的程序,在该组装过程中进行的测试称为集成测试或组装测试。,软件测试,集成测试的原因: 单元测试中使用了测试软件,它们是真实模块的简化,与它们所代替的模块并不完全等效,因此,单元测试本身可能有不充分的地方,存在缺陷。 多模块程序各模块之间,可能有比较复杂的接口,稍有疏忽就易出错。例如,有些数据在穿过接口时会不慎丢失,有些全局性数据在引用中可能出问题等。 有些在单个模块中可以允许的误差,组装后的积累可能达到不能容忍的地步,或者模块的分功能似乎正常,组装后也可能产生不了预期的综合功能。,软件测试,集成测试的目的:将经过单元测试的模块逐步组装成具有良好一致性的完整程序。

24、 集成测试的任务: 制定集成测试实施策略。根据程序的结构,可以选择自顶向下或由低向上或者二者综合的两头逼近策略。 确定集成测试的实施步骤,设计测试用例。二者的选择,应有利于揭露在接口关系、访问全局性数据(公用文件与数据结构)、模块调用序列和出错处理等方面存在的隐患。 进行测试,即在已通过单元测试的基础上,逐一地添加模块。每并入一个模块,除进行新的测试项目外,还须重复进行先前已经进行过的测试,后者也称为回归测试。,软件测试,集成测试的策略: 自顶向下测试:从顶模块开始,沿被测程序的结构图逐渐向下测试。按照移动路线的差异,又可区分为两种不同的实施策略:,M1,M2,M3,M4,M5,M6,M7,M

25、8,多模块程序,先广度后深度实施步骤。 组装顺序:M1-M2-M3-M4-M5-M6-M7-M8,先深度后广度实施步骤。 组装顺序:M1-M2-M5-M6-M8-M3-M4-M7,软件测试,测试M1,先深度后广度的测试时所需的桩模块,测试M1-M2-M5,测试M1-M2,测试M1-M2-M5-M6,软件测试,测试M1-M2-M5-M6-M8,测试M1-M2-M5-M6-M8-M3,测试M1-M2-M5-M6-M8-M3-M4,软件测试,自低向上测试: (1)从下一层模块中找出一个没有下级模块的模块,由下向上地逐加新模块,组成程序中的一个子系统或模块群; (2)从另一个子系统或群中选出另一个无下

26、级模块的模块,仿照前一步组成又一个子系统; (3)重复上一步,直至得出所有的子系统,把它们组装为完整的程序。,M1,M2,M3,M4,M5,M6,M7,M8,多模块程序,组装顺序: M8-M5-M6-M2 M7-M4-M3-M1 全部模块(合并以上两个群),软件测试,混合测试方式: (1)对上层模块采取自顶向下测试; (2)对关键模块或子系统采取由底向上测试。,软件测试,确认测试:其目的在于确认组装完毕的程序是否满足软件需求规格说明书的要求。确认测试通常包括有效性测试和配置复审等内容。,软件测试,验收测试:如果软件是给一个客户开发的,需要进行一系列验收测试来保证满足客户所有的需求。验收测试主要由用户而不是开发者来进行的。 Alpha测试与Beta测试:如果一个软件是给很多客户使用的,可使用Alpha测试与Beta测试。 Alpha测试:是在一个受控的环境下,由用户在

温馨提示

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

评论

0/150

提交评论