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

简介:

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






本文转自SoftwareTeacher博客园博客,原文链接:http://www.cnblogs.com/xinz/p/3856332.html,如需转载请自行联系原作者


目录
相关文章
|
6月前
|
安全 测试技术 持续交付
【软件工程】实用测试手册:软件工程中各种测试类型一览
【软件工程】实用测试手册:软件工程中各种测试类型一览
157 0
|
6月前
|
安全 测试技术 持续交付
软件工程之测试阶段
软件工程之测试阶段
168 0
|
存储 数据管理 人机交互
【软件工程】测试六
【软件工程】测试六
154 0
|
存储 运维 算法
【软件工程】测试三
【软件工程】测试三
155 0
|
算法 测试技术 开发者
【软件工程】测试二
【软件工程】测试二
170 0
|
2月前
|
小程序 测试技术 程序员
『软件工程12』软件工程实践方法——软件测试
该文章详细阐述了软件测试的重要性和基本原则,并按测试阶段顺序介绍了单元测试、集成测试、确认测试以及系统测试的具体内容和实施步骤。
『软件工程12』软件工程实践方法——软件测试
|
2月前
|
测试技术 持续交付 UED
软件测试的艺术与科学:平衡创新与质量的探索在软件开发的波澜壮阔中,软件测试如同灯塔,指引着产品质量的方向。本文旨在深入探讨软件测试的核心价值,通过分析其在现代软件工程中的应用,揭示其背后的艺术性与科学性,并探讨如何在追求技术创新的同时确保产品的高质量标准。
软件测试不仅仅是技术活动,它融合了创造力和方法论,是软件开发过程中不可或缺的一环。本文首先概述了软件测试的重要性及其在项目生命周期中的角色,随后详细讨论了测试用例设计的创新方法、自动化测试的策略与挑战,以及如何通过持续集成/持续部署(CI/CD)流程优化产品质量。最后,文章强调了团队间沟通在确保测试有效性中的关键作用,并通过案例分析展示了这些原则在实践中的应用。
71 1
|
4月前
|
敏捷开发 机器学习/深度学习 人工智能
探索式测试在现代软件工程中的实践与挑战
随着软件开发模式的迭代升级,传统的测试方法已不能完全满足快速变化的市场需求和敏捷开发的节奏。探索式测试作为一种灵活、启发式的测试实践,逐渐受到业界的关注。本文将深入探讨探索式测试的定义、特点及其在现代软件工程中的应用,并分析实施过程中可能遇到的挑战,旨在为软件测试人员提供一种创新的测试视角和方法。
|
5月前
|
SQL 存储 Java
程序技术好文:软件工程概论第一次课堂测试
程序技术好文:软件工程概论第一次课堂测试
28 0
|
测试技术 程序员
【软件工程】测试八
【软件工程】测试八
128 0