




已阅读5页,还剩28页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第五章测试和调试 系统缺陷 1994年 美国数学家托马斯 奈斯利 发现Pentium处理器计算浮点数除法存在缺陷 FDIVBug 3145727 4195835 3145727的计算结果是4195579 而不是4195835 Intel大量回收1994年12月之前生产的第一代Pentium产品 4 75亿美元的赔偿款 千年虫 二十世纪六 七十年代 存储设备非常昂贵的采用两位而不是四位数字表示年份 一个图书馆计算机系统一位读者在1999年12月1日借了一本书 992000年 这位读者还书时 系统判断是否超期 关于日期的运算发生错误 系统运行出现问题 2000年问题 千年虫 据统计 全世界为解决 2000年问题 花出的费用超过数亿美元 缺陷 测试 调试 程序中的错误 缺陷 bug 找出缺陷的过程 测试去除错误的过程 调试 debug 在程序被投入使用之前 必须尽可能的进行彻底测试和调试 几乎每个大型程序都存在一些缺陷测试工作往往会带来很高的时间和经济成本 有调查显示 一个熟练的程序员花在调试代码上的时间和花在写程序上的时间一样多 许多大型软件项目开发都会延期 并且严重超出预算 其中一个重要原因就是软件中的缺陷 需要一些构建程序的更好的办法 使得在测试之前就能避免问题或者发现问题 15 6 错误类型 语法错误违反了编程语言有关规则编译器能够精确指出错误出现在哪一行语义及逻辑错误是指代码没有语法错误 可以运行 但是得不到正确的结果 需要跟踪程序的运行过程才能发现 15 7 语法错误 编译器报告的错误位置 有时会有偏离 编译器常常会针对某个错误 发出一系列的错误信息报告 常见的语法错误语句末尾漏写分号 使用未经声明的变量 括号不匹配 字符串没有结束符 赋值运算符左面不是变量 main intiintj for i 0 i 10 i j i 7 printf dx7 d n i j missingsemicolon 语义及逻辑错误 当程序在语法上是正确的 可以运行 却得不到正确的结果语义错误 程序的运行结果与程序员的期望不同逻辑错误 程序按照程序员所设计的有缺陷的算法运行 运行结果与程序员的期望相同 15 9 语义错误 往往由于对程序中的语义的理解与编译器理解的不同造成的 常见的语义错误赋值运算符与相等运算符用错 无限循环 在if while或for结构后面使用多余的分号 错误地使用了关系运算符 计算或将一个大类型的数转换成小类型时 数据的值超出了表示范围 运算符优先顺序错 else搭配不当 off by one 偏一 错误 通常指for循环的次数多或少一次 将无关代码放到循环体中 使用整数除法 main intiintj for i 0 i 10 i j i 7 printf dx7 d n i j missingbraces soprintfnotpartofif 15 10 逻辑错误 不正确的程序设计的结果 程序本身准确的按照程序员所设计的算法运行了 但是这种设计本身有缺陷 这种错误非常隐蔽 需要经过多次运行程序才会被发现 当它们被检测到并且被隔离后 仍然很难修复 在编写代码之前的设计阶段 通过规划 这种错误经常能够被减少甚至消除 2000年问题 15 11 逻辑错误 includeintmain intyear printf Inputayear i e 1996 scanf d 测试 一般说来 就是使用不同的输入组合进行试验 为了模拟在真实的情况下软件将要遇到的问题 对程序的输出结果进行正确性检查 现实世界中的软件在发布之前都需要经过无数次的试验 理想情况通过在所有可能的输入条件下 检查程序的操作 对其进行测试 实际情况对所有的输入情况进行测试是不可能的 示例 判断从A到B之间某个数字是不是素数A和B都是从键盘输入的整数 数值范围在 2147483648到2147483647之间 231 231 1 232 2种可能的输入组合一秒钟进行一百万次测试 需要50万年应该对哪些输入组合进行测试呢 随机的选择一些输入 能够揭示出这个程序的错误所在 测试 黑盒测试检查程序是否符合其规格说明白盒测试确保每一行代码都被测试过 黑盒测试 检查程序是否满足其输入和输出规格说明 只关心这个程序是做什么的 而不关心它是怎么做的 自动测试过程创建一个程序 可以自动运行被测试的程序 在运行中提供一些随机的输入 检查输出是否符合规格说明 然后重复这个过程 构建一个检查器程序 它与被测试的程序不同 但执行类似的计算 黑盒测试 不可能知道哪几行代码已被测试过 哪些还没被测试 任何一行没有经过测试的代码都可能是有错误的 当规格说明不是很具体的时候 有时很难使用 只能在软件完成时开始 为了被测试 软件必须被编译并且必须满足规格说明中的一部分 白盒测试 白盒测试的目标是保证每一行代码都要经过某个级别的测试 检查代码使用未经正确初始化的变量 变量是否被赋予不同类型的值 变量声明错误 类型 存储类 初始化 未引用过 模块中显示声明 计算错误 混合类型 溢出 除数为0 精度丢失 优先级比较错误 精度控制流程错误 无限循环 从不执行的循环 白盒测试 需要修改被测试的代码在代码中添加printf语句 以便观察内部变量的值 从而可以检查程序是否按照预期运行 断言 是一种普遍应用的白盒测试技术 断言 在程序中的特定部位 插入一些用来检测错误的代码 当检测到某个错误状态时 这些代码就会打印出一个警告消息 显示该状态的一些相关信息 或者使程序提前终止 在程序执行中使这些语句得以证实 从而使程序的运行特性得到证实 断言 示例 includeintmain intdividend intdivisor intresult printf Enterthedividend scanf d 6 21 调试 迷路时 怎么做 毫无目的地徘徊 希望找到回去的路回到一个 熟悉 的位置 然后 使用地图 根据地图提供的方向 不断的比较你所处的位置 从你看到的路标来断定 和地图所指的位置 直到到达你的目的地调试程序与之类似 留意你位于哪里 再比较一下你想去哪里 跟踪程序 跟踪已经被执行的代码以及每条语句执行后得到的结果 比较每条语句做了什么和期望要它做什么时 将会在程序中发现错误 15 22 调试技术 专门的技术查看源代码 源代码的区域很小而且对代码非常熟悉的话 就适合采用这种方法 在代码中插入一些语句 在执行期间输出相关信息 使用printf语句来输出那些被认为在找错误上有用的重要变量的值 在代码中不同的地方加入printf语句 以此来查看程序的控制流程是否正确运行 需要重新编译 执行插入的代码 bug includeintmain inti intn 6 intresult 1 for i 1 i n i result result i printf d n result for i 1 i n i result result i printf d n result 源水平调试器 源水平调试器 一个允许程序在一个可控的环境下执行的工具 在其中 程序的执行的所有方面都可以被程序员控制和检查 检查 检查 设置变量的值控制 跟踪 断点 单步执行允许一次执行程序的一条语句 并且可以检查变量的值等信息 断点 在程序执行的过程中 指定一些点 在这些点 程序可以被临时停止 检查或者修改程序的状态 在某个特定行添加一个断点 当执行到那一行时 程序的执行被及时冻结 检查所有的与程序有关的事物 断点 条件断点 只有当一个特定的条件成立时才暂停于某一行 对于隔离出那些被怀疑执行有错误的特定情况是非常有用的 观察点 在任意一个特定条件为真的地方都能使程序停止 例如 只要当变量i等于4时 程序就停止执行 调试器在任何使i等于4的语句处停止执行 观察点不是与代码的任何单独一行有关的 而是应用于每一行 单步 一旦调试器到达一个断点 它会临时挂起程序的执行 并等待下一条命令 从断点开始 一次处理一条语句 单步 执行当前的源代码行 然后再次将程序挂起 监视当前程序 检查变量的值确定程序的控制流程是否做了被期待做的事情 显示值 一般说来 在断点处可以检查程序的所有执行状态 使用鼠标在源代码窗口指向一个变量 使得弹出窗口显示这个变量的当前值 输入想要检查的变量名 溢出 includeintmain inti intn intresult 1 scanf d 正确编程 在错误还没成为错误之前 就能被捕获到 明确规格说明很多错误都源于不完善的程序规格说明 规格说明有时不能涉及所有可能的运行场景 因此就留下一些情况需要程序员来解释 需求模块化设计把简单的 预先测试过的和可以运行的组件构建为程序 函数和库设计 防御性程序设计 写注释写注释能让程序员对他写的代码进行
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年初级心理咨询师专业测试题库及答案解析
- 2025年火电运行值班员中级岗位竞聘面试题及应对策略
- 2025年仓储运输调度员招聘考试技巧与模拟题解析
- 2025年特岗教师招聘面试模拟题详解初中物理
- 2025年机械设计师高级专业知识点与模拟题
- 2025年建筑工程管理实务模拟考试题库及答案
- 2025年猪肉行业求职笔试模拟题及答案
- 2025年物业管理实务操作高级模拟题答案详解
- 2025年职业技能安全生产主要负责人烟花爆竹经营单位-金属非金属矿山(露天矿山)参考题库含答案解析
- 2025年特种作业类金属非金属矿山安全作业-金属非金属矿山井下电气作业参考题库含答案解析
- 医院护理管理课件
- 软件咨询面试题目及答案
- 2025年艾梅乙知识竞赛试题及答案
- 云南航空产业投资集团招聘笔试真题2024
- 2025年农产品质量安全追溯体系构建与农业供应链管理创新报告
- 临时救助政策解读
- 煤矿笔试题目及答案
- 2025年危化品经营单位安全管理人员培训全国考试题库(含答案)
- 广西统考卷(走到田野去)-2025年中考语文作文题解读
- 2025至2030年中国室内覆盖施工行业市场发展监测及投资战略咨询报告
- 《知识管理办法》
评论
0/150
提交评论