现代软件工程 第十三章 【软件测试】 练习与讨论

13.5.2  有错不改

果冻: 微软的产品经过这么多版本的不断完善,应该是把所有问题都搞定,“止于至善”了吧?

阿超: 那也不一定,在非常有名的电子表格软件Excel中,就有这样一个Bug:Excel 的日期计算功能认为1900年是一个闰年,这是不对的,但是它愣是一直没有改正这个错误。

众人: 真的?为什么屡教不改呢?

阿超: 故事是这样的,当时这类电子表格软件的市场领头羊是Lotus 1-2-3这一款软件。它的日期计算功能有一个Bug,就是把1900年当作闰年。这类软件在内部把日期保存为“从1900/1/1到当前日期的天数”这样的一个整数。Excel作为后来者,要支持Lotus 1-2-3的数据文件格式,这样才能正确处理别的软件产生的格式文件。于是,这个Bug就这么延续下来了,每一版本都有人报告,但是都没有改正。我们可以在Excel中试试看:

在任意格子(Cell)中输入“=DATE(1900,2,28)”,并且定义这个格子的格式为数字。大家可以看到数值变为59。表明1900/2/28是1900/1/1开始后的第59天。

输入“=DATE(1900,2,29)”,可以看到60!这是一个不存在的日期!

输入“=DATE(1900,3,1)”,数值是61,事实上,这应该是60。从这一天开始的所有日期都错了一天。

果冻: 还是可以抓住机遇,促成飞跃,在某一个版本彻底改好,不就是一个数字嘛。

阿超: 改这个问题,技术上一点问题都没有。但是在现实中会出现下列问题:

1)几乎所有现存文件的日期数据都要减少一天,所有依赖于日期的Excel公式也要做检查和修改。这在现实生活中是很难办到的。

2)Excel的日期问题解决了,但是其他软件还是有这个Bug,数据文件在不同软件中使用,就会有很头痛的兼容性问题。

总之,这个问题就这样一直留下来了。中间也有人想改过,你要注意看Excel的Options设置,就会发现有这样一个设置——使用1904年开始的日期计算系统(use 1904 date system)(如图13-9所示),但是一般的用户谁没事在这里打一个勾?

图13-9 Excel的Options设置

计算机程序在处理闰年这个问题上出现过很多bug,请看相关的博客:http://www.cnblogs.com/xinz/archive/2011/11/29/2267022.html

13.5.3  侵官之害甚于寒

昔者韩昭候醉而寝,典冠者见君之寒也,故加衣于君之上,觉寝而说,问左右曰:“谁加衣者?”左右对曰:“典冠。”君因兼罪典衣与典冠。其罪典衣,以为失其事也;其罪典冠,以为越其职也。非不恶寒也,以为侵官之害甚于寒。

——《韩非子·二柄第七》

九条: (来找阿超) 我最近新建了不少Bug,今天发现它们的状态都变成了closed,本来要测试的Bug 都变成了关闭状态,我还用测试么?

阿超: 是别的测试人员替你测试了么?

九条: 没有,从记录上看是果冻修改了这些缺陷,然后把状态变成resolved,过了两天他又把状态变成 closed,但是我还没有运行验证测试呢。

他们把果冻找来了。

果冻: 我是看着我的Bug 老是没有关闭,心里很着急,然后昨天我就认真地把所有Bug 都验证了一遍,确信没有问题后,就把它们顺手关闭了。

九条: 是不是你的领导在统计你的Bug 数目了?呵呵。

阿超: 不同的角色在开发过程中有相互合作、相互制约的作用,不能替代。测试人员在做验证测试时,需要做多方面、多平台的测试,这些工作量,也许远远超过了开发人员的能力范围。因此,必须要由测试人员来验证并处理已经修理好的Bug。

侵官之害甚于寒——我们不是不鼓励开发人员主动帮助测试,我们是要避免导致职责不清的越界行为。

果冻: 韩昭候真过分!我很好心地帮助别的同事,没有功劳也有苦劳,他怎么能说“甚于寒”?这样我的心都寒了。

阿超: 果冻,你不是有“各司其职”的笔记么,好好看看。

九条: 果冻,谢谢你的帮助,你如果急需验证某些问题,可以告诉我,我会安排尽量早日完成。

