软件测试之旅,路漫漫,其修远兮,吾将上下而求索。 <<软测之魂>> 作者 擅长测试设计,嵌入式软件测试,测试自动化,测试体系建设,测试管理, 软件配置管理建设,医疗器械软件测试,教育。 新浪微博@Aullyxiao,邮箱aul516@126.com

发布新日志

  • 漏测一个提示界面,不仅损失158万

    2010-08-01 10:42:41Top 3 Digest 3

    漏测,这个词对于测试界的朋友来说,是最不想听到的一个词。尽管我们不太可能把软件中所有的bug都找出来,就开发人员不太可能开发出零bug的软件,但对测试人员提交给自己的bug常耿耿于怀。另外一方面,漏测与否一直以来是很多公司衡量一个测试人员工作质量的重要考核点。

    漏测,指测试人员测试通过的软件在后来被他人或自行发现仍存在bug,这种现象常被叫做漏测。由于软件的特殊性,漏测现象常发生,每发现存在漏测bug,相关测试与开发人员需要进行漏测分析,分析此bug的严重度,发生的概率,测试用例是否存在缺失,开发更改代码后的影响分析是否存在不足等。重要的是找出漏测的根源,提出改进的措施,避免同类问题反复出现。

    【案例】

    事情虽过去10多年了,但依然记忆犹新。那时笔者与一些测试同事一起工作在一家研发与生产PDA私营台资企业。一天早晨,老板一反常态地在他的办公室里与电话对方发生大声的争吵,最后非常生气地把电话挂掉了。接着,开发与测试主管被叫到他的办公室,

    办公室的门被关上了,他们在悄悄地商量着什么。后来,才知道我们已发布出去的软件,在法语版本上,有一个提示界面仍用英文显示着。测试漏测了,而这个点在用户试用现场,被用户发现了。我们听后都不相信这个事实,因为这个提示信息在常规操作中就能出现。问题已出来了,怀疑无济于事,开发与测试相关同事立即动手检查分析,最后开发定位到是由于有一个地方的处理用了HardCopy(硬拷贝),把英文字符串直接写在代码中了(据负责的工程师说,当时是为了调试的方便,后来在把字符串提取出来作为独立的资源文件时,漏了此字符串。后来对字符串资源进行本地化翻译时,也没有意识到此问题的存在。

    对于测试来说,是漏了这条用例,是用例设计的遗漏。

    查出问题的原因后,软件很快更改好了,测试复测,补丁版本当天即可以重新发布。然而,事情影响的严重性却超乎我们的意料。老板跟我们说,那家客户因为与其他代理商合同的原因,已不能接受我们的产品了,一个158万的单就此泡汤。一个单是小事,重要的是由它带来的负面影响是很难用短期的金钱来衡量的。这也许就是老板为什么会如此生气的主要原因吧。后来负责此模块的开发、测试人员受到通报批评,并扣除本季度全部奖金,相比之公司的损失,确实也算不了什么。

    第二天,老板把我们每一个测试人员叫到他的办公室,问及我们漏测的原因是否找出来了,对日后如何进行防范是否有什么措施。反思的过程中,觉得问题与我们现在的测试模式密切相关,我们没有用例,是在看着简单描述的需求来测试,时间长了,连需求都不看了(自认为需求记住了,看懂了)。平时测试完全是在一种随机测试(目前很多人把它叫做Ad hoc测试),无系统可言,测试者的想法及操作没有留下记录,俗话说“好记性不如烂笔头”,一段时间后,哪些路径测试过,哪些没有覆盖到,无从说起。最后导致一些业务流程被测试N遍,而有些用户场景却一次都没有遍历到,也是顺理成章的事。

    真佩服当时的老板,讨论解决办法的当时,亲自拿出一张A4空白纸,在上面写着一个个测试功能点,要求我们按照这种方法把各模块的功能点一个个列出来,测试过的则在旁边的小框内打钩。后来我们把它叫做测试checklist。回想起来,这虽然不是合格的测试用例,但比起原来拍脑袋式的随机测试,已向前跨了重要的一步。

     俗话说“失败是成功之母!”,但愿事例中的惨重代价对测试朋友有所启发与借鉴,把测试工作的核心--用例设计的工作做得更加扎实,为项目的测试成功打下坚实的基础。

     

  • 大型嵌入式软件的自动化测试

    2015-02-25 09:53:35Top 1 Digest 1

    医疗设备软件,属典型的大型嵌入式软件,对其进行自动化测试,一直以来是比较困惑我的。为什么呢?从事医疗设备软件的测试已有多年,在嵌入式软件的测试上前几年做过自动化测试,特成立一个项目的形式来做,花了4-5人月的时间,结果有但不太理想,只做了checklist的自动化测试。看了朱少民老师等翻译的《自动化测试最佳实践》,其中的“医疗设备软件需要优秀的自动化软件测试”,颇有同感。见如下几点:

    1、  选择最具有风险性和最关键的模块或特性

    2、  选择非常耗时的测试用例

    3、  选择正确的时机进行自动化测试

     

    避免使用自动化测试的地方

    硬件相关的特性或者在项目中期其需求还是不稳定的特性

     

    自动化的预期

    自动化测试的真正价值在于向我们证明在稳定的功能中没有引入新的bug

     

     

    疑问

    自动化用例与手动用例的对应关系,如何保证都转换了,覆盖了。

     

    自动化手工测试用例,如何保证转换率的(有没有漏掉手工用例,预期结果是否转换正确等)

  • 探索式测试应用—静置测试的故事

    2012-12-30 22:35:53Top 1 Digest 1

    人物介绍

    大户:MM精密仪器生产公司资深软件测试工程师,5年嵌入式软件测试经历,被测试实验室的同仁称为躺在家里睡觉也能发现Bug的大户,俗称“大户”。

     

    阿笑:某名校理工科研究生毕业,一年多软件测试经历,好学,积极,斗志昂扬,逢人便笑,俗称“阿笑”。

      

    故事前曲

    前几天,大户提交了一个让开发人员解决起来颇为棘手的深度Bug

     

    Bug描述的大意是:大户做了一次仪器静置的探索测试,把一台仪器打开,进入仪器的信息监控界面(监控仪器工作的温度,电流,电压,气压等),然后不操作仪器,即一直放着,72.5小时后,仪器自动上报“通信异常”,停止监控工作了,相当于监控系统瘫痪了。

     

    在共享的Bug库上,阿笑读后尽管明白了Bug单的意思,但犹如丈二金刚,摸不着头脑。表示惊叹之余,问着自己,这是属于什么测试方法,大户怎么就能发现这种让人出乎意料的深层问题呢?他是怎么思考的,这种测试点是如何得知的?……,抱着好奇,及对大户由来已久的技术倾佩,早就想找个机会向大户请教,指点迷津了。

     

    冬日的暖阳里

    今天,周六,虽是冬日,但属亚热带海洋性气候的深圳,依旧暖阳斜照,站在窗明机净的高层办公楼里,迎着透过茶色窗玻璃的斑驳暖阳,阿笑正傻傻的想着什么……

    突然,阿笑的视线中出现了一个熟悉的身影,让他不由自主的擦起了眼睛,生怕看错。你猜,阿笑看到了什么。

    哇噻!那不是大户吗,远远看有点点胖,但不墩,背着公文包正缓缓地走向办公楼。曾听同事提过大户一向在家度周末,贪睡,常足不出户,典型的新兴时代--宅男一号。今天突然出现在公司,定有文章吧。阿笑与大户虽属同一测试部门,但100多号人,分布在不同项目,平时难得在一起。

    嗨!请教的机会终于来了~~~,毕竟是周末,准会有空的时候,还是有希望的,~~~~~~,

    对,抓住机会,中午约大户一起吃饭,阿笑乐了起来,并打算马上行动起来。

     

    【约会那点事】

    (注:大户与阿笑在同一办公楼上班,但不同楼层,他们内部有QQ群,以下是QQ聊天记录。)

     

    阿笑:大户兄弟,久仰大名,平时工作日你太忙,未敢多打扰,今日周末,非常难得看到你。

    小弟对你提的那个静置测试的XXbug,几天了,一直云里雾里,特想中午与你一起吃饭,请教一下,不知是否方便。

    大户:那个XXbug,是碰巧,给遇上了,没什么技术含量的,呵呵!

    阿笑:我不信,为啥我遇不上,牛人就是谦虚呀!

    大户:小弟,沉住心,好好测几年,你准能遇上,哈哈……

    阿笑:谢谢大户的指导,但小生还是认为其中有因由,而不是谁都能碰上的,如果大户中午没空,我下次再请教吧;

    大户:看你多次找我问这问那,也是一片诚心,好学莫如你,中午1200!

    阿笑:J,马上回了一个笑脸,太有受宠若惊状,差点忘了约会地点;

    阿笑:立马补发“梦现时光屋”见(他们公司附近的一家咖啡屋),不见不散,J.

     

     

    【梦现时光屋】

    中午,1205,和熙的暖阳普照,位于素有深圳硅谷之称的南山高新产业园区的梦现时光咖啡吧里,大户与阿笑显得很普通,他们选择了吧里安静的一隅坐下。

    几分钟的寒喧后。

     

    大户:阿笑,像你这样85后的新生代,对工作上的问题那么执着,爱较真,打破沙锅问到底的人,很少了。

    阿笑:没有,没有,像大哥这样的聪明、经验丰富的测试技术牛人是什么时候都是少之又少。

    阿笑:不瞒你说,最近在XX项目的测试中,一直在学习James Whittaker<<探索式软件测试>>,并在项目团队内部进行了一次分享,其中提到的多种漫游测试方法,如卖点测试法,通宵测试法。但总觉得自已在使用时是依葫芦画瓢,没感到有什么特别的效果。

    大户:静静地专注地听着……

    阿笑:之前有不少同事提到你对探索式测试很有研究,做得特别好,前几天读了你提的关于静置测试的Bug,我想我是坚决想不出来这种测试场景的。很想知道在探索之前,你是如何思考、分析的,是什么原因导致你会想到如此出乎人意料的测试场景。

    大户:其实,一开始,我并没有想到要这样做。仪器的信息监控界面很特殊,当我第一次进入此软件界面时,发现数据在不断刷新,这些数据包括仪器的温度,电流,电压等。我很好奇,如这些温度,电流,电压值软件是如何获取的,软件与硬件又是如何交互的,硬件又是如何采集这些数据的,等等,一系列背后的原理我并不清楚。有了疑问并不可怕,怕的是没有疑问。于是找相关专业开发人员交流,找相关设计资料熟悉等,直到把软、硬一体化实现原理搞清楚。这个过程谓之测试对象分析。

    阿笑:全神贯注地听着,目不斜视地看着大户……

    大户:测试对象搞清楚后,再把分析思路写出来,当成一次小结,边写边思考,最后,从中提取出测试点与测试思路,包括一些测试方法。就这样,仪器信息监控测试对象分析完成后,知道了软件一旦进入此界面,是每隔1.5秒需去查询仪器的状态,即从指定地址读取这些状态值。上位机软件在不断读取这些数据时,下位机程序也在不断采集温度、电流、电压的信号,自动通过AD转换,把转换后的值保存在某寄存器中。整个过程需要板间串口通信来实现,而你知道,串口通信一般速度不会很快,于是自然想到连续长时间进行串口通信的情况下,软件是否会丢帧,数据是否有异常,存在异常的情况下,系统是否有容错等。一系列的问题自然奔出来,等着你验证。大户一边讲时,一边便拿出随身的IPad在画。下图便是上述边讲边画的仪器状态信息显示工作原理简图。

     

     

     

     

     

     

    阿笑:听着,看着,若有所思,若有所触……

     

    大户:其实我并无他人言传中的灵丹妙药,面对软件,软件中的显式或隐式的每一功能点,多思考,多给自己提一些疑问。释疑的过程就是探索的过程,这样你会发现测试很有趣。常常,想不发现bug都难。

    大户:好了,兄弟,最后送你一个不是灵丹妙药的妙药吧,我把这张图的思维导图给你,适用于任何测试对象的分析,测试点的提取,测试思路的形成,直到测试用例的设计。于是大户在原分析图上又加了几笔,便有了下面这张图。

     

     

    阿笑:沉浸在大户的精彩分享中…..,并笑着。

    大户:傻B,别笑了,要不要“真经”,快说下你的邮箱吧。

    阿笑:赶忙报上自己的邮箱……

     

     

     

     

  • 小议Bug敏感度(二)---如何提高Bug敏感度

    2012-12-02 17:17:03Top 1 Digest 1

    Bug敏感度与软件质量关系

     正如前面故事中提到,Bug敏感度高的测试人员,能在短时间内发现大量的Bug,从而在一定程度上提高软件的质量。从这个角度看,Bug敏感度与软件质量的关系是正相关的,如下图表示,即Bug敏感度越高,被揭露的Bug越多,对应模块或软件的质量相对越可靠。

     

     

    同理,Bug敏感度不高,必然就会造成一些Bug遗漏,提高了软件质量的风险系数,我们可用Y=-kX来表达这个意思,见下图。Bug敏感越差,遗漏的Bug越多,软件质量的风险就越大。

     

     

     

     

     

    但是软件质量的评价是一个复杂而多维度的,不仅仅与Bug敏感度有关系,还包括设计本身的约束、预防等先天因素。

     

      

    提高Bug敏感度的关键因素

       影响测试人员判断某问题或现象是否是Bug,还是其他问题,有很多原因,下表是笔者总结的一些关键因素,与大家一起分享。

     

    序号

    因素

    影响分析

    1

    业务熟悉度

    不清楚业务,会不能很好地理解特性的用途,应用场景,会导致正确的判断,风险分析;

    2

    测试专业技术:测试思维

    除常规的测试思路外,逆向,相关影响或异常,多条件组合等特殊情况的专业思路能让迅速发现软件中潜伏的Bug

    3

    测试专业技术:测试工具掌握

    有些测试对象需依赖特殊工具生成数据、监控、检查,作为一种测试手段、方法,能发现某类型的Bug,如数据库性能测试,内存泄漏的检查等

    4

    学习能力

    学习测试同事经验,包括与需求、开发人员的交流,从交流中增加经验、知识的积累等。学习有主动与被动,主动学习的人,进步快。

     

    5

    对开发者的了解

    对合作的某开发人员了解多,知道对方可能出错的地方,例如某开发人员是新员工,对业务不太熟悉,容易在模块接口处理上考虑不周,易犯错误,则可以有针对性测试这些方面。

    6

    系统繁杂度

    了解系统的设计,清楚最繁杂的设计,最核心的设计,然后重点分析这些部分,找出测试的重难点

     

    说明:

    关于学习能力 ,有些同学可能理解存在误区,或者比较片面,认为学习就是捧着书本看书。常听一些同学说,正在看C+编程,Android开发,网络通信相关书等,当然没错,这些都是在学习。但是否有更直接的体现学习能力的方法呢。曾经在一位同事的总结中读到:通过参与同项目外专业组的讨论,大受启发,回来一试,发现了2个严重的系统接口方面的bug,及一个我们未曾考虑到的系统设计需求。这种通过与他人的交流获取的直接知识,并不一定能在书本上看到的,但它也是一种学习。学习有直接学习,简接学习。如果说简接学习是夯实基础,那么像上述通过交流、实践的方式直接地学习的方法是取人之长,补已之短的快速通道。

     

    除了上表中提到的因素,是否还有其他因素也会影响测试人员的Bug敏感度呢?欢迎大家补充,及发表意见。

  • 小议Bug敏感度(一)--Bug敏感度的故事

    2012-11-25 13:43:01Top 1 Digest 1

               小议Bug敏感度

       在测试圈中,相信大家对“Bug敏感度”这一词并不陌生,但是Bug敏感度具体是指什么呢,本文对此关键词进行解读的基础上,对其与软件质量的关系,影响的关键因素,如何提高测试人员的bug敏感度进行分享。(--续集)

     

    Bug敏感度的故事

     

    【测试经理的评价】

    在一次绩效评价中,A主管对某位测试工程师的评价如下:

    本季度完成了模块A、模块B、模块C的系统测试工作,设计了1200用例,提交了500+Bugs,严重Bug40%Bug数占测试团队(同期参与项目有4人)的35%,其突出的Bug敏感度,对某项目软件质量的稳定有突出贡献。

     

    【测试工程师的评价】

    测试工程师A说:

    陈生的Bug敏感度,真让我佩服得五体投地,昨天我们一起在实验室测试同一模块,相同的软件特性,他提交的其中有5Bug,我是看到过的,其中有3个是当时没有注意到(没有发现),而另外2个我是看到了,但不知道是不是Bug,或者认为他是正确的,而是这2Bug就在我眼皮底下悄悄地溜走了。呜呼!

      

    【开发工程师的评价】

     

    开发工程师B说:在提交代码前,我对着软件按照测试的Checklist执行了一遍,一切都正常。正在乐着呢,本次的版本质量一定高,心里还在想嘿嘿!看你们测试人员能提什么Bug给我。那知,才乐了一个上午,下午就有人叫我到现场看一个系统崩溃的Bug,更有甚者,此Bug在我的机子上我还不能重现,但一叫测试人员过来重现,其马上就出现了。原来测试软件可以怎么弯来扭去XXX操作的,这就是Bug敏感度!悲惨世界呀,够我用1-2天时间来折腾了。

     

    读者朋友,找到答案件了吗,Bug敏感度对于测试人员来说,非常重要。特别地出现了一些显而易见的Bug,而你却视而不见,或并未识别到它是一个Bug,而遗漏到客户端,是测试人员的大忌!不言而喻,Bug敏感度对于一个测试人员的工作的重要性。但这个含金量极高的敏感度,如同一个道士的修炼,要想达到炉火纯青,正如“冰冻三尺非一日之寒,滴水穿石非一日之功也,Bug敏感度是颇见功底的

  • 探索式测试之旅—灰盒测试的应用

    2012-10-01 10:22:58Top 1 Digest 1

    【前言】

     

    某一控件的属性修改了,而此控件被系统中的多个模块调用,你是如何测试此更改点的呢?

    某一bug,并不是某一模块专有,开发更改后,你在为回归是否彻底而发愁吗?

    某些测试点仅采用用户角度出发的黑盒功能测试,费时费力,且不一定全面、充分,如何解决呢?

    等等,当仅采用黑盒测试方法不能满足测试需求时,探索性的尝试灰盒测试,或许能帮你解决这些问题。

    下面从三个方面与大家分享笔者在灰盒测试探索上的一点心得与体会,包括灰盒测试的介绍,案例应用(由于工作上的案例涉及机密,不方便上传,笔者借用大家日常生活中常用的手机闹铃作为案例,希望能达到一种抛砖引玉的效果,借鉴应用到其他的测试场景中。方法是相通的,或许这种表达不能满足一些读者的理解,如有兴趣,可与我单独联系aul516@126.com),最后是一点应用小结。

     

    灰盒测试的介绍

    在软件测试领域,白盒测试与黑盒测试是众所周知的常用测试方法。这两种测试方法的特点泾渭分明,一个是“黑”,一个是“白”,这个“黑与“白是指是否需要看到代码内部实现来划分的。正如辩证唯物主义中提到的矛盾论所言,任何事物都有其正反两方面的特性,白盒测试方法与黑盒测试方法都有其突出的优点,相对的也就有其缺点。或许也正因为如此,这些年来,软件测试界的朋友在对这两种方法的不断实践中,一些实战派提出了介于此两者之间的“灰盒测试”方法。在不同的行业领域,“灰盒测试”的应用场景会有所有不同,应用的广度与深度也不同。在测试过程中该如何找到切入点加于应用,是灰盒测试应用的关键。为便于读者理解,下面对灰盒测试的定义及其特点作一归纳性解释。

    1、     灰盒测试是介于白盒测试和黑盒测试之间的一种测试方法,或者说是两者的结合,也有人称集成测试为灰盒测试;

    2、     灰盒测试关注输出对于输入的正确性,同时也关注内部表现,但这种关注不像白盒测试那样详细、完整,只是通过一些表征性的现象、事件、标志来判断内部的运行状态,或者说参考部分代码去做黑盒测试;

    3、     灰盒测试结合了白盒测试与黑盒测试的要素,它考虑了用户端、特定的系统知识和操作环境,它在系统组件的协同性环境中评价应用软件的设计

    下图为灰盒测试空间示意图

     

    图中,可以形象地理解为它是一个方块盒子,对于黑盒测试,我们看不到盒子内部,所以全都是黑色的。但对于灰盒测试,它仍有黑色方块存在,但已出现一层层白线围起来的方块,表示看到了部分代码的实现,白线越密意味着关注的代码越多,最深处几乎为全白盒了。

     

    案例】手机闹钟的测试

    背景描述:闹钟是手机最常用的特性之一,它的主要功能就是在用户设置的时间点到达时,进行响铃提醒。响铃时,无论用户当前在做什么操作,会弹出一个响铃提示界面。

    提出问题:一天,负责测试此特性的工程师小A提出一个问题“闹铃事件优先级高,在所有应用程序界面、对话框或提示框上面都会弹出,黑盒测试需要进入所有情况的用户界面,然后等待闹钟事件的发生,才能全面验证到各种情况的用户使用场景。但这样穷举测试,需耗的时间太多,效果也并不一定好。

    分析问题:关于闹钟的应用,实际上该模块只提供了一个接口。如能从代码角度分析到所有其他模块调用的是同一个闹铃接口函数,对于响铃及停止响铃后对原界面的恢复,都是统一一个接口处理的,那么再通过黑盒功能测试,在某一个用户界面进行此响铃功能的验证,即可证明代码的实现是符合需求的,这正是灰盒测试的方法。

    解决问题:后来,对于闹铃功能点的系统验证,采用了灰盒测试的方法,作了代码正向、逆向分析,结合功能性用户场景进行验证,节省了近三分二的测试时间。

     

    【小结】灰盒测试应用优劣势

     

    灰盒测试是在了解代码实现的基础上,通过黑盒功能测试加以判断,以验证软件实现的正确性、全面性。在理解概念的基础上,实际工作中如何开展,依据笔者的实践,在以下几方面能较好地体现此方法的优点:

    l  能有效地发现黑盒测试盲点。通过了解代码的内部实现,补充功能测试用例。这需要灰盒测试人员在查看代码之前,掌握需求,并清楚已有的功能测试用例。对某一功能点的实现进行代码分析(白盒测试),然后与黑盒测试(功能测试)充分结合起来,相互弥补,这就是灰盒测试的精髓。

    l  可以避免过度测试,精简用例。例如具有相同特点的某一功能,在进行功能测试时,是否每个界面或提示框、对话框都需进行该功能的测试?在没有采用灰盒测试之前,我们确实这样穷举式测试过,虽说不上没有效果,但收效甚微。

    l  能及时发现没有来源的更改。特别是在产品的维护阶段,每一行代码的更改都必须要有更改来源,但实际开发过程中,并不是每个开发人员都能做到,也并不是每个人都能清楚意识到更改后没有得到有效验证所带来的后果。像这种开发人员好心办坏事的事例屡见不鲜,所以测试人员采取事后进行灰盒方法对更改代码进行局部分析、审查是有必要的。

    灰盒方法,也有其不足的地方,例如我们在分析代码时,由于没有像白盒方法那样全面、具体,往往有判断错误的地方。笔者亦有这方面的教训,弄得与开发人员讨论多多,争执不断,不过,你会发现,有讨论有争议的事例你会更加牢记,未免不是好事。另外,灰盒测试大部分情况是采用正向分析,而要发现代码的问题所在,往往更需要逆向思维,在分析代码的结构或逻辑实现时,需有意识地补上这一测试点。

     

  • ISO 9126软件质量模型---工程实践式解读

    2012-04-29 23:29:36Top 1 Digest 1

    “模型”(Model),是所研究的系统、过程、事物或概念的一种表达形式,很自然地,我们可以理解为软件质量模型便是对软件质量评价要素的一种表达形式。在软件工程中,软件质量模型是一个复杂且又抽象的概念,不同行业软件亦有不同要求。理解起来不会像有实物模型的产品质量好理解,例如谈起一辆车的质量,我们马上便会在脑海中浮现出车的模型,然后对车的轮子,离合,刹等组件的质量要求都能说上一二。软件质量是许多质量属性的综合体现,各种质量属性反映了软件质量的方方面面,就像评价一个人的优缺点一样,并没有绝对的唯一答案,它是多维的。我们可以通过改善软件的各种质量属性,从而提高软件的整体质量。对不同质量属性的评估过程,即为软件测试执行的过程。由此看来选择不同的质量属性进行评估决定着测试服务的过程。软件的质量属性,或叫质量要素,与行业特点、技术实现的复杂度等都有关。下面介绍ISO9162标准中提到的软件质量模型,如下图所示。

    定义了软件的6大质量属性,其中每一属性其下又包括一些子属性,下面对这些属性进行解释。

    一、功能性

    功能性(Functionality)是指软件是否满足了客户的需求,结合其子属性,有以下几种特点。

    1、  合适性

    所提供的功能是用户所需要的,及用户所需要的功能软件系统已提供。笔者觉得此质量属性更适合由前端的需求人员把握,当然测试人员也需根据需求的适用性,以定义测试的重点与优先级。比如在医疗软件系统上如果有一款可供娱乐的游戏,试想医生一边给病人看病一边玩游戏会造成什么后果呢。

    2、  准确性

    软件系统提供给用户的功能是否满足用户对该功能的精确度要求。此特性好理解,在实际的工程应用中也常遇到,例如财务类软件。如果不涉及特殊用户的需求(如科研机构的特种应有),精度一般都容易满足。

    3、  互操作性

    软件系统与一个或多个周边系统进行信息交互的能力。例如,运行在windows操作系统上的应用软件,与运行在Linux系统上的软件进行通信,如下图所示。Linux系统是数据的发送方,把数据发送到windows系统上,在windows系统上运行的应用软件需能读出特有数据格式的能力,然后在界面上显示。

    4、  安全性

    指软件系统保护信息和数据的能力。可以从以下两方面理解:

    1) 防止未得到授权的人或系统访问相关的信息或数据;

    2) 保证得到授权的人或系统能正常访问相关的信息或数据。

    常见的安全性测试:

    1) 用户验证:登录密码验证(如windows登录验证,邮箱验证等)、IP地址访问限制等;

    2) 户权限管理:验证低级别用户是否具有了高级别用户的权限,各级别用户权限都得到了实现。例如windows 7操作系统,某些应用程序的运行必须以管理员身份才允许;

    3) 系统数据的保护:例如对系统文件、用户密码文件等进行隐藏,机密文件内容进行加密、备份;

    5、  功能性的依从性

    遵循相关的标准(国际标准、国家标准、行业标准、企业内部规范等)约定或法规以及类似规定的能力。例如:在中国研发与生产的医疗设备如果要在美国上市销售必须经过FDAFood and Drug Administration 美国食品及药物管理局)的审核,并通过。细心读者,你会发现每一质量属性都包括其依从性的子属性,由于定义类同,下面不再分开详述。

    二、可靠性

    可靠性(Reliability)是指软件是否能够一直在一个稳定的状态上满足可用性。

    1、  成熟性

    软件系统防止内部错误扩散而导致失效的能力。测试过程中常遇到的例子如:模块A更改了某参数,但没考虑到某参数同时被模块B调用,由于模块B并未作相关更改,结果使得模块B的相关功能失效。

    2、  容错性

    软件系统防止外部接口错误扩散而导致系统失效的能力。

    例如:应用软件在操作过程中需操作一个文件,但由于此文件已遭破坏,由于缺少容错处理,结果执行文件操作时,软件崩溃。

    3、  易恢复性

    系统失效后重新恢复原有功能、性能的能力,包括对原有能力恢复的程度与速度。

    典型的例子,我们经常使用的windows系统有时会遇到系统不响应的情况,只好按Reset或关掉电源重新开机。这种情况,当前未保存的数据当然是丢失了,系统重启后能否正常进入系统便是易恢复性的一种体现。

    三、可用性

    可用性(Usability),衡量用户使用软件需要付出多大的努力的质量属性。其中,我们经常提到的易用性就是可用性的一个重要方面,指产品易于学习和使用,可减轻记忆负担等,具体可从以下几方面进行理解。

    1、 易理解性

    易理解性指用户在使用软件系统的过程中,展示给用户的信息是否准确、清晰、易懂,能帮助用户准确理解系统当前真实的状态,并指导其进一步的操作。

    一个典型的例子,如下图是我们都很熟悉的登录界面。

    用户在输入用户名与密码后,点击“登录”按钮,弹出下图提示。

    提示“用户名或密码不正确”告知用户的是不明确的信息,很容易误导用户。因为用户输入的信息有可能两者都错了,或其中之一错了。用户看到此提示后,只能再尝试输入用户名与密码,造成可能正确的信息重新输错了,错的反以为对了,只好反复验证,最后提示超过尝试次数而告终。

     

    2、 易学性

    易学性是指软件提供相关的辅助手段,帮助用户学习使用它的能力。例如:是否具有在线帮助。在线帮助常见的有两种,一种是跟随功能而变的帮助,如WordExcel中的菜单项鼠标提示(tips);另一种是在线帮助手册,如同windows程序按快捷键F1自动调出帮助手册内容。

    3、 易操作性

    易操作性指用户基本不用额外学习即能操作软件,包括多方面的内容。例如:

    1) 常用功能路径不要太深,最好能提供快捷键,且这些快捷键具有普适性(用户已广泛接受),如前面提到的windows程序激活帮助功能的快捷键F1。目前有很多软件采用这种已符合人们的使用习惯的操作。

    2) 最好提供一键返回桌面的功能,这一点苹果的Iphone手机做得比较好,无论用户当前在什么位置,只要按下“返回桌面”主键,立即可退出。

    3) 操作尽量简单,例如软件的安装或升级,按提示点击“下一步”且不要太长的时间或多个选择路径。

    4、  吸引性

    吸引性指软件具体某些独特的,能让用户眼前一亮的属性,包括GUIGraphical User Interface,图形用户界面),多媒体应用。例如:苹果Iphone 4手机,当短信发送成功时,除了弹出新颖的冒泡状提示,还会伴有声音提示你,且声音可由用户根据喜好自行设置。

    四、效率

    效率(Efficiency),这里指衡量软件正常运行需要耗费多少时间及物理资源,是性能测试的重点内容。

    1、 时间效率

    时间效率主要指软件系统在各业务场景下完成用户指定的业务请求所需的响应时间。

    一个典型的应用案例:我们在互联网上发表博文,点击“提交”后,一般情况都需等待几秒钟(当然一般都有体贴用户的温馨提示啦J),然后自动跳转到博文显示页面,那么此等待时间,我们可以理解为系统响应的时间。

    2、 资源效率

    资源效率主要指软件系统在完成用户指定的业务请求所消耗的系统资源,如CPU占有率、内存占有率、通信带宽占有率、软件内部消息包资源占有率等。例如不同业务功能之间,不同GUI界面相互之间的切换,如果切换过程中有明显的后影,或速度太慢,很可能资源占用方面没有处理好。

    五、可维护性

    可维护性(Maintainability),衡量对已经完成的软件进行调整需要多大的努力,其又可分为下面四个子属性。

    1、  易分析性

    指软件系统提供辅助手段帮助开发人员分析识别缺陷、失效产生的原因,找出待修复部分的能力。这也是工程实践中很重要的一方面,可以减少缺陷定位的时间,提高开发人员工作效率。采用系统日志记录的方法,如同windows的事件查看器(eventvwr),把软件执行代码的轨迹或某些错误、状态进行记录,是一种常见的方法。

    2、  易改变性

    指软件缺陷的修复容易被实施,这与软件的设计有着密切关系。例如设计上封装性好、高内聚(同层次设计时,一个实体只完成一个功能)、低耦合的代码,为未来可能的变化留有扩充余地,它的易改性会更好。

    例如:下面关于学生信息定义的代码结构

    Struct student{

        Char name ;

        Unsigned int No;

        Char  Sex;

        Char Class;

        Int Reserved[20];   //保留

    }

    其中最后一行,数组Reserved[20]即为日后学生信息扩展而保留的结构成员。

    3、  稳定性

    指软件系统在长时间连续工作环境下能否正常工作,不出错,无异常情况等。测试人员常用长时间压力测试的方式检验软件的稳定性,稳定性与资源效率有紧密联系,例如内存的慢泄漏,时间越长,系统稳定性越差,内存资源占用越多,最后可能导致系统瘫痪。

    4、  易测试性

    指从测试验证角度,软件存在可测试性的难易程度。例如:UI界面,提示框对话框,按钮响应状态变化等是很容易观察到的,可测试性强;有明确的输入输出数据,尽管此数据对于用户来说可能不容易被看到,但通过某种方法仍可验证到,可测试性次子。对鉴于系统设计原因,某种用户场景难于验证,测试的条件苛刻,需特定的实验室条件,如高温高压等,这种情况需考虑改变软件内部状态,通过发布特殊版本进行测试。易测试性作为可维护性的子属性之一,与质量是否存在必然的正向关系呢,即能不能说越容易测试的软件,其质量将越好。从工程最佳实践来看,这种必然的关系倒并不成立,但反过来是成立的,越难验证的软件,其存在问题的风险将可能成倍增大。

    六、可移植性

    可移植性(Portability),是衡量软件是否能够方便地部署到不同的运行环境中的能力,它有下面几个特性。

    1、  适应性

    指软件系统无需做任何相应变动就能适应不同运行环境的能力,其中运行环境通常是指操作系统平台、数据库平台、硬件平台等。例如我们在项目常遇到的情况,某系统软件原来运行在windows XP操作系统上,但后来由于Microsoft 推出了windows 7,windows 8,应用新系统的用户比比皆是,新用户需要某系统软件能在新平台上正常运行。这种因平台的变化,系统应用软件的适应性在设计之初是需考虑的。本书5.2.3 “设计需求转换为测试需求失败”的案例,便是一个关于应用软件适应性的案例。

    2、  易安装性

    指平台变化后,成功安装软件的难易程度。有些软件可不作任何变化即可成功部署,有些需作部分变化,如安装过程增加用户选项等。对于软件的安装过程,能尽量考虑用户少参与,多一些自动安装过程会让用户更放心。

    3、  共存性

    指软件系统在公共环境与其共享资源的其他系统共存的能力。这个特性表明我们在测试时不仅需要关注自身软件特性的实现,还要关注本软件是否影响了其他软件的正常功能。

    关于共存性,笔者曾遇一个这样的案例,在应用程序进行输入中文时,只要打开紫光拼音,则软件将自动退出。还有一种是人为的限制,在已知情况下,软件A打开,限制软件B不能运行,有意防患,适合某特殊应用场景。

    4、  易替换性

     指软件系统的升级能力,包括在线升级、打补丁升级等。易替换性相对于嵌入式产品软件系统来说,由于涉及硬件物料的更新换代,如某主控芯片、USB接口芯片的换代,还可能会触发底层驱动的升级。

     

  • 小谈模糊测试

    2012-01-25 23:38:54Top 1 Digest 3

     今天读《测试之美》中“用模糊测试让办公软件更可靠”。联想到模糊测试与我们日常工作中通过修改或自动生成特殊数据对测试对象进行验证的方法异曲同工。我们也叫它为破坏性测试,是探测应用程序的健壮性或异常处理能力的有效方法。此方法根据测试对象的不同,不同行业不同产品测试的重要性会有所不同,如果操作不当或测试的权重过大,常会引起开发人员的不满,结果此类bug不了了之,最常看到的场景如下:

    1、  没有用户会这样用的,此bug无效!(没有用户会特意破坏数据来使用软件);(测试人员感到委屈L )

    2、  考虑发生的概率极小,解决的代价大,不解决;(测试人员表示可以理解)

    3、  延期解决;(测试人员可以接受)

    4、  解决,加入容错措施;(最受测试人员欢迎)

     

    建议:异常数据的模糊测试方法,我们测试人员必须采用,但重点放在用户常见场景的关键路径,异常路径放在次要或扩展场景中,且整个测试过程只考虑一次,因为健壮性或容错能力比起能给用户带来价值的核心功能的重要性要低很多。这也符合测试的2-8原则,信不信由你。

  • 需求覆盖的度量与方法

    2011-07-31 16:48:56Top 1 Digest 1

      需求覆盖,指测试用例对需求的11,或1N的对应索引关系,是测试用例覆盖需求程度的一种度量方式。由于需求有粗细之分,常见的如一级需求、二级需求、三级需求,指的就是需求的粒度。用例对需求的覆盖度,目前有一些文档管理工具可自动建立它们之间的索引对应关系,如doors,testlink,也可采用excel人工建立体现覆盖情况的追溯关系表。由于文字描述的需求层次划分的主观性较强,度量本身难于精确化。

    对于需求覆盖与软件质量的关系,我们可以问一个这样的问题,需求覆盖率达到了100%,就表示所有需求点都有测试用例对应了吗,回答这一点,我想是很容易的。因为在过去的经历中,测试需求总会大于软件需求,如软件对异常情况,边界值的处理(有些需求是来自设计的限制)。需求一般不会描述如此详细,往往会出现有些用例没有需求对应,或者说用例对需求的覆盖可达120%,甚至150%的覆盖,但就能说明软件质量可靠、稳定吗。只能说用户需求确认已实现,测试的程度(全面性)如何,只能是在一个较低要求的层次上回答了这个问题,就好象是解决了温饱问题。再具体一点,例如,张A问李B,“李B,你吃了饭吗?”,李B回答说:“吃了”,那么说用例对需求的覆盖达到了100%,意思就好比此场景的回答。至于李B吃的什么,有哪些菜,有哪些配料组成,它们是如何搭配的,营养结构是否全面、合理,是否影响身体健康。回答这个问题,犹同回答测试全面性与充分性的问题。

    我们都清楚,在软件生命周期中需求经常会发生变化,需求测试对于测试来说是一个不可忽视的阶段,它同软件设计一样,是一个迭代的过程。那么需求覆盖是对需求测试的一种反馈,但绝对又不止这些,需求测试在实际工作可以如何开展,有哪些注意问题,有兴趣的读者可以参阅我的<<软测之魂核心测试设计精解>>第八章的需求测试部分(http://product.china-pub.com/197462

    下面就需求覆盖的追溯方法与大家分享下个人的一些体会:

       下图是以用例为主线(逆向追溯),设计的每一条用例依据都是需求,用例与需求的对应关系体现出一对一,一对多的关系。

    流程图: 可选过程: 说明:3.1.1-1表示需求3.1.1下的第一小点。目前,大部分公司的需求都是用Word文档来管理的,如果用需求管理工具,如DOORS,Telogic ,可以把每一需求点定义一个ID,用ID号来唯一标识不同的需求,用数据库进行管理。对于需求的管理已超出本 文的范围,此处只提及。

 

     

     


    另一种方法是以需求为主线(正向追溯),从需求出发,检查每一需求是否有对应的用例,从而确定对需求的覆盖是否达到了100%。下图是以需求为主线的需求与用例索引矩阵图。

      优点是什么呢?需求点明确,可以保证每一需求点都有测试用例与之对应。不象用例为主线的方法,把用例对应的需求点分散在不同的地方,如果有小需求点漏了,也不足为怪哦。

     

    无论以用例为主线,还是以需求为主线,建立需求与用例的追溯表,有一个问题很容易暴露出来。细心读者也许你已注意到,用例T1.5怎么没有需求与之对应呢?紧扣需求设计用例本身是没错。如果只看需求,不关心系统的设计或其他相关模块的需求,会使我们陷入只看到局部的需求,以为只要覆盖了需求说明书中的点,即达到了100%覆盖。而实际上,一个软件系统,由若干模块组成,模块与模块之间会存在一些藕合关系。或者有人会认为模块与模块之间接口关系不是集成测试关心的吗?没错,集成测试是要关心,但也没有说系统测试不要关心。到后期系统测试阶段,随着需求的变更,模块之间的接口可能会发生变化,如一些全局数据结构,全局变量等。这样,在系统测试阶段关心模块间的接口显得必不可少。

  • ET之假期测试法

    2011-06-07 00:07:49Top 1 Digest 1

     

    说明:ETExploratory Testing

    今天是端午节(Dragon Boat Festival),动员全家去海岸城的“潮江春”喝早茶(吃早餐,广东人的一种时尚,品味生活方式),7点多我们起床了,想着锻炼身体为目的,我们徒步前往(约100分钟的路程),让我感到意外的事,7-8点这个时间段,路上行人怎么稀稀落落,连公交车也少。一会才醒过来,是端午节,大家都在放假过节呢。怎么样,想到软件运行过程中,用户休假期间的这种场景,等用户休假回来可不能不动了。如,医院的医疗设备,再比如我们平时工作的电脑,有时也会忘记关机,这种情况,软件看似停留在某一界面,但它是一直运行的,且在后台某些时间段还可能悄无声息地帮用户干着某些事,如定时备份重要数据,清理垃圾等。仪器或设备为了节电进入休眠,如手机,可不能休眠几天或几周后,手机打不开了,仪器不动(停机了)等。

    通宵测试法,是一种短假期的测试法,如静置一个晚上就是一种用户场景的测试,在ET中谓之假期测试法。

    测试过程中常被忽略,但却受用!

  • 读-<<探索式软件测试>>有感1

    2011-03-30 00:06:22Top 1 Digest 1

    读完JW的“局部探索式测试法”有以下理解
    1、探索式其实是一种测试模式,也可理解为风格,测试过程中不限于某种具体方法设计用例,如等价类,边界值,错误推测试,数据组合等,是根据具体的对象进行分析,边执行边设计用例,根据对系统的理解、经验、现场提示等进行输入,分析输出,或根据输出分析输入,等。
    2、很适合经验丰富测试人员发挥。
    3、抓住一个点后,可以很快通过执行评估出初步结果,很适合敏捷开发过程的摸底测试(冒烟测试)。

     

     

  • 一个关于代码覆盖率的问题与故事

    2011-03-13 23:57:39Top 1 Digest 1

    可以用一种这样的思路:通过黑盒功能测试用例的执行,收集用例对代码的覆盖率,代码覆盖率有函数级、行级、分支级覆盖,诚然分支级的覆盖更具意义,但这个覆盖率要达到多少才算合适呢?是否有个确定的答案?

    下面是关于代码覆盖率的一则故事(转自西西软件园)

    一大早,一个年轻的程序员问大师:

    “我准备写一些单元测试用例。代码覆盖率应该达到多少为好?”

    大师回答道:

    “不要考虑代码覆盖率,只要写出一些好的测试用例即可。”

    年轻的程序员很高兴,鞠躬,离去。

    之后没多久,第二个程序员问了大师同样的问题。

    大师指着一锅烧沸的水说:

    “我应该往这个锅里放多少米?”

    这个程序员看起来被难住了,回答道:

    “我怎么会有答案?这取决于要给多少人吃,他们饿不饿,有什么菜,你有多少米,等等。”

    “完全正确,” 大师说。

    第二个程序员很高兴,鞠躬,离去。

    末了,来了第三个程序员问了大师同样的关于代码覆盖率的问题。

    “百分之八十,不能少!” 大师一拳锤在桌子上,用严厉的口气回答道。

    第三个程序员很高兴,鞠躬,离去。

    回复完这个之后,一个年轻的实习生走到大师身边:

    “大师,今天我无意中听到了你对同一个代码覆盖率问题给出了三个不同的答案。为什么?”

    大师从椅子上站起来:

    “给我泡点新茶,我们聊聊这个。”

    当杯子里倒满了冒着热气的绿茶后,大师开始说:

    “这第一个程序员是个新手,刚刚开始学测试。目前他有大量的程序都没有测试用例。他有很长的路要走;现在对他要求代码覆盖率只会打击他,没有什么用处。最好是让他慢慢的学会写一些测试用例,测试一下。他可以以后再考虑代码覆盖率。”

    “而这第二个程序员,不论对编程还是测试都是十分的有经验。我以问作答,问她应该往锅里放多少米,使她明白决定测试用例多少的因素有很多,她比我更知道这些因素——毕竟是她自己的代码。对这个问题没有一个简单的、直接的答案。以她的聪明完全能明白这个道理,正确的完成任务。”

    “我明白了,” 年轻的实习生说, “但是如果没有一个简单直接的答案,那你为什么告诉第三个程序员‘百分之八十,不能少’呢?”

    大师笑的前仰后合,绿茶都喷了出来。

    “这第三个程序员只想得到一个简单的答案——即使根本没有简单的答案 … 而且即使有答案她也不会按答案做。”

    年轻的实习生和头发斑白的大师在沉思中喝完茶。

  • 测试用例可以自动生成吗

    2010-12-18 23:13:09Top 1 Digest 1

    曾经在网上看到一个文章是关于“测试用例自动生成的系统”的,摘要内容如下: 

         一种测试方案生成的方法及其系统,该系统至少包括数据输入及显示模块、测试规范数据库、数据解析模块及测试方案生成模块;其将被测试样品条件参数中的全部信息与测试规范进行比较,并依据该比较结果,生成测试方案;本发明的测试方案生成的方法及其系统,在改变了依靠测试人员的经验来制定测试方案的现状,以及提高了测试方案设计效率的同时,保证了测试方案的精确和严密;在测试规范和规格参数之间建立了对应关系,使测试规范的改变不影响存储该测试规范数据库结构,降低了升级的代价;并可在生成的测试方案中添加新的测试内容,通过相应处理,把新的测试内容自动加入到系统中原有测试规范的对应位置,从而实现了测试规范的自动完善和升级。

        看了几遍,有以下理解:

    1、该系统把规格参数录入作为数据库,这些规格参数就是测试数据,参数之间的组合,需符合规范(有约束),用户输入参数后,可得出允许的数据组合,谓之测试方案。

    2、测试规范即为测试点,与规格参数有着对应关系;

    3、规格参数增加,即需求增加了,对应的测试规范(测试点)可根据与规格参数的变化,自动增加。

    但还是有点云里雾里,在想着我们实际工作中设计的测试用例能自动化产生吗?除非是有一定逻辑关系的数据组合,或条件组合用例。不过思路还是挺好的。

     

  • 回归Bug时,你顺藤摸瓜了吗?

    2010-09-11 09:10:20Top 1 Digest 1

     昨天回归一个bug,代码走查中,查到一处存在代码风险。

    背景:某嵌入式软件有合同管理的功能,其中一项信息是合同的有效期,这个有效期字段属于日期格式,会随着系统日期的变化而变化,即用YYYY/MM/DD,还是MM/DD/YYYY, DD/MM/YYYY。当系统日期格式改变后,退出合同管理界面时,提示“日期格式”无效。

     

    原因:开发人员在coding时,在给合同有效期的显示格式赋值时采用了一个固定值,这样当系统日期改变后,发现与它当前日期格式不同,而是提示日期格式无效。

    更改:代码片段

    原来:ContrDateFormt = DATEFORMAT_YYYY_MM_DD(一个枚举值)

    更改后:ContrDateFormt = GetCurDateFormt();

     

    在对更改点进行回归时,走查了相关代码,通过查整个项目工程的代码中对日期格式直接赋值的地方,发现还有一处仍采用固定日期格式的,但此函数暂无人调用,它是一个孤立的函数。不过,日后有用到的话,就会出现上述同样的问题。这让我想起这样一种常见工作场景:

    测试说:怎么又出来之前的bug了。

    开发说:我真没改什么,调用的函数原来就存在的。

    测试说:我才不相信呢,没改它自己会跑出一个bug来吗?

    原来现象是一样,但产生的背景是不一样的。嘿嘿!开发也没注意到这个函数原来是孤岛,它有黑洞,谁叫他要上呢。上了后,第一个倒霉的当然就是他啦,而测试人员是很相信自己的眼睛的,多从现象出发判断问题。J

  • 如何控制Bug的蔓延--防不胜防的糖衣炮弹

    2010-06-23 00:35:12Top 1 Digest 1

    如何控制Bug的蔓延--防不胜防的糖衣炮弹

    有这么一种现象,总是很难控制,就是已上线的软件版本更改,每一个更改都必须有来源,这是公司规定的流程。但是在执行的过程中,常会有偏离。

    1、               有些开发工程师在更改代码过程中,看到一些代码有问题,控制不住手氧,改之,结果改出问题(没想到对别的地方有影响)(改完之后,有些技术高手们有时还会窃喜,“我多好,又悄悄地做了一次雷锋);

    2、               测试发现了之前版本遗留的bug,特别是严重的,没经过评审,直接改之,风险不受控(更改非计划内)。

    3、               测试提交了一个bug,开发解决时,把系列的问题解决了,影响到多个模块,但测试回归bug没有分析到所有的路径,漏测。开发解决问题的影响分析并没有传递给测试。

    3点,测试吃的亏多着呢,即使有要求开发更改代码要作影响分析,但人为的东西,不可控制。写与不写,写了是否全面了,是不一样的。想起“落后就要挨打”的古训,如果测试人员对每一个提交的软件版本,都能做好代码分析,即使开发不说,或说全,漏测的机会也会少很多。
  • 什么是冒烟测试及实际工作中如何操作?

    2009-03-29 11:26:46Top 1 Digest 1

    冒烟测试”,这一术语应用于不同的行业中,如,水管系统,木制乐器的修理,电子工程,软件工程,娱乐业等领域

    在水管系统应用中,冒烟测试是指在水流经管路系统之前,先用实际的烟雾穿透整个管路系统,从而检查出是否存在渗水的地方。

    在木制乐器的修理应用中,做冒烟测试时先堵住乐器的未端,然后把烟从另一端吹入检测是否有渗漏(这种检测方法不常用)

    在电子工程领域的应用中,冒烟测试是指当电路设计好,第一次加电自检时检测在设计或线路上是否存在缺陷,如果存在缺陷常会出现板子冒烟的现象。

    在娱乐业应用领域,冒烟测试时使用大量的演习烟雾,以确保在事件发生期间在案发现场的烟雾探测器不会被引发爆炸。

    软件工程中的tt应用:冒烟测试是指对提交测试的软件在进行详细深入的测试之前而进行的预测试,这种预测试的主要目的是暴露导致软件需重新发布的基本功能失效等严重问题。冒烟测试可以由开发人员执行,也可以由测试人员来执行。即,在版本编译后正式提交测试之前由开发人员执行;或开发发布版本后,测试人员在接受这个版本作为正式版本进一步测试前执行。微软提出在审查了变更的代码后,冒烟测试是确认修复的缺陷及功能变更是否有效的最经济有效的方法。冒烟测试能手动执行,也可以在版本编译后自动化执行,它是对基本功能的确认,非深入测试,但要覆盖到面,即所有的更改点都要进行确认。采用自动化执行是,可以结合每日构件后进行自动化的每日smoking test,如果测试通过,则把更改后的代码自动合并到主干代码仓库中,作为正式提交测试的版本。

    对于smoking test在软件开发过程中的应用,下面提出一种可实施的步骤:

    1.     根据软件的变更,包括新需求的实现、bug修复,设计出更改满足预期的功能级checklist

    2.    准备好测试环境。如:软件的运行环境是嵌入式产品,如手机,数码相机,医疗仪器等,需准备好用户使用的真实运行环境。如果是windows平台运行环境,请准备干净的操作系统。

    3. 执行checklist,确认基本功能有效,足以支持更进一步的详细、全面测试。

  • 浮点数比较问题的测试

    2010-10-01 12:42:37

    最近遇到一个比较头痛的问题:不该修改的数据却被系统修改了,且是偶发。后来分析发现是由于浮点数比较存在的问题。
      例如: float A,B;
    if (A!=B)
      {
       修改某数据   //需求要求
      }

    而实际上,当A与B对于用户来说是相等的,如都为5.12,由于精度问题(浮点数在计算机当中的二进制表达方式就决定了大多数浮点数都是无法精确的表达的),系统认为它们是不相等的,使得不该修改的数据被修改了。

    发现此问题后,由于整个软件系统中还存在数据处理的地方,作为测试人员应如何有效地全面地揪出同类问题呢?+

    欢迎讨论。

Open Toolbar