单元测试要点:
对每个需求进行测试,以便确保需求得到实现
对和设计有关程序进行测试以确保设计得到了实现
在详细测试的基础上对需求和设计测试增加基本测试
不完全测试
善于结构的测试
数据流测试(数据的状态:已定义数据、已使用数据、已无效的数据)
测试用例:
每个子程序的要求是否有自己的测试用例
子程序结构的每个部分是否都有自己的测试用例
程序中每一行代码都是否至少被一个测试用例所测试过,这是否由通过计算测试每一行代码所需的最少用例来确定的
所有定义,使用数据流路径是否被至少一个测试用例所测试过
代码是否被看起来不大正确的数据流模式所检查过,比如定义-定义,定义-退出,定义-失效
是否使用常见错误表以便编写测试用例来发现过去常出现的错误
是否所有得简单边界都得到了测试,最大最小或易混淆边界
是否所有复合边界都得到了测试
是否对各种错误类型的数据都进行了测试
是否所有典型的中间数都得到了测试
是否对最小最大正常配置进行了测试
是否测试了和旧数据的兼容性,是否所有保留下来的硬件、操作系统旧的版本,以及其他软件旧版本的接口都得到了测试
测试用例是否便于手工检查
结构错误 25%
数据错误 22%
功能实现错误 16
实现错误 10%
系统错误 9%
功能需求错误 8%
测试定义或执行 3%
系统、软件结构错误 2%
调试方法及步骤:
通过重复实验收集数据
建立假设以解释尽可能多的相关数据
设计实验以便证实或否定假设
证实或否定假设
按要求重复以上步骤
发现错误的方法:
使用所有数据建立假设
求精产生错误的测试用例
通过不同的方法再生错误
产生更多的数据以生成更多的假设
使用否定测试结果
提出尽可能多的假设
缩小可疑代码区
检查最近做过修改的代码
扩展可疑代码区
逐步集成
怀疑以前出过错的子程序
耐心检查
为迅速的草率的调试设定最大时间
检查一般错误
使用交谈调试法
中断对问题的思考
优秀集成的好处:
易于诊断错误
更少的错误
少量连接框架
在短期内形成首次可工作系统
短期的全面开发计划
良好的用户关系
增强信心
增加工作完成的机会
更可靠的预测计划
更准确的了解工程情况
提高代码质量
减少文件递增集成策略:
是否能辨别出程序或模块的最佳集成顺序
集成次序是否和结构次序相同,以致于结果程序只能在适当的时候被集成
易于故障诊断吗
是否需要最少的搭架程序
各部分间的接口是否已经被指定好了
功能与代码调整,从以下几点考虑提高效率:
程序设计
模块和子程序设计
操作系统相互作用
代码编译
硬件
代码调整程序设计代码调试技术:
1、循环:
避免开关
冲突
展开
循环内工作量的最小化
标志值
将最忙的循环放在里面
降低运算强度
2、逻辑:
知道答案时就停止判断
根据频率确定判断工序
查表法代替复杂判断
偷懒改进法
3、数据转换
尽量用整型数不用浮点数
尽量减少数组维度
减少数组访问
运用辅助索引
高速缓存运用
4、表达式
充分利用数学中的等价关系
运用强度削减
编译期间初始化
密切注意系统程序
正确使用常数类型
预先计算结果
消除常用的子表达式
修改程序:
每次改变都是按修改策略吗
变动是否彻底检查过了
软件是否做了重测试,确保修改未使性能变坏
修改是否提高了程序的内在质量
是否尽可能将程序拆分子程序从而模块化
是否尽可能较少了全局变量
是否改进了程序风格
如果为了共享代码,必须做些改动,是否考虑过共享代码在高层程序上而非在低层程序上
如此改动后,是否为以后的修改创造便利