软件测试的艺术——学习笔记

来源:互联网 发布:淘宝智能仓库 编辑:程序博客网 时间:2024/05/18 02:21

软件测试是为发现错误而执行程序的过程

黑盒测试:穷举输入测试
白盒测试:穷举路径测试

软件测试的重要原则:
检查程序是否“未做其应该做的”仅是测试的一半,测试的另一半是检查程序是否“做了其不应该做的”

原则1:测试用例中一个必需部分是对预期输出或结果的定义
测试用例包括:
1.对程序的输入数据的描述
2.对程序在上述输入数据下的正确输出结果的精确描述。
原则5:测试用例的编写不仅应当根据有效和预期的输入情况,而且也应当根据无效和未预料到的输入情况。
主要的人工测试方法:
代码检查、走查以及可用性测试


代码检查错误列表总结(可以参考平时代码审查)

数据引用错误

1.是否有引用的变量未赋值或者未初始化?
2.下标的值是否在范围之内?
3.是否存在非整数下标?
4.是否存在虚调用?(既指针或引用变量的引用的内存单元是否已分配)
5.记录和结构的属性是否匹配?
6.索引或下标操作是否有“仅差一个”的错误?(数组从0开始)
7.继承的函数是否都被定义?


运算错误

1.是否存在非算术变量间的运算?
2.是否存在混合模式的运算?(int/float)
3.是否存在不同字长变量间的运算?
4.目标变量的大小是否小于赋值大小?(一直指长度或者取值范围,int与long)
5.中间结果是否溢出(上下)?
6.是否存在被0除?
7.变量的值是否超过了有意义的范围?(int型位数大于32)
8.操作符的优先顺序是否被正确的理解?(2*i/2==i?i如果为奇数?如果先执行除法?)
9.整数除法是否正确?


数据声明错误

1.是否所有变量都已声明?(int a)
2.默认属性是否被正确理解?(java中)
3.数组和字符串的初始化是否正确?
4.变量是否赋予了正确的长度、类型和存储类?
5.初始化是否与存储类相一致?
6.是否有相似的变量名?(一般是warning)


比较错误

1.是否存在不同类型变量间的比较?
2.是否存在混合模式的比较运算?
3.比较运算符是否正确?(至多,最少……)
4.布尔表达式是否正确?(与或非正确表达 c++中,&& || !)
5.布尔运算符的操作数是否是布尔类型的?比较运算符和布尔运算符是否错误的混在一起?(2>x>1 => x<2 &&x>1)
6.包含一个以上的布尔运算符的表达式,赋值顺序以及运算符的优先顺序是否正确?
7.!!编译器计算布尔表达式的方式是否会对程序产生影响?(if((x==0 && (x/y)>z) 有可能引起一个被0除的错误!!)


控制流程错误

1.是否所有的循环最终都终止了?
2.程序、模块或者子程序是否最终都终止了?
3.由于实际情况没有满足循环的入口条件,循环体是否有可能从未执行过?(是否这里会有疏漏?)
4.如果循环同时由迭代变量和布尔条件所控制,如果循环越界??
5.是否存在仅差一个的错误,off-by-one?
6.!是否存在不能穷尽的判断?


接口错误

1.被调用模块接收到的形参数量是否等于调用模块发送的实参数量?顺序是否正确?
2.实参的属性(类型和大小)是否与相应形参的属性相匹配?
3.如果调用了内置函数,实参的数量、属性、顺序是否正确?
4.是否有子程序改变了某个原本仅为输入值的形参?
5.如果存在全局变量,在所有引用它们的模块中,他们的定义和属性是否相同?


输入/输出错误

1.如果对文件明确声明过,其属性是否正确?
2.打开文件的语句中各项属性的设置是否正确?
3.格式规范是否与I/O语句中的信息相吻合?(属性)
4.是否有足够的可用内存空间,来保留程序将要读取的文件?
5.是否所有的文件都在使用之前打开了?
6.是否所有的文件都在使用之后关闭了?
7.是否判断文件结束的条件,并正确处理?(EOF)
8.对I/O出错情况如何正确处理?
9.程序是否正确处理类似于“File Not Found”这样的错误?


其他检查

1.程序或模块是否具有足够的鲁棒性?(输入的合法性)
2.程序是否遗漏某个功能?
3.如果程序编译通过,但计算机提供了一个或多个“警告”或“提示”信息,应对此逐一进行认真检查。“警告”信息指出编译器对程序某些操作的正确性有所怀疑;“提示”信息可能会罗列出没有声明的变量,或者是不利于代码优化的用法。

原创粉丝点击