我测,我测,我测测测:D

发布新日志

  • 07年国庆前的随想

    ecust 发布于 2007-09-26 09:08:03

    随着CMMI3的推进,测试组的分工越来越明确,开发方的文档质量越来越高。终于带来了负面效果--测试出的BUG极少,但上线后BUG却仍然存在,很多BUG根本没有测试出来,另外test leader这个位于腰部的关键人物,越来越体现不出应有的作用。目前的工作体系是这样的:

     

     

    下面先来来说说,测试不出BUG的问题:

    对于测试不出BUG的原因,问题的关键在于,开发方提供的需求实在是很“完美”,用看图说话的形势,把所有的测试点都给写了出来,包含了几乎全部路径。测试人员那到这样一个文档,做起来十分轻松,但同时也被限制在这个文档的行程的一个圈里,无法发挥发散性思维,使得测试变的不全面。在正式测试之前,程序员会根据需求文档自测,然后在提交。也就是说,文档里提到的测试点,程序员自己都测试过,拿到测试组这边,只不过是在重复程序员的测试,使得这样的测试变得毫无价值可言。目前来说,如果想解决这个问题,我认为如果让test leader同时参与需求调研,重新确定测试范围,这种方法未必有效果。原因有以下几点:1.test leader本身并不熟悉所有系统业务,也不太可能熟悉所有系统业务,在这种情况下去参与调研,怕是很难明确问题所在,确定下的测试范围会不准确。2.test leader本身并不参加测试,这一个人对需求理解的在透彻,也不可能手把手去带着测试员去完成任务,把范围划出来,给下面的人员执行起来效果如何,还很难说。

    我始终认为,测试做的好与不好,关键在于对测试的认识,对项目的认识和做事的态度。目前给我的感觉就是,SRS里写上的东西就测,一些其他的旁支末节的东西,看到了也不会去测,完成分内事而已。当初一直抱怨SRS写的不好,测试不到,现在看来,写的不好,到不如写的好。文档不清楚,会导致测试员不停的去研究究竟是怎么回事,去和开发沟通确认很多细节,而这些细节,就是非常关键的东西,在文档写的不是很好的情况下,很多细节都是测试员自己想象出来的。而现在在文档十分清晰的情况下,测试员丧失了这种思维,固定在这些界面操作上,思维被文档所诱导,实在是很悲哀又很有意思的一件事情。

    我老觉得管理层都把下面的人给惯坏了,好像太重视每一个人的得失。就一个团队而言,我始终认为是以公司利益为首,完成任务,保证质量是第一;什么个人发展啊之类,从公司管理层面不客气的说,那是次要的。虽然团队整体的综合实力需要提高,但是那也是在有这样一个需求的情况下,由管理层有目的的培养个别人而产生的。如果公司根本不需要做性能测试,我要底下的人学什么LOADRUNNER啊,纯粹浪费时间。

    现在组里没有什么朝气,原因可能有这么几个:1.工作重复太无聊;2.领导对他们太客气;3.压力不大;4.综合因素导致他们个人思想占主导地位,安排的任务喜欢做就做,不喜欢做就拖。5.综合实力不高,导致对未来发展不明,外加人的天生惰性,导致比较懒散,一个带一个,搞的基本都是无精打采。

    造成这种情况不是一朝一夕,想改变也不是一时半会。我自己自恃也没那么强的能力,带动所有人改变,这个牵涉的因素太多,有的我无权决定,有的是人的基本思想观念问题,想改变很难。目前李凯辉的积极性很高,不过如果整体大环境不改变,这种积极性也会慢慢的泯灭。良好的局面不是单靠几个人的努力就可以形成,有一个良性循环很难,寻求一个公司利益与个人发展共进步的局面也很难。人总是要靠自己,想自己良好的发展,必须自己积极,而不是靠别人来安排你,让你取的进步。

    就需求这点来看,目前我也没想出什么更好的方法去改变现状,可以先按调研的方法去尝试一下。

     

    在来说说这个组织架构的问题。

    从整体项目流程来说,提交测试后,基本都会交付组长负责处理,test leader 本身不会接触到项目具体的事宜,这样就导致了很多问题都是组长直接去和开发那边处理,这个腰部的位置,其实是一个累赘。从职责上来说,目前leader其实扮演着测试经理的角色,而组长是leader的角色。而这个四层体系的最高层有一个相当于高级经理的人,而这个人才是对整个项目有决定权的人。这个概念等于就是一个项目经理上面有一个高级经理,而项目经理没权利去决定项目本身的一些事宜,组员有时有的事情也不像项目经理汇报,而是向高级经理汇报,形成一个混乱的管理局面。目前组内差不多就是这样,好像职责不清的感觉,有些事情,经理知道leader不知道,有些leader知道而组长不知道,对某些问题处理起来就没那么顺畅。

    目前基于这种四层体系,我也不清楚处于腰部,应该做些什么,哪些应该我做,哪些应该组长做,而长此以往,我自己的进步也是微乎其微。

    就管理本身而言,我觉得强硬的作风并不是不可取,软硬兼施才是合适的谋略。对做的有问题的人要严厉处罚,对做的杰出的人要给予奖励。不过说到底,不管是组长还是leader,都没有相应的权利,今天除了测试经理站出来要这样那样,组里人会听听外之外,如果要把我们的管理理念和方法应用到他们身上,怕是没人搭理我们。给我感触很深的就是,号召大家去开会的时候,不管是经理号召还是我号召,一个个都慢慢吞吞,慢条斯理的过来,这种小事就直接反映了目前的状况和问题。XWL的管理作风之所以吃的开,很大原因是因为他有权直接处理一些事,而并不是他人格魅力有多高。

    公司在逐渐改变,高层对这个组的支持程度也是十分关键,就目前来看,不管是抽调人手还是对培训的态度,感觉都满随意的,所以给我感觉就不太好。可能有些事情大家都看在眼里,所以积极性就会比较低。

    这其实是一个恶性的循环,就我本身而言,对没什么积极性的人,我更没积极性去督促帮助他们进步。我觉得其实团队本身并不是十分稳定,包括人员,制度,职责,能力,配比,测试质量等等,在这样的情况下,应该先稳稳,在寻求更进一步的发展。

    大致先写这么多,对团队发展起到影响的因素很多,我的感觉有两句话说的很好: 1.世上不存在完美。 2. 细节决定成败。关于组织架构方面,不知道想法是不是正确,如果这种架构不变,腰部这个关键点的职责又是什么?

  • 软件评测师考试经验分享

    ppent 发布于 2007-02-02 10:40:13Top 1 Digest 1

    07年的软件评测师考试报名又开始了,最近很多测试朋友也很关注,并对软件评测考试充满了好奇,论坛上也有一些讨论和交流。由于本人去年幸运的通过了软件评测师考试,因此将一些心得分享给大家,同时欢迎参加过考试的朋友也来谈谈经。

    一些说明
    计算机技术与软件专业资格(水平)考试分为初级、中级、高级,其中软件评测师属于中级。软件考试每年有两次,但评测师只有上半年才有。通过了这个考试,相当于中级职称。软测的考试年龄只有两岁,2005年5月第一次进入考试范围,可以说它是新生的充满活力的生命,成长空间很大。很多测试人员都不知道有这个水平考试的存在。据说前两年考试通过率都比较低,10%不到。

    软件评测师考试意义
    现在考证是个趋势,但说实在的,软考证书个人现在不觉得有什么实际用处,可能大多数软件公司并不会因为你获得了软件评测师资格或是中级职称就升工资(少数公司福利好的可能会有),也许在找工作的时候会有点帮助吧。
    倒是备考过程中的学习意义比较大,毕竟很多基础的知识的记忆都不是很牢固,回过头去巩固学习别有一番体会,也会触发更多工作方法的灵感。即使通不过自己的知识也增长了!
    另外,如果能通过自己努力,在10%通过率下顺利通过,也是很有成就感的啊 ,咔咔。

    备考经验
    备考的复习资料主要有考试大纲、指定教材软件评测师教程、以及一些试题及答案分析。我觉得评测师教程不错,条理很清晰,阅读起来比较容易理解,我现在还一直作为手册来用。个人建议在考试前至少两个月就要开始复习备考了并做好学习计划,因为一开始还是比较难以进入良好的学习状态,同时需要复习的内容也很多很细需要一定的时间去理解消化,如果备考时间不足临时抱佛脚就不太好了。当然个人情况不一如果你原来基础就很好那也不需要。另外一些章节后面的习题也要做一下并弄懂解答原理,因为有一些考试试题就是类似的。
    把考前的心态调整好比较重要。不要理解为去应付考试,这样很消极对备考不好,我们可理解为平时难得有机会这么系统的去学习,借助考试的机会好好的复习一把。这样的会就比较容易找到动力了。同时最好不要有侥幸心理。
    考试分上午题和下午题。上午题主要是考基础理论,考的范围很广很细,这要求备考时准备充分一下,考试内容大部分都来自教程;下午题考实战的,需要理论加实际工作经验了,但大部分还是书本上有的。比如去年考的安装测试要点、单元测试路径、圈复杂度计算、性能测试等。
    我的体会是只要备考充分加上一些工作经验还是比较好过的,也有人说去年的试题比较简单,不知道是不是。

    软件评测师和测试工程师的区别
    从字面理解上,评测就是测试+评价,以测为主,测完后再加上评价。个人理解,软件评测师只是一个考试的名称、资格的名称,而对应到实际工作中,仍然是测试工程师。并且,好像国外也没有评测师这一叫法?中国特色?

    获取证书之后
    通过了考试获取证书之后必须每3年到教育办公室(名字记不清了)进行登记,登记时需要出示继续教育证明。意思是通过考试之后每n(n>=1)年还要参加继续教育才行。这个比较麻烦。另外软件评测师只是中级职称,之后我们就要继续向高级职称的考试(信息系统项目管理师、系统分析师、系统架构设计师)挑战了,呵呵。

    最后祝大家顺利通过考试,到时来这里给我报个喜,^_^!

  • 软件过程改进的人文途径(SEPG 2007 China 演讲稿)

    thinker 发布于 2007-12-14 12:43:56

    诸位朋友,嘉宾:

        在开始演讲前给大家讲一个寓言,也算是一个笑话。寓言是这样的,

        在一架飞机上,乌鸦对乘务员小姐说:“小妞,给爷来杯水!坐在旁边的猪听后也学道:“小妞,给爷也来杯水!”,乘务员小姐把猪和乌鸦领子一提,扔到机舱外。乌鸦拍拍翅膀,笑着对猪说:“你还真是猪头啊,傻了吧?爷会飞!”。

        这个寓言告诉我们,外界因素是一种约束条件,自身能力也是一种约束条件。所以,别人能成功的事,未必自己就能成功。

        对于CMM/CMMI和过程改进来说,我们有些企业扮演的是乌鸦的角色,也有不少的企业扮演的是猪的角色。今天我们的主题就是关于从猪的角色转变为乌鸦的角色的一些人文方面的途径。

    首先,让我们来看看目前很多企业在实施CMM/CMMI方面的问题。

        (1)实施成本高,不少公司在实施后走向玩命生涯。大家去查查国内第一家过CMM和第一家过双五的企业,看看他们现在的一个境况如何。我想你们比我更清楚。我的意思不是说实施CMM/CMMI企业就会败落,有不少企业,包括这次来的很多嘉宾所在的企业,他们的企业在实施CMM/CMMI后业务反而做得很好,为什么,有一点是值得注意的,成本问题。试想一个二三十个人的小公司去实施CMM/CMMI,你们算算多少费用,这样的小公司有多少资金可用。没等实施完,早弹尽粮绝了。所以,没半斤的肚子,就不要吃八两馒头,免得气胀和消化不良。

        (2)形式主义加教条主义,我称之为“双症教育”,国内通过CMM/CMMI的企业,实施时靠个“GOLDEN PROJECT”的模板项目骗CMM/CMMI认证的公司多的是,我的先前曾经呆过的一家公司在过CMM 4认证的时候,评估师居然在验收时,面对测试团队,居然没有提一个问题。难道真得没有问题了么。做事讲究的是一个态度,做人讲究的是一个“德”字,很多认证在国内被做烂掉的一个原因就是个“形式主义”。形式主义缺什么,甲方缺做事的态度,乙方缺德。相比形式主义来讲,教条主义也好不到哪里去,一个公司的制度太过于教条,整个公司就会死气沉沉,缺乏活力。关于教条主义的来源,我将在后面给大家讲述。

        (3)第三条,我们称之为偏见,这是技术人员出身的人常常犯的错误。我也常常犯这种类型的错误。记住“软件行业无一包治百病,立竿见影,药到病除的狗皮膏药体系和方法。”我是学中药出身的,中药里基本上没有只用一味药的,只有调和各个药的作用,才能发挥最大的药效。一个企业的质量问题同样地,不是仅仅关注于过程就能达到的,过程是人做的,有缺德的人和高尚的人,有先进的技术手段和落后的人工手段的,自然会有过程改进的效果不同。不然的话,为什么不去找个文盲来做过程改进。所以,我们在实施CMM/CMMI的时候,不要以偏概全。只重分析,不重综合。过程、人、技术,软件过程三要素,缺一不可。

        (4)目前的很多咨询师在CMM/CMMI方面,仍然轻视人在软件开发中的核心作用,以为有了机制,对人的要求反而不是太重要。机制在一定基础上可以降低对人员素质的要求,但不是没有要求。在座的嘉宾们有很多是名企,一样过CMM/CMMI认证,你看看他们的人材招聘要求,不但不低,而且很高。为什么,人是软件行业赖以生存之本。所以不要把人当机器,机器是没有思想和创造力的,人有思想,有创造力。这就是各位为什么生气勃勃的在这里参加大会的原因,因为我们都是有思想,有创造力的新人类。

        我们接下来谈谈过程改进咨询和实践中遇到的最为常见的问题。这些问题目前是目前的过程改进流程中做不到的一些方面。

         (1)执行力不足

        过程改进强调给管理者、实施人员足够的权限,讲求“授权”二字。很不幸的是,尽管有了授权,相关的过程改进实施执行方面仍旧是拖拖拉拉,大家都在磨时间。这个结症往往出在项目组长和项目经理方面,有法不依。我先前的一家公司的老板,为了这个问题,解雇了所有的中层管理人员,其结果大家可向而知,公司去年倒闭了。可以说,执行力低下这个现象不单是实施过程改进的企业,基本上所有行业都会有这个问题。殡仪行业也许是个例外,所以我们要高歌一曲“学习殡葬好榜样,高效快速执行力强”。至于执行力不足的原因,我在后面的激励机制中将有所阐述。

         (2)软件质量仍然达不到要求

        我们都知道,软件质量的源头是需求,软件质量的关键是过程。但是,就目前来说,过程改进的一大不足就在于没有真正深入到质量的源头,没有参与到客户价值过程中去。我见过很多公司SEPG成员参与到软件开发的洪流中,热火朝天。但是很少看到SEPG的人员陪同开发人员、市场人员和客户进行业务沟通。或是审查过业务销售的报告和需求单据。往往就是这不经意的一步,对后续的需求质量乃至业务的获取影响至远。

         (3)流程过于形式化,重数据而不重本质

    我看到这次一个嘉宾的文章,有关标杆数据的,写得非常好,非常有借鉴性。但是在实施过程中,我讲了,人的态度决定一切。最主要的在于数据采集的主观意志太强。这是因为,就软件质量属性来说,有的东西只能定性,比如代码风格好坏,精炼程度,文档正确性和书写的优美性,很多都是模糊的,比较难以数量化,这些模糊的东西不是不可以量化,而是量化所需的成本太高或是算法太复杂。这好比“多少根头发的人算秃头一样,多一根少一根会影响评定结果吗”一样,我们只要给个定性的结论就可以了,但是在标杆数据里,定性的东西却没法处理,我们的SEPG组织总是吹毛求疵的追求最终的数据结果,最后才发觉自己没事瞎白活。此外,很多公司的过程改进中,强调文档的数量而忽略质量,重文档形式而忽略其实质内容。结果是过程改进好像没有给软件质量带来提升。这不是过程改进的错,如木桶理论所言,要达到质量的提升,过程改进有必要在木桶的短板上做足十分的功夫。

     引起上述情况的根本根源,我们认为这在于东西方的文化冲突,主要体现在“人治”和“法制”的均衡上。

        (1) CMM/CMMI的核心思想

        CMM/CMMI的核心思想为三权分立,我们的CMM/CMMI创始人可是标准的孟德斯鸠的门徒。

        我们现阶段的司法体系也如此,可以说,我们可以把CMM/CMMI模型当作公司项目开发的小的司法系统,联想一下中国社会上的司法种种现象,你就不难想像我们的小司法系统也会出现哪些同样问题。

        过程改进体现的是“三权分立”的思想,强调的是职责明确和授权,但是中国企业现实中更多的是要如何解决“秃头人问题”。这是因为西方人求真,东方人务实。 胡适先生讲过,“多解决些问题,少谈些主义”,在这里也是同样适用的,过程改进不能只是空谈,而是要反应到企业具体的实际问题中去。


        此外,从CMM和CMMI的“三权分离”(制度化)理念和持续改进(完美主义)来看,往往忽略了人在软件质量中的核心作用和企业环境对CMM/CMMI的支持作用。这是西方人和东方人不太的地方,西方人考虑问题时,往往将主题对象从环境中剥离,而东方人的思维里,常常考虑的是主题对象和环境的交互作用。既然思维方式不同,所以行为方式自然也不同。

         (2)CMM/CMMI的初衷

        CMM/CMMI的初衷是为了提高软件开发的质量和效率。但是大企业的效率和小企业的效率问题的本源不是一样的。

        大企业的效率问题来至于制度的盘根错节,是制度与制度间冲突的效率问题。

        小企业的效率问题来自于毫无章法带来的效率低下,与大企业有本质差别。

        一个需要“化零为整”,另外一个需要“从无到有”。

        制度设计的理念体现为“公平、高效”四个字,对于大企业来说,更兼顾于“公平”、而小企业来说,更兼顾于“效率’。所以我们在实施过程改进时,首先应该考虑到企业的一个规模因素。

     

        在实施过程改进的人文途径方面,首先我们要树立以下一些思想,对我们理解过程改进的人文途径至关重要。

       1.不要一来就叫嚣改变企业文化,过程改进只有适应企业文化环境才能有发展。

        一个企业文化是企业经过长期的进化、演变而积累的东西,是一个企业精神价值的所在。不是靠开开会,给公司领导洗洗脑就能够改变的。过程改进不能违背企业的基本价值观。过程改进只有审时度势,在公司大环境允许的条件下进行适当的改良,以适应公司的基本环境,然后才能谈改变。因为没有人喜欢变,因为变化很多情况下意味着原有积累的丧失和风险,除非新产生的价值能够弥补已有的沉淀成本。反过来,过程改进只有发展了才能改变企业文化,以一种循序渐进的方式,不断的对企业文化进行改良,但企业的基本价值观是不能动摇的。在很多方面,客户利益是放在第一位,因此在项目开发中会出现不按过程改进原有措施做的实例。一个紧急的单子或是问题,可能是先做后补单。如果什么都按既定步骤,医院死人人数不知要翻几番。企业就会流单子,流单子老板要骂人,最后就是将“制度奴隶”扫地出门。

        2.过程改进与客户利益的关系

        企业是目标是生存和盈利,而不是过程和制度。但制度和过程可以影响企业的生存和盈利。先进的理念如果不能给公司带来真正的效益,那么说明理念本身的适应性有问题。对于过程改进来说也是同样的道理,过程改进如果不能给公司带来真正的效益,那么说明过程改进这个理念本身适应性有问题。因此,除开发过程中需要导入过程改进机制外,客户价值过程中也应该导入过程改进。通过客户价值过程改进、赢取合格的客户需求,比事后进行过程控制要好的多。需要提醒的是,过程改进在客户价值流程方面要力求务实,而不是新的教条主义。

        3.过程改进要协调好利益干系人的利益关系

        为什么过程改进在具体的实施中会有太多的阻力?下面给出一些项目经理和开发人员给出的推卸之辞:

            1.过程改进没有按项目大小和紧张程度进行剪裁

            2.过程改进总是太过于公平,忽略效率

            3.我从过程改进中没有获得任何好处,工作量倒是增加不少

            4.给我一个式样模板对于我来说更为急需,过程这种看不到的东西就算了

            等等

        与其大谈过程改进要改变人的思想,不如事先分析一下相关干系人的利益情况,这样你就会知道,谁在过程改进中支持你,谁在过程改进中反对你,以及如何有的放矢的应对。项目管理中的一个核心不也是项目干系人分析,过程改进适合同样的情况。

        为什么?因为人的本性都是趋利的。毫不利己,专门利人,你们当中有多少人能做到。每个过程改进所影响到人员在企业内都有自己的利益和自己团队的利益,如果你的过程改进损害到这些人的利益或给他们造成麻烦,谁来支持你。这里面就涉及到一个利益均衡的问题,这点在中国企业制度的建设中非常重要。其实在国外企业,也是同样的重要。不过外国人不会告诉你,他们也有“面子文化”。

     过程改进有哪些人文途径,我简单的讲述一下自己的一些体会:

        (1)在过程改进中将授权机制变为激励机制

        没有激励,仅仅只有“授权”是完全不够的。传统的过程改进总是强调授权而忽略激励,根据制度经济学的论断,制度的接纳的最优途径是激励,而不是授权。激励可以激发过程改进人员、项目管理者、底层开发员工的积极性。权益,权益,为什么项目管理层在授权后老是拖拖拉拉或者是阳奉阴违,因为他们只有权,没有益。换个角度思考,你会不会去做一件跟你完全毫无利益的事情。最简单的例子,就是包产到户,包干到户。一个没有激励只有授权的团队意味着团队的人员只有责任,没有权利。而从人的本性的黑暗面来说,人是风险规避的,也就是责任逃避的。

        激励机制可以有很多做法,最简单的就是绩效公示,不过这种做法会太过于打击新手,因此可以采取一些隐性的激励手段,比如项目提成和团队补贴或是精神激励等。如我前面所说,没有一种方法能够单一取得最优效果,因此在实施过程中要结合使用。对于惩罚,没必要公示,中国的技术人员最爱面子,以教育为主。如果实在是“朽木不可雕”,就扫地出门,扔掉把。


        (2)取消无限、持续的过程改进说法,讲究适可而止,阶段性提升

        无限、持续过程改进体现了我们这些技术出身人员最大的一个人性缺点,同时也是人性的优点之一,追求完美,没有最好,只有更好。但是从企业成本和过程改进成本来说,未必就值得。为什么?我举考试的例子,大家考60分需要复习一个小时,从60分到70分肯定不止一个小时,70到80分呢,80到90分呢,100分就更不要说,投入的精力和时间太大,而且稍微闪失就不能达到。过程改进也是一样的。如同经济学边际递减规律所提到的,如果过程改进的投入要素连续地等量增加,增加到一定值后,所提供的过程效果的增量就会下降。追求完美是没错,但是要考虑过程改进的成本,企业的预算是有限度的。这是其一,此外,项目的过程改进也得有个适应期,每个项目都要在前面一个项目上持续地改进,项目开发人员只能愈来愈抵制。因为他们在还没完全适应的基础上又得匆匆忙忙去适应下一个项目的新过程。一个字“累”。

         (3)尊重80-20规律,精英意识与平民意识并举 
        我跟一个CMM/CMMI的咨询师曾争论过这个问题,他跟我讲,你一味强调人,你还没领略CMM/CMM的思想。什么思想,我称之为“民工思想”,在他看来,通过先进的制度和理念可以去除人带来的影响。没错,任何先进的管理制度都在解决这个问题,但是很不幸,人的能力是有差异的。制度要解决的是人的劣根性,激发人的善性,我们的软件开发不是体力劳动,而是有创造性的劳动。我们的管理层都是团队精英,在很多公司,我收到他们对过程改进的一些反馈:

        为什么管理层人员和技术强人大多抵制过程改进?

            1.  增加工作量

            2.  太过于教条,不考虑特殊情况和紧急情况

            3.  职责变多,无法“踢皮球”

            4.  个人作用不再受重视

            5.  管理成本增加

        你们可以看到,大家都是“唯利主义者”。大家之所以在你们现在的岗位上,是因为你们相对与其他岗位的人员有着相对的“性价比”优势,如果一个制度能抵消掉这方面的优势,那这个岗位没你做也没关系,既然有没有你都无所谓了,你的生存价值何在,你不抵制这个制度才怪。所以,有时候制度需要一点人性化的东西在里面。我前面说过,有很多是名企,一样过CMM/CMMI认证,你看看他们的人材招聘要求,不但不低,而且很高。高素质的人材是潜力股,潜力股要看未来,就个人行为来说,短视者居多,对于企业来说,不能吃了上顿没下顿,潜力股是企业未来保证。

             (3)将客户价值的商业流程纳入到过程改进中来

        为什么过程改进在企业内部不受重视,不被人理解。没有把客户价值创造的流程包括在过程改进中是一个主要的原因。我们进行过程改进时,不要只考虑公司内部的过程改进,尽可能的把价值链上所牵涉的业务对象也加入流程。软件质量低下跟没有将客户价值的商业流程纳入到过程改进中也有关系。客户的需求是软件质量的本源,单靠我们自身能力不足以 完美无缺,需要客户参与到过程改进中来。否则,你无法预知需求获取之前的东西和需求的质量。实际上很多企业的销售工程师和系统分析师都需要过程人员的协助,包括客户。我们的客户经常会问,你们那边的商务流程是怎么样的,需求流程是怎么样的。过程改进在此时就体现了了它的重要性和必要性。换个角度来说,将客户价值的商业流程纳入到过程改进中来,还可以改变过程改进的“成本中心”形象,由于过程改进参与到企业利润源头的工作中来,往往会获得更多公司内支持。

     

    (4)过程制度建立和完善要依据分工规模

        如何剪裁和划分过程制度的颗粒度,这是最为企业过程人员头痛的事情之一。我们从经济学的分工理论上来看,过程制度建立和完善要依据分工规模。

        制度划分理论是这样的:

        制度划分的力度取决于组织的容量。

        同样过程改进的剪裁和力度划分需要按照团队和项目大小来进行调整。分析与项目目标相关的领域的相关性。比如较为低层次的对日外包项目,过程改进活动一般着眼于代码审查和测试复核。而对于产品开发来讲,过程改进关注的中心往往是首尾,一个市场需求的式样化,一个是市场反馈系统完善过程。

        还有一点要提醒的是,交易费用理论对我们也有十足的借鉴性:

        随着组织规模增加,交易成本将越来越大。

        因此对于大项目来说,如何对沟通方面的改进会变得攸关重要。过程改进的实施的效果将取决于沟通的流畅性。

        我们可以总结为:

        大企业、大团队、大项目,过程改进的重点在于沟通的流畅性。

        小企业、小团队、小项目,过程改进的重点在于过程颗粒度的划分。


        (4)构建成熟的人力资源成熟度模型

        为什么我们要引入人力资源成熟度?1.

            1.我们确保合适的人在合适的职责岗位上,才能获得最大的工作效果。

            2.过程是要靠人来抓住,人来管理,不是制度摆在那里就算完成了。

            3.进行诸如软件开发这样的脑力劳动需要高素质人员

        过程改进实践往往忽略环境和上下文,有的过程改进甚至需要由顶级专家构成的团队才能施行。没有合格的员工开发不出合格的软件,没有合理的制度,创造不出高绩效。因此,过程改进中,不可缺少人力资源的支持。这跟CMM/CMMI的开展过程教育的宗旨有一定的重合空间,是不违背的CMM/CMMI的“洗脑战术”理念的。


    (5)构建合理、公平的劳资、福利体系,并与过程改进相挂钩

        过程改进要能顺利实施,离不开公司的福利制度。任何一个企业里,没有人会跟钱过不去,但会跟过程改进过不去。将过程改进和员工的福利劳资挂钩,会从很大方面加速过程改进的力度和提高过程改进的效果。当然人是IT企业的立身之本,过程改进需要优秀的人材参与,有些CMM/CMMI企业,自身福利薪资太差,就算你现在过了CMM/CMMI,你又能好到哪里去。近期的钱你是赚足了,但是远期呢。大家有空可以去看看IT红黑榜,看看我们的CMM/CMMI企业有多少在黑榜上,然后预测一下企业存活期。实际上,你们不用预测,你看看这些公司的效益值,就不难发现,口碑差的企业大部分还真是举步维艰。

     (6)以经济效益为考核杠杆,通过过程改进提升企业效益

        经济效益是企业生存的指标,任何企业的制度,理念,无一不是以合法合理的经济效益为最终目的。要获取企业高层领导及管理层(我这里指的是有心搞好CMM/CMMI,过程改进的企业领导,不是为了骗国家资助,玩形式主义的领导)的大力支持, 首先要灌输过程改进的 “节钱”观念。其次,过程改进的最终目的还是通过提高软件质量从而提升企业的经济效益。如果一个过程改进对企业效益没有任何作用,这样的过程改进不可能长久,也没有存在的必要。我的经验是,分析过程改进中流程与效益的相关性,扶正去负。经过一段时间的过程改进适应后,会做相关的效益评估报告。这样的做法可以去除公司员工对SEPG的成本中心看法,获得公司整个上下文环境的支持。从另外一个侧面讲,让SEPG人员和QA人员知道自己所做的贡献值,增强对过程改进的信心,做出更为出色的成果。

         过程改进的人文途径总结:用生态学观点看过程改进,创造和谐的人文环境

        我们把企业当作是一个生态系统,过程改进犹如人之进化。进化的本意是先适应后改变,现在到处都在提倡和谐,过程改进也一样,我们考虑过程改进的时候不单单只从过程改进本身出发,更重要的是,联系上下文环境,尊重员工。只有为过程改进创造一个和谐的人文环境,才能够做好过程改进。

        我的演讲到此为止,谢谢大家。

  • 微软测试工程师面试题

    lihang617 发布于 2008-09-27 17:49:01

    1. 你如何在pocket pc 上TEST 你的程序. 你考虑了哪些方面.

    2. 如果将你的程序的语言扩展到非英语,例如中文, 你如何测试.

    3. 给你一个COCAN, 你如何测试(解释说就是罐装的可口可乐).

    4. 当你的程序遇到BUG的时候,你选择怎样处理.

    5. 你如何isolation 你程序里的BUG.

    6. 给你一个产品有10个functionality,如果时间紧迫, 只能测其中的5个, 你如何选择.



    其它相关:

    如果别人问我这些题目,我想我会大致这样回答,各位从事软件测试的同志们帮我看看回答的怎么样。

    01. 为什么要在一个团队中开展软件测试工作?

    答:软件测试在整个一个团队中占有非常重要的地位,具体来说就是测试是一个发现软件错误的过程,执行软件测试会以最少的人力和时间,系统的找到软件存在的缺陷和错误,建立起开发人员和使用者对软件的信心。

    02. 您是否了解以往所工作的企业的软件测试过程?如果了解,请试述在这个过程中都有哪些工作要做?分别由哪些不同的角色来完成这些工作?

    答:软件测试部门配合系统分析人员软件需求分析讨论,并根据需求说明书制定《项目测试计划》,编写测试用例,建立测试环境。
    软件测试人员负责软件开发部门的新产品测试及原有产品的升级测试,负责软件问题解决过程跟踪,负责软件开发文档开发工作的规范化及管理开发部门的产品文档,制作用户手册及操作手册,负责产品的上线测试,监督软件开发过程的执行,提高产品质量。

    03. 您是否了解以往所工作的企业的软件开发过程?如果了解,请试述一个完整的开发过程需要完成哪些工作?分别由哪些不同的角色来完成这些工作?(对于软件测试部分,可以简述)
    答: 需求人员连同系统分析人员&测试人员开会讨论需求。系统分析人员写出需求分析说明,并连同系统分析人员&测试人员&需求人员开会 讨论可行性。系统分析人员写出详细设计说明书,程式人员编码,给出系统流程图。交与测试人员,测试人员给出Bug统计表。

    04. 您在以往的测试工作中都曾经具体从事过哪些工作?其中最擅长哪部分工作?
    答:从事过write test plan,creation of test case,进行功能测试,性能测试,编写测试工具,文档的管理等,比较擅长与写测试用例和进行功能测试。

    05. 您所熟悉的软件测试类型都有哪些?请试着分别比较这些不同的测试类型的区别与联系(如功能测试、性能测试……)
    答:有功能测试,性能测试,可靠性测试,安全性测试,负载测试,压力测试,安装/卸载测试,启动/停止测试,兼容性测试,互连测试,文档测试,恢复测试,回归测试,可使用性测试,容量测试。
    功能测试只对软件的功能是否满足用户需求来做测试。性能测试需要和压力和负载测试联合起来。

    06. 请试着比较一下黑盒测试、白盒测试、单元测试、集成测试、系统测试、验收测试的区别与联系。

    黑盒测试:把测试对象当成一个黑盒子,测试人员完全不考虑逻辑结构和内部特性,只依据程式的需求说明书来检查程式的功能是否满足它的功能说明。
    白盒测试:把测试对象当成一个透明的盒子,允许测试人员利用程序内部逻辑结构及相关信息,设计或选择测试用例,对程式所有逻辑路径进行测试。
    单元测试:白盒测试的一种,对软件设计中的单元模块进行测试。
    集成测试:在单元测试的基础上,对单元模块之间的连接和组装进行测试。
    系统测试:在所有都考虑的情况下,对系统进行测试。
    验收测试:第三方进行的确认软件满足需求的测试。

    07. 测试计划工作的目的是什么?测试计划工作的内容都包括什么?其中哪些是最重要的?
    答:测试计划工作是对测试工作内容的一个有效的组织和规划,能保证测试工作有效的展开。测试计划工作包括测试目标,测试范围的定义,测试方法的选择,测试进度里程碑,测试资源的有效配置和管理。
    测试计划工作也称为测试策略,主要描述测试工程的总体方法和目标,描述目前在进行那一阶段的测试(单元测试,集成测试,系统测试)以及每一阶段内进行的测试种类(功能测试,性能测试等)确定测试范围,生成测试数据等。
    其中软件计划中的测试目标最重要,他的软件测试的所需要达成的最终结果。

    08. 您认为做好测试计划工作的关键是什么?
    答:1. 明确测试的目标,增强测试计划的实用性
    2. 坚持“5W”规则,明确内容与过程,'what''why''when''where''how'
    3. 采用评审和更新机制,保证测试计划满足实际需求
    4. 分别创建测试计划与测试详细规格、测试用例

    09. 您所熟悉的测试用例设计方法都有哪些?请分别以具体的例子来说明这些方法在测试用例设计工作中的应用。
    答:有黑盒和白盒两种测试种类,黑盒有等价类划分法,边界分析法,因果图法和错误猜测法。白盒有逻辑覆盖法,循环测试路径选择,基本路径测试。
    例子:在一次输入多个条件的完整性查询中。利用等价类划分法则和边界分析法则,首先利用等价类划分法,可以一个或多个结果是OK的测试用例,然后确认多个NG的测试用例,然后利用边界值分析法,可以对结果分别是OK和NG的测试用例进行扩展和补充。

    10. 您认为做好测试用例设计工作的关键是什么?

    答:测试用例设计工作的关键是对可行的和不可行的都要考虑。
    1,输入 2,详细的操作步骤 3,预期输出 4,实际输出。

    11. 请以您以往的实际工作为例,详细的描述一次测试用例设计的完整的过程。

    12. 您以往的工作中是否曾开展过测试用例的评审工作?如果有,请描述测试用例评审的过程和评审的内容。

    13. 您以往是否曾经从事过性能测试工作?如果有,请尽可能的详细描述您以往的性能测试工作的完整过程。

    14. 您在从事性能测试工作时,是否使用过一些测试工具?如果有,请试述该工具的工作原理,并以一个具体的工作中的例子描述该工具是如何在实际工作中应用的。
    答:有使用过LoadRunner,该工具能够录制测试人员的操作步骤,然后对这个操作步骤模拟出多个用户来播放出来。
    1。Visural User Genertor创建脚本,选择协议,录制操作,编辑操作。
    2。中央控制器(Controller)调度虚拟用户。创建场景,选择脚本,建立虚拟用户,设计shedual,设置ip spoofer。
    3。运行脚本。分析shedual。
    4。分析测试结果。

    15. 您认为性能测试工作的目的是什么?做好性能测试工作的关键是什么?
    答:性能测试工作的目的是检查系统是否满足在需求说明书中规定的性能,性能测试常常需要和强度测试结合起来,并常常要求同时进行软件和硬件的检测。
    性能测试主要的关注对象是响应时间,吞吐量,占用内存大小(辅助存储区),处理精度等。

    16. 在您以往的工作中,一条软件缺陷(或者叫Bug)记录都包含了哪些内容?如何提交高质量的软件缺陷(Bug)记录?
    答:检测时间,系统环境,硬体环境,严重程度,程式版本,确认人,功能模块,问题描述,详细操作步骤,是否会重现。
    问题描述和详细操作步骤要尽可能的详细。Bug应该尽量用书面语,对与严重程度比较高的缺陷要在相同环境下在测试一遍。

    在C/S模式下,如果条件满足可以使用替换法来确认是client端的问题还是server端的问题。


  • 国外软件测试工程师面试题

    lihang617 发布于 2008-09-27 17:54:08

    The readers are welcome to submit the answers or links with appropriate answers.

    1. Why did you ever become involved in QA/testing?
    2. Wha is the difference between QA and testing?
    3. What is the testing lifecycle and explain each of its phases?
    4. What is the difference between testing and Quality Assurance?
    5. What is Negative testing?
    6. What was a problem you had in your previous assignment (testing if possible)? How did you resolve it?
    7. What are two of your strengths that you will bring to our QA/testing team?
    8. How would you define Quality Assurance?
    9. What do you like most about Quality Assurance/Testing?
    10. What do you like least about Quality Assurance/Testing?
    11. What is the Waterfall Development Method and do you agree with all the steps?
    12. What is the V-Model Development Method and do you agree with this model?
    13. What is the Capability Maturity Model (CMM)? At what CMM level were the last few companies you worked?
    14. What is a “Good Tester"?
    15. Could you tell me two things you did in your previous assignment (QA/Testing-related hopefully) that you are proud of?
    16. List 5 words that best describe your strengths.
    17. What are two of your weaknesses?
    18. What methodologies have you used to develop test cases?
    19. In an application currently in production, one module of code is being modified. Is it necessary to re-test the whole application or is it enough to just test functionality associated with that module?
    20. Define each of the following and explain how each relates to the other: Unit, System, and Integration testing.
    21. Define Verification and Validation. Explain the differences between the two.
    22. Explain the differences between White-box, Gray-box, and Black-box testing.
    23. How do you go about going into a new organization? How do you assimilate?
    24. Define the following and explain their usefulness: Change Management, Configuration Management, Version Control, and Defect Tracking.
    25. What is ISO 9000? Have you ever been in an ISO shop?
    26. When are you done testing?
    27. What is the difference between a test strategy and a test plan?
    28. What is ISO 9003? Why is it important
    29. What are ISO standards? Why are they important?
    30. What is IEEE 829? (This standard is important for Software Test Documentation-Why?)
    31. What is IEEE? Why is it important?
    32. Do you support automated testing? Why?
    33. We have a testing assignment that is time-driven. Do you think automated tests are the best solution?
    34. What is your experience with change control? Our development team has only 10 members.
    35. Do you think managing change is such a big deal for us?
    36. Are reusable test cases a big plus of automated testing and explain why.
    37. Can you build a good audit trail using Compuware’s QACenter products. Explain why.
    38. How important is Change Management in today’s computing environments?
    39. Do you think tools are required for managing change. Explain and please list some tools/practices which can help you managing change.
    40. We believe in ad-hoc software processes for projects. Do you agree with this? Please explain your answer.
    41. When is a good time for system testing?
    42. Are regression tests required or do you feel there is a better use for resources?
    43. Our software designers use UML for modeling applications. Based on their use cases, we would like to plan a test strategy. Do you agree with this approach or would this mean more effort for the testers.
    44. Tell me about a difficult time you had at work and how you worked through it.
    45. Give me an example of something you tried at work but did not work out so you had to go at things another way.
    46. How can one file compare future dated output files from a program which has changed, against the baseline run which used current date for input. The client does not want to mask dates on the output files to allow compares. - Answer: Rerun baseline and future date input files same number of days as future dated run of program with change. Now run a file compare against the baseline future dated output and the changed programs’ future dated output
  • 测试用例图形化

    lilyhuang 发布于 2008-04-30 11:10:59

    现在很多的测试用例都是在规定的模板上堆着以后也不太会有人看的文字,一本接一本的,看得人云里雾里,还是没有搞清楚到底是要测的什么,也没有搞清楚要测的系统到底是要干什么。

    个人比较喜欢图形,在上个东家里做的系统都是跟图形打交道,认为图形其实是个很直接的东西。因为我的抽象思维很差,形象思维很好,很多东西要画出来,我一般都能知道是什么(印象派除外),而且人又很懒,不喜欢看全是字的东西。做了这么多年的测试工作,说起写测试用例,其实最多也就是1-2K行吧,不多,就是因为我不喜欢写,而且在写的过程中我也不知道我会写到哪里去,只能是写一些对付了事的,但总是能安全的没有被发现过关,也许也归功能我的测试执行其他跟我的用例并不是一样的,我的执行一定是比我所写的测试用例要多得多的。

    测试用例的图形化,在我认为其实也没有什么,就是在堆文字前,使用一些工具(现在在这方面开源的小工具很多)可以做出一些必要的图形,就像在做需求时,要做的需求分析一样,我们测试也可以没有必要一上来就抽出模板,不停的在上面写着自己也没有搞清楚的文字。

    那为什么不能直接就用需求分析时做出来的图呢(一般在需求时会做出一些用例图等),这些图太简单,只是一个大致的轮廓,如果按这图去做测试用例的话,真的写不出真正在后期执行中有用的用例,其实就目前我所做的项目中文字化测试用例的问题有这些:

    1、文字化测试用例是乏味的,因为全是文字,就象如果是看小说的话,一个人也一天也看不了两本书,更何况是没有情节的文字测试用例

    2、文字化测试用例是孤立的,虽然有文字说明他的接口,但并不直观,难以表现过程

    3、文字化测试用例是烦多的,一个小功能,就能写上成千上万行的用例,而且当需要修改时,那就更惨了,不是全推掉,就是让你找个半天然后改个一点

    4、文字化测试用例无法让不同的人统一理解的,当一个人写完一个测试用例,一段时间后,由其他的人接手做时,理解原来的测试用例不但花一定的时间,而且会对同一功能产生不一样的理解

    其实想想在做码case前,为什么我们不加入先把要写的测试用例图形化呢!现在很多人都在使用一种做脑图的工具(freemind),开源的,不错!可以把它应用到在测试用例前,先把整个系统在你脑子里的构造描绘出来,形成一个脑图(也可以叫做是一个系统的流图或是功能图等等),然后把这张图中的各个结点再去讨论,细化出更小的结点,再确认,最后在最小的结点中加入必要的描述注释,在关键的结点中做出标记,可以认为是重点测试,在描述注释中可写出相应的简化的测试用例,这样在测试团队中全体成图也就知道这个系统的功能以及关键是什么了!

    接下来做一些文字化的测试用例,对于一些特别重要的的结点可以做文字化的测试用例,以保证在测试覆盖达到最大。

    现在这种做图的工具很多,因为我用得多的是freemind,昨天刚看到一个叫keystone的,还没有用,不知道怎么样!但思想是一样的!

    先想到这么多了!

  • 关于探索性测试

    lilyhuang 发布于 2007-12-12 16:06:09

    前几天与同事在MSN上聊天时,不知不觉地就聊到了关于探索性测试,这个名词我不熟悉,只能现从网络上google一下啦(有网络就是好,但老是中毒就不好啦),具体解释如下:

    摘抄51testing:

    探索性软件测试是一种强大和有趣的测试方法。在某些情况下,它比剧本化的测试更高效。其实,每个测试员都在不知不觉地在用到探索性测试方法,但是很少有人学习和重视这种方法。现在是时候认识一下探索性测试方法了:科学的实时的思考。

     
    Concurrent Test Design and Execution
    同时设计测试和执行测试
            对探索性测试的最直白的定义是:同时设计测试和执行测试。这与剧本化的测试方法相反(预先定义好测试步骤)。探索性测试不像剧本化的测试,不会预先定义,不会严格按照计划开展。然而,即使是精确定义的测试步骤也会有很多有趣的细节遗留给测试员(例如:在键盘上敲击的速度、怎样的行为才认为是错误);即使是方式非常自由的探索性测试也会对测试产品的哪些部分作出规定,或规定采用什么测试策略。
     
            好的探索性测试者会把测试的想法写下来,并应用在后来的测试循环中。这些记录下来的东西看起来有点像测试脚本。
     
            探索性测试有时候会与即兴测试(ad hoc testing)混淆。即兴测试通常是指临时准备的、即席的bug搜索的测试过程。从定义可以看出,谁都可以做即兴测试。由Cem Kaner提出的探索性测试,相比即兴测试是一种精致的、有思想的过程。
     
    Balancing Exploratory Testing With scrīpted Testing
    平衡探索性测试与剧本化测试
            如果做到了下一项测试被我们所做的上一测试的结果所影响,那么我们就是在做探索性测试。当我们在测试循环之前不知道应该运行什么测试时,或者我们还没机会创建测试,我们应该更多地探索。
     
            如果我们正在执行剧本化的测试的时候,新的信息提示我们可以有更好的测试策略,我们应该转成探索模式(例如发现了新的错误需要进行调查)。
     
            相反地,当我们非常清楚我们要做什么测试以及怎样做时,我们应该采取剧本化的测试方法。新的测试相对没那么重要,执行测试的效率和可靠性的需要使得测试值得剧本化,值得我们把它们文档化并维护。
     
            探索性的测试结果与剧本化的测试并没有根本性的区别,两种测试方式是完全兼容的。像Nortel和微软这样的公司通常在项目中两种方法都使用。
     
    Why Do Exploratory Testing?
    为什么要做探索性测试?
            在有效的探索性测试循环管理中的重复主题是:测试、测试策略、测试报告和测试任务。测试剧本化的方式企图将测试过程机械化,从测试设计者的脑袋中把测试的思想抽取出来并放到纸面上。这种测试方法的好处很多。
     
            但是探索性测试者持这样的观点:把测试剧本化地写下来并按照它们来测试会破坏快速寻找重要问题这一智力的过程。这一智力的过程越丰富、越流畅,我们越有机会在正确的时间执行正确的测试。这就是探索性测试的威力所在:测试过程的丰富性只是受限于我们的思维的广度和深度,还有我们对测试产品的洞察能力。
     
            剧本化的测试是有它存在的意义的,我可以想象测试的效率和可重复性是那么的重要,所以我们应该剧本化或自动化测试。在测试环境间歇有效的情况下,例如C/S结构的项目,只有几个配置的服务器有效并且要在测试和开发之间共享。这种情形下我们应该把测试小心仔细地提前剧本化,以便能充分利用有限的测试执行时间。
     
            探索性测试在复杂的测试情况下会特别有用,对产品了解甚少的情况下会特别有用,或者作为准备剧本化测试的一部分测试。基本规则是:应该在你准备进行的下一次测试内容并不明确的情况下进行探索性测试,或者你希望把这些不明确的因素明确了。
     
        看了以上的解释,我能理解的就是一句话:先使用,再边测试边写用例
        我并不知道这样是不是最好的方案,但在实际工作中,我却是主要使用的方法,但我对这种方法也是一种无奈的选择,知道从软件工程上来说,应该先有设计才能去实施,但理论永远是赶不上实际的变化,理论永远只是理论,在考试中也许很有用处,但实际工作中还是得找出真正适合于自己的方法。
        其实对于测试去搞什么探索性方法论,个人认为不如好好去想想如果保证项目的过程,这样来得更有价值,测试中是项目过程中的一个部分,无论测试专业人员去发现如何如何多的可以提高测试的方法,但如果这个项目的赛程本来就有很大的漏洞,那测试再好出来的东西也没有价值,就是所谓的“皮之不存,毛之焉覆”。
        不过话说回来,对于测试人员来说,考虑到这一点是应该的,但是为什么不能再把要考虑的东西提高一点呢!项目过程可能都只认为是那几个部分,无非是需求,设计,开发,测试,运行!虽然现在有很多项目过程都把测试提前了,保证尽早尽快的测试,但在实际中真正实施的却不多,原因也许都很心知肚明的,需求的不断变化,客户的要求不明确等等,难道这是无法解决的癌症吗?我想应该不是吧?我不知道。
        写到这里,我也不太明白自己到底要干什么了,一方面我在实施着探索性测试,另一方面我的心里却很排斥这种方法,真不懂自己要的是什么,但是我有一点很清楚,那就是测试只能是对项目过程中的一个环节,项目做得好不好,得要靠过程中所有环节的共同进步。
  • 测试用例在实际工作中真正的作用有多大(黑盒功能测试)?

    lilyhuang 发布于 2007-11-14 11:11:13

    这几天,项目进入到了尾声了,但是就像是文章或是电影一样,一般高潮也都会在快结束的时候,所以,我们的项目在这段时间也进入到了最忙也最迷茫的阶段

    忙的是项目也结束了,但是可测的包却不能按时的提交,可是总体时间却没有变化,搞得我们测试人员急得在热锅上的蚂蚁一样

    迷茫就是这个项目完成了,不知道下一个项目将是怎么样了,每个人都有自己的想法,可是这种想法可以得到实现吗,似乎现在看来,在这个项目中没有学到什么东西,迷茫了,其实这并不是我这篇文章想要说的事情。

    时间很紧张了,可是客户却在这个时候告诉我们要加入新的测试阶段,因为我们的第三方不再帮我们做这个阶段了,搞死了,用例我都没有安排写过,唉,只有补了,可是用例太多了,好痛苦。

    写一点吧,对付一下了,说实话,我一直认为,测试用例对于我来说只是一种辅助记忆的,因为认为能在用例上写出来的,一般是不会发现缺陷的,发现缺陷的部分一般都是在用例以外的,因为在项目的设计过程中,开发人员与测试人员开会沟通,大家都知道在注意什么,要做什么,并且开发人员也不傻,测试人员也不笨,所以来说,测试用例上写全的东西,开发人员在提交可测试版本前均已把他们给处理掉了。对于一些不在用例里的,却是缺陷表中的主力军,因为软件这东西本来就不是实在的,他是虚拟的,谁也不知道这东西会有什么不一样的毛病出来,这个东西只能放在多实践的过程中才能真正现示出他的真面目,这对于开发来说是不可能的,而对于测试来说却是正中下怀的,不是吗?有人说,那就把用例给不停的补充进去,这就得说到现阶段的中国实情了,现在中国的项目能给你那多么的时间让你来加用例吗?本来在中国测试就没有开发来得受重视,这是不争的事实。还能让你有时间去补,再者即便优秀的测试人员真的认真地把用例补上去了,会有几个管理人员真正地看看这个用例,我想大家都很忙的。

    其实说到底,测试用例在大多的项目中最多只能说是一种形式罢了,特别是那些写满密密麻麻的文字信息的用例(个人私心,我是个不喜看大段文字的人),对于我来说,那只是增加我的烦恼,我认为在测试的过程中,应该针对不同的阶段的去设计不同的用例形式,没有必要非得用所谓的文字表达,比如用图,用树等表示就可以了,在软件测试过程中各种测试方法什么覆盖什么路径的,这些不是可以用图先做出来的吗,都已经有图了,为什么还得多此一举地去把图转成文字,其实对于外行的客户他们如果要来看我们的测试用例的话,图,树等也是很适合的。

    现在发现网上很多测试的模板,个人认为部分内容不适合我,因为用模板写出来的测试用例对于我来说,作用不大!

     

  • [缺陷管理]如何编写更佳的bug report

    卧龙公子 发布于 2008-08-21 22:15:13

    如何编写更佳的bug report


    我们是否经常看到开发人员针对我们归档的bug report要求提供更多的信息?我们是否经常需要在bug report归档后花更多的时间去研究那个问题?我们是否经常从开发人员那里听到在他们那边难以重现bug并且需要即刻提供“可重现的步骤”?广义上来说,我们与其花更多的时间在这些问题上还不如投资更多的时间来测试系统。问题出在bug report的质量上。这里介绍一些如何改进并达到完美bug report的建议。
    Bug report的目的

    当我们发现一个缺陷时,我们需要把它告诉给开发人员。Bug report就是这种沟通的媒介物。Bug report的主要目的是让开发人员亲眼看到这个错误。如果你不能和他一起以在他面前制造出那个失败,那么就需要给他们足够多的指引以便他们能够自己制造出那个失败。Bug report就是解释在期望结果和实际结果之间的差距并且详细的说明如何重现那个场景。
    在发现缺陷之后
    ◆ 只有当你确信你已经发现一个bug的时候开始起草bug report,不要在测试结束或每天结束之后。那样,你可能会遗忘掉一些东西。更糟的情况是,我们可能会忘掉那个bug。
    ◆ 花一些时间去诊断你正在报告的缺陷。想想可能存在的原因。可能到最后你会发现更多的缺陷。在你的bug report中说说你的发现。开发人员将不仅仅对你使他们的工作变得轻松而感到高兴。
    ◆ 在开始读你的bug report之前抽出一些时间来。你可能会感觉到象重新编写报告一样。
    摘要
    Bug report的摘要是你bug report给读者的第一印象。你提交的bug的命运很大程度依赖于你的bug report能否吸引读者。原则就是每个bug应该有一个简单有趣的摘要。它可能会听上去象编写一个优秀的勾起注意的广告活动。但是随后,没有什么意外。一个好的摘要应该不超过50到60个字符。而且一个好的摘要不应该承载任何对bug主观的表达。
    语言
    ◆ 不要在bug report中夸大缺陷。同样,也不要太轻描淡写了。
    ◆ 不管bug是多么的令人讨厌,别忘了是bug令人讨厌,而不是开发人员。永远不要冒犯开发人员的努力。使用委婉些的说法。“混乱的UI”可以被温和些改为“不正确的UI”。这样开发人员的努力将会得到尊重。
    ◆ 保持简单诚实。你不是在写散文或文章,因此使用简单的语言
    ◆ 在编写bug report的时候记住你的目标读者。他们可能是开发人员,其他的测试人员,经理,或者在一些情况下,甚至是客户。Bug report应该可以被所有的人理解。
    可重现的步骤
    ◆ “可重现的步骤”的流程应该是合乎逻辑的。
    ◆ 清楚的列出前提条件
    ◆ 写下平常的步骤。例如,如果一个步骤要求用户创建文件并且为它命名,不要要求用户命名为“Mihir’s file”。最好命名为好像“Test File”一样的文件名。
    ◆ “可重现的步骤”应该详尽。例如,如果你想用户在Microsoft Word里保存一个文件,你可以要求用户到File菜单并且点击Save子菜单项。你也可以只说“保存文件”。但是记住,并不是所有的人都知道如何在Microsoft Word中保存文件。因此最后遵守第一种方法。
    ◆ 在一个干净的系统里测试你的“可重现的步骤”。你可能会发现有些步骤被遗漏或是毫无关系的。
    测试数据
    尽力编写普通的bug report,开发人员可能没有权限访问你的测试数据。如果bug是和一组特定的测试数据相关,在你的bug report上附带上它。
    截屏
    截屏是bug report中一个十分必要的部分。一个图片胜过一千句话。但是不要把在每个bug report里附带没有必要的截屏变成一个习惯。理想的来说,你的bug report应该是足够有效的使开发人员重现问题。截屏应该只是验证的一种方法。
    ◆ 如果你要在bug report里附带截屏,要确保那些图片不是太大的,使用jpg或gif的格式,而不是bmp格式
    ◆ 在截屏上写上注释以指出问题所在。这将帮助开发人员一眼就可以马上定位问题。
    严重程序/优先级别
    ◆ 在设置bug report的严重程序之前应该全面的分析缺陷的影响程序。如果你认为你的bug具有很高的优先级应该被修复,在bug report中证明这点。应该在bug report的描述部分指出这个理由。
    ◆ 如果bug是来自上个内部小版本或版本回归的结果,那么发出警报。象这种bug的严重程序可能是低的,但是优先级别应该是高。
    日志
    在bug report里附上日志或日志的摘录片断。这将帮助开发人员轻松地分析且调试系统。多数情况下,如果不附上日志而且在开发人员那边又很难重现问题的话,他们将会把bug report打回给你并要求附带日志文件。
    如果日志文件不太大的话,举个例子,大约20到25行,你就可以把它贴在bug report里。但是如果它比较大的话,把它做为附件贴在bug report里,否则你的bug report会看上去象个日志。
    其他信息
    ◆ 如果你的bug是随机出现的,只需在你的bug report中说一下就可以了。但是不要忘记归档它。你总是能够在你发现它们之后的任何时间里增加准确的步骤。这也将在其他人提交这个问题时解救你,特别是当那个问题比较严重时。
    ◆ 在bug report中写下错误信息,特别是当错误信息有编号的时候。例如,来自数据库中的错误信息。
    ◆ 在bug report中写下版本编号和内部小版本编号
    ◆ 写下问题可以被重现的平台。准确的说明问题不可重现的平台。同样也要理解问题在特定平台上不可重现和没有在某个平台上测试之间的分别。这个可能会造成混淆。
    ◆ 如果你遇到几个问题却有一样的结果,只需写一个bug report。问题的修复可能只是一个。同样,如果你在不同的地方遇到相似的问题,且要求同一种修复方法,但是在不同的地方,那么就要为每一个问题书写单独的bug report。每个bug report对应一个修复。
    ◆ 如果可以重现bug的测试环境是开发人员可以访问的,写下访问这种设置的详情。这将帮助他们节约安装环境的时间以重现你提交的bug。
    ◆ 你决不能坚持关于bug的任何信息。在bug被修复之前由于低效的提交bug而引起的开发人员和测试人员之间不必要的交互只是浪费时间。

  • 编写优秀Bug报告的艺术[觉得很经典]

    卧龙公子 发布于 2008-04-10 19:54:54

    在99年的Quality week上的一次演讲中,微软的一个测试经理,Roger Sherman指出了由于“不可重现”导致bug关闭的主要原因。这是一个非常可惜的情况,因为这样的bug report浪费了紧张的开发计划中的宝贵时间,增加了对产品质量完全是无关紧要的事情,同时导致了在开发人员和测试之间的挫败感和差的感觉。有时,bug report是由于短暂的或随机的事件,测试和开发之间不一致的工具和配置,或者在测试的环境下对正确的行为的模糊定义而产生的,但是许多的由于不可重现而被关闭的测试报告是因为描述不清晰,被误解,或者只是文字的错误。

        幸运的是,我学习到一些能够引起管理层注意,更清楚的和开发人员沟通并得到修复的编写优秀bug report的诀窍。这些技巧不仅仅提供了是在被修复的问题的比例方面得到了可靠的回报,而且在同开发人员和管理层的通过中也得到了回报。在我管理的项目中使用这种方法编写bug report,8份bug report中大约只有一个没有被修复。

        这篇文章的思想只有当你的报告针对的测试执行过程是专业的质量工作才可以发挥作用。聪明地执行完整的测试包是产生可靠的测试状况信息的基础的其中一个因素。在许多的测试文献中广泛地介绍了多种多样的关于如何构建这样的测试包的方法。选择和你质量风险管理需求相一致的技术并且使之适应你的具体情况,敏捷地监督已计划的测试的执行过程,这样你就可以拥有可靠的测试执行过程。

        另外一个关键的因素-bug report,却没有得到太多的关注。这是非常令人遗憾的,因为优秀的bug report对反映测试小组真实的和可理解的工作质量同测试本身一样都是非常重要的。试想一下:如果你不能用开发人员能够理解的术语和能够用于调试的方法给开发人员解释一个错误,他怎么能够修复问题呢?如果你不能够在bug report中提出象“保险杆标签”(bumper sticker)一样的错误总结来引起管理层的注意,你又如何让他们关心你们发现的问题呢?

        Bug report的核心是对错误的描述。表格1中是一个关于好和差的错误描述的例子。编写好的bug report是一种好的艺术形式。采用以下的10条技巧可以帮助你的小组提高编写bug report的质量:

        组织Structure:测试人员应该采用深思熟虑的,小心谨慎的方法执行测试,并且做详尽的记录。这样可以促使他们对测试下的系统有很好的认识。当错误发生的时候,一个有组织的测试人员能够知道最早出现问题的地方。

        重现Reproduce:测试人员在编写bug report之前必须在检查问题是否可重现。如果错误不可再重现,仍然应该写下来,但是必须说明问题的偶然性。一个好的处理原则就是在编写bug report之前反复尝试3次。

        隔离Isolate:在尝试编写bug report之前,必须试着隔离错误。可以采用改变一些变量的方法,如系统的配置,它可能可以改变错误的症状。这些信息可以为开发人员着手调试提供思路。

        归纳Generalize:在测试人员发现了一个已隔离的,可重现的问题后,应该对问题进行归纳。同一个问题是否出现在其他的模块或其他的地方?同一个故障是否有更加严重的问题?

        对比Compare:如果测试人员以前曾经验证过现在出错的测试用例,那么他就应该检查以前的测试结果以检查相同的条件是否通过以前的测试。如果是的话,那么这个问题就象是一个回归的错误。注意由于同一测试条件有可能出现在多个测试用例中,这个步骤就不仅仅只是检查一个测试用例在以前的多个结果。

        总结Summarize:在bug report的第一行写上错误的总结是非常关键的。测试人员要花些时间思考已发现的错误对客户有何影响。这不仅仅要求测试人员编写的报告要能够吸引读者,使和管理层的沟通清晰,还要能够帮助设置错误修复的优先级别。

        精简Condense:在bug report的初稿完成后,测试人员应该反复阅读它,集中剔除那些没有关系的步骤或词语。隐含的或模糊的说明和那些由于对没有任何关系的细节或者那些在重现错误过程中不需要的步骤而消磨报告欢迎程度的无穷唠叨都不是bug report的目标。

        消除歧义Disambiguate:测试人员在精简空话的同时或其之后随即应该再仔细检查报告是否有会产生误解的地方。测试人员应该尽量避免使用模糊的,会产生歧义的和主观的词语。目标是使用能够表述事实,清楚的,不会产生争执的词语。

        中立Neutralize:如文中所述,作为坏消息的传递人,和善地提交消息是一个挑战。如同所有的错误总结一样,独立的bug report在措辞方面应该保持公正。攻击开发人员,指责潜在的错误,企图诙谐或使用挖苦将引起开发人员的憎恶,并且使注意力从“提高产品质量”这个大的目标上转移开了。谨慎的测试人员只用Bug report来描述事实。

        检查Review:一旦测试人员感觉bug report是他能够编写的最好版本,他应该将报告再给一个或多个同行进行检查。他的同事们也应该给出一些建议,为了澄清问题不断地提问,如果适当的话,甚至可以挑战“错误成灾”的结论。在允许的时间里,测试小组应该尽可能提交最好的bug report。

        以上10条技巧可以帮助你和你的小组提交准确简洁的,彻底校订的,精心构思的,高质量的技术文档。测试小组应该集中编写bug report的任务,测试组长和经理应该让测试组成员清楚地认识到编写优秀的bug report是一项首要的工作任务。衡量优秀的bug report的质量指标应该包括如下:
            对管理层来说,是清晰明了的,特别是在概要这一级;
            对于开发部门是有用的,主要是给出能够让开发人员高效地调试问题的相关信息
        可以很快的将bug从“Opened”状态转变成“Closed”状态,减少为得到更多的信息从开发人员打回的差的bug report并导致测试人员返工的时间。

        改进bug报告的流程是需要花费一些时间的,但是也给予了效果显著的回报。首先,简单的流程改进了测试小组和高层、平行管理层之间的沟通,增强小组的信任度,名望和鼓励管理层给测试投资更多的资源。第二,平稳地递交报告给开发人员促进了测试和开发人员之间积极的关系。第三,更短的bug生命周期是更加有效的,在时间上之前花费在编写优秀bug report上的时间和后期由于返工差的bug report花费的时间相抵消。这些回报帮助开发流程通过有效的沟通和高效率的流程获得更好的产品质量。

  • 软件测试并不仅仅是按照testcase测试

    lifr 发布于 2008-07-12 16:42:17


    软件测试并不仅仅是按照testcase测试
    有一种普遍存在的看法是 软件测试 只是一个没有什么技术含量的工作,任何人只要能读懂testcase就能做软件测试。或多或少地,在我工作过的每一个公司都有人这样的观点,特别是规模小的公司更甚。

    当然,这是一种完全错误的观点。

    如果我们把软件看做是一个圆球,那么软件测试的目标就是尽可能的覆盖最多的球体表面。。

    所有的testcase的集合可以看做是一张试图包住整个球体的网,而一个testcase就是网上的一个节点。可见对于这张网来说,最重要的不是它的节点的数量而是节点的布局。testcase应该覆盖整个球体表面,但也不应该有太多的节点堆积在某一个区域。

    一个良好设计的testcase集合需要对软件的深刻理解,很高的抽象能力,还要在覆盖率和可执行性之间保持平衡。对这些能力的要求,相比于其他的设计工作,比如软件设计,并无二致。

    如果说testcase本身只是一个节点,它并不能覆盖更多的区域,那么一个测试人员实际的测试行为就像一块在围绕在点周围的布,才能填补网格中空白部分。有多大区域能被测试行为所覆盖,这是一个衡量测试人员能力的关键要素。

    好的测试人员在测试的时候所做工作远远超过testcase本身。实际上,这也是对测试人员的一个基本要求。测试人员应该通过各种方式扩展testcase,比如改变参数,调整前置条件,从多个角度来观察系统行为,使用不同的方法等等来尽力覆盖更多的内容。

    研究显示,在一个项目中,超过3/4的bug并不能仅仅根据testcase的descrīption得来。那也就是说,一个好的测试人员相对于一个仅仅根据testcase来测试的测试人员,其发现的bug数可以是后者的4倍之多。

    所以软件测试的工作也许看起来简单和直接,但事实是,实际的工作远远超过testcase本身。

    以下是本文的英文版。(following is the English edition)
    =========================================================
    Software Tester Offers More Than Just Test Cases

    Some people think that software testing is a low skill job, and that just any one can be a tester.  This is definitely not true.  Allow me to explain why.

    If we represent the software being tested as a ball, then the aim of the software testing is to cover as much of the space of the ball as possible.

    Test cases act together as a net, attempting to cover the ball.  Test cases act individually as a node in that net.  So the most important aspect of a test case is not its amount, but its structure.  The test case should cover the entire surface of the ball, but without too many nodes in any one place.

    A well designed test case requires a deep understanding to the software, high ability of abstraction, and skills to balance between the coverage and testability.  The requirements are not that different from other forms of design work.

    To continue the previous analogy, the actual test behavīor is like a piece of cloth wrapped around the node; there to fill spare space left by nodes.  How much space your real test behavīor can cover is one key standard to measure the capability of a tester.

    Good testers test far more than the test case descrīption.  In fact, it’s an essential requirement.  They will extend the test case descrīption by changing parameters, adjusting preconditions, and using many different means in order to try to wrap more space around a single test case.

    One investigation showed that over 3/4 of all bugs found, are not directly related to test case descrīptions.  That is to say, the number of bugs a good tester can find can be 4 times as many as that of a tester who simply follows the test case descrīption.

    So the job of software testing may seem simple and straightforward enough, but the truth is, the actual effort expended is much greater than just a simple test case.

    (Thanks to Kyle for fixing errors of the original version)
  • Ruby+Watir经验谈: 漫谈针对功能的自动化测试框架

    lifr 发布于 2007-05-30 21:12:34

    0. 不讨论什么


    我们不讨论那种简单的自动化脚本,用来帮助QA对某个,或某几个testcase进行测试;这样的脚本往往用来代替手工执行testcase里的某些步骤,比如一个在数据库里产生数据的SQL脚本。又比如根据testcase录制了10个Robot脚本,通过replay这些脚本就能完成这个testcase的测试。这种自动化脚本几乎没有任何弊端,它短小和贴近testcase,没有多大的开发开销,它几乎总是能带来测试效率的提高,如果有可能,完全应该去做。

    我们也不讨论性能测试。性能测试几乎总是要自动化的,但它和功能测试有太多的不一样。

    当然,也不要包括单元测试(white-box),虽然它的概念可以在功能测试中借鉴,也就是功能单元测试。

    下面说到自动化测试框架,都指针对功能的自动化测试框架。

    1. 定义

    如果让我来定义自动化测试框架,那么它的核心应该是这样一个东西:它提供一套API,这套API对产品的操作做一个包装并提供一个的精简的集合。通过这套操作集合,几乎所有(当然不可能100%)的testcase对产品的操作步骤都可以对应到对这套API的调用。也就是框架提供了一个 ‘产品’ 和 ‘测试脚本’ 的中间层,。一个好的测试框架,可以让自动化脚本看起来象人类语言描述的testcase一样清晰。

    2. 好处

    假设我们已经有了这样一个测试框架,我们来看它能带来那些好处
        1) 首先得益的是smoke test, smoke test总是和DailyBuild联系起来。有严重问题的build当天早上就能发现,不会release给QA。
        2) 如果大部分的功能测试都可以被自动化。那么regression test就可以自动化起来。regression test其实是非常非常枯燥但有不得不做的。也许一整天的测试,只是验证了“新的build通过了所有的这些testcase”。如果以bug的数量来衡量QA的工作的话,那么就更令人伤心了。
        3) 新功能的测试被翻译为自动化脚本,并加入regression test suite中。庞大的regression test会给QA巨大的信心。
     

    3. 自动化永远不能代替手工测试

    一定要认识到: 自动化永远不能代替手工测试。
        1) 有些验证根本没法通过程序来验证,或验证起来非常困难,比如程序启动的速度。
        2) 在新feature的测试阶段,testcase只能发现30%的defect。但自动化脚本只能基于testcase,所以对新feature的测试,我觉得应该禁止自动化测试。
     

    4. 你需要自动化测试框架吗?

    我认为,只要是做产品,都需要这样一个测试框架。测试框架连同它的测试脚本和产品一样都有一个一个的release。好的测试框架会一直伴随产品,为它保驾护航。

    5. 失败

    有很多搞自动化测试最后失败的公司,这里的失败是指最后放弃了自动化测试。我看到的原因一般是
        1) 测试员抱怨框架太难用,在上面开发自动化脚本很耗时
        2) 产品变化太大(GUI衰退,学术名字*_~),要花很多精力和时间来改写测试框架
        3) 产品变化太大,很多辛苦开发的自动化脚本在下一个release的产品中不能跑起来
       

    6. 避免失败

    那就是高质量的自动化测试框架。
    好的框架必须是易于使用的。
    好的框架,作为中间层,会尽量减少产品UI的变化对测试脚本的影响。有一句话说在自动化框架的设计中:即使点击一个button都需要写一个函数来包装。这种极端的指导思想来源于下面的考虑:也许这个button会再下一个版本会改成一个link。
    好的框架,自身抵抗变化的能力也很强,这要求框架本身是一个设计优良的软件。

    7. 如何才能获得高质量的自动化测试框架

    如果我们准备开发一个自动化测试框架,我认为需要注意

        1) 选择一位精通程序设计和软件测试的开发人员。

        一种误解是自动化测试开发只需要普通的测试人员参与就可以了。我不是否定测试人员的能力,而是测试框架开发完完全全是软件的开发。甚至更高一级,相对于软件库的开发,比如它对接口设计和易用性上的要求就相当高。
        然后这位开发人员还必须是本软件测试方面的专家,也就是领域专家。有很多软件失败于需求分析,你当然不希望这种事再这里重演。

        2) 合适的开发工具

        现在商业和开源的开发工具都为数不少。不过我认为在选择的时候要注意两点1)用record&replay来鼓吹易用性的软件。他们也许是好软件,但不是开发测试框架的好软件。框架开发要求工具有强大的功能和灵活性。2)最好选用使用通用语言来开发的软件。通用语言一般都有各种各样的库。我就为用robot的scrīpt来访问mysql的问题相当恼火。
       

    8. 开发自动化测试框架的一些建议

    下面是我在开发框架核心API部分中的一些经验

        1) 尽量把让测试脚本访问你的API而不是直接操控UI元素。

        这即使不是绝对的,也要尽力避免。把变化留给框架。因为我们注意到,产品UI的变化频率和程度都超过功能的变化。UI变化,功能测试的逻辑不会变化,而功能测试在所有的测试中一般是占主要的部分。

        2) 针对不同类型的测试,提供多套API

        前面说过最好把测试脚本和UI操作完全隔离开来,但考虑到测试的多样性,这往往导致存在多套不同层次的API。
        比如一个添加用户的web 页面。针对这个页面的基本功能需要提供一个方法: addUser(name, pswd)。大多数testcase都会调用这个方法作为一个其中的步骤。
        假如输入的name具有非法字符检查功能,系统会用javascrīpt及时检查用户输入并在某个页面某个位置把错误信息显示出来。要测试这个功能,上面的方法就不够了。这个时候就需要针对这个页面封装一个页面模型(page model),通过这个页面模型可以访问页面的元素比如
            getNameInputBox
            getErrorMessage
        显然这是两套不同的API,应该分别属于不同的集合。而且最好两套API不要有依赖。
       

        3) 保持框架和测试逻辑分离

        API不要包含任何测试逻辑的代码。API是精简,正交的。不要试图提供一些和测试逻辑相关的功能来使得某几个测试脚本更好开发,它反而真正伤害了API。
        比如我曾经把验证from里各项数据的方法加到了API里。其实我应该做的是把form里的数据收集出来,以Map的形式返回给调用者。

        4) 最好边开发框架,边开发一个精简的regression test suite。

        这样能让你早发现框架存在的问题
       

        5) 在release你的API之前,一定要给QA 小规模试用

        API发布后就不能更改,所以发布API要谨慎小心。


    8. 提外话:关键字驱动的自动化测试

    套用一句话是:Make everything as simple as possible, but not simpler. -- Albert Einstein 

    我曾经开发过一个测试框架,试图提供一种能力把测试逻辑用xml的tag表达出来。我做了大量的工作来把测试中的action用tag封装起来,在给team member使用后发现,它并不那么受欢迎。原因是
        1)熟悉tag是一个负担,特别是tag多了以后,
        2)tag的表达能力有限,有些情况不能满足需要,如果要满足需要,tag变得非常复杂。甚至需要引入条件判断的tag。后来我想,如果要使用一个<if> tag,为什么不直接使用编程语言呢?

    所以,我认为一门高效易学的脚本语言来写测试脚本是在灵活性和易用性之间的最佳平衡点,python, ruby都是上上之选。关键字驱动?太过了,且不说实现它需要而外的投入,学习这些越来越多的关键字会让QA失去对他最后的耐性。

    数据驱动是一个非常棒的测试方法。但要在数据里加上 关键字或者流程控制。。。过犹不及也。
  • 转贴-航空标准DO-178B的MCDC测试方法

    cr19800604 发布于 2007-09-21 12:22:06

    MC/DC(修订的条件/判定覆盖)(Modified Condition Decision Coverage)准则是一种实用的软件结构覆盖率测试准则, 已被广泛地应用于软件验证和测试过程中.

    condition 和 decision 的概念:

    if A or B and C then

    Statement;

    else

    Statement2;

    A,B,C都是一个条件,而(A or B and C)叫一个Decision,如果是判定覆盖的话只需两个case就能覆盖,就是让这个decision为true和false各一次就能达到即为 0 1 1 , 0 1 0

    如果是MC/DC的话就得四个case,而且只比条件数目多一个而已,怎么计算的呢?

    定义: 在每个判定中的每个条件都曾独立的影响判定的结果至少一次, (独立影响意思是在其他的条件不变的情况下,改变一个条件);

    总结一句:每个条件对结果都独立起作用

    比如A对结果起作用的话, B 必须为 false, C必须为 true -- 1 0 1 和 0 0 1, 这样结果就独立受A的值影响.

    同理如果B对结果独立起作用的话,A必须为false, C必须为 true, 两种情况B为true,false各一. 即为 0 1 1 和 0 0 1

    而C独立对结果起作用的话就是让(A or B) 为 true, 为了减少case, 上面的case 已经含有这样的case了,我们就取A为false,B为true, 这样c独体起作用的case为: 0 1 1 和 0 1 0

    可以看出每个条件各走了一次true和false, 这样三个变量条件就会有六个case, 我们看出其中里面还有两个是重复的,

    序号a b c output

    A 1 1 0 1 1

    2 0 0 1 0

    B 3 0 1 1 1

    4 0 0 1 0

    C 5 0 1 1 1

    6 0 1 0 0

    case 2 和case 4重复, case 3 和case5 重复,这样去掉两个 剩四个case,我们发现我们的判定里面的条件数为N个, 那么这个判定就需要N+1个case,不信你试试!
  • 相同的测试用例,不同的MC/DC覆盖率结果?

    huior 发布于 2008-07-08 15:04:24

    示例代码:

    #include <stdio.h>
    int mcdc(int a, int b, int c)
    {
     int result;
     
     printf("a=%d, b=%d, c=%d\n", a, b, c);
     
     if((a > 1) && ((b > 2) || (c < 3)))
     {
      result = a*b+c;
     }
     else
     {
      result =  a+b*c;
     }
     printf("result = %d", result);
     
     return result;
    }

    通过以上的简单实例,说明一下目前比较常用的几种覆盖率。透过这个过程,相信您也会对覆盖率测试有个基本的认识。

    ×CASE(a,b,c)表示的是测试用例的输入,如第一个用例输入的是a = 2 b= 3 c = 4

    ×MC/DC覆盖率翻译名称为“修正条件判定覆盖”。它是DO-178B level A级别的认证标准中规定的。欧美的民用航空飞机的软件要求强制性的遵守DO-178B level A标准。MC/DC是目前要求最严格的覆盖率。

    ×以上实验的覆盖率数据使用c++test统计完成。

    ×使用Logiscope TestChecker统计的MC/DC的结果略有不同,如执行完第一条测试用例后,Logiscope TestChecker认为此时MC/DC覆盖率应该是25%,如下图:

    ×虽然两个工具对单个测试用例的覆盖率数据不同,但二者都认为当执行完表格中的4条用例后,MC/DC覆盖可以达到100%。可以看出两个工具对MC/DC的理解不完全相同。

    ×我个人认为c++test的理解更准确一些。大家怎么看?欢迎讨论!

     

  • 关于缺陷的优先级和严重级别

    songfun 发布于 2007-03-11 02:49:08

    今天看到论坛里一个学员在问“到底应该是谁把缺陷状态置为PostPone,Rejected,Duplicate是Developer还是PM或CCB?”,还有学员对优先级这个字段理解的不够透彻,原话是“优先级的填写要看情况的。因为有时Tester 开的bug 很多,而PM又有好多TESTER,那PM就来不及去一一看那些BUG了,这时Priority就得由tester填写”,而论坛里还有同学找了篇英文的文章来告诉大家“看,老外都是这么做的”。

    我觉得有必要给大家解释透这两个概念,这样不至于在日后的工作中做错。

    以下粉红色部分是对那篇英文的引用,后面则是我的回答(结合微软的实际例子给大家说明)。

    QUOTE:
    原帖由 rivermen 于 2007-3-9 09:12 发表

    c) The tester then selects the priority of the defect:

    Critical - fatal error
    High - require immediate attention
    Medium - needs to be resolved as soon as possible but not a showstopper
    Low - cosmetic error


    从这篇文章来看,这段英文描述是有问题的——不能说不对,至少不合理。
    优先级不应该给tester指定,这也是很多缺陷流程制定者容易忽略到的地方——很大一部分原因是流程制定者没有做过项目管理的工作或者学习过项目管理的知识。

    为什么这么说呢?
    因为Tester只是项目团队的成员之一,对缺陷管理、项目进度和项目风险都不可避免的会“盲人摸象”、“管中窥豹”,只“看”到自己“看”到的那个部分。
    一般来说,一个被测系统往往需要多个tester的,而每个tester往往只关注自己发现的bug,不大会去了解其他tester所发现的bug,那么在这种情况下,他如何能够决定这个bug被修复的优先级别呢?!
    这里再次强调一次,大家必须了解“Priority”真正的含义和作用——它是给管理者来据此做项目决策的,也就是说,缺陷优先级将直接导致工作安排的优先顺序。PM正是通过参考缺陷优先级来安排开发人员的工作顺序(这甚至能在Project里体现),使得项目风险降低、项目成本降低,解决问题更高效。
    其实,这在微软内部就叫做“基于风险的测试”,也就是指评估测试的优先级,先做高优先级的测试,如果时间或精力不够,低优先级的测试可以暂时先不做。有如下一个图,横轴代表影响,竖轴代表概率,根据一个软件的特点来确定:如果一个功能出了问题,它对整个产品的影响有多大,这个功能出问题的概率有多大?如果出问题的概率很大,出了问题对整个产品的影响也很大,那么在测试时就一定要覆盖到。对于一个用户很少用到的功能,出问题的概率很小,就算出了问题的影响也不是很大,那么如果时间比较紧的话,就可以考虑不测试。

    以下是微软公司的缺陷流程(不知道现在做微软外包的公司是否也采用这套流程),给大家参考参考。
    Bug跟踪过程
         在软件开发项目中,测试人员的一项最重要使命就是对所有已知Bug进行有效的跟踪和管理,保证产品中出现的所有问题都可以得到有效的解决。一般地,项目组发现、定位、处理和最终解决一个Bug的过程包括Bug报告、Bug评估和分配、Bug处理、Bug关闭等四个阶段:
         1)测试工程师在测试过程中发现新的Bug后,应向项目组报告该Bug的位置、表现、当前状态等信息。项目组在Bug数据库中添加该Bug的记录。
        2)开发经理对已发现的Bug进行集中讨论,根据Bug对软件产品的影响来评估Bug的优先级,制定Bug的修正策略。按照Bug的优先级顺序和开发人员的工作安排,开发经理将所有需要立即处理的Bug分配给相应的开发工程师。
         3)开发工程师根据安排对特定的Bug进行处理,找出代码中的错误原因,修改代码,重新生成产品版本。
        4)开发工程师处理了Bug之后,测试人员需要对处理后的结果进行验证,经过验证确认已正确处理的Bug被标记为关闭(Close)状态。测试工程师既需要验证Bug是否已经被修正,也需要确定开发人员有没有在修改代码的同时引入新的Bug。


    话说回来,网上有很多自称专家的人在那里大谈特谈所谓的优先级标准,什么“系统死机是高级别,界面错误是低级别”之类。其实这些指的是缺陷的严重级别(Serverity)!
    当然,一般来说缺陷的严重级别也不是tester“主观判断”决定的,如果公司比较规范的话,会由测试经理、项目经理等组织制订这么一份相关的标准文档,文档是关于对应缺陷严重级别的定义。Tester在测试的时候就根据这么一份文档来决定对应Bug的严重级别。
    我下面粘贴某公司的一个《缺陷等级标准》的文档,大家可以看到其中的“E类——测试建议”正是我上课所说的Enhancement。


    ========================
    缺陷严重级别定义:
         o 最高级--导致运行中断(应用程序崩溃),预期的功能没有得到实现,测试工作无法继续进行等.
         o 紧急---事件非常重要,并且需要马上给予关注.
         o 高级---事件是重要的,并且应该在紧急的事件处理之后尽快得到解决.
         o 中级---事件是重要的,但是由于解决问题需要花费一定的时间,所以可以用较长的时间解决.
         o 低级---事件不重要,可以在时间和资源允许的情况下再解决.
         o 建议性缺陷.

    更为详细的划分如下:

    A类——严重错误,包括:
              o 由于程序所引起的死机,非法退出
              o 死循环
              o 导致数据库发生死锁
              o 数据通讯错误
              o 严重的数值计算错误

    B类——较严重错误,包括:
              o 功能不符
              o 数据流错误
              o 程序接口错误
              o 轻微的数值计算错误

    C类——一般性错误,包括:
              o 界面错误(详细文档)
              o 打印内容、格式错误
              o 简单的输入限制未放在前台进行控制
              o 删除操作未给出提示

    D类——较小错误,包括:
              o 辅助说明描述不清楚
              o 显示格式不规范
              o 长时间操作未给用户进度提示
              o 提示窗口文字未采用行业术语
              o 可输入区域和只读区域没有明显的区分标志
              o 系统处理未优化

    E类——测试建议(非缺陷)



    ===============================
    好了,关于缺陷优先级和严重级别我解释到这儿,我希望同学们在学习的过程中知其然更要知其所以然。流程的制定不是想当然的,更不是因为看到别的公司都这么做自己就跟着做的。项目管理、缺陷管理都需要有很深的技术管理知识作为支撑,否则是作不好的。

  • 07年软件评测师考试心得

    瑾瑾花园 发布于 2007-05-29 11:01:29

       刚参加完软件评测师考试,考下来感觉还不错,就此写下自己这段时间的复习与备考心得。

       本人现在是在读研究生,虽然专业是计算机软件方面的,但对软件测试还是由于这次报考的原因才得以了解和学习的。

       用的资料就是清华大学出的那本指定考试参考书和张友生主编的真题与详解,个人感觉前者对于刚涉足的人而言全看懂有点难度,看第一遍的时候有点崩溃(但可以给你一个总体关于软件测试的轮廓)。今年四月初网购了一本真题与详解,讲的没有参考书详细,但是对于备考可以节省很多时间,毕竟是针对考点的,不过感觉配套的题不多。

       下面就谈一谈我的复习体会和心得:

       首先,得把参考书大致看上一遍,对于一些基础知识必须要识记:像白盒测试的方法、黑盒测试的方法等。

       然后,买一本真题与详解之类的书,但据我了解,现在市面上关于评测师考试的用书少之又少(反正我是只找到了张友生的那本),对照着参考书将课本再过一遍。这时要多做题,尤其是关于计算机基础知识方面的题。

       最后,将历年真题研究透,测评师考试是从05年上半年才有的,并且每年一次。到我今年参加考试也就仅有两年的真题。但是要明白,不管什么考试,研究一份真题比你做十套模拟题有用。下午题我就是从真题上总结出规律的。

        自己认为,下午题的题型一般都有如下几类: 

        一.给你一段程序(C或C++)或PDL写的伪码,让你用基本路径覆盖方法来设计测试用例(并画控制流图,计算圈复杂度);

        二.负载压力测试方面的,有关性能分析。一般是比较集群与单机环境下,分析系统性能瓶颈。主要从带宽和CPU资源利用率方面考虑;

        三.用户文档测试和易用性测试的要点和测试内容。

        四.案例分析,前两年都没有,今年出了一道关于用黑盒测试中的因果图分析法对企业ERP系统进行测试案例设计。可能这也是以后考试的趋势。后来才发现参考书上的案例分析中有原题,可惜时间太紧没看到,不过大体上还是对的。

        最后再说一句:看到网上很多人说今年的上午题出得很偏,个人不太赞同,考的都是参考书上的基础知识,所以考前一定要识记一些重要的知识,做到考简答题都能够答全答对,相信出选择题的话也不在话下。

        我是初涉软件测试的新手,参加软测考试只是我迈出的第一步,以后的路还很长。不过我会坚定的一直走下去。希望能得到大家的帮助与支持。 

Open Toolbar