13.5.7  测试经验交流

测试进行了一段时间后,大家发现小飞报告的Bug比较多,九条其次,小燕最少。阿超让测试人员交流一下各自的经验。

小飞: 我的原则是“如果问题看起来像一个Bug,那我就要报告这个Bug”。宁可多报一千,也不放过一个。这个原则也导致了我的Bug 有不少被归为“As Design”。

阿超: “As Design”也不是什么坏事,至少我们明确了Design是什么。这样以后就有依据了。

小燕: 我发现了一个问题,都是先跑去找开发人员商量是什么情况。或者自己研究,想找到问题的根源,有时自己想到如何修复,之后再报告Bug。

九条: 小燕的做法,似乎越界到了开发人员的职责范围了。我们的职责就是找到足够多的Bug,让开发人员有事可干。

阿超: 可以选定一个典型用户(Persona),然后按照典型人物的思路和看问题的角度,把整个系统的各项功能都经历一遍。如果有什么你觉得典型用户不满意的,那就可以考虑开一个Bug。我有时知道这个功能的设计想法,但是在测试的时候没必要替别人考虑太多,要把自己当成用户,而不是设计者。

小飞: 测试的时候,要各个角度都试试看,一些犄角旮旯也得用一些随机的数据去捣捣乱。黑箱、白箱都可以换着玩。就像对软件一窍不通的用户在使用软件一样。

阿超: 小飞的这一个经验,用正式的语言描述就是——保证测试方法的多样化。

九条: 我拿到一个测试任务,就想——这个功能最可能出问题的会是在什么地方?然后就集中火力,在容易出问题的地方测试。比如,如果一个产品的标题长度规定是32个字符,那我就测试31、32、33个字符,看看在这种边界条件下是否会出问题。

小飞: 测试的时候还要举一反三,看到产品标题字段出了问题,我就会检查一下别的字段有没有类似的问题。

阿超: 对,我们要注重从产品的风险出发进行测试。还有,我们要根据当前的产品特性来决定测试的策略,不必强求一律,举一反三很重要。

小飞: 有时候我测试自己负责的功能比较多了,就想和别人换一换,有点新鲜感。不料小燕拒绝了我的交换请求,说是没经过领导批准,是侵官之害。我只好和九条交换。

阿超: 我批准这样的交换,关键是找到Bug。我们都是同一类工作人员,在事先通知和安排好的情况下,不存在“侵官之害”的问题。

小飞: 我发现随着Bug的增多,我既要验证以前的Bug,又要发现新的Bug,工作量越来越大,你们都是怎么做到的?

九条: 我一般都把一些比较稳定的测试写成自动测试,这样就减轻了我手工测试的压力。

13.5.8  传说中的拐点

小飞: 我听说在软件项目中,有这样一个拐点存在——在这一点之前,新的Bug产生的数量大于Bug解决的数量;在这一点之后,Bug的解决数量大于新的Bug产生的数量。这样Bug的曲线就向下移动。我们移山项目的拐点到了么?

阿超: 我也听说过,不过这是在大型复杂项目中,测试人员和开发人员全部通过一个系统管理bug才会出现的现象。我们不能等待拐点的到来,对于我们这样的日期驱动型的小项目,拐点必须在发布日之前的若干时间发生,如果我们的Bug数量还是继续向上攀升,则无法保证以后曲线会像悬崖一样掉下来。我们就得主动让拐点发生,例如推迟一些Bug,砍掉一些功能,慢慢升高“必须修复的小强”这个标杆,等等。

13.5.9  练习——学习和使用多个平台上的测试工具

在本章中,我们介绍了不少VSTS的 软件测试工具,请使用一些其他平台上的测试工具,并写博客介绍如何在你的项目中具体使用。

13.5.10  历史上的20 大bug

    http://www.devtopics.com/20-famous-software-disasters/

    http://www.devtopics.com/20-famous-software-disasters-part-2/ 

    http://www.devtopics.com/20-famous-software-disasters-part-3/ 

    http://www.devtopics.com/20-famous-software-disasters-part-4/ 

如果你在这些项目中负责测试工作,你要设计什么样的测试用例才能发现这些bug?  还有什么样的改进能避免bug 的发生?

