软件工程:第07章实现_第1页
软件工程:第07章实现_第2页
软件工程:第07章实现_第3页
软件工程:第07章实现_第4页
软件工程:第07章实现_第5页
已阅读5页,还剩159页未读 继续免费阅读

下载本文档

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

文档简介

1、1,第七章 实现(编码与测试),Implementation=Coding + Testing,实现:编码与测试,编码 将软件设计的结果转化成程序设计语言编写的计算机程序。 开发人员对软件的最小设计单位-模块进行单元测试。,测试 熟悉软件测试的步骤:单元测试、集成测试、确认测试。 掌握软件测试的方法:白盒测试、黑盒测试、灰盒测试。 掌握软件调试(纠错)的方法:调试过程、调试方法。 了解软件可靠性基本概念及估算方法。,第七章 实现(编码与测试),7.1 编码 7.2 软件测试基础 7.3 单元测试 7.4 集成测试 7.5 确认测试 7.6 白盒测试技术 7.7 黑盒测试技术 7.8 调试 7.

2、9 软件可靠性,3,7.1 编码,编码就是把软件设计结果翻译成用某种程序设计语言书写的程序。 7.1.1 选择程序设计语言 7.1.2 编码风格 1. 程序内部的文档 2. 数据说明 3. 语句构造 4. 输入输出 5. 效率,7.1.1 选择程序设计语言,为什么 程序设计语言是人和计算机通信的最基本的工具,它的特点必然会影响人的思维和解题方式,会影响人和计算机通信的方式和质量,也会影响其他人阅读和理解程序的难易程度。因此,编码之前的一项重要工作就是选择一种适当的程序设计语言。,实用选择标准: 用户对编程语言的要求。 可以使用的编译程序。 可以得到的软件工具。 工程规模。 程序员的编程语言知识

3、。 软件可移植性要求。 软件的应用领域。,效率:阅读理解、开发、测试、运行、维护,7.1.2 编码风格,程序实际上也是一种供人阅读的文章,应该使程序具有良好的风格。“好的”程序应遵循的规则: 程序文档: 源程序文档化,易于理解的标识符命名、适当的注释、清晰的程序视觉组织等。 数据说明: 易于理解,便于查阅。 语句构造: 结构化,简单、直观,技巧不过份。 输入输出: 遵循人机界面设计准则。 效率: 效率满足需求;不要为了追求效率而过份使用技巧,牺牲程序的清晰性、可读性。,(1)程序文档,程序中的标识符(名字) 程序中的注释 程序的视觉组织, 符号名的命名,符号名 即标识符,包括模块名、变量名、常

4、量名、标号名、子程序名、数据区名以及缓冲区名等。 名字的意义 这些名字应能反映它所代表的实际东西,应有一定实际意义。例如,表示次数的量用Times,表示总量的用Total,表示平均值的用Average,表示和的量用Sum等。 名字的使用 名字不是越长越好,应当选择精炼的意义明确的名字。 必要时可使用缩写名字,但这时要注意缩写规则要一致。 要给每一个名字加注释。 在一个程序中,一个变量只应用于一种用途。,夹在程序中的注释是程序员与日后的程序读者之间通信的重要手段。 注释决不是可有可无的。 一些正规的程序文本中,注释行的数量占到整个源程序的1/3到1/2,甚至更多。 注释分为序言性注释和功能性注释

5、。, 程序的注释,序言性注释通常置于每个程序模块的开头部分,它应当给出程序的整体说明,对于理解程序本身具有引导作用。 序言性注释包括: 程序标题; 有关本模块功能和目的的说明; 主要算法说明:算法概要、大意; 接口说明:包括调用形式,参数描述,子程序清单; 有关数据描述:重要的变量及其用途,约束或限制条件,以及其它有关信息; 模块位置:在哪一个源文件中,或隶属于哪一个软件包; 开发简历:模块设计者,复审者,复审日期,修改日期及有关说明等。,序言性注释,功能性注释嵌在源程序体中,用以描述其后的语句或程序段是在做什么工作,或是执行了下面的语句会怎么样,而不要解释下面怎么做。 要点 描述一段程序,而

