缺陷和测试
缺陷
一个熟练的程序员花在调试代码上的时间和花
在写程序上的时间一样多
错误类型
语法错误
违反了编程语言有关规则
编译器能够精确指出错误出现在哪一行
语义及逻辑错误
没有语法错误,可以运行,但是得不到正确的
结果
“语义错误”
程序的运行结果与程序员的期望不同
“逻辑错误”
程序按照程序员所设计的有缺陷的算法运行,运行结
果与程序员的期望相同
语法错误示例
#include
int main() 缺少分号
{
int i
int sum = 0;
for (i = 1; i <= 10; i++)
sum = sum + i;
printf("sum = %d\n", sum);
}
常见的语法错误
声明、语句末尾漏写分号;
使用未经声明的变量;
括号不匹配;
字符串没有结束符;
赋值运算符左边不是变量;
… …
语义错误示例
#include
int main()
{
int i;
int sum = 0; 多余的分号
for (i = 1; i <= 10; i++);
sum = sum + i;
printf("sum = %d\n", sum);
}
常见的语义错误
赋值运算符与相等运算符用错;
无限循环;
在 if、while或for结构后面使用多余的分号;
错误地使用了关系运算符;
计算或将一个大类型的数转换成小类型时,数据的值超出了
表示范围;
运算符优先顺序错;
else搭配不当;
off-by-one (偏一)错误,通常指for循环的次数多或少一
次;
将无关代码放到循环体中;
使用整数除法;
……
逻辑错误
非常隐蔽,需要经过多次测试才会被发现
很难修复
逻辑错误示例
#include case 8: sum = sum + 31;
int main() case 7: sum = sum + 30;
{ case 6: sum = sum + 31;
int month;
case 5: sum = sum + 30;
int day;
case 4: sum = sum + 31;
int sum = 0;
case 3: sum = sum + 28;
case 2: sum = sum + 31;
printf ("Inp