丰田公司是一个世界著名的汽车公司,汽车上有不少软件,有些软件对行车安全起着至关重要的作用,这些软件有bug么? 请看这个报道:

  http://www.safetyresearch.net/blog/articles/toyota-unintended-acceleration-and-big-bowl-%E2%80%9Cspaghetti%E2%80%9D-code

技术分析:

  http://www.safetyresearch.net/Library/BarrSlides_FINAL_SCRUBBED.pdf 

13.5.11 历史悠久的bug

这是什么样的bug? 要过37 年才修复?

http://cvsweb.openbsd.org/cgi-bin/cvsweb/src/usr.bin/head/head.c?rev=1.18&content-type=text%2Fx-cvsweb-markup

http://cvsweb.openbsd.org/cgi-bin/cvsweb/src/usr.bin/head/head.c.diff?r1=1.17&r2=1.18&f=h

http://www.reddit.com/r/programming/comments/2ind4f/fix_a_37_year_old_bug_introduced_by_bill_joy_on/

源代码作者是 Bill Joy,  他最初写这个程序的时候犯错误了么?  还是因为外界的变化是原来没有bug 的程序产生了bug?

13.5.12 经验分享 - TPS 和 并发用户数

 http://hitest.aliyun.com/front/share/shareDetail.htm?spm=0.0.0.0.hoDObJ&shareId=194011410749727463

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/500372.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

现代软件工程 第十四章 【质量保障】 练习与讨论

15.3.1 有些成功人士或公司认为不需要独立的测试角色(Test),你怎么看? 我猜想和踢足球类似,还是那几个原因: 人太牛: 不世出的天才,例如高德纳写书时发现排版软件不好用,就自己写了一个。也没听…

现代软件工程 第十五章 【稳定和发布阶段】练习与讨论

15.3.0 案例分析 可以看看这两个学生项目的例子,推断出这些团队的血型: STG游戏的跳票(为了完美,推迟了7天,但是7天之后也没有发布……) [i] 英语学习软件(说了“明早发布”,但是明早一直没到)[ii] 15.3.1 反动分子阿…

现代软件工程 第十六章 【IT 行业的创新】练习与讨论

16.6.0 Xerox Parc 的成功创新和推向市场的失败 http://research.microsoft.com/en-us/um/people/blampson/Slides/AltoAtPARCIn1970s_files/frame.htm http://research.microsoft.com/en-us/um/people/blampson/38-AltoSoftware/WebPage.html http://research.microsoft.com/…

感恩回馈——你评博客,我送好书

各位博客园的用户: 最近我的书《构建之法—现代软件工程》上市了,得到了不少读者和老师的好评,出版2个月即告重印。该书的相关信息参见豆瓣页面:http://book.douban.com/subject/25965995/ 《构建之法—现代软件工程》得以出版和畅…

《梦断代码》读后感 - 驱动,责任,交流,远虑

这三篇读后感原来发布在我自己申请的域名 yishan.cc 上面,后来这个域名被墙了。 (原文写于2008年12月) 几个星期前,我给《现代软件工程》课的每一个团队都发了一本 《Dreaming In Code》的中文版 《梦断代码》,要求写读后感。这本书讲了这样的…

软件工程练习:模块化,单元测试,回归测试,TDD

这是《构建之法》实战教学的一部分。适合作为同学们的第二个程序作业。 第一个程序作业: 请看 “概论” 一章的练习,或者老师的题目,例如这个。 作业要求: 软件工程的作业越来越有意思了, 我们在第一个作业中&#xff…

《构建之法》参考书和链接汇总

《构建之法》 参考书和链接汇总 参考书汇总 一些读者对《构建之法》引用过的参考书也感兴趣,因此我把所有参考书单独列出来。其实人大部分的思想都是受某些外部信息的启发影响而来,很多道理看似新颖,其实别人早就讲过了😀。这个参…

现代软件工程讲义 7 分析和设计方法

(这一节在第一版的 《构建之法》中没有, 是《构建之法》电子书(多看版), 和纸版书第二版中新增加的内容,纸版书第二版预计2015年6月出版) 11.1 分析和设计方法 我们写软件就是要解决用户的需求,我们需要表达和传递下面这些…

