- 3
- 0
- 约7.87千字
- 约 8页
- 2018-08-28 发布于天津
- 举报
第l章假想的编译程序-Read
第1章 假想的编译程序
读者可以考虑一下倘若编译程序能够正确地指出代码中的所有问题,那相应程序的错误情况会怎样?这不单指语法错误,还包括程序中的任何问题,不管它有多么隐蔽。例如,假定程序中有“差1”错误,编译程序可以采用某种方法将其查出,并给出如下的错误信息
- line 23: while (i=j)
off by one error: this should be
又如,编译程序可以发现算法中有下面的错误:
- line 42: int itoa(int i, char* str)
algorithm error: itoa fails when i is -32768
再如,当出现了参数传递错误时,编译程序可以给出如下的错误信息:
- line 318: strCopy = memcpy(malloc(length), str, length);
Invalid argument: memcpy fails when malloc returns NULL
好了,要求编译程序能够做到这一程度似乎有点过分。但如编译程序真能做到这些,可以想象编写无错程序会变得多么容易。那简直是小事一桩,和当前程序员的一般作法真没法比。
假如在间谍卫星上用摄像机对准某个典型的软件车间.就会看到程序员们正弓着身子趴在键盘上跟踪错误;旁边,测试者正在对刚作出的内部版本发起攻击,轮番轰炸式地输入大量的数据以求找出新的错误。你还会发现,测试员正在检查老版本的错误是否溜进了新版本。可以推想,这种查错方法比用上面的假想编译程序进行查错要花费大得多的工作量、确实如此,而且它还要有点运气。
运气?
是的,运气。测试者之所以能够发现错误,不正是因为他注意到了诸如某个数不对、某个功能没按所期望的方式工作或者程序瘫痪这些现象吗?再看看上面的假想编译程序给出的上述错误:程序虽然有了“差1”错误,但如果它仍能工作,那么测试者能看得出来吗?就算看得出来,那么另外两个错误呢?
这听起来好象很可怕但测试人员就是这样做的大量给程序输入数据,希望潜在的错误能够亮相。“噢,不!我们测试人员的工作可不这么简单,我们还要使用代码覆盖工具、自动的测试集、随机的“猴”程序、抽点打印或其他什么的”。也许是这样,但还是让我们来看看这些工具究竟做了些什么吧!覆盖分析工具能够指明程序中哪些部分未被测试到,测试人员可以使用这一信息派生出新的测试用例。至于其它的工具无非都是“输入数据、观察结果”这一策略的自动化。
请不要产生误解,我并不是说测试人员的所作所为都是错误的。我只是说利用黑箱方法所能做的只是往程序里填数据,并看它弹出什么。这就好比确定一个人是不是疯子一样。问一些问题,得到回答后进行判断。但这样还是不能确定此人是不是疯子。因为我们没法知道其头脑中在想些什么。你总会这样地问自己:“我问的问题够吗?我问的问题对吗……”。
因此,不要光依赖黑箱测试方法。还应该试着去模仿前面所讲的假想编译程序,来排除运气对程序测试的影响,自动地抓住错误的每个机会。
考虑一下所用的语言
你最后一次看推销字处理程序的广告是什么时候?如果那个广告是麦迪逊大街那伙人写的,它很可能是这么说:“无论是给孩子们的老师写便条还是为下期的《Great American Novel》撰稿,WordSmasher都能行,毫不费劲!WordSmasher配备了令人吃惊的233000字的拼写字典,足足比同类产品多51000个字。它可以方便地找出样稿中的打字错误。赶快到经销商那里去买一份拷贝。WordSmasher是从圆珠笔问世以来最革命性的书写工具!”。
用户经过不断地市场宣传熏陶,差不多都相信拼写字典越大越好,但事实并非如此。象em、abel和si这些词,在任何一本简装字典中都可以查到、但在me、able和is如此常见的情况下您还想让拼写检查程序认为em、abel和si也是拼写正确的词吗?如果是,那么当你看到我写的suing时,其本意很可能是与之风马牛不相及的using。问题不在于suing是不是一个真正的词而在于它在此处确实是个错误。
幸运的是,某些质量比较高的拼写检查程序允许用户删去象em这类容易引起麻烦的词。这样一来,拼写检查程序就可以把原来合法的单词看成是拼写错误。好的编译程序也应该能够这样 ─── 可以把屡次出错的合法的C习惯用法看成程序中的错误。例如,这类编译程序能够检查出以下while循环错放了一个分号:
/* memcpy 复制一个不重叠的内存块 */
void* memcpy(void* pvTo, void* pvFrom, size_t size)
{
byte* pbTo = (byte*)pvTo;
byte* pbFrom = (byte*)pvFrom;
while(size--0);
*pbT
您可能关注的文档
- 新北新店区及人中学100学第二学期国三地科第二次段考试题卷.DOC
- 新店长经营思路汇报东盛.PPT
- 方向与导轨平面垂直.PPT
- 无机盐糖类脂质蛋白质.PPT
- 普通女西裤制作工艺十一.PPT
- 智能控制策略专家控制神经控制模糊控制学习控制递阶控制.PPT
- 曳引驱动杂物电梯自检报告.DOC
- 暨南大学博士硕士学位论文开题报告书-暨南大学MPAcc.DOC
- 最大稳定工作电流IZmax和最小稳定工作电流IZmin.PPT
- 最新版人教版九年级物理复习提纲.DOC
- 全过程工程管理造价咨询工程监理项目服务方案投标方案(技术部分).doc
- 招标代理服务投标技术服务方案(技术方案).doc
- AI大模型与AIGC技术在公安领域的应用解决方案(99页 PPT).pptx
- 工业4.0智能制造数字工厂规划方案.pptx
- 树立社会主义核心价值观.docx
- 三年(2023-2025)中考历史真题分类汇编(全国)专题21 科技文化与社会生活(解析版).docx
- 2025年中考道德与法治真题完全解读(吉林卷).pdf
- 2025年中考道德与法治真题完全解读(安徽卷).pdf
- 三年(2023-2025)中考历史真题分类汇编(全国)专题14 人民解放战争(解析版).pdf
- 三年(2023-2025)广东中考历史真题分类汇编:专题03 中国近代史(八年级上册)(解析版).docx
原创力文档

文档评论(0)