- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
例2:单词计算问题 英文正文文件可看成是字符序列,空白字符(空格‘ ’、制表符‘\t’、换行符‘\n’)把序列分隔为一个个“单词”。要求写程序统计文件中的单词个数。 思考 中文的词可以用这种办法找出来吗? 拓展学习 学习中文分词知识及算法 * 8.4 程序测试和排错 * 分析问题 编制程序 编译 连接 调试运行 完成 调试中发现程序编写有错误,修改源程序 编译时发现程序有语法错误,修改源程序 连接时发现程序有错误,修改源程序 调试运行时发现问题分析设计有错误,重新分析问题 程序开发过程 * 8.4 程序的调试与排错 写好一个程序后,需要: 通过加工(编译和连接)产生可执行程序 运行它,提供数据进行试验,确认它确实满足要求 试验中常常会发现错误,需要设法排除 测试(testing):在完成一个程序或一部分程序,通过编译后试验性运行,仔细检查运行效果,设法确认该程序确实完成了所期望的工作。反过来说:测试就是设法用一些特别选出的数据去挖掘出程序里的错误 排错(debugging):在发现程序有错时,设法确认产生错误的根源,修改程序,排除这些错误的工作过程 * 测试的基本方法 测试时考虑的基本问题是提供什么样的数据,才可能最大限度地把程序中的缺陷和错误挖出来。 有两类确定测试数据的基本方式: 根据程序结构确定测试数据。这相当于把程序打开,根据其内部结构考虑如何检查它,设法发现其中的问题。这种方式称为白箱测试 根据程序所解决的问题去确定测试过程和数据,不考虑程序内部如何解决问题。这相当于把程序看作解决问题的“黑箱”,因此称为黑箱测试 * 白箱测试 考察程序内部结构及由此产生的执行流,选择数据使程序在试验运行中能通过“所有”可能出现的执行流程 复合结构只有一条执行流 “if (条件) 语句1 else语句2” 有两条可能执行流:条件成立时执行语句1;不成立时执行语句2。应设法提供测试数据,检验程序在这两种情况下都能正确工作 从本质上说“while (条件) 循环体”可能产生无穷多条执行流:循环体不执行,执行1次,执行2次,……。无法穷尽检查。常用方法是选择测试数据,检查循环的一些典型情况,包括循环体执行0次、1次、2次的情况,以及一些其他情况 其他结构可类似分析。要考虑程序中结构嵌套产生的组合流程 * 黑箱测试 考虑的不是程序内部结构(可能是别人的程序,结构不可知;即使可知也可能极其复杂,无法理解其所有的执行流),只考虑程序所解决问题的情况 例如,如果某函数只有一个int参数,可检查参数为0时结果是否正确,参数为1和-1时,2和-2怎么样等等 如果对函数有所了解,还应考查已知结果的明显情况。例如对求立方根函数,应先检查参数为0、1、-1、8、27等的情况,因为知道应该得到什么结果。确认这些情况都能正确工作后,再去检查一些一般性情况 * 测试与驱动程序 函数不是完整程序,怎样检查是否正确? 必须写临时主函数。测试用主函数(及辅助功能)称为驱动程序或者测试台。下面以测试立方根函数为例。 最容易想到的测试台可能是: #include stdio.h #include math.h double cbrt(double x) { … … } int main () { printf(%f\n, cbrt(1.0)); } 可检查发现语法错误等。 一个数据难以确认正确性,换数据需要改程序,麻烦。 让程序帮助多做些事情。例如: int main () { double x, y; while (scanf(%lf, x) == 1) printf(cbrt(%f) = %f\n,x,cbrt(x)); return 0; } 应该先试特殊情况和容易判断正误的情况: 0 cbrt(0.000000) = 0.000000 1 cbrt(1.000000) = 1.000000 27 cbrt(27.000000) = 3.000000 1000 cbrt(1000.000000) = 10.000000 100 cbrt(100.000000) = 4.641589 * 重复录入数据测试 可能觉得反复试验和判断正误也很麻烦。可以写: int main () { double x, y; ? for (x = -10.0; x = 10.0; x += 0.01) { y = cbrt(x); if (fabs(x - y*y*y) 1E-10) printf(Error: x=%f, cbrt(x)=%f\n, x, y); } printf(Test finished.\n); ret
您可能关注的文档
最近下载
- 资料潍柴再回首wp4wp6装配工艺.pptx VIP
- NiMnGa铁磁形状记忆合金本构关系:理论、模型与应用的深度剖析.docx
- 过敏性鼻炎的合理用药参考答案-执业药师继续教育.docx VIP
- 量表设计与分析.doc VIP
- 苏州大学《普通物理一下》20套期末考试复习题(含答案).pdf VIP
- 2025年江西陶瓷工艺美术职业技术学院单招笔试职业技能考核试题库含答案解析.docx VIP
- YOLOv11+SlowFast-工业生产中的高危动作识别系统开发.pdf
- 厦门市建设工程施工现场围挡图集(2021版).pdf VIP
- 食材临时订货配送方案.docx VIP
- 基于改进SlowFast算法与融合YOLOv8模型的危险行为识别技术研究.docx VIP
原创力文档


文档评论(0)