三周的 软件工程实践课 课程安排建议

不少学校想在暑期安排软件工程实践课, 在这么短的时间内要做到软件生命周期的完整体验是有很多挑战的,下面是一个建议: 软件工程课程设计 - 三周计划,10 次授课,10 次学生报告。 第一周,准备: 在…

现代软件工程讲义 源代码管理

【现代软件工程课件】 源代码管理 -- 以实践促进学习 移山软件学院的学生果冻问老师: 为啥需要源代码管理? 我自己写代码多爽,别人要,就用QQ 传过去好了。 老师问:原始人怎么建房子? 果冻:或者找一个洞&…

现代软件工程讲义 个人项目和结对项目练习 地铁

很多老师反映教软件工程和程序设计的时候没有合适的题目,《构建之法》提供了下面的题目,都是从简单的解题思路入手,逐步增量改进。学生们可以复习基本的编程技能,然后逐步加入模块化,文件处理,单元测试&…

最新软件工程总结,项目模板,软工作业下载

(改了标题吸引目标用户) 老师教课,学生上课,首先要讲明师生关系。 其次,就是要说明这门课的底线是什么。 我们假设所有人写作业都独立思考,认真实践,不断改进,勇于创新... 这个假设通常是不全面的&#xf…

C语言 教学实践建议

(编程/软件工程课程怎么教) 这是2016年秋季学期和北京工业大学耿丹学院合作教学的计划。这也可以用于其他学校的 C 语言课程。 2016级有四个班,每班大约 32 人,每班配有一个有一定实际工作经验的助教,配合老师把课教好。 C语言是一门基础课&…

团队项目建议 - 英语学习 App

在这几年推广《构建之法》软件工程教学的过程中,我看到很多老师在讲软件工程的时候,虽然讲了很多年,但是手头没有任何项目,学生或者现想(得到一些大而无当,无法在一学期内完成一个可用版本的项目), 或者抄袭…

结对和团队项目建议 - 黄金点游戏

故事看这里: 背景故事 (链接) 作业 这个游戏可以变成一个持续发展的团队项目: 1)在课堂上玩这个黄金点游戏,用Excel 纪录成绩。过渡到做成简单的单机版游戏,锻炼基本的编程能力 2)两人合作,做成简单的 client/server A…

个人和结对项目 - 英语单词词频统计

个人或结对编程项目 英语单词词频统计程序 (最新版本在这里) 实现一个命令行程序,支持几种模式下的单词词频统计 Implement a console application to tally the frequency of words under a directory. For all text files (file extension: "txt") unde…

个人或结对项目 - 动态显示程序运算的过程

现在网上有很多关于动态显示排序过程的小工具,小程序。 1) https://visualgo.net/sorting 2) http://jsdo.it/norahiko/oxIy/fullscreen 3) http://coolshell.cn/articles/4671.html 我们能否也做一些类似的工作呢? 在在这个作业中 (http:…

构建之法 第三版 17 章 部分草稿

构建之法 17 章  人&#xff0c;绩效和职业道德 (<构建之法> 第三版草稿) 2016/12/23 17.1 领导力 在软件开发过程中&#xff0c;有很多平等合作&#xff0c;但是也有上下之分的领导/被领导关系&#xff0c;即使都是平级的员工之间&#xff0c;也有老师傅/新人&#xf…

构建之法 第三版 第3章 部分草稿 (剪牦牛毛、老程序员去金融公司的故事)...

/* * 这是 《构建之法》 第三版的草稿 */ 3.2 软件工程中的几种思维误区 正如我们在第一章讲的那样&#xff0c;软件有很多特性&#xff0c;软件开发有它自己独特的规律&#xff0c;如果不了解这些特性&#xff0c;软件工程师就会产生不符合实际的想法&#xff0c;在开发过程中…

软件工程课的分数系统,和打分方法

考考考&#xff0c;老师的法宝&#xff1b;分分分&#xff0c;学生的命根。 以《构建之法》为核心的软件工程课已经在全国几十个学校开展了好几年&#xff0c;由于采用 Learning by doing (做中学) 的方法&#xff0c; 同学们通过实际的作业获得分数&#xff0c;逐渐累积并转换…