6、不是每一个语句; 用缩进和空行,使程序与注释容易区别; 注释要正确。 例如: /* ADD AMOUNT TO TOTAL */ TOTAL = AMOUNTTOTAL 上面注视不清楚,如果注明把月销售额计入年度总额,便使读者理解了下面语句的意图: /* ADD MONTHLY-SALES TO ANNUAL-TOTAL */ TOTAL = AMOUNTTOTAL,功能性注释,恰当地利用空格,可以突出运算的优先性,避免发生运算的错误。例如 ,将表达式 (A17)ANDNOT(B49)ORC写成 (A17) AND NOT (B49) OR C 自然的程序段之间可用空行隔开; 移行也叫做向右缩

7、格。它是指程序中的各行不必都在左端对齐,都从第一格起排列。这样做使程序完全分不清层次关系。 对于选择语句和循环语句,把其中的程序段语句向右做阶梯式移行。使程序的逻辑结构更加清晰。,例如,两重选择结构嵌套写成下面的移行形式,层次就清楚得多。 IF() THEN IF() THEN ELSE ENDIF ELSE ENDIF, 视觉组织:使用空格、空行和移行,数据说明指程序中用到的常量、变量、文件等数据对象的定义。 在设计阶段已经确定了数据结构的组织及其复杂性。在编写程序时,则需要注意数据说明的风格。 为了使程序中数据说明更易于理解和维护,必须注意以下几点: a. 数据说明的次序应该标准化。有次序

8、易查阅,能加速测试、调试和维护的过程。 b. 当多个变量名在一个语句中说明时,应该按字母顺序排列这些变量。 c. 如果设计时使用了一个复杂的数据结构,则应该用注解说明用程序设计语言实现这个数据结构的方法和特点。,(2) 数据说明,数据说明的次序,数据说明 常量说明 简单变量类型说明 数组说明 公用数据块说明 所有的文件说明,数据类型说明 整型量说明 实型量说明 字符量说明 逻辑量说明,数据说明有次序易查阅,能加速测试、调试和维护的过程。,变量名按字母顺序排列,b. 当多个变量名在一个语句中说明时,应该按字母顺序排列这些变量,便于查找。 例如,把 integer size, length, wi

