软件工程导论第七章编码与实现

编码和测试统称为实现
编码:把软件设计结果翻译成用某红语言书写的程序
测试:软件测试的目的是在软件投入生产性运营前尽可能多的发现软件中的错误
程序设计语言:总共两大类:汇编语言和高级语言
高级语言分为: 基础语言、结构化语言、专用语言
选择一种编程语言的理论标准:
1.有理想的模块化机制
2.可读性好的控制结构和数据结构
3.便于调试和提高软件可靠性
4.编译程序发现程序错误的能力强
5.有良好的独立编译机制
考虑主要的实用标准:
系统用户要求、可以实用的编译程序、可以得到的软件工具、工程规模、程序员知识、软件的可移植性要求、软件的应用领域
7.2 软件测试基础
1.软件测试目标:
有关测试规则:
1.测试是为了发现程序中的错误而执行的程序的过程
2.好的测试方案是为了发现迄今为止尚未发现的错误的方案
软件测试准则
测试应该追溯到用户的需求、尽早和不断的测试、彻底测试的不可能、软件测试是有风险的行为、不是所有软件错误都能恢复、反向思维逻辑、由小到大的测试范围、避免检查自己的代码。
软件测试包括机器测试和(动态测试)()
测试方法
黑盒测试:也称作功能测试如果已经知道软件应该具有的功能,可以通过测试来检验是否每个功能都正常使用
白盒测试:也称结构测试,如果知道软件内部工作过程,可以通过测试来检验软件内部动作是否按照规格说明书的规定正常进行
软件测试步骤
1.模块测试:也叫做单元测试,把每个模块作为单独的实体进行测试
2.子系统测试:把经过单元测试的模块放在一起形成一个子系统来测试
3.系统测试:把经过子系统测试的子系统装配成一个完整的系统来测试
4.验收测试:把软件系统作为单一的实体进行测试(利用用户的实际数据测试)
5.平行运行:同时运行新开发的系统和即将被取代的旧的系统 利于比较两个系统的处理结果
单元测试(非常重要)
一般方法:
1.先通过编译系统检查并改正程序中的语法错误
2.用详细设计的模块作为指南,对重要的控制路径进行测试,便于发现内部的错误
单元测试重点!!!
1.模块接口:
应该对穿过模块的数据流进行检测(I/O参数值的个数,类型,次序、格式、文件的属性、操作是否正确),保证正确的输入输出
2.局部数据结构:数据说明是否正确、一致,变量及其初值定义是否正确等。
3.重要的执行路径:重要路径通常是指完成模块功能的主要路径,一般是控制结构。
4.出错处理通路:检查“错误处理程序”本身的错误。
5.边界条件:边界条件常包括循环边界,最大最小值、控制流中等于、大于、小于的比较值等。
3.代码审查
成员:组长,程序设计者、程序编写者、程序测试者
计算机测试:
1.驱动程序:
相当于一个“主程序”,用来把测试数据传送给被测试的模块,并打印有关结果(数据传输方)
2.存根程序:
用来替代被测试模块所调用的模块,相当于”虚拟子程序“(所测模块的被调用方)
设计驱动程序和存根程序原因:
所测试的 软件模块不是一个独立的系统,不能独立运行,需要依靠其他模块的调用或者需要调用其他模块
4. 集成测试:组装软件的系统化技术,将经过单元测试的 模块联系在一起进行测试
由模块组装成程序时的方法:
1.非渐增式测试方法:
先测试每一个模块,将测试后的模块按照设计要求放在一起结合成所需要的程序
2 .渐增式测试方法
每次增加一个待测试的模块,把它同已经测试好的模块结合起来进行测试,反复进行直到完成所 有的模块测试。
a .自顶向下集成:是一种递增的装配软件的方法,只需要存根程序不需要驱动程序
主要思想:从主控模块开始,沿软件的控制层次向下移动,逐渐把各模块结合起来
如何将模块结合起来:
(1)深度优先策略:先选择软件结构的一条主控制通路上的所有模块(按深度优先选择主通路)
(2)宽度优先策略:沿着软件结构水平的移动把处于同一层次的所有模块组装起来(按照宽度选 取主控制通路)
基本过程: 1.对主控模块进行测试,使用存根程序代替被主控模块所调用的模块
2.选定模块的结合方式(深度优先/宽度优先),每次结合一个模块就将一个实际模块代替一个存根程序(新结合的模块往往又需要新的存根程序)
3.每结合一个就测试一个模块
4.需要对已经结合的模块进行回归测试
5.重复第二部直到构成整个软件的结构

