实现
编码注意事项
● 写程序前先简化算数表达式和逻辑表达式,并用括号使逻辑表达式和算术表达式次序清晰
● 尽量避免大量使用镶套结构,仔细研究镶套循环,以确定是否存在有语句可以从内层往外移
● 不要节约空间而把多个语句写在一行中
● 尽量避免复杂的条件测试,减少对非条件的测试
● 尽量避免使用多维数组,指针和复杂的表
● 使用执行时间短的算数运算
● 尽量使用整数运算和布尔表达式,不要混合使用不同的数据类型
输入输出
1、所有输入输出都应该有缓冲,以减少用于通信的额外开销
2、对二级存储(如磁盘)应选用最简单的访问方式
3、二级存储器的输入输出应该以信息组为单位进行
4、如果超高效的输入输出很难被人理解,则不应该采用这种方式
5、设计良好的输入报表,保持输入格式简单
6、使用数据结束标记,不要要求用户指定数据数目
测试
测试步骤
● 模块测试
● 子系统测试
● 系统测试
● 验收测试
在测试的类型上有以下几种
● 回归测试:把现在的软件测试结果和上个版本的测试结果做比较看有没有退步
● 功能测试:侧重于系统功能测试,看是不是达到了用户的要求
● 单元测试:针对每个相对独立的模块的测试,在软件的层次上看该模块能否完成设计要求
● 负载测试:在整个系统在大负载仿真条件下,测试系统的实际能力
● 验收测试:测试的不只是功能问题,还有许多细节问题
单元测试重点
● 先判断功能是不是错误引起(如舍入误差就不是由错误引起的)
● 模块接口:模块接口测试主要检查下述几个反面-参数数目,次序,属性,单位系统与单元是否保持一致;是否修改只作输入用的变元;全局变量的定义和用法在各个模块中是否一致
● 局部数据结构
● 重要执行通路:在测试期间选择最有代表性,最可能发现错误的执行通路进行测试十分关键
● 出错处理通路:
● 对错误的描述是难以理解
● 记下错误与实际遇到的错误不同
● 在对错误进行处理之前,错误条件已经引起系统干预
● 对错误的处理不正确
● 描述错误的信息不足以帮助确定造成错误的位置
调试途径
● 蛮干法:仅当所有其他方法都失败了得情况下才用
● 回溯法:从症状发现地方开始,人工沿着程序的控制流往回追踪分析源程序代码,知道找到错误为止,调试小程序最有效的方法
● 原因排除法:
● 对分查找法:如果已经知道每个变量在程序内的若干个关键的正确值,则可以用赋值语句或输入语句在程序中的附近注入这些变量的正确值,然后运行程序并检查所得到的输出
● 归纳法:是从个别现象推断出一般性结论的思维方式,使用这种调试程序时,首先把和错误有关的数据组织在一起分析,以便发现错误原因
● 演绎法:从一般原理或前提出发,经过排除和精华的过程推导出结论,采用这样的方法,首先设想出所有可能出错的原因,然后试图用测试来排除每一个假设的原因
两个重要测试技术
白盒子技术
目的:
在测试者完全知道程序的结构和处理算法.按照程序内部的逻辑测试程序,检测程序中的主要执行通路是否都能按照预定的要求工作.又称机构测试.
逻辑测试的覆盖种类:
● 语句覆盖: 至少每个语句都应该执行一次.
● 判断覆盖: 每种判断的每种可能的结果都因该至少执行一次.也就是每个判断的分子都至少执行一次.
● 条件覆盖: 每个判断表达式的每个条件都取到各种可能的结果
● 判定条件覆盖: 有时候判断覆盖不一定包含条件覆盖,条件覆盖不一定包含判断覆盖.所以为了满足两种覆盖出现了这个覆盖.
● 条件组合覆盖: 选取足够多的测试数据,使的每个判断表达式中条件的各种可能组合都至少出现一次.
● 路径测试:选取足够多的测试数据.使程序的每条可能路径都被执行一次.
● 其他覆盖: 点覆盖/边覆盖
三种基本测试:
● 基本路径测试步骤:
● 根据过程设计结果画出相应的流图
● 计算流程图的复杂度
● 确定线独立路径的基本集合
● 条件测试:
● 每个判断的分子都至少执行一次
● 每个判断表达式的每个条件都取到各种可能的结果
● 如果条件不正确,则至少条件的一个成分不正确
● 布尔运算符错
● 布尔变量错
● 布尔括弧错
● 关系算符错
● 算数表达式错
● 循环测试:
● 简单循环:
● 跳过循环
● 只通过一次循环
● 通过两次循环
● 通过m次循环(m<n-1)
● 通过n-1次循环,通过n次循环,通过n+1次循环(n最大允许循环数)
● 镶套循环:
● 从最内层循环开始测试,把其他循环都设置为最小值
● 对最小层实行简单循环测试,而外层循环的迭代参数(如循环计数器)取最小值,并为一些越界值.
● 由内向外,对下一个循环进行测试,但保持所有其他外层循环为最小值。
黑盒子技术
特点:
完全不考虑程序内部结构,只检测程序功能是不是正常,是否适当地接受输入数据并产生正确的输出信息,运行时是不是能保持外部信息的完整性
力图发现的错误类型:
● 功能不正确或遗漏功能
● 界面错误
● 数据结构错误或外部数据库访问错误
● 性能错误
● 初始化和终止错误
设计黑盒子方案时应该考虑的问题:
● 怎样测试功能有效性
● 哪些类型的输入可构成好的测试用例
● 系统是否对特定的输入值特别敏感
● 怎样划定数据类的边界
● 系统能承受什么样的数据率和数据量
● 数据的特定组合将对系统运行产生什么影响
黑盒子技术测试的标准:
● 测试用例要少但合理测试所需要设计的测试用例数
● 测试用例能指出某些类型的错误,而不是单单指出与特定测试相关的错误是否存在
等价划分:
● 解释:
● 把程序的输入域划分成若干个数据类
● 等价划分的六条经验:
● 如果规定了输入值范围,可分输入在范围类,和输入值小于范围或大于范围
● 如果规定了输入数据的个数,分输入个数在个数内,在个数外,和等于个数
● 如果如果规定了输入数据的一组值,而程序对不同输入值做不同处理,则每个允许的输入值是一个划分,不输入是一个划分
● 如果规定输入数据必须遵循规则,则分为符合规则输入与各种不同角度不符合规则的无效输入
● 如果输入为整形,可分为正整数,零,负整数
● 如果程序的处理对象是表格,则分为用空表格,含一项或多项的表格
● 等价设计方案的主要两步骤:
● 尽可能多覆盖未覆盖的等价有效输入值,重复到有效等价输入值都被覆盖
● 尽可能多覆盖未覆盖的等价无效输入值,重复到无效等价输入值都被覆盖
边界值分析:经验表明,处理边界情况时程序最容易发生错误
● 使输出刚好等于有效范围的最小值
● 使输出刚好等于有效范围的最大值
● 使输出刚好小于有效范围的最小值
● 使输出刚好大于有效范围的最大值
在改正错误前软件工程师应该仔细考虑的问题
● 是否相同错误在程序其他什么地方?
● 修改后是否会引入新的错误?
● 为防止以后这类错误该如何做?