9、dth, cost, price 写成 integer cost, length, price , size, width,(3)语句构造,AI = AIAT; AT = AIAT; AI = AIAT;,WORK = AT; AT = AI; AI = WORK;,构造语句时应该遵循的原则是,每个语句都应该简单而直接,不能为了提高效率而使程序变得过分复杂;也不要刻意追求技巧性,使程序编写得过于紧凑。,例:语句构造,int i,j; for ( i = 1; i = n; i+ ) for ( j = 1; j = n; j+ ) Vij ( ij ) * ( ji ),for ( i1; i

10、 = n; i+ ) for ( j1; j = n; j+ ) if ( i = j ) Vij 1; else Vij 0;,有助于使语句简单明了的规则,不要为了节省空间而把多个语句写在同一行; 尽量避免复杂的条件测试; 尽量减少对“非”条件的测试; 避免大量使用循环嵌套和条件嵌套; 利用括号使逻辑表达式或算术表达式的运算次序清晰直观。,例:使用not(!)操作的例子 将 if ( !( char0 | char 9 ) ) 改成 if ( char = 0 */ INTERFACE RETURES average, total.input, total.valid; INTERFACE

11、ACCEPTS value, minimum, maximum; TYPE value1100 IS SCALAR ARRAY; TYPE average, total.input, total.valid; minimum, maximum, sum IS SCALAR; TYPE i IS INTERGE; 1 i=1; total.input=total.valid=0; sum=0; 2,3 DO WHILE valuei-999 AND total.inputminimum AND valuei0 11 THEN average=sum/total.valid; 12 ELSE av

12、erage=-999; 13 ENDIF END average,图7.6 求平均值过程的流图,求平均值过程的PDL,例:求平均值过程第二步:求环形复杂度,环形复杂度 =边数-节点数+2 =17-13+2 =6,例:求平均值过程第三步:求独立路径集,由于环形复杂度为6,因此最多有6条独立路径: 路径1:1-2-10-11-13 路径2:1-2-10-12-13 路径3:1-2-3-10-11-13 路径4:1-2-3-4-5-8-9-2- 路径5:1-2-3-4-5-6-8-9-2- 路径6:1-2-3-4-5-6-7-8-9-2- 注意:下一条路径应至少包含前面路径中没有出现的一条新边。,例

13、:求平均值过程第四步:设计测试用例,路径1:1-2-10-11-13 输入: valuek=有效输入k100,即有效输入多于100个。 预期结果:前100个有效输入的正确的平均值和总和。 路径4:1-2-3-4-5-8-9-2- 输入:valuei=有效输入,imaximum,ki。即有值过大的无效输入。 预期结果滤除了过大值的正确的平均值和总和。 路径6:1-2-3-4-5-6-7-8-9-2- 输入: valuei=有效输入,i100; 预期结果:正确的平均值和总和。,valuei-999,AND total.input100,total.valid0,valueiminimum,AND

14、valueimaximum,2. 条件测试,方法概述 条件测试是基于程序中的条件来设计测试用例的一种控制结构测试方法,是对基本路径测试技术的补充。 该方法首先找出被测程序中的所有逻辑条件(分支语句、循环语句中的条件),在将复合条件分解成简单条件(布尔变量、关系表达式),然后设计测试用例覆盖所有简单条件的取值及可能的构成复合条件的组合值。 覆盖能力 条件测试的着重点是测试程序中的每个条件,测试用例应覆盖每个条件的各种取值和组成复合条件的简单条件的各种组合取值,可实现判定/条件覆盖、条件组合覆盖。,条件表达式概念,条件表达式 条件表达式由布尔变量、关系表达式、布尔运算符、括号(改变计算优先序)组成

15、,其计算结果的取值为“真”或“假”。又称为逻辑表达式。 布尔表达式 由布尔变量和布尔运算符构成的表达式(不包含关系表达式),其计算结果的取值为“真”或“假”。 布尔常量:“真”(T)、“假”(F); 布尔变量:取值为“真”或“假”的变量。 布尔运算符:OR(|)、AND( =1时测试员甲发现的错误数为B1; =1时测试员乙发现的错误数为B2; =1时两个测试员发现的相同错误数为bc。 假定测试员乙发现有标记错误和发现无标记错误的概率相同,则可估计出测试前程序中的错误总数为 B0 =(B2/bc)B1(7.8),本章小结,实现 包括编码和测试两个阶段。 编码 编码是将设计结果翻译成程序(某种程序

16、语言编写)。 编码风格对软件的可读性、可维护性、可靠性、可用性很重要。 编码风格包括:良好的文档(注释)、数据说明、语句构造、输入输出和效率保障等。 测试 测试是主要任务是发现错误并改正错误,保证软件的可靠性。 两类基本测试方法:白盒测试和黑盒测试。 测试的过程包括:单元测试(模块)、子系统测试(子系统集成)、系统测试(确认需求)、验收测试(用户参与)、平行运行(试运行)。 白盒测试技术:逻辑覆盖测试(语句、判定、条件、判定/条件、条件组合;点、边、路径)、控制结构测试(基本路径、条件、循环)。 黑盒测试技术:等价划分、边值分析、错误推测。 调试 寻找错误原因和确定出错位置:蛮干法、回溯法、原

17、因排除法(对分法、归纳法、演绎法)。 软件可靠性 软件可靠性定义 软件可用性定义 稳态可用性Ass估算 平均无故障时间MTTF估算 错误数估算方法:植入错误法、分别测试法(标记错误),习题7,1. 下面给出的伪码中有一个错误。仔细阅读这段伪码,说明该伪码的语法特点,找出并改正伪码中的错误。字频统计程序的伪码如下:,习题7(续),2. 研究下面给出的伪码程序,要求: (1) 画出它的程序流程图。 (2) 它是结构化的还是非结构化的?说明理由。 (3) 若是非结构化的,则 (a) 把它改造成仅用3种控制结构的结构化程序; (b) 写出这个结构化设计的伪码; (c) 用盒图表示这个结构化程序。 (4

18、) 找出并改正程序逻辑中的错误。 3. 在第2题的设计中若输入的N值或KEYWORD不合理,会发生问题。 (1) 给出这些变量的不合理值的例子。 (2) 将这些不合理值输入程序会有什么后果? (3) 怎样在程序中加入防错措施,以防止出现这些问题?,习题7(续),4. 回答下列问题。 (1) 什么是模块测试和集成测试?它们各有什么特点? (2) 假设有一个由1000行高级程序设计语言(如FORTRAN )语句构成的程序(经编译后大约有5000条机器指令),估计在对它进行测试期间将发现多少个错误?为什么? (3) 设计下列伪码程序的语句覆盖和路径覆盖测试用例:,习题7(续),5. 某图书馆有一个使

19、用CRT终端的信息检索系统,该系统有下列4个基本检索命令。要求: (1) 设计测试数据以全面测试系统的正常操作; (2) 设计测试数据以测试系统的非正常操作。,习题7(续),6. 航空公司A向软件公司B订购了一个规划飞行路线的程序。假设自己是软件公司C的软件工程师,A公司已雇用自己所在的公司对上述程序进行验收测试。任务是,根据下述事实设计验收测试的输入数据,解释选取这些数据的理由。 领航员向程序输入出发点和目的地,以及根据天气和飞机型号而初步确定的飞行高度。程序读入途中的风向风力等数据, 并且制定出3套飞行计划(高度,速度,方向及途中的5个位置校核点)。所制定的飞行计划应做到燃料消耗和飞行时间

20、都最少。,习题7(续),7. 严格说来,有两种不同的路径覆盖测试,分别为程序路径覆盖和程序图路径覆盖。这两种测试可分别称为程序的自然执行和强迫执行。所谓自然执行是指测试者(人或计算机)读入程序中的条件表达式,根据程序变量的当前值计算该条件表达式的值(真或假),并相应地分支。强迫执行是在用程序图作为程序的抽象模型时产生的一个人为的概念,它可以简化测试问题。强迫执行的含义是,一旦遇到条件表达式,测试者就强迫程序分两种情况(条件表达式的值为真和为假)执行。显然,强迫执行将遍历程序图的所有路径,然而由于各个条件表达式之间存在相互依赖的关系,这些路径中的某一些在自然执行时可能永远也不会进入。 为了使强迫

21、执行的概念在实际工作中有用,它简化测试工具的好处应该超过它使用额外的不可能达到的测试用例所带来的坏处。在绝大多数情况下,强迫执行的测试数并不比自然执行的测试数大很多,此外,对强迫执行的定义实际上包含了一种技术,能够缩短在测试含有循环的程序时所需要的运行时间。 程序的大部分执行时间通常用于重复执行程序中的DO循环,特别是嵌套的循环。因此必须发明一种技术,使得每个DO循环只执行一遍。这样做并不会降低测试的功效,因为经验表明第一次或最后一次执行循环时最容易出错。,习题7(续),Laemmel教授提出的自动测试每条路径的技术如下。 当编写程序时每个DO循环应该写成一种包含测试变量T和模式变量M的特殊形

22、式,因此 DO I= 1 TO 38 应变成 DO I=1 TO M*38+(1-M)*T 可见,当M=0时处于测试模式,而M=1时处于正常运行模式。当处于测试模式时,令T=0则该循环一次也不执行,令T=1则该循环只执行一次。 类似地应该使用模式变量和测试变量改写IF语句,例如 IF X+Y0THEN Z=X ELSEZ=Y 应变成 IF M*(X+Y)+T0THEN Z=X ELSE Z=Y,习题7(续),正常运行时令M=1和T=0,测试期间令M=0, 为测试THEN部分需令T=+1,测试ELSE部分则令T=-1。 要求: (1) 选取一个包含循环和IF语句的程序,用Laemmel技术修改这个程序,上机实际测试这个程序并解释所得到的结果。 (2) 设计一个程序按照Laemmel技术自动修改待测试的程序。利用这个测试工具修改上一问中人工修改的程序,两次修改得到的结果一致吗? (3) 怎样把Laemmel技术推广到包

温馨提示

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

评论

0/150

提交评论