b. 自底向上集成:自底向上集成方法是从软件结构最底层模块开始进行组装和测试,与自顶向下相反需要驱动程序不需要存根程序
基本过程:1.把底层模块组合成实现一个特定软件子功能的族
2.为每个模块设计一个驱动程序作为测试的控制程序
3.对模块进行测试
4.用实际模块代替驱动程序,组成新模块的族,再加入新的驱动程序进行测试
5.重复第二步直到构成整个软件的结构

7.6 白盒测试
逻辑覆盖:
1.语句覆盖:设计的测试用例可以使程序中的每条语句至少执行一次
2.判定覆盖:选取足够的测试用例使得程序中的每个判断的可能的结果都至少执行一次,程序中每个判断的分支都至少执行一次
3.条件覆盖:选择足够多的测试用例使得程序中每个判定表达式的每个条件都取到各种可能的结果
tips:条件覆盖通常比判定覆盖强,但是条件覆盖不一定包含判定覆盖
4.判定/条件覆盖:选取足够多的测试用例使得同时满足判定覆盖和条件覆盖的要求

5.条件组合覆盖:
选取足够的测试用例,使得每个判定表达式条件的各种可能的组合都至少出现一次

若从对程序路径的覆盖程度分析,可提出一些逻辑覆盖标准
6.点覆盖 :选取足够的测试用例使得程序执行路径至少经过程序图中每个结点一次
7.边覆盖:选取足够的测试用例使得程序执行路径至少经过程序图中每条边一次
8.路径覆盖:程序中的每条路径都至少执行一次
加强版的测试数据:满足路径覆盖和条件组合覆盖

7.7黑盒测试技术:
1.等价划分:
1.思想: 将所有的输入数据(有效的和无效的)进行划分成若干类,假设拿出一个类中的代表值进行测试,等价于用该类中的所有值进行测试
2.步骤:
1. 划分等价类,
规则:给出一个范围则划分一个有效等价类,两个无效等价类
给出一组值,对输入的每个值有不同处理,则为n个值划分n个等价类,同时再分出一个无效等价类
2.确定测试用例
2.边界值分析法:
基本思想:选择等价类的边缘值作为测试用例,让每个等价类的边界值都得到测试,选择测试用例既考虑输入也考虑输出
边界值分析测试方法属于黑盒测试,在实际中经常把等价划分类和边界值分析技术结合使用,即使用等价类的边界值作为测试用例进行测试
3.错误推测:
列出程序中可能的错误和容易发生错误的特殊情况,根据这些情况选择特殊方案
4.实用测试策略
对软件系统进行测试时,应联合使用各种设计测试方案的方法,形成一种综合策略:
a.在任何情况下都应该进行边界值分析
b.必要时使用等价划分方法补充测试用例
c.必要时使用错误推测法补充测试方案
d.对照程序逻辑,检查出已经设计出的测试方案,根据程序的可靠性,采用不同的程序覆盖方案
5.调试
调试过程:

调试途径:
1.蛮干法: 打印内存中的内容,从中查找错误的线索,是效率最低的程序调试方法
2.回溯法:从发现问题的程序段开始人工的往回追踪分析程序代码,直到找到错误(debug)
3.原因排除法: 对分查找、归纳法、演绎法

6.软件可靠
1. 软件可靠性:程序在给定的时间间隔内,按照规格说明书的规定成功运行的概率
2. 软件的可用性: 程序在给定的时间点,按照规格说明书规定,成功运行的概率
3.可靠性和可用性的区别:可靠性是指在0-t内系统没有失败的概率,可用性是指0-t系统正常运行的概率




你可能感兴趣的:(软件工程,软件工程导论)