简单+勤奋,把测试当做一番事业去奋斗!

发布新日志

  • 怎样做一个人见人爱的软件测试经理?(zhuan)

    navy2008 发布于 2011-04-10 23:07:22

    谈谈3年多的测试管理经验的心得,望大家多多指教,提出宝贵建议:

    1.具有较好的人格魅力和亲和力:

    真正来说做到这一点非常难。这不仅要求测试经理有宽广的胸怀,良好的沟通能力和语言表达能力,还要求测试经理具有较强的应对能力。向上能把工作汇报的让领导满意,令领导信任。能把工作任务轻松, 无异意的下发给下属, 并让他们饱含工作热情共同协作去完成测试任务。如果您能够把扭转下属的思想,把“要我测试,变成我要测试”,我想你一定很强了。如果陌生的人一见到你,通过谈话就觉的你很强,都愿意和你交朋友,那你的人格魅力一定不错了,呵呵。

    2.最好具备较强的测试技术水平:

    一般来说,作为测试经理,在一个测试技术性的团队里,如果你有很强的技术,并且你的技术是最棒的,下属不能够搞定的问题,你都能够做的很好,即时有时候你凶了点,团队里的成员心底里都还是很敬佩你。如果你有技术,但是技术不高,你组内的技术高手一定是你的亲密战友,这个时候唯一的出路就是凝聚团队的力量,取长补短,也能够取得较高的效率。还有一点值得注意:在分派工作的时候,找一下组内的骨干,看看是否有新的或者好的处理办法,这样一来,避免在开会的时候遇到分工或者技术上的尴尬局面。但有的测试经理具备了很强的技术,整天对团队的成员都板副面孔,那你也很难做到人见人爱。唯有为人处事比较圆滑,待人真诚中肯、随和亲切,整天都是笑脸相迎,那呆在这样的团队里工作,一定很开心。所以要做到人见人爱的测试经理,较强的测试技术水平不能够忽视。

    3.乐意处理下属在项目中碰到的困难:

    在带领一个团队开展测试工作的时候,当你的下属碰到困难的时候,你更多的是给下属鼓励和安慰,帮助下属分析出现问题的原因。比如说一下:“幸苦了”!“干得不错”!“慢慢来,没关系的”!下属听了也很开心的,并且以后干活可能会很卖命,因为他的工作得到了领导的认可。或许该问题你也不一定解决得了,这时候你一定要挺身而出,协调测试团队的资源尽力帮他解决问题,久而久之,你的威信就树立起来了,之后就好办事了。

    4.勇于承担责任,把功劳推给测试团队:

    软件测试经理,作为一个中层经理。管理者一定要想管好下属,必须“身先士卒”、“以身作则”,事事为先、严格要求自己,处处起到表率作用。示范的力量是惊人的,一旦通过表率在团队中树立起在员工中的威望。将会上下同心,大大提高团队的整体战斗力。常言到:“得人心者得天下”,做下属敬佩的领导,将使管理事半功倍。如果下属在测试项目中出现问题,上级领导怪罪下来,自己勇于承担,多检讨自己,少怪罪他人。始终用平和语气与下属沟通,最后一定要找出出现问题的真正原因。让出现问题的下属,自己过意不去,从心底里佩服你,想法补偿你。项目得到喜讯,比如:某个测试项目做的很好,领导表扬的时候,把功劳推给大家,很多时候,容易让人感动,让人佩服得“五体头地”哈哈。

    5.对下属多一些宽容和生活关心:

    特别是对下属不懂,自己懂得很精的地方,下属问的时候,一定要有耐心,给下属详细讲解。切忌:看不起下属。如果真是这样,你这个经理就很失败了。反正对下属,在很多地方,要多一些理解和包容,最好能和下属打成一片,当下属不认为你是领导的时候,你就真是领导了。如果做领导做到别人都当你是朋友,那你真的就成功了。
    还有一点就是要察言观色,随时发现和了解下属的困难,不管是工作方面,还是私人方面,都要关心。比如说:某个下属买了房子,准备装修,那他一定很关心装修方面的东西。如果你懂得很多,那和他交谈时,多一些这方面的话题,他也会很开心,觉的你这个人相当热心,并且也会觉的大家有共同语言,以后当你碰到问题的时候,他一定会鼎立帮助你,因为他认为你是他最信任的知己。也可以多在生活上关心下属。比如有项目要加班什么的,有时候陪陪下属加班呀,吃个午饭宵夜呀,聊点家常呀什么的,自己买单后,公司报销,效果真的不错哟!

    6.力争多给下属争取福利

    在公司条件允许的条件下,多给下属争取福利!但是做这件事的时候,一定要在公司利益和员工利益之前要平衡。若过分的给员工争取福利,会造成公司对你有意见,同样,过分的以公司利益为重,员工对你也会意见大!总之,每种情况都要有度,力所能及的事,一定不能放过。很多时候,为员工申请比较多的福利,即时没有成功或者工资变化不大,但是下属都看在眼里,还是很感激你的,因为他知道你已经尽力了,觉的你很够哥们,为你工作很值。

    7.多给下属锻炼机会,培养下属能力:

    作为测试经理不可能向测试工程师那样什么事情都自己做,并且事事都自己做也不现实。可以在不同的测试项目中,安排测试主管。然后对测试工作进行协调,参与测试中发现重大问题的讨论。这就要求测试经理懂得用人,懂得计划。在制定详细的测试计划的同时,自己把握测试项目中的关键点和时间表,给下属更多的实践机会,让下属做事更具有责任心和成就感。测试主管在做好测试项目的同时,又减少了测试经理的工作量,学到了不少东西,能力变强了,开心了,达到了上下级和谐共处的双丰收。

    8.多给下属精神鼓励,奖惩公私分明:

    很多时候,部门周例会上偶尔的一个口头表扬,更会让下属铭记于心,因为他觉的很有面子,很体面,也许他会再接再厉,给自己创造机会,争取后面再受表扬。下属也乐开了,工作也更加努力、拼命了,效果相当明显。并且奖赏要公私分明,不能有所偏袒,更不能让部门的人觉得你搞私人关系,力争做到一视同仁,对事不对人,也许你就成功了一半。但是,对于工作做的比较差的下属,也要私下单独谈心,帮助找出原因,给他打气,并鼓励他继续努力工作。

    9.知人善用,用人之长,合理分工:

    现在很多公司的测试工程师,都是网上外招的,分别来自不同的行业和不同的工作岗位,他们有着不同的专业知识和行业、业务背景。这就要求测试经理,对每个人的长处非常了解,将合适的人安排到合适的工作岗位上,用人之长,避人之短,合理分工,争取达到双赢。

    10.较强的行业和业务知识背景:

    测试经理作为一个部门的Leader必须对相关的产品和行业的知识背景了如指掌,要不然下属做了什么,怎么做的,正确与否,你都没法判断。一般来说,在某个行业待3年左右,做了几年的测试,那你对这个行业就非常了解。即使你不参加项目的测试,你问很多的问题,下属也不敢乱讲,毕竟你了解很多。再比如说:某些税务的项目,很多的业务知识,你不是很了解,那也没法做,还有一些隐含的行业需求,没有3、5年的行业背景,更是没法发掘出来,到了客户缺陷才被发现,你就太被动了。当然,如果时间允许的话,你也可以介入部分模块的测试,这样虽然你测试不是很多,往往会发现很多问题,检验检验下属测试成果。

    11.多给下属讲解一些职业发展方面的东西:

    从我带过的团队成员来说,一般干了3、4年测试的测试工程师,大部分的测试工程师,对自己的职业生涯都很迷茫,没有完整的规划。由于大部分都是做黑盒测试,技术含量较低,抱怨时常是有的。尤其在这个关键的节骨眼上,对他们的心里辅导和安慰非常必要。多给他们展望一些测试的前景,经常组织测试职业发展的方向类似的讨论会,让大家有一个稳定的心,认真干活,而不是时时刻刻在寻找机会,想立马跳槽。

  • <我要告诉测试新手的>(经典)转帖---太有道理了,忍不住拷贝一份

    liveyoling 发布于 2011-03-28 12:00:27

    作者:Randall W.Rice, CSQA, CST, CSTM

    翻译:skinapi                                                

    前言
    因为已经带领和训练测试团队多年,所以按惯例我总有些东西确定需要传达给测试新手。不管你是一个测试新手还是一个经验丰富的测试专家,都有不少有益的东西需要牢记在心。

    1、你是一个检查者,你不需要为质量负责
    很多测试人员误入歧途,不明白他们是评测产品的而不是控制产品的。这两者之间有着天壤之别。例如,一个测试团队花费好几周时间测试并发现很多缺陷,只是为了看着管理层决定发布一个有已知严重缺陷的产品。测试团队经常会感到士气受挫,置疑他们测试的目的。

    我询问团队中的成员他们是否被支付薪水了,通常得到的回答都是“是”。我又询问他们是否尽力去做工作了,再一次,通常得到的回答都是“是”。我于是告诉他们,“你们做了你们的工作。你们尽力测试,发现了缺陷并进行了上报。那么现在可以回家休息了。实际上,作为一名测试人员唯一失败的地方是不上报一个已知的缺陷。”

    这不会提高士气,但却有助于事情向正确的方向发展,特别是能让人不用每天晚上都在家接着办公。

    很 多测试人员,包括我,当我们刚开始测试工作时,似乎会觉得自己对我们所测试的系统应用的质量负责。尽管这个工作的出发点是让人钦佩的,可实际上我们测试人 员对于产品的质量基本没有控制能力。也是由于这个原因,测试人员不为质量负责。现在问题是管理层并不总是能看到这种区别。所以经常看见管理层提出类似于 “我们付钱给这些人不是为了获得高质量的软件吗?”的问题。

    2、缺陷都是有价值的
    每一个缺陷都是深入了解和提高的机会。我们可能只有一次机会观察到一个缺陷,所以我总是告诉测试人员始终保持高度注意力,不要为测试的乏味所折磨。

    缺陷信息可能是可获取的项目数据中最有效的资源之一。但是这都取决于我们能多好的捕捉和传达我们所发现的缺陷的相关信息。

    每个缺陷都会花费整个组织的金钱。如果我们不能从中更进一步了解产品,我们会浪费大量时间和金钱。当我们把一个错误转换成一次深入了解的机会时杠杆作用就出现了。让我们面对它――有些教训只能通过经历来学习的。

    由于一个缺陷而责备谁不会有任何好的作用。责备只会让士气低落、沟通中断。这就像不断鞭打一匹死马希望它能活过来一样。

    3、你报告第一个问题之前一切都是美好的
    这就是一个测试人员所面对的现实。你可以计划测试,获取所需要的资源,看起来所有人都站在你这边。可当你报告第一个问题之后,事情就开始变得紧张了。

    出现这种态度上的突然变化的原因是现在你在批评某些人的工作了。自尊心使得自我收到伤害,关系变得紧张。有些情况下自尊心是值得期盼的,只要知道当你开始发现问题的时候态度有可能变化就可以了。

    我经常建议测试人员做的一件事是读一读一些你过去写的缺陷报告,假设自己是接收缺陷报告的人。你会发现自己需要更老练一些。写一个没有任何挖苦语句的缺陷报告可能没什么乐趣,但它的确有助于和开发人员之间保持一个好的关系。

    4、       只能测试你能观察的
    你可能总想测试一些真正有创造性的用例,但如果你没有办法观察到结果,那有什么意义?尽管有些应用让你能观察到很多,但仍然有你没办法接近的,例如结构、隐藏的对象、后台进程等。

    5、       别忘记你是怎样到一个地方的
    我不是在谈论知道为什么你走进一个房间,而是在测试时执行的步骤。对于测试新手常见的是发现了一个重大的缺陷,但却无法复现它以便定位解决。这样你只会觉得不舒服,不知道自己到底是真发现了一个缺陷,还是说仅仅是错误的使用了应用。

    你能用来跟踪你的测试步骤的方法有测试脚本、测试记录、敲键记录器如Spector和屏幕视频捕捉工具如Hypercam。

    6、       标准和流程是你的朋友
    尽管标准和流程让一些人觉得受限,但它们为你的工作提供了有价值的指导。不要拒绝标准因为它们是详细的、具体的。因此用它们指导自己更快、更一致的完成自己的工作。

    7、       没有足够的时间用于测试
    几乎每一个测试人员都抱怨没有足够的时间用于测试,但实际情况是测试任何东西到完整的程度都是不可能有充足时间的。当你充分考虑软件的特性如可用性、安全性、兼容性、互操作性等时这一点尤其正确。

    不要再抱怨缺少时间,学会根据风险来进行优先级排序,把注意力都放在对管理层很重要的应用目标上。有时候我们测试的内容超出了我们需要测试的,因为我们的目标偏离了产品的价值。

    8、       你不可能发现所有的缺陷
    如果你测试的东西后来有缺陷被发现,不要变得气馁。你可能已经做了非常全面的工作,获得了高水平的缺陷移除,但100%都是不可能的目标。

    9、       保持幽默感和对前景充满信心
    经常微笑、保持健康可能是你最好的生存方式。如果你正处在困难条件下,请相信,这一切都将过去。

    10、 争取做到最好而不是完美
    测试新手经常会陷入追求完美的过程中,认为100%的正确才是标准。我曾经也是受害者之一,但要为自己辩护的是,我以前深受80年代后期类似于“99.9%还不够好”的TQM帖子和文章的影响。

    追求完美的问题在于它会让测试进程变慢,将担心引入你所做的一切,使得你对别人更挑剔,而且通常会让你的朋友和家人感到失望。

    当然,没人愿意犯错误,但他们稍不注意就出现了。想不犯错误就是否认现实。争取做到最好是一种好的习惯,表明你对工作的态度和投入程度。如果你想努力做到最好,你就会往前再多走一点。

    根据我的观察,大多数人看到错误或者经历失误时都是很宽容的。人们最关心的是你对待问题的反应。

    11、 开发人员不是敌人
    需 要整个项目团队的努力才能递交高质量的产品。有时候似乎开发人员不太关心质量,这个时候事情背后可能存在隐情。这时候你需要更好的和开发人员合作而不是反 对他们。要始终牢记良好的交流是一个项目成功的关键因素。当你和开发人员站到对立面时,交流就停止了,你测试所需的很多信息也无法获取了。

    12、 建立和维护一个私人的交际网
    你的私人和工作关系是一个很重要的资产。无论时当你有工作时还是当你没工作时他们都是一个很好的支持系统。找一个好的指导者,而当你学到足够的东西时成为别人的指导者。

    13、 持续锻炼自己的技能
    你的技能把你和别人区分开。始终通过参加专业会议、获取认证、阅读专业资料等来不断学习。我给自己制定的目标是每周至少读一本和个人发展以及职业发展相关的书(测试、领导艺术、商业、IT等)。

    一个个人发展方面的专家说过如果你每天在任何特定的主题上花费30分钟进行阅读,五年之内你肯定能成为这个主题方面的专家。这一点对我是起作用的――你也可以试试。

    另一种让自己始终内行并建立网络的好的方式是活跃在一些QA或者测试论坛上。

    14、 当前进变得困难,懒惰就需要创造力了
    当我第一次成为一个测试团队负责人时,我用这句话做了一个字条挂在我的桌上。它不断提醒我把创造力作为我解决问题的一个杠杆。

    学着从一个新的有创造性的方式来看待问题。你可能有一个好的测试计划,但你如何应付各种变化呢?弹性是一个优秀的问题解决负责人的关键特性。

    15、 简单并不总是很容易
    我们测试中做的很多工作看起来都很简单。但是,挑战在于保持努力的连贯性。

    有些解决问题的方式刚开始看起来很简单,但不要由于它简单和明显就丢弃任何一种想法。同样,不要低估实现一个简单想法所需要付出的努力。

    一些看过我和William E.Perry合著的书“Surviving the Top Ten Challenges of SoftwareTesting”评论说这些挑战都很简单且很容易解决。这就让我奇怪为什么人们还在年复一年的提出“人的问题”。我认为在大脑中产生想法比实际实现出来要简单的多。

    结论
    智慧比知识更重要。你可能已经学习了大量测试技术,但如果你没有足够的智慧判断什么时候采用它们,没有从整体上理解它们,你应用它们的能力将受到很大限制。对任何都有涉猎的你存在的一个问题是“你不知道什么你不知道”。智慧帮助你明白你需要知道哪些东西才能成功。
  • 绩效评估中的十种愚蠢行为

    qiuteng258 发布于 2010-12-17 15:19:18

        绩效评估毫无乐趣可言。相反,它往往令人感到十分懊恼,因为经理人的绩效评估方式总是十分愚蠢,甚至把这一个对每个人来说都非常重要的一件事全都搞砸了。

      第1种愚蠢行为:把太多的时间浪费在绩效评估上,而不是花在绩效计划或持续不断的绩效交流上。绩效评估是一个随时都在进行的过程的最后一个环节。一个基于经理人与员工之间的良好沟通的环节。所以,我们应该把更多的时间用于预防可能影响绩效的问题,而不应该集中在年终来评估绩效。如果经理人懂得细水长流,那么,评估过程可能很简单,而且也可能十分愉快,因为这样的评估结果往往不会出人意料。

      第2种愚蠢行为:将员工进行比较。想破坏感情、挫伤士气、破坏团队、互相猜忌吗?那就给员工排名次,或对员工进行比较吧!这方法准行。此外,经理人不仅在员工之间制造了种种磨擦,而且可能成为众矢之的。这就是经理人所获得的奖赏。

      第3种愚蠢的行为:忘了评估的目的在于提高,而不在于批评。进行绩效评估的目的是为了提高绩效,而不是找一个典型,进行批评。忘记这一点的经理人最后培养出来的员工可能不再信任他们,或者无法忍受他们。那是因为批评是毫无意义的,而且也于事无补。如果说绩效评估有什么意义的话,那就是让经理人和员工携起手来,共同前进。

      第4种愚蠢行为:认为某种评估表是客观的、不偏不倚的工具。许多公司利用评估表(比如,分为5等)来评估员工。他们之所以乐意这么做,恐怕是因为这是这种方法特别快,但它未必就是正确的方法。一旦经理人觉得这种等级划分是“正确的”,或是客观的,那么问题就出现了,因为这种评估充其量只能是主观的、不正确的。比方说,你让两个人来评估同一名员工,你就会发现,评估结果很可能相去甚远。这就是主观评估的表现。你应该不断地提醒自己:划分等级是主观的、评估表是主观的、评估表是不可行的。

      第5种愚蠢行为:如果个人工资与绩效评估脱钩的话,就停止评估。这种现象相当普通。经理人之所以进行绩效评估往往是为了将其结果作为加薪的依据。当员工工资达到顶点时,或者说工资已经和评估与绩效脱钩时,经理人就提不起兴趣。多么愚蠢的想法啊!绩效评估是为了提高绩效,而不仅仅是为了加工资(虽然有些人的确这么认为)。再者,无论有钱还是没钱,每个人都希望人们对他们的工作作出反馈,。

      第6种愚蠢行为:经理人相信自己可以精确地评估员工.经理人自欺欺人地认为,他们可以精确地评估员工的绩效,事实上,他们可能根本没有见过员工工作的过程,甚至没有见过员工工作的效果。因此,准确评估是根本不可能的。大多数的经理人都不可能为了准确评估员工而长时期地监督员工工作。然而,经理人又喜欢这么做,或者有充裕的时间这么做。同时,有哪些员工希望经理居高临下地观察自己的一举一动呢?所以,在评估的过程中,我们希望经理和员工能齐心协力。

      第7种愚蠢行为:取消或推迟评估会议。这类事情经常发生。我猜想这是因为评估根本就不深入人心,所以,经理人只好一拖再拖了。为什么取消或推迟评估会议会产生巨大的负面影响呢?它可能会给员工造成这么一种印象:评估是不重要的、虚假的。如果经理人不愿意举行评估,那么,他们就不必评估了。员工不是傻瓜,经理人到底会不会重视评估,他们一看就知道。

      第8种愚蠢行为:衡量或评估小事。生活就是如此:最容易衡量,最容易评估的就是工作中的琐事。经理人热衷于把客户服务定义为 “电话铃响三声内接电话”,或诸如此类的规定。如果你希望这样评估的话,那太容易不过了。真正不容易评估的是服务的整体质量,那些能够吸引客户、留住客户的服务的整体质量。衡量全面客户服务质量是困难的,所以许多经理人并不希望这么做,而希望评估琐事。

      第9种愚蠢行为:在评估的过程中让员工措手不及。你希望真正浪费时间,希望产生不足取的绩效吗?试试这种方法一定错不了。一整年都没见经理人和员工交谈。员工搞得一团糟的时候,没有出面管管,而是暂时搁置一旁,默记在心。而后,到了评估会议上,经理人将过去收集起来的一切一股脑地拌了出来,让员工措手不及。事实上,这只能让人看清谁是老板而已。

      第10种愚蠢行为:认为所有的员工、所有的工作都应该通过同样的程序、按照完全一致的方法来评估。所有的员工都需要同样的方法来提高自身的绩效吗?当然不是。有些人需要具体的反馈,有些人则不需要;有些人需要更多的沟通,有些人则不要。当然,工作都是不相同的。你想,我们可以用同样的方法来评估福特汽车公司的CEO和车间清洁工吗?当然不能。所以,为什么经理人坚持要用同样的工具和同样的标准来评估接待员和民建工程师呢?

      这是愚蠢的。同样的标准不可能放诸四海皆准。那么,经理人为什么会这么做呢?很可能是因为人事部或人力资源部要求他们这么做。这是可以理解的,但是,这并不能改变这样一个事实:那就是,它还是愚蠢的。

     

  • 软件测试人员到底该如何提高自己的能力?

    msnshow 发布于 2010-09-20 21:58:10

      素质的培训不是一朝一夕的事情,但是针对素质进行培训却是十分重要的事情。目前从中学开始,就开设有素质教育方面的课程,但基本属于知识传授的 范畴。一个人素质的发展,与其成长环境的文化和个人经历有着很大的关系。鉴于软件测试工作往往是在不确定标准的情况下进行检验,而软件产品又有着艺术与技 术结合的特点,所以,要作好软件测试工作,不论是新员工还是老员工,不论是测试的操作人员还是管理人员,都有必要不断地提升自己的素质。

      2.团队的能力

      团队能力有多种描述方法。一种通俗的说法是,团队能力是指团队所有员工的能力整合所形成的能力。团队能力的构成来自于三方面:员工能不能做,员工想不想做,以及这个团队的整体架构、流程、规划,是不是让员工容易做到。

      团队能力不是个人能力的简单叠加,而是与个人能力互相影响,相辅相成。团队在知识、技能和素质导向方面的积累,会对团队能力产生巨大的影响。这 种积累是必然发生的,而且是不断持续的。对这种积累的过程进行正确的引导和有计划的部署与实施,将对打造学习型组织,快速提高团队能力有着十分积极的作 用。团队能力应与个人能力相互强化,即个人能力的一个方面就是对团队能力的高效应用,而团队能力的一个方面就是使得个人能力得到高效发挥。

      对于银行业的软件测试团队来说,目前各行都在快速发展的初期,团队能力正在快速形成和升华的过程中。建立优秀的企业文化,建立软件测试资产库,都将对团队能力形成发挥产生巨大的影响。

      二、提高能力的几点浅见

      能力的提高过程既是人才培养的过程,也是团队不断成长的过程。尽管在不专门关注的情况下,个人能力和团队能力也会不断地成长和提高,但是有可能出现弯路,也有可能出现与使命、目标不符的情况。为此,建议应该从如下几个方面注重能力的提高。

      1.各级经理人以身作则

      不论软件测试团队分为几级管理架构,处于管理架构不同层面的管理人员,不仅都要高度重视能力的培训,更要以身作则,引导培训的方向。任何一级经理人不重视能力培训,都会导致能力培训不能落到实处之后果。

      能力培训要得到各级经理人的重视,首先要解决两个方面的问题。一是理念问题,破除“教会徒弟,饿死师傅”的陈旧观念,代之以德鲁克提出的“没有 任何一个能干的下属会伤害上司”的观念,使对能力培训的安排由被动变为主动。二是资源问题,能力培训不仅仅是理论教学,更重要的是真正的实践。在这些学习 和实践过程中,既需要人力、环境、知识等资源,更需要时间。如果各级经理人在制订工作计划时未能考虑到培训所需要的资源因素,则会形成即使有培训的意愿也 难以实施的格局。

      因为团队能力在其建设和发展的过程中,需要投入资源更大,且会对各级经理人的工作模式产生影响,所以更需要引起各级、尤其是高级经理人的关注。 要使团队能力与个人能力能够结合产生增益效应,就要在团队能力的建设过程和个人能力的培养过程中,妥善处理好相互的关系,使得团队能力成为个人能力依托的 基础,而个人能力的一个方面就是发挥团队能力。

      2.进行学习能力分析

      按照德鲁克的分析,人在学习方面分为四种类型,即听、说、读、写。这四种类型并不是绝对的,往往是四种方式兼用,但是在不同的方式下获取的信息 权重和信息量不一样。例如阅读型学习的人,也可能会以倾听作为第二信息获取的手段,以写(例如学习笔记)作为第三学习手段;而比较特别的写作型,则只有在 写作的过程中,才能对以前通过阅读或者倾听获得的信息产生真正的理解,进而产生深入了解相关信息的欲望。

      另一方面,每个人能够集中精力专注于某项事情的时间是不一样的,对于超过专注时间的内容,则往往表现为听不进,即走神;是否容易造成走神,与需要专注的内容、表达方式等还有很大的关系。对于知识的记忆,尽管一般来说符合艾宾浩斯曲线,但每个人也有着相当的差异。

      要在个人能力培训方面获得较好的收益,应进行学习能力培训的试点。投入适当的人力资源,确定可能实现的工作目标,进行学习能力的分析指标、分析方法、工作目标、培训方法等等方面的研究和探索,并通过对知识和技能的考核来确定培训的成果。

      3.建立测试资产库

      测试团队能力应具有全面、协调和可持续发展的特征。要做到这一点,建立测试资产库,逐步实现测试人员工作过程利用资产库,工作成果丰富资产库,是十分有效的一种方法。

      测试资产库具有指导工作如何进行和可复用两大特点。资深员工的一项重要工作,就是对资产库的更新、维护和推广;即使需要他们进行一线测试工作,他们也应考虑到所进行的工作入库的可能性和价值。这其实也是衡量一个员工是否具有资深资格的重要方面。

      很多标准化、规范化的工作,都可以与资产库的建设、维护过程结合进行。在资产库的建设上,以结构化的内容为主,以非结构化的内容为辅。这样,标准化、规范化的工作也易于落到实处。

      建立资产库是一个复杂、持续、不断调整的过程,对资产库的内容来源、资产库的组织方法、资产库的实现工具、资产库可能发挥的作用和应用资产库的培训,不同的测试团队应结合自身的情况积极的进行探索。

      4.注重素质的培训

      世界观和价值观是一个人素质的决定性因素。树立和改造世界观、价值观不是一件容易的事情,但是在积极的思想引导下,逐步地改变习惯却是可能的, 并且会对素质的提升带来显著的影响。史蒂芬.柯维所著的《高效能人士的七个习惯》就是在这方面的一部影响十分广泛的著作。柯维讲述的“积极心态、目标明 确、要事第一、双赢思维、知彼解己、统合增效、不断更新”七个习惯,既包括了对自己的高效工作、生活的习惯,也包括了妥善处理人际关系的习惯,并被中国软 件评测中心列为软件测试人员应具有的素质。对于测试的各级管理者,应加强对将科学发展观以及党的思想路线落实到工作中的学习,并应学习德鲁克等现代管理理 论,针对知识工作者的特点,进行有效管理。

      5.细分测试岗位所需的个人知识与技能

      根据被测对象的不同,软件测试人员所需要的知识和技能也不同。在前面分析的基础上,应针对不同的测试对象、考虑到实际的测试流程,将测试人员分 为不同的知识技能组,对测试人员所需的知识和技能进行分级分类,以便能够更好地深入了解被测对象支撑的业务和所采用的技术,确定测试人员使用资产库的最低 阈值,使个人能力和团队能力真正实现相得益彰。



  • 深入手工测试

    ermine 发布于 2009-12-04 21:17:40

    最近几天一直泡在论坛上,看到很多人都认为“手工测试没有技术含量”,“做测试,还是自动化测试,性能测试比较有前途”等等。

    首先,我想的是,什么是“技术含量”。我觉得,一般指的有“技术含量”的,就是你能做别人不能做,或者你完成目标比别人快的多的事情,如果随便一个人很快能上手完成你所做的工作,就不算有技术含量。就好像只把伪代码转换为语言的程序员,有多少“技术含量”?从这个角度上看,很多人觉得“手工测试没有技术含量”就不足为奇了,因为如果按照用例去执行,给出明确的预期结果,谁都应该知道用例执行是通过还是没有通过。那如果不是用例的执行而是去设计,而是编写用例呢?给出一个功能点,每个人是否都能快速的设计出有效的测试用例呢。答案一般是否定的,最少同一个公司,有的人写的快,有的人写的慢;有的人考虑的周全,思路很清楚,有的人写用例和不写用例一样,想到哪写哪。测试用例的设计总该算是有“技术含量”了吧,不懂业务的,熟悉业务要很长时间,不晓得逻辑方法的,肯定先要把逻辑弄清楚。

    再次,不管什么工作,什么事情,只要能持续的做的深入,总会有能力上的提升。(个人认为,能力包含技术,还有技术以外的东西)对于测试来说,如何定位一个问题,就可以做的很深。上次参加那个交流会,会上某公司的主管就说了一个例子:“假设我们测邮箱发送4M的附件发送失败,一种做法是直接把附件给开发,说这个附件不能发送;还有一种做法就是将问题进行细化,是文件格式的原因,文件大小的原因,还是最后只是文件里包含了不合法的字符。”如果是后一种,问题解决起来也快,开发也愿意配合,自己也能提升技能。的确,一开始细化问题的时候,会很费力,但是“火车刚发明的时候比马还慢”,当你能力提升了以后,会发现处理问题会越来越顺手。(如果碰到无法理解的问题,肯定要给开发,不能自己转牛角尖,但是开发修正后,可以去问是什么问题,怎样修复的。)说句比较考张的话,把平凡的测试变为不平凡的分析去做~

    最后,说其他方面的成长。我们肯定很明白一点,测试不是凭想象,想怎么测,就怎么测的,总是在开始测试之前,先把思路理清楚,测试的策略想清楚,于是锻炼了思维。我们总是在描述bug的时候,担心开发看不懂,每次以他人的眼光来审视写的bug,是否有歧义,复现的步骤是否更直白,语句是否更简练而清楚,顺带着,是否有截图和图上重点的标示,于是锻炼了文字描述。我们总是会和需求人员确认需求,和客服人员确认客户问题,和开发确认缺陷问题,于是我们锻炼了沟通。也许有人会不认同这也是一种收获,那可以问问自己,我们有没有测试到一半,发现漏了功能点,重新回头进行测试的情况;我们有没有写bug后,开发看不明白,打回的情况;我们有没有根本没有了解到客户的真正问题,就马上去解决的情况。。。。

    任何工作,当想有没有前途前,想想自己为此付出了多少。如果做自动化或性能,只会简单的入门,而不去深入,我想也不会有“前途”吧。

  • 论测试职场的不易替代性(发散话题)

    架构师Jack 发布于 2010-08-14 18:06:06

     

    现在单位有越来越多的实习研究生,这些研究生们很努力聪明(挑选过),很多半年不到就能做一个不错的测试执行人员(能写自动化脚本,各种测试工具也掌握了用法,环境搭建也麻利了),甚至有的也开始写测试用例。有些工作2-3年的同事感觉到有些危机感了。觉得自己所做的工作内容,只需一年就能被新人替代。为此,我给部分同事进行了一定的鼓励,在此与大家分享,希望大家一起讨论。

    “1、如果你做2-3年测试的优势只是对自己的这个被测产品很了解,而对测试本身了解很少,那么你的优势是在产品知识而不是测试,你要巩固自己的不可替代性的方法是把产品知识理解的更深更系统,这样新人至少也还需要1-2年才能赶上你现在的产品知识。可是公司一旦砍掉了这个产品,你在新产品项目中还有优势吗?”

    “2、虽然你在写测试用例、新人也在写测试用例。但是就像苹果手机一样,如果你写用例的质量是山寨质量,那么你很容易被其它山寨所替代。如果你测试分析的质量和写的用例集质量是专业水平,山寨很难在专业质量上替代你。你是山寨还是专业?你自己是否平时针对被测对象的分析是随意的,没有持续提升的,那么你的确有可能写用例的水平也就停留在测试专业半年的质量水准。所以不要怕其它人做和你一样的工作内容,只要你平时一直严格要求自己的测试用例编写质量,每次做测试分析设计都比上次更好,那你就能做到专业级。这种能力需要等量时间和经验积累才可能拥有。”

    “3、你可以这样衡量自己工作的不可替代性:假设有一个同样的工作目标,对A软件进行测试分析设计,输出测试用例集。公司找10个实习生一起合作用同样的时间也做不到我输出测试用例集的质量。公司会选择我,这里面就有我很多的不可替代性在里面。可如果是同一个目标,10个实习生一起能在更短的时间内完成你的任务,且质量不比你低,那么你就要考虑在这个方向上你是否容易构造起你的核心竞争力。”

    “4、有同事说他在开发部干了3年转过来的,所以在测试部有不可替代性。如果你不能在测试领域比其它测试同事把被测对象分析的更系统和透彻,输出的测试用例比其它人都更全面高效,那你依然没有不可替代性。因为只用3年时间公司就可以产生大量代替你的人,招一批实习同学先去写3年代码再转测试,你就被替代了。所以,即使干过3年开发转来测试,对你而言也要踏实虚心的在测试知识上不断学习实践。在测试部不是比编码能力,而是比测试技术质量、比计算机基础体系知识。”

    居安思危,才能久保平安。大家都来讨论一下吧:我们如何树立在测试职场的不可替代性?也许讨论清楚了,我们也找到了后续个人的努力方向了。

     

  • 用动态的眼光看测试(转)

    navy2008 发布于 2010-08-09 10:22:05

     软件测试工程师到底是做什么的?很多书籍都会这样告诉你:黑盒测试工程师测试程序,白盒测试工程师测试代码。这样说的确没错,初学者可以这样理解,如果作为资深的软件测试工程师还是这样想的话,只能说是这几年的时间里你并没有任何进步。

      简单点说资深软件测试工程师仅需要掌握测试技术和行业技术就足够了。但细品起来好像也不完全像上面说得那样简单,怎样做才能掌握高超的测试技术,怎样做又才能成为行业技术专家,怎样做才能将这两者结合在一起呢?

      举个例子要求测试报表的工程师去检测一次性水杯,针对这个题目写出可行的测试用例。看了这个题目,很多测试工程师都会感觉头疼,这样的测试用例怎么写啊?先别急,让我们来考虑一个小问题“什么叫测试,测试应该从什么地方开始着手?”如果能将这个问题想明白,测试水杯的思路也就逐渐清晰了。比如,首先要考虑杯子是用来盛水的,那就要求它不会漏水。如果有人喜欢喝热开水,作为盛水的工具它应该满足沸点水温的要求,如果有人喜欢喝冰水,零度以下的要求也应该能够实现。然后再考虑一下杯子的软硬程度,如果太软拿不住,持杯子的人还会喝到水吗?如果杯子太硬是不是造价又会太高呢?接着再考虑在多长时间内杯子不会被水泡开,如果一个装了水的杯子,在两分钟后就被泡开了,那肯定是不合格的产品了,消费者是不会为如此短命的水杯买单的。沿着这个思路走下去,你会发现需要检测的内容太多了,杯子是不是会散发异味,是否满足食用器皿的卫生标准,杯壁上是否有异物,装满一杯水后杯子是否会损坏,杯子表面的图案会不会掉色,花样是否美观,装一些固体物体时杯子的可用性等等,基本功能测试、稳定性测试、压力测试、关联性测试就这样逐一而出。很神奇是吗?继续这个题目完成它,测试用例也就出来了。

      上面的小例子是灵活运用测试理念的一个典型,从这个例子中不难看出测试的广博,一个好的测试工程师能够像万金油那样,运用到方方面面的测试中,对事物的认知都可以从测试的角度来分析。尝试从身边的一些小事物开始,培养测试的兴趣和眼光,慢慢的就能从中体会到测试的意义了。比如对钢笔、桌椅板凳等做做测试,你会不会发现自己正逐渐的像质检员那样专业?在测试取得成功的同时,想想测试的过程,对测试对象高度认知不就是测试成功的基础吗?也就是说在测试之前你已经掌握了测试对象的特征,并且这些信息以不可察觉的速度在头脑中建立了测试的方向,所以才会得心应手。这个对特性认知并建立起测试方向的过程就是测试理念日趋成熟的过程。

      再举个例子,让手机软件的测试工程师来测试网络软件,结果通常是以失败而告终。有些人就不明白了,为什么测试桌椅都能成功,同样也是测试软件却失败了呢?那是因为在进行这个题目的时候我们忽略了非常重要的一点“行业技术”,桌椅等日常用品因为太过熟悉所以很容易掌握其特性,但是网络软件却因为其高度的领域性不被普遍认知。测试手机软件的工程师也许对各类型的手机操作系统非常熟悉,但是对网络知识的了解却很少。所以这种盲目的使用软件的过程,并不能构成系统的测试过程,最终导致题目执行的失败。

      解决这种问题最好的方法就是培养广泛的兴趣,学习一些行业知识,从当前项目所需要的行业技术开始,适当的增加对其他领域的了解,比如游戏软件、杀毒软件、文字编辑软件等等。艺多不压身,如果哪天你所在的项目组改变了业务方向,你还会紧张吗?

      不要将眼光局限在一小块地方,从另一种角度用动态的眼光去看待软件测试,当你发现测试无处不在的时候,才能说是真正深入到了这个领域。

  • 初识sikuli自动化测试工具

    fengzhulin 发布于 2010-07-29 17:47:59

         从51testing上看到网上有提到到这个工具----sikuli(印第安语上帝之眼的意思),试用了一下,觉得还蛮有意思,也很方便,大家有时间可以玩玩。
     
        这个软件主要是用图像识别来进行GUI自动化测试,从试用情况来看,在本机上用,识别程度还是比较高的。
         运行的时候用run->run and show actions可以看到具体点击的焦点,比较清晰!
     
        使用起来感觉很简单(没有深入研究),只需要截取要操作的地方的图像,然后用简单的语法组织起来(sikuli的脚本函数),然后运行脚本就行了。上面这个图里面的脚本是闪电邮创建账户的一个自动化测试流程,我试了,能跑起来。不知道迁移到其他机器是否兼容,因为不同机器屏幕色彩不同(还没有试)。
       这种靠图像识别的肯定还是有局限性的,但是感觉很便捷!局限性见下面1中的文章介绍。
     
        具体可以参考下面的一些链接资料:
    1、51testing上第18期杂志里面的第三篇文章“自动化测试工具sikuli的介绍”。
    2、官方下载sikuli的地址:
         注意,使用这个软件需要配java环境,用最新的java runtime
     
        
    一些小问题:
    像一些弹出菜单等窗口,截图的时候运行程序是截取不到的,做了个实验,先用其他截图工具(测试用的qq截图),截图后贴到qq聊天窗口,然后再用sikuli截取需要的部分放入程序。运行脚本,居然也能识别,太强大啦。呵呵。
        
    关于移植问题:
    因为靠图像识别,故对和图形图像有关系的因素都会影响识别准确性,所以如果换了机器,可能脚本就不能跑了,实验过程中先在vista中录取了一段脚本,然后移植到xp下,调整了脚本中图标的相似度后,平均到5之后,就都可以识别了。希望以后程序能越做越好。


  • 性能测试工具原理

    zhouchunyu163 发布于 2010-08-03 19:28:25

      一:性能测试工具模型

      广义地说,性能测试工具是指性能测试过程中使用到所有工具,但是我们习惯上把“性能测试工具”定位于LoadRunner、SilkPerformer一类的工具。

      关于性能测试的几个误区:

      1、认为性能测试就是使用性能测试工具进行测试。

      性能测试工具只能帮助你实施性能测试,并不能帮助你完成性能测试的需求、设计和分析。

      2、认为性能测试工具可以完成性能测试结果分析工作

      性能测试工具只是能够根据你的要求以各种方式提供报表,这些报表可以被您用来分析系统性能状况。

      3、不清楚性能测试工具的录制/回放与功能测试工具的录制/回放的区别。

       功能测试工具的录制/回放一般是针对GUI的操作录制,脚本中记录的是用户对控件的操作,例如按下了“确认”按钮或是在“姓名文本框”中输入了ABCD 等内容,这时因为功能测试工具主要是通过操作和数据来验证功能的正确性,评价的主要标准是GUI的正确性(界面内容的正确性)。而性能测试工具录制的是服 务端和应用之间的通信数据,而不是应用的GUI操作。^_^^_^理解了这一点,就不难明白为什么在进行性能测试脚本录制的时候,需要首先选择录制的协议 了。

      4、不清楚何时选择何种协议。

      选择何种协议取决于应用和客户端之间的通信协议。

      二:性能测试工具架构

      1、虚拟用户脚本产生器(Virtual User Generator):通过一个Proxy作为客户端和服务器之间的中间人。

      2、压力产生器(Player):压力器扮演着“产生负载”的角色。

       3、用户代理(Agent):运行在负载机(LoadMachine)上的进程,该进程于产生负载压力的进程或是线程写作完成“产生负载”的功能。如一 台PC可以顺利运行200个左右的VU,但对需要1000个VU的情况显然很难指望一台PC,这时就需要通过多台及其进行协作,“用户代理“就帮助产生” 步调一致“的VU。

      4、压力调度和监控系统(Conductor):直接与用户交互的主要内容,压力调度可以根据用户的场景要求,设置各种不同脚本的VU数量,设置同步点等,而监控系统则可以对各种数据库,应用服务器、服务器的主要性能计数器进行监控。

      5、压力结果分析工具(Analysis):用来辅助进行测试结果的分析。

      三:性能测试脚本录制时的协议类型

      ^_^^_^不要想当然地根据开发语言来决定协议的选取,这样子极有可能导致录制后的脚本不能回放成功。

      几点说明的内容:

      1、使用Socket协议可以对任何类型的应用通信进行录制,但这种录制生成的脚本很可能没有任何意义。

      2、在对应用间的通信进行录制生成脚本后,对脚本进行回放,有时会出现回放无法继续的情况(停留在某个步骤无法进行下去),此时应该考虑是否使用了合适的协议。

      ——————————————协议选择参考方案——————————————————————

      1、Web应用:应用特点:采用J2EE或是dontNet结构,HTTP/HTTPS协议。

      2、C/S应用:

      a、客户端程序以ADO、OLEDB方式连接后台数据库,选择后台数据库类型选择相应的协议。

      b、客户端程序以ODBC方式连接后台数据库,ODBC协议。

      c、其他协议,根据具体协议类型进行分析。

      3、组件:a、COM/DCOMcom/dcom协议。

      b、EJB,EJB协议。

      4、服务:

      a、WebService,WebService协议。

      b、Mail服务器,SMTP/POP3协议。

      c、FTP服务器,FTP协议。

      5、应用服务器:

      a、OracleApplicationServer,OracleApplicationServer协议。

      b、SAP,SAP协议。

      c、Tuexdo,Tuexdo协议。

      四:性能测试工具的选择与评估

      这个问题通常会有两个层面的意义:第一,创建还是购买?第二,如果购买,如何选择一种商业工具?

      1、创建还是购买?

      总而言之,”购买“的方式可以以较低的总体成本快速获得可用的软件,但如果被测试对象本身有一定的特殊需求,最好使用”创建“的方式构建适合的测试工具。

      2、测试工具的评估和选择过程。

      (1)列出需要的工具功能列表

      (2)工具比较

      (3)成本分析

  • 测试资源归类

    xiaoningln 发布于 2010-01-15 11:02:52

    bug管理

    缺陷管理培训PPT
    http://bbs.51testing.com/thread-130409-1-5.html
    软件过程、管理和质量, 南大培训讲座ppt
    http://bbs.51testing.com/thread-79978-1-6.html
    软件质量保证和测试 某公司培训资料
    http://bbs.51testing.com/thread-79972-1-6.html
    测试管理-BUG管理
    http://bbs.51testing.com/thread-42157-1-6.html
    软件质量与测试效果考评标准
    http://bbs.51testing.com/thread-79982-1-5.html
    Bug管理的经验和实践
    http://bbs.51testing.com/thread-10861-1-1.html
    软件测试及Bug管理经验谈
    http://bbs.51testing.com/thread-6877-1-1.html
    微软bug管理
    http://bbs.51testing.com/thread-112690-1-2.html
    Bug管理指南
    http://bbs.51testing.com/thread-115428-1-6.html
    Bug管理指南,一个不错的ppt
    http://bbs.51testing.com/thread-79975-1-1.html
    软件测试与改错
    http://bbs.51testing.com/thread-14627-1-11.html

    bug分类

    Bug关键字
    http://bbs.51testing.com/thread-78781-1-8.html
    Bug描述的常见问题
    http://bbs.51testing.com/thread-3733-1-22.html
    注重BUG分析的良好习惯
    http://bbs.51testing.com/thread-106330-1-18.html
    软件缺陷的详细整理
    http://bbs.51testing.com/thread-48144-1-32.html
    软件缺陷分类标准
    http://bbs.51testing.com/thread-2846-1-3.html
    软件缺陷分类标准
    http://bbs.51testing.com/thread-10385-1-8.html
    软件缺陷分类标准新版
    http://bbs.51testing.com/thread-5360-1-33.html
    软件缺陷分析
    http://bbs.51testing.com/thread-13770-1-3.html
    一份BUG记录表
    http://bbs.51testing.com/thread-96894-1-6.html

    bug流程

    Bug管理的一般流程
    http://bbs.51testing.com/thread-77663-1-8.html
    BUG生命周期流程图
    http://bbs.51testing.com/thread-66754-1-6.html
    bug数据分析(转)
    http://bbs.51testing.com/thread-35-1-3.html
    【一份相当详细的】bug状态流程图+bug处理流程+角色
    http://bbs.51testing.com/thread-78589-1-1.html
    [原创]Bugs 的有效交流和管理[翻译]
    http://bbs.51testing.com/thread-36-1-33.html
    对[原创]Bugs 的有效交流和管理[翻译] 的一点点补充
    http://bbs.51testing.com/thread-37-1-2.html
    缺陷管理流程
    http://bbs.51testing.com/thread-58612-1-6.html
    缺陷管理流程图
    http://bbs.51testing.com/thread-66147-1-3.html
    几个流程图
    http://bbs.51testing.com/thread-126388-1-4.html
    缺陷状态变更流程图
    BUG统计分析的几种方式
    http://bbs.51testing.com/thread-4514-1-2.html
    测试BUG跟踪流程
    http://bbs.51testing.com/thread-6659-1-6.html
    Bug收敛曲线(Gompertz曲线)自动绘制工具
    http://bbs.51testing.com/thread-83930-1-8.html
    结合BUGFREE新做的缺陷管理流程图
    http://bbs.51testing.com/thread-71283-1-11.html
    CQ的BUG管理流程[附图]
    http://bbs.51testing.com/thread-16641-1-53.html

    bug报告

    bug报告介绍
    http://bbs.51testing.com/thread-28378-1-2.html
    如何写有效的bug报告
    http://bbs.51testing.com/thread-125816-1-1.html
    如何写bug report
    http://bbs.51testing.com/thread-101389-1-1.html
    一个介绍微软如何测试的ppt
    http://bbs.51testing.com/thread-79976-1-1.html
    (翻译)编写优秀Bug报告的艺术及案例分析
    http://bbs.51testing.com/thread-17595-1-2.html
    缺陷报告编写规范(个人整理)
    http://bbs.51testing.com/thread-80672-1-5.html
    报告软件测试错误的规范
    http://bbs.51testing.com/thread-7192-1-10.html

    bug工具

    bug 工具
    http://bbs.51testing.com/thread-2354-1-4.html
    (1)Mantis
    xampp成功搭建Mantis
    http://bbs.51testing.com/thread-139189-1-1.html
    Mantis 1.0.7 中文版本完整手册(原版英文在线完成手册翻译),欢迎下载
    http://bbs.51testing.com/thread-84353-1-1.html
    开源的软件缺陷跟踪工具Mantis安装使用手册1.0版本完成了,欢迎各位下载
    http://bbs.51testing.com/thread-2084-1-1.html
    Mantis中文使用手册(采用中文界面)
    http://bbs.51testing.com/thread-8352-1-1.html
    软件缺陷跟踪工具Mantis安装使用手册1.0.7版本(基于Apache,配置好图形统计),欢迎下载
    http://bbs.51testing.com/thread-84372-1-10.html
    Mantis中文使用教程
    http://bbs.51testing.com/thread-31541-1-5.html
    7步搞掂 Mantis 安装配置——有史以来最简单快捷的方法
    http://bbs.51testing.com/thread-42465-1-15.html
    mantis安装求告无门的进
    http://bbs.51testing.com/thread-19617-1-1.html
    testlink-mantis 升级宝典
    http://bbs.51testing.com/thread-49291-1-16.html
    请问,Mantis中的邮件服务如何配置?
    http://bbs.51testing.com/thread-3354-1-26.html
    mantis安装配置心得——跟大家分享:)
    http://bbs.51testing.com/thread-84481-1-29.html
    (2)Bugzilla
    bugzilla3.0汉化包
    http://bbs.51testing.com/thread-85371-1-3.html
    bugzilla如何安装
    http://bbs.51testing.com/thread-16653-1-1.html
    Bugzilla安装攻略
    http://bbs.51testing.com/thread-87274-1-3.html
    Bugzilla+Apache+mysql+Perl安装手册
    http://bbs.51testing.com/thread-84455-1-3.html
    bugzilla安装备忘
    http://bbs.51testing.com/thread-73780-1-4.html
    (1   windows下
    BUGZILLA在windows下的安装
    http://bbs.51testing.com/thread-105958-1-6.html
    Windows下Bugzilla2.20+Apache(IIS)+mysql+Perl安装
    http://bbs.51testing.com/thread-22398-1-4.html
    windows下安装bugzilla
    http://bbs.51testing.com/thread-109541-1-22.html
    bugzilla3.0+activeperl5.8.8+apache2.2.4
    http://bbs.51testing.com/thread-78455-1-12.html
    Bugzilla在Windows XP下的安装指南
    http://bbs.51testing.com/thread-71488-1-3.html
    (2   Linux下
    [转] Bugzilla + Oracle + Linux 安装笔记
    http://bbs.51testing.com/thread-134053-1-9.html
    Linux下Bugzilla的安装
    http://bbs.51testing.com/thread-77464-1-12.html
    在Linux系统中bugzilla安装与配置
    http://bbs.51testing.com/thread-36176-1-19.html
    最新的bugzilla3.12的所有 PPM模块 物超所值
    http://bbs.51testing.com/thread-113261-1-5.html
    bugzilla 模块批量安装包
    http://bbs.51testing.com/thread-81035-1-10.html
    (3  使用说明
    发一个很详细的bugzilla使用说明
    http://bbs.51testing.com/thread-90881-1-1.html
    bugzilla使用说明
    http://bbs.51testing.com/thread-73137-1-11.html
    详细的bugzilla使用指南
    http://bbs.51testing.com/thread-120556-1-2.html
    bugzilla使用简明手册
    http://bbs.51testing.com/thread-9332-1-2.html
    bugzilla实用说明
    http://bbs.51testing.com/thread-7940-1-26.html
    (3)ClearQuest
    ClearQuest教程▼
    http://bbs.51testing.com/thread-2199-1-1.html
    如何搭建一套ClearQuest的测试环境
    http://bbs.51testing.com/thread-75350-1-36.html
    jackie的大作《ClearQuest配置手册发布版》
    http://bbs.51testing.com/thread-5256-1-5.html
    clearquest
    http://bbs.51testing.com/thread-32671-1-27.html
    sincky搜集的clearquest资料,来源网络,供大家参考
    http://bbs.51testing.com/thread-20152-1-31.html
    ClearQuest字段和操作权限设置的问题
    http://bbs.51testing.com/thread-26003-1-31.html
    (4)JIRA
    JIRA中文使用手册
    http://bbs.51testing.com/thread-45571-1-2.html
    缺陷管理工具JIRA从入门到精通使用文档
    http://bbs.51testing.com/thread-119149-1-11.html
    求JIRA的详细使用说明
    http://bbs.51testing.com/thread-103444-1-6.html
    JIRA工作流的制定和使用
    http://bbs.51testing.com/thread-116634-1-5.html
    关于jira的汉化问题
    http://bbs.51testing.com/thread-51733-1-11.html
    一个专业的缺陷跟踪管理软件:JIRA
    http://bbs.51testing.com/thread-22739-1-50.html
    (5)TestLink
    TestLink1.7.4中文包(全面汉化)
    http://bbs.51testing.com/thread-132373-1-3.html
    TestLink 1.7 安装成功 附资料
    http://bbs.51testing.com/thread-94267-1-14.html
    TestLink1.7正式版使用手册
    http://bbs.51testing.com/thread-104475-1-4.html
    (6)Test Track
    Test Track Pro Client的使用手册
    http://bbs.51testing.com/thread-25570-1-5.html
    Test Track Pro Client的使用方法的PPT
    http://bbs.51testing.com/thread-25490-1-6.html
    缺陷跟踪工具Test Track配置中文文档汇总
    http://bbs.51testing.com/thread-19989-1-14.html
    TrackRecord 50f.pdf
    http://bbs.51testing.com/thread-46405-1-15.html
    关于TestTrack Pro7.5.2配置文件
    http://bbs.51testing.com/thread-81643-1-20.html
    推荐一个好用的BUG跟踪工具,URTracker
    http://bbs.51testing.com/thread-1748-1-32.html
    (7)BugFree
    简单实用的BugFree
    http://bbs.51testing.com/thread-77671-1-8.html
    XamppForWin配置bugfree
    http://bbs.51testing.com/thread-45154-1-12.html

    其他资料

    cq web 配置手册(转)
    http://bbs.51testing.com/thread-2200-1-14.html
    缺陷记录单模板
    http://bbs.51testing.com/thread-91053-1-1.html
    软件需求分析模板
    http://bbs.51testing.com/thread-119157-1-2.html
    测试要点总结
    http://bbs.51testing.com/thread-106331-1-2.html
    测试用例设计
    http://bbs.51testing.com/thread-87484-1-6.html
    测试用例评审检查单
    http://bbs.51testing.com/thread-105420-1-9.html
    软件工程思想PDF格式
    http://bbs.51testing.com/thread-79980-1-11.html

    讨论热点

    大家愿意使用哪种bug管理工具(前提假设均免费)?
    http://bbs.51testing.com/thread-113456-1-1.html
    缺陷管理工具之三——Mantis与JIRA对比
    http://bbs.51testing.com/thread-139257-1-4.html
    请教,缺陷跟踪工具!
    http://bbs.51testing.com/thread-156-1-67.html
    如何选泽一个好BUG跟踪工具
    http://bbs.51testing.com/thread-16025-1-21.html
    有哪些免费又好用的缺陷跟踪系统?
    http://bbs.51testing.com/thread-37503-1-25.html
    Bug追踪过程中需要注意的问题
    http://bbs.51testing.com/thread-31647-1-64.html
    如何创建缺陷分析指标体系
    http://bbs.51testing.com/thread-64682-1-2.html
    Bug流程图,欢迎讨论
    http://bbs.51testing.com/thread-756-1-34.html
    缺陷分布曲线图是怎么绘制出来的?
    http://bbs.51testing.com/thread-51293-1-2.html
    BUG级别与严重程度
    http://bbs.51testing.com/thread-88880-1-25.html
    缺陷等级应如何划分
    http://bbs.51testing.com/thread-126302-1-7.html
    [转贴]软件测试书籍列表,大家补充
    http://bbs.51testing.com/thread-12727-1-8.html
    软件发布后,发现BUG谁负责?
    http://bbs.51testing.com/thread-123408-1-14.html
    问:TestDirector中的Bug优先级是如何定义的?
    http://bbs.51testing.com/thread-17440-1-16.html
    [请教]Mantis中的issue的status&resolution
    http://bbs.51testing.com/thread-21959-1-23.html
    为什么使用http://localhost/Bugzilla可以进入页面 ,但是http://IP/Bugzilla进不去
    http://bbs.51testing.com/thread-57360-1-27.html
  • 《软件测试质量体系》培训总结与思考一

    liqf 发布于 2010-06-24 21:12:12

    此次培训,不同于理论知识的讲解,更多的是微软测试思想、方法与技巧的传达。通过培训,了解了微软的测试思想及过程,很多思想、方法值得我们学习。

    1          对软件测试的理解

    1)        测试的目的

    Ø  不仅是为了将测试做好,更是为了将项目做好

    Ø  测试不仅仅是发现bug, 测试的最高境界是建立起一套软件测试质量体系,使得项目按照既定的方向(进度)和标准(如质量)前进

    Ø  开发过程中的质量,不仅仅最终代码存在质量,开发的工作方式、过程中的方法、产物同样是质量

     

    思考:微软是没有QA的,微软人人都是QA,质量意识是微软人最基本的素质,由测试人员制定项目轨道,并在过程中执行推进。重要的一点:该踩刹车时要及时刹车

          我们目前有专业的QA团队,负责项目过程中的质量管控,QC负责工程产物的质量,由两个角色来达成该目标,按国内软件企业的现状,由两个角色,专业化分工,开展起来确实更为有效。

    2)        测试的原则:尽早的、不间断的进行测试

    Ø  尽早的测试

    ü  测试人员在需求阶段就介入,在项目前期预防和纠正需求及设计问题,做好缺陷的预防

    ü  开发阶段:尽快的、尽可能的、极早的告诉开发代码是有效的

    思考:

    a)       目前我们已经做到了测试人员在需求阶段就参与,参与需求、设计文档的评审,但参与的效果还有待提升。

    b)      “不明确的需求是项目效率的第一杀手”,测试设计人员应更多的从上游发力,加深自己对业务、对客户实际需求的理解,从实际应用、用例设计的角度参与业务需求、设计文档的评审,预防缺陷的发生。

    c)       以前我们经常到项目后期了又发现重大BUG,这时给项目带来的极大风险,往往就是项目延期,再严重点的导致质量不可控,如何“尽快、极早的告诉开发代码是有效的”这是我们应该追求的目标,测试的依据是测试用例,还是应从测试用例设计上下功夫。

     

    Ø  不间断的测试:微软采用“每日构建、自动化测试”的方式

    ü  微软建立了一套自动化测试平台(据讲师介绍微软全部是自己开发的测试工具,花了5年多时间,各类工具有40多种,再由总控平台统一控制)

    ü  采用自动化测试后,任何时候都执行所有用例(微软亚洲工程院的项目每天对3万多条测试用例重复开展自动测试,产生300万条测试结果)

    思考:

    a)       我们目前全是手工测试,不可能做到任何时候执行所有用例。项目过程中分为多个测试工序,不同测试工序选取不同级别的测试用例执行,手工执行重复测试容易疲劳,带来的风险是修复BUG引起的新BUG可能被遗漏,或对未修改功能产生的影响被忽视。对影响点的识别与评估是我们需要加强的。

    b)      微软的“任何时候执行所有用例”是一种理想状态,虽然自动化测试是行业的发展趋势,但我们不可能做到100%覆盖,可挑选出基本用例开发自动化,做到每日构建的基本用例验证,避免最基本、最不可接受的程序BUG

     

     2          测试计划与用例设计

    1)        制定计划的原则

    Ø  将项目切分为多个里程碑,分别进行管理。

    ü  确保当前盖的这层楼是想清楚、明确后再去盖的

    ü  确保已完成的是绝对可靠的

    Ø  提前定好项目标准

    ü  在每个里程碑节点完成后进行回顾

    ü  最终标准达成后即发布

    ü  微软的发布评估标准(Release Criteria):

              95%的测试用例通过率,且持续时间>5天。

    不是累计达到95%,而是5天每天达到95%

              允许有5%case不通过,但级别不能是重要的case..

              代码覆盖率>85%(指测试用例执行的代码覆盖率)

              ZBBbug边界,保持5

    微软在ZBB后,会安排全员大扫除,连续5天时间未发现BUG,才可发布

    Ø  关注模块间的依赖

    ü  确保每个模块及所有边界都有人测试,避免重复和无人测的情况

    ü  边界出存在小范围重复测试是允许的

    2)        制定测试计划中,发现人员不充分,经验不足怎么办?

    Ø  从工程的角度考虑问题,不仅仅是要求测试人员之间分享经验,还需要有效的标准

    ü  将有经验成员的能力转化为形式:将有能力者的思维方式形成模板

    ü  一个好的模板,是节约人力成本的好办法。还能弱化对每个人的依赖度。

    ü  重视过程文档:写文档,重在思考的过程。强调起清楚,再干活

    ü  新老员工之间产物的区别,应转化为中间评审打回返回次数的区别,最终文档的质量应该是完全一致的

    ü  文档质量的高低:50%取决于作者,50%取决于对该文档抓质量的程度

    Ø  检查需求细不细

    ü  避免主观语句(性能高,响应速度快等这样的形容词),速度响应快,快到多少秒。

    ü  一定要量化需求,而不是主观感受。

    Ø  凡事以数据说话,这样才能有说服力。

     

    思考:

        目前我们的流程、体系,与上面的大部分原则不谋而合,有些点我们现在是做了,但还做的不到位,应彻底落实。

    a)       微软的发布标准是非常清晰,且完全是用数据说话,从中可以看出微软对质量的重视程度。我们目前的发布标准虽然也会依据质量目标的达成,但标准较为模糊,更多的还是测试团队的感知,测试人员测到最后阶段,也都很疲劳希望能够尽快发布了。这也是导致我们产品发布后立即频繁发补丁的原因之一。

    如何清晰定义发布标准,使用有效的数据说话,是我们需要改进点之一

    b)      一直没太搞清楚 “代码覆盖率”用什么方法来测算,现在我们只能测算到对功能点的覆盖率(颗粒度太粗),如果能够测算对代码的覆盖率会更准确,有助于用例设计覆盖率、测试质量的有效提升。

    老师介绍一种方法是在代码中所有分支处设置数字标识,测试执行时验证该分支就会弹出标识,最终检查是否所有分支标识均进行了验证。这对开发人员要求较高,有一次与金碟的同行交流,他也提到他们会在代码里埋探针,来检测执行的代码覆盖率。不太清楚这样做会给开发带来多少工作,在我们团队中是否可行?

    c)       我们对模块间的关系影响也有考虑,但对影响的识别、评估能力欠缺,对系统间的边界识别容易遗漏,计划中没有明示对边界的处理。

    在设计阶段,会对所有接口进行梳理,进行接口设计。测试人员在设计用例前,也应对系统与系统间、模块与模板间的边界进行分析识别、统一梳理,并落实至具体计划中。

     

    3)        如何提高测试用例的编写水平

    Ø  积累测试素材:建立内部的测试素材库

    比如对于文本框的验证,一般都是验证那几项,有效数值,无效数值,空格,空等等,这些测试用例在每个项目中都可以反复使用。

    Ø  任何情况下都必须使用边界值分析法

    这种方法设计测试用例发现程序错误的能力最强

    Ø  必要时用等价类划分方法补充一些测试用例

    Ø  用错误推测法再追加一些测试用例

    Ø  不要因为实现的困难程序而影响设计用例

    Ø  测试方法的复用

    对于有继承性的项目来说,用之前编写的测试脚本或自动化测试工具以达到测试方法的复用

    Ø  自动生成测试用例

    依据用例设计的常用方法,找出规律,用技术实现思维

     

    思考:

    a)       目前专业的设计方法非常多:等价类、边界值、因果图、判定表、正交法等,但真正设计用例时,不是挑选一种设计方法就能设计出好的用例,也没有时间去依据这些方法的步骤进行一步步分析,更多的是一种牢记于心的设计思想,需要测试人员依据设计思想直接编写用例。

    b)      当然,对于核心业务、复杂功能必须先进行设计分析,设计分析时主要是对客户应用场景的分析,再结合用例设计方法补充各类分支、异常场景。

    c)       测试素材的积累,我们目前已经梳理了通用测试用例,但执行并未到位,测试过程中往往忽略了通用用例的执行,通用用例都是有规律可循,要考虑用技术手段实现通用用例的自动执行。

    d)      我们目前的测试用例只描述到特征,不会编写测试数据,不同经验的测试人员执行相同用例结果会出现不一致,差异在于实际使用的测试数据不一致,有经验人员使用的一组测试数据更容易发现程序问题。特征与业务、设计相关,不具备通用性,但可以考虑依据特征自动生成测试用例数据,并不断完善生成的规则,将经验转化为技术。单字段的测试数据易实现,难点在于组合数据的生成,输入之间存在各类业务逻辑、控制,虽然很难,后续在自动化测试层面还是值得做一些尝试,实现自动化的前提是要有清晰的输入、输出数据,手工准备测试数据的工作量是相当巨大的。

     

     

  • 先做杜拉拉再做巴菲特:职场7条改变你的薪情

    Apple.Liu 发布于 2010-06-23 22:39:14

    杜拉拉职场上升轨迹(原著)

    27岁  进入DB 行政秘书  月薪3000元

    29岁  销售总监秘书  月薪6000元

    30 岁  HR主管  月薪12000元

    33岁  HR经理  月薪25000元

    股市好的时候,上班炒股、手机炒股的景象屡见不鲜,还有人辞去了工作呆在家里天天炒股。在一些人的心目中,获取更高的投资回报就是理财的重点。投资固然有必要,但把致富的桥梁局限在投资上则有失偏颇。对正值壮年的人而言,最重要、最大的资产,不是那每月存下用于投资的几千块,而是他每月的赚钱能力。

    在电影《杜拉拉升职记》中,徐静蕾在几年的时间里,从外企普通小白领,成长为一个专业干练的HR经理。观众们想必也留意到了杜拉拉工资的快速增长。

    相信吗?杜拉拉通过几年的努力,获得了工资的大幅提升,为她带来了接近 560万的潜在个人资产。

    想知道560万是怎么来的,让我们通过运算把杜拉拉的赚钱能力数量化。

    在企业估值上有一种现金流折算法,指一个公司的当前价值等于它在“未来”能带给投资人的现金流之和。我们也同样可以从这个角度来估算人的“价值”。

    假设杜拉拉将会在55岁退休。为计算简便起见,每个阶段都不考虑未来可能的工资增长,同时也不考虑通胀等因素带来的折现率。

    27岁的杜拉拉,退休前可以工作28年,年收入36,000元。这28年间她的工资收入总共有1,008,000元,这就是此时杜拉拉所拥有的赚钱能力带来的价值。

    等到她33岁升任外企HR经理后,月薪达到25000元的水平。在接下来的22年里,她的工资收入增长到了6,600,000元。

    有兴趣的朋友不妨自行计算一下,用当前开始到退休的年限乘以自己的年收入,验证下这个数字是不是比你的房子、车子、存款以及股票等资产加起来还要多?

    关心如何投资并没错,但千万不要忘记:你自己可能就是投资组合中最重要、最值钱、也最值得开发的资产类别。股票账户中的几十万,同你自己现金价 (1239.00,-6.60,-0.53%)值的几百万相比,如何管理好后者更为重要。

    投资VS工资

    理财的相关讨论中,常有一种“死薪水,活投资”的论调。认为光靠薪水难以致富,要努力投资才有可能成为富人。 “投资”时钱丢在那里就会自动“增长”的轻松愉快,对比上班烦重的压力,让这种说法更容易获得人们的心理认同。也因此,用“轻松赚”、“快速赚”、“狠赚”做噱头标题的理财书籍或新闻,以及一些赞扬被动收入的言论大行其道。

    在强调理财的重要性时,个别媒体和理财专家习惯于突出长期投资和复利效应下的高回报。其实,除了投资之外,职业规划也是个人理财的重要一环。复利再神奇,也无法掩盖踏实挣钱的重要性,对于正值壮年的人而言尤为如此。

    为什么这么说?

    对于大部分人而言, 工资收入是基础。27岁的杜拉拉,说不定省吃俭用也只拿得出几百块用来投资;33岁的杜拉拉,1个月用于投资的钱能达到1-2万。投资必须要有资金积累,除非你是富二代,否则只能通过努力挣钱来为投资做准备。每月工资能用于投资的比率是变动的,通常情况下,收入越高,消费支出占收入的比例就越低。

    工资是确定性的收入,投资要承担更多的不确定性。牛市里投资一年翻倍甚至翻几倍也不罕见。问题在于,能够通过长期稳定的获取投资回报并非易事,在最近几年股市的跌宕起伏中,能赚大钱的依然是极少数人。投资充满了不确定性,投入的精力与回报没有绝对的关系。工资收入则不然,只要方法恰当,社会总是会为努力且有能力的人,给予更多的报酬。

    工资收入不是一成不变的。通过自身的努力,杜拉拉的工资从3000增长到25000,超过8倍。在一线城市,30岁以下月薪达到2、3万的人也不是稀有物种。金融、IT等行业更是催生出大量的年轻金领。值得注意的是,过去20年间北京职工的平均工资收入年化增长率超过了18%。

    财富的天平

    对于年轻或者正值壮年的人来说,人力资本所能带来的报酬,才是他最大的资产。

    投资和工资都很重要,《钱经》建议读者根据自身情况来决定投入精力的多少。想象自己有这样一个财富的天平,一端是个人已有资产,另一端是工作到退休带来的潜在收入。衡量孰重孰轻,将更多的精力投入在重要的方面,

    例如一个45岁的人,将自己拥有的股票、存款和房产等资产加总后减去房贷等负债,计算出净资产共值600万,未来十年的工资收入正好也是600 万。那此时就面临了一个临界点,可以看作天平刚好平衡,此时在工作和投资上投入的精力应当相近。

    人力资本会随着年纪增加而减少,而累积的资产净值则一般而言会随着年纪增长而增加。所以,年轻人的理财主要是提升人力资本,增加自己的工作收入;中年时随着资产的增加,逐渐加大对投资的重视;老年时在于保本与享用一生的成果。

    要想达到富爸爸作者罗伯特  清崎所倡言的“财务自由”,不是一蹴而就的。清崎自己也花了30多年才达到财务自由,他很早便开始学习财务知识与其他相关技能(营销、管理、财会等)。比别人更努力,付出更多,才让他有今日的地位。投资理财是达成财务自由的桥梁而非天梯。

    如何理性的进行取舍,在不同阶段有不同的侧重,需要引入个人财务生命周期的概念。

    图一反映了个人资产随年龄变化的一种情况。在理财规划中,通常把一个人的财务生命周期划分为三个阶段:累积阶段、巩固阶段和支出阶段。

    累积阶段是从大学毕业到35岁左右的时候,这是你开始有收入并积累资金的阶段。这一时期里,应该把理财的主要精力投入到工作上,股票等投资在保证工作的前提下作为兴趣涉猎,为将来做准备。由于离退休尚早,工资的提升会带来个人现金价值的较大改变。此外,这段时期是个人职业生涯成型和快速上升阶段,投入财力和精力的产出比极高。以一个25岁年轻人为例,月薪增加一千,就意味工资的现金价值增加了36万。由于缺乏积累,这一期间很难有大笔资金用于投资,“定投”这种“懒人投资法”尤其适合这一阶段,既起到了强制储蓄的作用,又能够享有长期复利带来的回报。

    第二阶段是巩固阶段,从35至55岁左右退休。你的收入不断上升达到最高峰,由于财富的不断积累,收入远远超过支出并开始获得大量财产性收入。你的债务开始减少直至最后全部清偿,你的资产净值在不断增长。随着年龄的增长,天平开始不断倾斜,在这一阶段里个人精力的投入需要逐渐从工作转向投资上。工作年限不断减少,多数人的事业也开始触及到天花板,工资的提升空间越来越小。其他资产随着年龄的增长逐渐积累,客观上要求投入更多的精力去打理。

    退休之后,工资收入不再需要投入精力关注。这一期间主要是安排好资产组合,并且制订退休后的支出计划。

    所以说,牛市是老年人的盛宴,拥有的可投资资产越多,投资带来的影响越大。

    7条改变你的“薪情”

    1、审视下现在从事的工作是否适合自己。

    结合自身情况,在可从事的行业中选择工资较高,或者工资增长较快的行业。据北京统计局2009年年鉴,采矿业2008年平均工资为60045,比上年增长 45.6%;IT行业平均工资为94362,增长22.1%;金融业为178322,增长37.2%。

    2、不断充电。

    英语、MBA、学位以及职业资格都是众所周知的途径。这会为你的加薪提供砝码。

    3、发一封简短的联系邮件。

    是不是有一些业内人士,你最近没有与他们保持联系?给他们发封电子邮件,让他们知道你的近况,并且问一问,他们最近在做些什么。说不定他们刚好能够提供给你一个对你的事业来说很好的机会。

    4、为工作场所里一直没有解决的问题提供解决方法。

    并非仅仅关注企业范围内的大型问题,关心小事也是尤为必要的。尽量把你的解决方法考虑的周全,这样你的老板就能够意识到,你发现了问题、思考过如何去解决,而且自行的提出了解决方案。

    5、努力提高语言能力

    你的工作场所中所使用的语言是你的母语么?如果不是的话,花一些空闲的时间,去提高语言技能。此外,良好的口头表达能力也很重要,“会说话”给你(或者将要给你)带来的提升比你想象的更大。

    6、润色你的简历

    任何时候都可以考虑润色一下你的简历。确保上面包含大量详细记录你的工作成果的文字和文件。事实上,你的个人工作记录,是扮靓简历的一种绝好材料。

    7、努力做出成果,记下它们并在适当的时候让别人知道。

    要让自己的事业继续向上攀升,首先要做出不一样的事情,然后要让老板和同事知道。加班、高效的完成任务、做出更好的业绩、提升自己的能力,并且自己将它们记下来。这不是为了自我满足,而是让你的工作报告或者简历更好看。

  • 买不起书的就下吧

    houronghui 发布于 2010-05-07 06:23:34

  • <<基于C/S架构的性能测试>>

    EasternCowboy 发布于 2010-04-08 16:38:57

    很多人关心LR在C/S架构上如何实施性能测试,我想根本原因在于两个方面,一是很多时候脚本无法录制,即LR无法成功调用被测的应用程序,二是测试脚本即使录制下来,可读性不强,往往不能运行通过,调试时无从下手,像音视频、电子地图类的测试差不多也是这个问题。
      根据我以往的项目经验,LR是可以做到的,因为它提供了Windows Sockets协议,解决方案实施起来简单但需要足够的细心以及一定的判断力、想象力,可参考如下步骤进行:
      1、通过抓包工具捕捉客户端与服务器之间的所有通讯。
      关键点:IP过滤,端口过滤,报文类型过滤
      目的:弄清楚业务操作过程中,客户端向服务器提交的请求原型,以及服务器对我们请求所做的正确响应
      2、将过滤后的报文整理成测试脚本。
      关键点:Socket的建立与关闭,send buf的整理,receive buf的整理
      目的:将抓包获得的报文转成LR测试脚本(提示:选取合适的抓包工具,使得报文能被保存成文档格式;开发小工具,通过报文中的各个关键字抽取报文中 Data Area中的部分作为buf 区的内容,根据IP字段,端口号等特征完成lrs_send,lrs_receive语句的填写。这部分看上去挺难,但只要对报文做好分析,把握规律,编程的事随便拉个开发都可以轻松搞定)
      3、调试脚本
      关键点:定位错误,添加校验点
      目的:使脚本真正可以拿来进行压力测试
      这是最难的一个环节,耐心、细心、判断力都体现在此处。每个人处理问题的方式的不同,我只能提供自己的一点经验。
      将脚本RUN-TIME SETTINGS中的扩展日志全部打上钩,并且将脚本拿到controller中单用户执行,注意设置好日志路径。
      脚本出错后,用EDIT PLUS或其他的文本工具打开log,找到出错行,然后向上逐一对比服务器返回的数据与录制过程中抓包获得的报文。
      在这里,我用了一个小技巧,生成buf内容时,使buf的编号与该buf在抓包获得的报文中编号保持一致,比较起来很方便。
      如果服务器返回的buf与抓包时的原始数据一致,自然表示该步骤回放成功,如果不一样,则需要具体情况具体对待。就我的经验来说,往往是因为数据唯一性问题或者是关联的问题造成某一步骤返回的BUF为0或-1,从而导致最终脚本失败。
      找到第一个出错的地方后,参数化,关联等手段都可以用上了,这里可能需要重复两次抓包过程,先行比较自己发送的报文是否有区别。
      总体思路便是如此,写了一堆,也不知道对大家是否有帮助,对于此类问题,网络上的协助很难派上用场,事情还是要在现场才有可能得到解决啊。本来有意将这东西工具化,甚至产品化,但几个项目实施下来发现变数较多,特别是最后一个环节,完全依赖于测试工程师的自身能力,只好就此作罢

        备注:另外使用Socket方式时,一定不要使用localhost本地环路来访问Server端,即使你的C-S都在一台机器上,也不能这样访问,一定要使用机器名或IP地址,LR才能侦测到C-S之间的交互数据,才能录制到脚本。

        转自:作者:tttrrryyy

  • 系统测试全过程(转载)

    fanjianmin 发布于 2010-03-31 14:58:00

    我一直感觉系统测试总像马拉松总是测试不完,什么时候上线,什么时候算终点。虽然提交客户了,可是对于质量仍然心里没底,对于测试的效果没有评价的依据。后来经过高人指点,终于领悟到至关重要的精髓:明确测试目标!
        如果要将系统进行全面测试,那么就要有一套完整的测试阶段,每个阶段都以测试目标为标准,科学、有序地进行测试,那么测试效率也就会自然而然跟着提高。
    测试阶段分为:测试前准备、需求分析、测试计划、测试设计、测试执行、测试结果。
    1.测试前准备阶段
    主要是相关业务的学习。业务知识是测试的根本依据,只有业务过关了,以后才能有效的进行测试工作
    了解业务步骤:
    a、了解业务名词;
    b、对现有系统的学习:功能点、业务场景等;
    c、分析现有系统数据库,了解数据的走向。

    2.需求分析阶段
    需求是项目开发的基础,也是测试的依据。所以需求分析一定要做。但是很多公司是没有详细的需求文档的,那如何进行需求分析呢?
    此时分析数据库就是一个非常好的方法:
    a、每张表的索引和约束条件;
    b、数据的来源、走向;
    c、数据的存储、变化;
    d、数据间的关联;
    e、表与表间的关系;
    这些分析都可以为了解业务场景和之后的测试用例设计打好基础。
    3.测试计划阶段
        我们总是觉得被测试进度紧逼、计划失控、测试不完全等等状态,其实解决这些情况的最好方法就是:制定测试目标。
        在计划初期先明确测试目标,制定不同层次目标的执行标准,指导后期设计不同级别的测试用例,跟踪不同级别的缺陷修改。在测试时间较紧情况下,至少可以先把保证所有功能正常操作的最低目标版本先提交给客户,不会再有手忙脚乱,心里没底的状况。
    测试目标分为:
                最低目标
                基本目标
                较高目标
                最高目标  等级别

    可以使用表格形式来规范目标准侧,例如:

    测试目标准则表

    目标
    测试范围
    需求覆盖率

    最低目标:正常的输入+正常的处理过程,有一个正确的输出
    (明确的功能点全部列出来)
    1.功能:

    正常功能

    异常功能

    单功能   

    业务场景

    非功能:16种测试类型
    2.输入覆盖率:

    有效无效

    处理过程:基本流

              备选流

    状态变化:正常、异常

    输出

    SRS00001

    SRS00002

    SRS00003

    基本目标:对异常的输入有错误的捕获,并进行相应提示或屏蔽
    较高目标:对隐式需求进行测试
    根据公司规模不同,确定测试目标级别也可不同。一般小公司有最低标、基本目标即可,大公司可以提高目标标准,直接从基本目标开始,直至最高目标。

    4.具体的ST用例的编写以及执行
    测试用例设计的粒度一直是个讨论对象,很多时候总会强调时间很紧啊,如果时间再多点,我的用例肯定会设计的再细一些!!
    是不是设计的越细就一定越好呢,不一定,测试是无穷尽的,使用穷举方法来进行测试是不科学的。
    因为制定了测试目标,那么就应该根据测试目标,在设计测试用例时也要制定设计用例目标。

    比如:按照最低目标选择测试用例
    输入—>有效
    处理—>有效
    输出—>有效
    按照最低目标的宗旨,只要是设计出来的测试用例足以覆盖和验证系统基本功能可以正常使用,那么这些测试用例的粒度就足够细了!从而提高了设计用例效率,同时也提高了测试效率。

    5.测试之后的评估
    实现一级测试目标之后都要进行评审工作,根据评审结果进行系统版本发布。例如:

    1.保证所有需求都有测试用例
    2.保证所有功能的正常操作和正常操作有对应的测试用例          V1.0版本
    3.保证所有功能的异常校验有对应的测试用例                    V2.0版本
    4.各功能组合形成的业务流有对应的测试用例                    V3.0版本
    5.各功能或整体软件所需满足的非功能性需求有对应的测试用例    V4.0版本

    这样做既可以对代码版本进行控制,也可以应对需求变更的问题。

        也许“确定测试目标”还不能彻底解决复杂测试工作中出现的问题,但是我觉得这最起码可以让你的测试工作变得有条理;跟领导汇报工作的时候业绩和工作效率有凭可据;面对需求变更的时候有理可依!
  • C/S架构的性能测试(转)

    happycsq 发布于 2010-03-30 10:25:42

    很多人关心LR在C/S架构上如何实施性能测试,我想根本原因在于两个方面,一是很多时候脚本无法录制,即LR无法成功调用被测的应用程序,二是测试脚本即使录制下来,可读性不强,往往不能运行通过,调试时无从下手,像音视频、电子地图类的测试差不多也是这个问题。

      根据我以往的项目经验,LR是可以做到的,因为它提供了Windows Sockets协议,解决方案实施起来简单但需要足够的细心以及一定的判断力、想象力,可参考如下步骤进行:

      1、通过抓包工具捕捉客户端与服务器之间的所有通讯。

      关键点:IP过滤,端口过滤,报文类型过滤

      目的:弄清楚业务操作过程中,客户端向服务器提交的请求原型,以及服务器对我们请求所做的正确响应

      2、将过滤后的报文整理成测试脚本。

      关键点:Socket的建立与关闭,send buf的整理,receive buf的整理

      目的:将抓包获得的报文转成LR测试脚本(提示:选取合适的抓包工具,使得报文能被保存成文档格式;开发小工具,通过报文中的各个关键字抽取报文中 Data Area中的部分作为buf 区的内容,根据IP字段,端口号等特征完成lrs_send,lrs_receive语句的填写。这部分看上去挺难,但只要对报文做好分析,把握规律,编程的事随便拉个开发都可以轻松搞定)

      3、调试脚本

      关键点:定位错误,添加校验点

      目的:使脚本真正可以拿来进行压力测试

      这是最难的一个环节,耐心、细心、判断力都体现在此处。每个人处理问题的方式的不同,我只能提供自己的一点经验。

      将脚本RUN-TIME SETTINGS中的扩展日志全部打上钩,并且将脚本拿到controller中单用户执行,注意设置好日志路径。

      脚本出错后,用EDIT PLUS或其他的文本工具打开log,找到出错行,然后向上逐一对比服务器返回的数据与录制过程中抓包获得的报文。

      在这里,我用了一个小技巧,生成buf内容时,使buf的编号与该buf在抓包获得的报文中编号保持一致,比较起来很方便。

      如果服务器返回的buf与抓包时的原始数据一致,自然表示该步骤回放成功,如果不一样,则需要具体情况具体对待。就我的经验来说,往往是因为数据唯一性问题或者是关联的问题造成某一步骤返回的BUF为0或-1,从而导致最终脚本失败。

      找到第一个出错的地方后,参数化,关联等手段都可以用上了,这里可能需要重复两次抓包过程,先行比较自己发送的报文是否有区别。

      总体思路便是如此,写了一堆,也不知道对大家是否有帮助,对于此类问题,网络上的协助很难派上用场,事情还是要在现场才有可能得到解决啊。本来有意将这东西工具化,甚至产品化,但几个项目实施下来发现变数较多,特别是最后一个环节,完全依赖于测试工程师的自身能力,只好就此作罢。

    对C/S架构下的软件性能测试依然在摸索中,故借鉴一下别人的总结经验,谢谢那个作者了。

  • 转:谈谈测试执行分层(UT,ST,IT)

    applejuzi 发布于 2010-03-28 22:26:47

      V模型体现了测试设计分层和测试执行分层的概念,本文以作者自身的理解谈谈测试执行分层,不过从实际项目运作情况来看,真正做到测试执行分层的并不多,这里原因有很多种,暂且不论。

      1. UT

      单元测试的对象是LLD中所划分定义的程序单元或模块,它也是单元测试用例设计中可测试的最大单元。该测试对象可能由一个或多个函数或者类组成,测试设计就是对测试对象进行测试用例设计。

      UT的目的,是通过函数运行来检查模块代码对于LLD文档的顺从性,验证每个函数的输入输出响应,与它在详细设计文档中预先定义的是否一致。函数是产品开发实现的最基本单位,下一个实现单位是模块,从测试的角度看,希望UT完成后,每个函数都牢固可靠,下一步的IT测试将聚焦在函数之间配合能否实现分配需求,而不用担心函数本身的输入输出响应问题。

      单元测试比较适合开发人员做。

      2. IT

      集成测试是指把若干个经过单元测试的单元组装到一起而进行的测试,集成测试应依据HLD,主要发现接口、依赖中的错误或不完善的地方。集成测试的对象为若干个单元测试对象的组合,至少为两个。

      IT的目的,是根据模块设计对模块的分解,从已验证的函数开始,逐层向上集成,得到一个可运行的模块。

      IT可以由开发人员做,也可以由测试人员做。

      不难看出,UT是面向每一个单元的测试,IT是测试单元之间的接口,可以把UT/IT归为“单元级”测试。

      3. ST

      CMM定义的系统测试:系统测试是针对软件项目组所承担开发的软件系统进行的整体测试,将软件系统作为整体运行或实施明确定义的软件行为子集的测试。主要采用的测试方法是黑盒测试,即不管程序内部的实现逻辑,以检验输入输出信息是否符合规格说明书中有关需求规定的测试方法。可见ST的测试对象是规格说明书,更确切的说,是模块需求规格说明书,所以一般也称为MST。模块SRS文档给出了模块的输入输出的相应要求。MST后,每个模块是牢固可用的。

      4. BBIT

      BBIT为模块间接口测试,验证模块之间的接口能不能配合,有时和联调混在一起,其实目的并不相同。BBIT的目的,是根据系统设计对系统的分解,从已通过验证的模块开始,逐层向上集成,得到一个可运行的系统。而联调一般涉及软件、硬件或者不同产品间的配合测试。MST和BBIT可以归到“模块级” 的测试,一个验证模块,一个验证模块间的接口。

      以上UT/IT/MST/BBIT一般由开发人员完成,系统基本可以运行起来了,测试人员可以开展SDV、SIT、SVT了。

      5. SDV

      SDV虽然属于测试人员开展的系统测试,但是有点偏灰盒测试,因为SDV验证各子系统的配合是否满足设计需求(DR),对内部的实现还是关注的,验证多个模块集成以后是否满足设计需求。

      6. SIT

      SIT也是验证设计需求是否得以满足,与SDV不同的是,SIT完全把系统当作一个黑盒来测试,不关心内部具体的实现。实际应用中,SDV和SIT 虽然都属于系统一级的测试,往往由不同项目组(子系统)的测试人员分别测试,他们只关注各自的子系统,所以还是把SDV和SIT归为“子系统级”的测试比较好。

      7. SVT

      SVT是验收测试,其测试对象是产品包需求OR。产品包需求给出了产品的范围,从产品可能的应用环境的角度刻画系统,SVT的目的就是确认(或验收)产品包需求给出的各种应用场景产品均能满足。

      产品包需求不考虑内部实现的差异,SVT也是从整个系统的角度考虑包需求的各种应用场景,属于“系统级”的测试。

      各个级别的测试描述完毕,回头再看看这个分层测试的模型图,不难发现以下几个特征:

      1)基于系统架构的分解结构(系统-子系统-模块-单元),开发按照自顶向下的顺序逐层设计,测试按照自底向上的顺序逐层验证,这个分解结构在每一层或每一个阶段,将开发和测试过程统一起来。

      2)在每一层,测试的对象是开发相应阶段设计的输出(包括需求和这个阶段的设计文档),测试的目的与开发相应阶段设计的思路是相辅相成的,所以决定每个阶段的测试如何开展、评价一个测试过程时,如果离开开发过程,只谈测试自身的话,是不系统、不全面的。

      3)除了“系统级”的SVT测试以外,其他各层的测试均包含两个方面:一是对这个层每个构件的测试,有n个构件就要测试n次,二是这n个构件之间接口的测试。例如:nSDV(每个测试项目组的SDV是一个SDV)和SIT、nMST(每个开发项目组的MST是一个MST)和BBIT、nUT和IT。

     

    转自:http://www.51testing.com/html/99/n-211399.html

  • 我答:51testing软件测试每周一问:软件测试过程改进的内容和注意事项有哪些?

    卖烧烤的鱼 发布于 2008-10-08 17:57:52

    [原创]我答51testing每周一问?软件测试过程改进的内容和注意事项

       软件开发过程的质量决定了软件系统的质量,同样软件测试过程改进的质量决定了测试的质量和效率。其中,测试技术解决了测试采用的方法和技术问题,测试管理保证各项测试活动的顺利开展。然而,对于一个工程而言,过程也就是生命周期,也会至关重要地影响着生产效率和软件质量。测试工作有其本身的周期。测试过程从产品的需求阶段开始,此后,与整个开发过程并行开展,换句话说,伴随着开发过程的每一个阶段,都有一个重要的测试活动。

    以下主要用一个示意图来描述软件测试过程改进相关流程及信息流走向:  

    软件测试过程改进框架图:

     

    软件测试过程改进实施步骤。
    1
    确定测试过程改进目标:确定在一段时间内达到的测试过程改进目标;
    2
    对比分析测试过程改进差异点: 把所要改进的测试过程要达到的目标与目前的测试过程作比较,找出存在的差距。

    3制定软件测试过程改进计划:俗语说“凡事预则立,不立则废“。制定测试过程改进亦是如此!
    4
    建立跟踪控制机制:测试过程的改进的需要建立相应跟踪,最好应由专人来负责,定期定时定点输出相应记录信息!
    5
    实施测试过程改进策略:制定了测试过程改进计划,应去执行具体的流程操作。然后要注意评审和验证,定期定时定点监控,采集测试过程改进度量数据。
    6
    反馈总结再总结:总结测试过程实施过程中的经验,然后修改调整项目计划及实施改进的策略。

    软件测试过程改进的内容,对于此问题,由于不同的公司软件研发力量,人员配置等不仅相同,所以用下图所示列出了一个提纲,可以给大家参考:

     

    软件测试过程改进注意事项:

    1 获得管理部门支持;

    2 确定测试过程“基线”,明确度量的参考数据;

    3 制定合量的度量指标;

    4 考虑测试过程改进范围大小,应结合公司实际情况;

    5 监控过程的并进行改进;

    6 相关培训及支持工作;

    7 “持之以恒”,过程改进的效果通常都是需要一定时间及数据才能说明问题。

    原始链接:http://www.cnblogs.com/mayingbao/archive/2008/10/08/1306530.html

  • 【转】高手眼中的网络

    yangmei1985 发布于 2010-03-24 16:44:02

    转自:http://www.51testing.com/index.php?uid-124415-action-viewspace-itemid-131362

    这段文章是我导师在入职伊始发给我的,指引着我快乐的去做技术。

    假设你的名字叫小不点,你住在一个大院子里,你的邻居有很多小伙伴,在门口传达室还有个看大门的李大爷,李大爷就是你的网关。当你想跟院子里的某个小伙伴玩,只要你在院子里大喊一声他的名字,他听到了就会回应你,并且跑出来跟你玩。
    但 是你不被允许走出大门,你想与外界发生的一切联系,都必须由门口的李大爷(网关)用电话帮助你联系。假如你想找你的同学小明聊天,小明家住在很远的另外一 个院子里,他家的院子里也有一个看门的王大爷(小明的网关)。但是你不知道小明家的电话号码,不过你的班主任老师有一份你们班全体同学的名单和电话号码对 照表,你的老师就是你的DNS服务器。于是你在家里拨通了门口李大爷的电话,有了下面的对话:
    小不点:李大爷,我想找班主任查一下小明的电话号码行吗?
    李大爷:好,你等着。(接着李大爷给你的班主任挂了一个电话,问清楚了小明的电话)问到了,他家的号码是211.99.99.99
    小不点:太好了!李大爷,我想找小明,你再帮我联系一下小明吧。
    李大爷:没问题。(接着李大爷向电话局发出了请求接通小明家电话的请求,最后一关当然是被转接到了小明家那个院子的王大爷那里,然后王大爷把电话给转到小明家)就这样你和小明取得了联系。
    至于DHCP服务器嘛,可以这样比喻:
    你家院子里的居民越来越多了,传达室李大爷那里的电话交换机已经不能满足这么多居民的需求了,所以只好采用了一种新技术叫做DHCP,居民们开机的时候随机得到一个电话号码,每一次得到的号码都可能会不同。
    你家门口的李大爷:就是你的网关
    你的班主任:就是你的DNS服务器
    传达室的电话交换机:就是你的DHCP服务器
    同上,李大爷和王大爷之间的对话就叫做路由。
    另:如果还有个小朋友叫做小暗,他住的院子看门的是孙大爷,因为小暗的院子刚盖好,孙大爷刚来不久,他没有李大爷和王大爷办公室的电话(李大爷和王大爷当然也没有他的电话),这时会有两种情况:
    1、居委会的赵大妈告诉了孙大爷关于李、王两位大爷的电话(同时赵大妈也告诉了李、王关于孙的电话),这就叫静态设定路由
    2、赵大妈病了,孙大爷自己到处打电话,见人就说:“我是小暗他们院子管电话的”,结果被李、王二位听到了,就记在了他们的通讯录上,然后李、王就给孙大爷回了个电话说:“我是小明(小不点)他们院子管电话的”,这就叫动态设定路由

    然 后有一天小不点要找小暗,结果自然是小不点给李大爷打电话说:“大爷,我找小暗”(这里省略了李大爷去查小暗电话的过程,假设他知道小暗的电话),李大爷 一找通讯录:“哦,小暗的院子的电话是孙大爷管着的,要找小暗自然先要通知孙大爷,我可以通知王大爷让他去找孙大爷,也可以自己直接找孙,那当然是自己直 接找孙方便了”,于是李大爷给孙大爷打了电话,然后孙大爷又把电话转到了小暗家。
    这里李大爷的通讯录叫做路由表。
    李大爷选择是自己直接找孙大爷还是让王大爷帮忙转接叫做路由选择。
    李 大爷之所以选择直接找孙大爷是有依据的,因为他直接找孙大爷就能一步到位,如果要王大爷转接就需要两步才能完成,这里的“步”叫做“跳数”,李大爷的选择 遵循的是最少步骤(跳数)原则(如果他不遵守这个原则,小不点可能就会多等些时间才能找到小暗,最终结果可能导致李大爷因工作不力被炒鱿鱼,这叫做“延时 太长,选路原则不合理,换了一个路由器”)
    当然,事情总是变化的,小不点和小明吵架了,这些天小不点老是给小暗打电话,小明心里想:“操,他是不是在说我坏话啊?”于是小明决定偷听小不点和小暗的通话,但是他又不能出院子,怎么办呢?小明做了这样一个决定:
    首 先他告诉自己院里管电话的王大爷说:“你给李大爷打个电话说小暗搬到咱们院子了,以后凡是打给他的电话我来接”,王大爷没反映过来(毕竟年纪大了啊!)就 给李大爷打了电话,说:“现在我来管理小暗的电话了,孙已经不管了”,结果李大爷就把他的通讯录改了,这叫做路由欺骗。
    以后小不点再找小 暗,李大爷就转给王大爷了(其实应该转给孙大爷的),王大爷收到了这个电话就转给了小明(因为他之前已经和小明说好了),小明收到这个电话就假装小暗和小 不点通信。因为小明作贼心虚,害怕明天小不点和小暗见面后当面问他,于是通信断了之后,又自己以小不点的名义给小暗通了个电话复述了一遍刚才的话,有这就 叫数据窃听。
    再后来,小不点还是不断的和小暗联系,而零落了小明,小明心里嘀咕啊:“我不能总是这样以小暗的身份和小不点通话啊,外一有 一天露馅了怎么办!”于是他想了一个更阴险的招数:“干脆我也不偷听你们的电话了,你小不点不是不给我打电话吗!那我让你也给小暗打不了,哼哼!”,他怎 么做的呢?我们来看:
    他联系了一批狐朋狗友,和他们串通好,每天固定一个时间大家一起给小暗院子传达室打电话,内容什么都有,只要传达室 的孙爷爷接电话,就会听到“打雷啦,下雨收衣服啊!”、“人是人他妈生的,妖是妖他妈生的”、“你妈贵姓”等等,听的脑袋都大了,不听又不行,电话不停的 响啊!终于有一天,孙爷爷忍不住了,大喊一声:“我受不了拉!!!!”,于是上吊自杀了!
    这就是最简单的DDOS攻击,孙爷爷心理承受能 力弱的现象叫做“数据报处理模块有BUG”,孙爷爷的自杀叫做“路由器瘫痪”。如果是我,就会微笑着和他们拉家常,例如告诉他们“我早就听了天气预报,衣 服10分钟前已经收好了”或者“那你妈是人还是妖”或者“和你奶奶一个姓”等等,我这种健全的心理叫做“健壮的数据报处理,能够抵御任何攻击”
    孙爷爷瘫了之后,小不点终于不再给小暗打电话了,因为无论他怎么打对方都是忙音,这种现象叫做“拒绝服务”,所以小明的做法还有一个名字叫做“拒绝服务攻击”。
    小明终于安静了几天,
    ...
    几天后,小明的院子来了一个美丽的女孩,名字叫做小丽,小明很喜欢她(小小年纪玩什么早恋!)可是小丽有个很帅的男朋友,小明干瞪眼没办法。当然这里还是要遵循上面的原则:小丽是不能出院子的。那个男的想泡小丽自然只能打电话,于是小明又蠢蠢欲动了:
    还记得王爷爷是院子的电话总管吗?他之所以能管理电话是因为他有一个通讯录,因为同一个院子可能有2个孩子都叫小明,靠名字无法区分,所以通讯录上每一行只有两项:
    门牌 电话
    一号门 1234567 (这个是小明的)
    二号门 7654321 (这个是小丽的)
    ......
    王 爷爷记性不好,但这总不会错了吧(同一个院子不会有2个“二号门”吧)?每次打电话人家都要说出要找的电话号码,然后通过通讯录去院子里面敲门,比如人家 说我找“1234567”,于是王爷爷一比较,哦,是一号门的,他就去敲一号门“听电话”,如果是找“7654321”,那他就找二号门“听电话”。
    这里的电话号码就是传说中的“IP地址”
    这里的门牌号就是传说中的网卡的’MAC‘地址(每一块网卡的MAC地址都是不一样的,这是网卡的制造商写死在网卡的芯片中的)
    小 明心里想“奶奶的,老子泡不到你也别想泡”,于是他打起了王爷爷通讯录的主意,经过细心的观察,周密的准备,他终于发现王爷爷有尿频的毛病(毕竟是老人 啊...),终于在一个月黑风高的白天,王爷爷去上厕所了,小明偷偷的摸进传达室,小心翼翼的改了王爷爷的通讯录
    ......
    过了几天,小丽的男朋友又给小丽打来了电话,对方报的电话是“7654321”,王爷爷一看通讯录,靠:
    门牌 电话
    一号门 1234567 (这个是小明的)
    一号门 7654321 (注意:这个原来是小丽的,但是被小明改了)
    ......
    王爷爷不知道改了啊,于是就去找一号门的小明了,小明心里这个美啊,他以小丽父亲的口吻严厉的教训了那个男的和小丽之间不正当的男女关系,结果那个男的恭恭敬敬的挂了电话。当然小丽并不知道整个事情的发生...
    这里小明的行为叫做“ARP欺骗”(因为在实际的网络上是通过发送ARP数据包来实现的,所以叫做“ARP欺骗”),王爷爷的通讯录叫做“ARP表”
    这里要注意:王爷爷现在有两个通讯录了,一个是记录每个院子传达室电话的本本,叫做“路由表”,一个是现在说的记录院子里面详细信息的本本,叫做“ARP表”。
    有句命言是“人们总是在追求完美的,尽管永远也做不到”(请记住这句话,因为这是一个大名人--也就是我,说的)
    王 爷爷的制度中有一条是这么写的“每个月要重新检查一下门牌号和电话的对应本(也就是ARP表)”,这个动作叫做“刷新ARP表”,每个月的时间限制叫做 “刷新ARP表的周期”。这样小明为了让那个男的永远不能找到小丽,之后每个月都要偷偷改一次那个通讯录,不过这样也是不得不做的事啊!
    补充一点,小明是很聪明的,如果通讯录(ARP表)被改成了这样:
    门牌(MAC) 电话(IP)
    一号门 1234567 (这个是小明的)
    二号门 1234567 (注意:这个被小明改了,但是他一时头晕改错了)
    ......
    就会是计算机就会弹出一个对话框提示“出现重复的IP地址”,最终会导致王爷爷不知所措,于是通知一号门和二号门,你们的电话重复了。这样小丽就知道有人在破坏她的好事,这个现象叫做“骗局被揭穿了”
    小不点知道了小明偷听他和小暗的电话,于是就和小暗约定好了密码。小不点在家里把要说的加密了之后告诉小暗。土豆-〉星期三,地瓜-〉请客,笨蛋-〉小不点家。于是小不点告诉小暗:土豆笨蛋地瓜。小明听了???不懂。。。。郁闷了。。。这是加密。
    除 此之外,小丽也知道了小明改他家的电话号码了。于是王爷爷就登门一个一个把电话和门牌号记下来。并且藏起来不允许外人修改,只能自己有钥匙(密码)。这是 ip地址和MAC地址绑定。当有人改了电话号码的时候,就得找王爷爷改。麻烦是麻烦了,但是安全了。不过小明偷偷的把王爷爷的钥匙偷配了一把(盗窃密码成 功),于是他还可以修改。这样么,就这样了。



  • 软件GUI测试中的关注点 (转)

    alians 发布于 2010-03-12 23:38:26

    软件GUI测试中的关注点

    Steven Wang(Archonwang1981@msn.com

    【摘要】 本文列数了软件黑盒测试过程中,在被测试软件中可能存在的常见软件问题。本文不会详细讨论基本的软件测试思想与常用技术,仅针对在软件黑盒测试过程中若干的问题做描述,并提供个人的参考测试意见与防范意见,希望可以为初学者提供些许帮助。

    【关键词】 软件测试,黑盒测试

    【引言】不能不说的二个问题

    •  软件测试中的“二八”原则

    80%左右的错误在进行用户测试之前已经被发现,而在剩余20%左右的错误中,存在80%左右的显性错误,剩余20%左右的错误是较难发现的隐性错误。这条原则源自经济学的80-20原理。所以,我并不认为自己从事了一项伟大的工作,但是必须承认做好了这项工作对于整个软件开发体系在用户心目中的意义巨大。

    •  软件黑盒测试解决的问题

    简单来说,黑盒测试所解决的问题主要在于以用户眼光验证软件的结果。白盒测试关注范围(控制结构),而黑盒测试更关注结果(即我们常说的所见即所得)。黑盒测试试图发现以下几类错误:

    • 功能错误或遗漏
    • 界面错误
    • 数据结构或外部数据库访问错误
    • 性能错误
    • 初始化错误和终止错误

    以下内容将会详细说明在软件黑盒测试中常见的各类错误。

    【正文】软件黑盒测试常见错误类型及说明

    •  用户界面错误

    软件是为了满足用户需求而诞生的产物,无论是操作系统、游戏软件还是其他类型的应用软件。黑盒测试的很大一部分工作集中在用户界面上,不需要深入研究其内在结构,而是“表面化”地使用软件,从输入输出的信息内容中寻找可能的错误和纰漏。总体上讲,用户对于软件的看法很大程度上依赖以下几点:

    • 功能性(实现软件应具备的基本功能)
    • 易用性(用户学习掌握该软件所耗费的时间及在具体业务流程上的简化)
    • 执行速度(多数是启动速度,查询速度,刷新速度及响应时间等因素)
    • 用户使用时产生错误的比率(在允许用户任意使用的情况下,越少越好)
    • 用户满意度(这里指的是用户界面设计与功能设计的用户评价)
    下面我们分开对该类型错误进行分析与描述。

    •  功能性

    如果出现了以下情况之一,可以认为程序可能存在功能性错误:程序可以完成的某些事进行得非常困难,笨拙(繁琐),令人迷惑甚至难以忍受。主要表现为以下几个方面:

    1)过度功能性

    将简单功能复杂化,这是设计上一个较常见的问题。尝试进行太多工作任务的系统将很难学习和掌握,而且容易忘记。它要求大量的文档(开发文档,帮助文档和屏幕)。如果功能模块间模块过于紧密,则发生关联错误的几率要提高不少。有时候,用户需要的只是简单功能,而不要让它过于膨胀成为一个“怪物”。

    2)夸大的功能性印象

    用户手册和营销传单不能使程序功能实现得更多,尤其是营销传单。记住,在用户手册中哪怕宁愿对功能略微轻描淡写也不能夸大其词(当然,我们并不希望这样,我们总是要对此如实地进行编写――这是我们的责任)。

    3)对手头任务的不适当性

    我们可以把它直观的理解为需求设计错误。对于任何一个项目,由于功能关键事项(就是常说的需求提炼)不存在、太有限(多数是因为没有完成)或者太慢(需要改进程序结构或是内部算法)而不能完成真正的工作。举例来说,查询一个有8000条记录的数据库需要1个小时(天哪,我想我连10分钟都等不了),虽然说具备了查询的功能,但是实在很令人怀疑此项功能是否会有人使用,更糟糕的情况是:由于用户使用了该功能而造成的恶劣印象难以在短时间内消除――虽然对于开发人员来说那可能只是一个参数拼写错误了而已。

    4)遗漏功能

    功能没有实现,却出现在了用户手册中。或者是本来应该具备地特征性功能,在程序只能看到一个“影子”(有其名无其实)。多半情况下是由于需求变更时没有对手册进行检查和更新,也有可能是因为遗漏了需求说明中应包含的功能(如果是那样,需要好好检查以前的工作方式是否正确)。

    5)错误功能

    一个本来应该完成查询工作的功能却干了排序的活儿。这种疏忽一般不是因为没有实现功能,而是在分配功能的时候出现了问题,当然这种情况的发现和排除应该不是一件困难的事。

    6)功能性必须由用户创建

    最常见的情况之一就是要求用户自己配置软环境(如配置数据源,一般都可以在安装程序中自动完成;当然还包括程序用到的组件在系统中不存在,安装程序没有提供相应的支持,这对用户是不能接受的)。这类问题不完全一定都是错误,比如微软提供的Office宏的开发,是为了满足客户对于自身特色而设计的适合其专业工作的程序。

    7)不能做用户期望的工作

    例如,极少有人会期望一个本来编写用来对姓名进行排序的程序却按照ASCII码的顺序排序。他们也不会指望用它来计算首位空格或区分大小写。当然用户名的排序还是要做的,问题是开发者需要重新构想一个新的排序规则来满足用户需求。

    •  人机交互

    人机交互,程序与操作者之间的通信与交流。这不是早些年的科幻电影,我们也许每天都在做,在取款机前,在自动售卖机前。

    1)遗漏信息

    你应该知道,所有的事都能从计算机屏幕上得到有效的消息。不要遗漏任何对于用户而言至关重要的信息,即使这些信息对你而言毫无用处。

    ――没有任何屏幕指令

    如何找到程序的名称?如何退出程序?你应该怎么样获取帮助?如果程序使用了某种命令语言,如何才能得到命令列表?程序可能仅仅只在它启动时显示这些内容。当然你也可以从帮助手册中获取这些信息,但并不是必要的。没有任何屏幕指令的程序可能会让人受不了,查询手册的话需要花费的时间可能会更长,也可能就会让用户觉得软件学习起来太复杂了。

    ――假定打印出的文件随时可得

    丢了用户手册怎么办?有经验的用户不会非要依赖打印好的文档,提供一份电子版的吧。

    ――无正式文字证明(说明)的功能特征

    如果大多数的功能特征或命令在屏幕上提供文字说明,那么所有的都应如此。仅略过几个功能特征将会导致UI形式上的混乱。同样,如果程序为很多命令描述其“特殊情况”下的行为,那么所有的命令都需要提供这类说明。这种情况在国人的软件开发过程中时有发生,并不是不能,而是不想……

    ――看起来不可能退出的状态

    如何取消一条命令或在一个深层菜单树中进行备份?程序应该允许你可以避免那些你不希望遇到的情况。比如,在软件安装时,要求插入磁盘,如果不插入正确磁盘就不能退出安装程序。没有告诉你如何避免就和发生灾难时,没有提供一条逃生路径一样糟糕。

    ――没有光标

    大多数用户都依赖于光标。一个光标可以让用户觉得计算机仍然在正常运转(尽管有时候死机也是如此),每个交互程序都应该显示光标,当然,在关闭光标时别忘了提醒用户注意。

    ――没有对输入做出响应

    每个程序都应该对输入做出回应。如果没有,呵呵,保管80%以上的用户产生疑问:怎么没有响应?还要等多久?是不是我的电脑过时了?

    如果有以下几种情况,一般视为正常:

      • 选择一个菜单项时,如果你的按键操作没有回应,只要下一个屏幕立刻出现并且此屏幕上的标题与菜单项一样,就可以视为正常。
      • 如果程序忽视错误的命令或按键操作,当然可以不对其进行回应。
      • 如果你告诉程序不要对输入回应,它必须沉默,如果它进行了回应,应该立即告诉开发人员对其进行修改(可能是在忘记了继续处理另一种情况)。
      • 如果输入的是安全性代码(如密码等),那么程序决不应在屏幕上做出不恰当的回应(如显示你输入的密码明文)。

    ――在长期延迟时没有表示其活动

    给一段较长时间的程序延迟一个合适的响应,将是非常必要的举动。相信这样不需要再给用户做出过多的解释了。

    ――当某个改变即将生效时没有给出建议

    一个程序可能会比你预计的更早或更晚执行一个命令,例如:删除某些重要数据时,(而这个过程将持续一段时间),必要的提示是必须的。

    ――没有对已经打开的文件进行检查

    这个错误是非常常见的,尤其对于那些输入关键数据的程序而言。用户可能不会注意,但是在以后的工作中将发现略微的一丝更改就会引出大量的问题。你不能保证程序会对同一个文件在某个时刻做出不同修改所带来的后果。所以,决不允许同一文件同时被打开两次甚至更多,以确保程序输出的唯一性。

    ――错误的、误导的或令人迷惑的信息

    每个错误都会让你对程序显示的所有其他东西产生怀疑。使用户做出虚假归纳的细小错误,如遗漏条件或是不适宜的类比会比清楚的事实错误更让测试人员感到恼火――因为更难对它们进行改正。

    • 简单的事实错误

    在一个程序改变之后,更新屏幕显示是低优先级任务,结果则是:屏幕上大量的信息过时。记住:无论何时程序发生改变,都要仔细检查可能指示程序特征的每个消息,最简单的办法就是直接对更改后的屏幕进行刷新。

    • 拼写错误(错别字)

    我相信,这绝对不是设计上的问题,我也相信开发人员可能会不以为然。Oh,但是客户会在乎,会抱怨这些的--还是改正它们吧。

    • 不准确的简化

    在保持一个特征的描述尽可能简单的愿望中,一条消息的创作者可能只覆盖特征行为的最简单方面,而忽略了重要条件。举例来说,这种情况可能会引发歧义,比如说关闭(到底是关闭文件还是关闭程序?)。作为一个测试人员,需要你足够仔细的研究可能会出现问题的任何一个微不足道的细节。宁可错杀,不能放过!(虽然要极力避免错杀的情况。)

    • 无效的比喻(图标之类可以指示功能(特征)的事物)

    例如:回收站的图标可能不是一个好的比喻;对于文件一旦移除就永久消失的情况来说,碎纸机的图标可能来得更好一些。

    • 令人迷惑不解的特征(功能)名称

    如果一个命令名称在计算机领域中或语言中有一个标准含义,就必须与其含义一致。别指望着胳膊能拧得过大腿,确定现行的标准是可靠的。

    • 同一特征(功能)具有多个名称

    相同的功能特征只要一个名称就够了――只要能表述清楚;用户可不一定有时间玩同义词的游戏。另外,这种情况对软件在用户面前显示的复杂度也有影响。

    • 信息超载

    不要让你的文档和帮助屏幕看起来太过专业――太多技术细节了。用户会不耐烦的,况且效果也不好。如果实在需要,可以把他们另外列出。尽量使用直白,用户能理解的话表述这些信息。另外,信息超载的另一个意义意味着烦琐冗长的语句,那是要极力避免的。

    • 数据何时得到保存

    假设你输入了一些程序需要保存的信息。当你进行切换或程序退出时,当你需要每隔一段时间进行保存时,它是否会把数据按照你想的方式进行保存呢?何时完成呢?如果你对答案感到困惑,那就意味着可能有问题出现了。曾经在同事的项目中发现过很多次这样的情况:每次修改后直接关闭程序,却不提示用户保存――我只知道,修改信息在关闭时也消失了。在对某个模块进行修改时,你应密切注意这个问题。

    • 很差的外部模块性

    外部模块性指的是程序从外部看起来产品的模块化程度(如同程序是可分割的实体)。你如何容易地理解模块组件?很差的外部模块会耗费大量的时间来学习产品,还会吓跑新用户--它看上去太复杂了!尽可能让信息独立展示出来,对任何特定任务而言,你需要知道的越少越好。

    2)帮助文本和错误信息

    帮助文本和错误信息通常被认为是产品的次要部分。它们可能是由初级程序员编写的(比如我)或是作者编写,对其进行更新的工作可能被赋予低优先级。然而,作为产品而言,这又是必不可少的部分,一份看上去赏心悦目的帮助文档可以“主观 ”的降低软件的学习难度和用户的使用兴趣。

    当你感到困惑或是有麻烦时,寻求帮助或倾向于使用错误处理程序将是一个明智的选择。你可能会觉得不爽,更多的时候是不耐烦。而如果其中有信息误导了你,那么无异于火上浇油。以下列出的是我以往在审核帮助文档及错误信息时碰到的一些常见问题。

    • 不合适的阅读层次

    在计算机终端上,人们不能很好的进行阅读。帮助文本和错误信息应该尽量措辞简单明了,多用主动语态,尽量少使用技术术语,即便用户中有计算机经验也是如此。

    • 冗长

    避免你的帮助文档和错误信息变成裹脚布。大多数用户在需要更多信息时,会选择通过菜单获得进一步的信息。最好让他们自己选择所需的信息。

    • 不合适的情绪语气

    尽量不要使用感叹号,如“终止”、“崩溃”之类的带有激烈意味的词语都应如此。

    • 事实错误

    记得测试时需要测试那些更新过的功能,在旧的帮助上的方法可能在新软件中是行不通的。这个时候开发人员的代码更新日志就显得很必要了,你不必对每项功能进行检查,完全可以把这类回归测试交给自动化测试工具完成,而你只需要关注其新内容即可。

    • 上下文错误

    不要把上下文之间的关系搞错了,这会带来阅读时的不便。比较清晰的方法是首先列出上下文关联列表,并按照操作顺序的先后进行组织。

    • 没有识别出错误来源

    通常,一个好的错误信息不仅可以指出是什么情况,而且还要指出为什么有些东西出了错,以及如何处理此类错误的方法。在过往的项目中,常常有很多这样的问题:如“打印错误”、“保存错误”等等含糊的说明。如果用户在获得了错误信息后,还是一脸茫然,那就应该认真考虑一下错误说明的编写方式是否可以再改进一些了。

    • 不能立刻重现的错误很可能是个大问题
    • 没有说明原因就禁止一个资源

    如果程序尝试使用打印机、内存控件等资源,却做不到,错误信息应当包含的不仅仅是宣布失败,还需要说明原因。

    • 报告说没有错误

    首先,还是先承认这种情况是不太可能会出现的;错误信息只能由错误状态出发,如果大部分是通常情况的调试消息,或者是少部分并不一定由某个缺陷引起的事件报告,那么,你可能就会忽略所有的错误信息。

    3)显示上的(问题)缺陷

    这是一个比较客观的问题,至少表面上看上去是这样的。任何可见的错误都会产生让人不快的感觉(尽管这些问题不一定很严重),用户就不一定会相信或者购买该产品。可能是因为此类错误大多都是属于低级错误,通常并不受到开发人员和项目经理的重视,但是我们必须重视它――它就是问题(Bug),它就是我们要找的东西之一。

    另外提一点:总是拘泥于这类Bug――放过重要的功能需求,“吹毛求疵”――可能会使测试失去意义,它可能是造成开发人员和项目经理不重视测试的一个借口。尽管如此,我们还是要提出这类问题,但并不是说可以遗漏重要的功能需求。

    ――数据写到了错误的屏幕位置

    光标提示在正确的位置,但是数据却显示在屏幕错误的位置(张冠李戴)。这类错误对开发人员而言,不应该是个很棘手的问题,但对用户来说,那是致命的。

    ――未能清除部分屏幕

    一条信息在屏幕上显示了几秒钟,接着却只有一部分被擦除了;或者你对前一问题的回应仍然留在屏幕上,我们固然可以以计算机整体性能为借口,但也不能排除技术因素。为了输入一些新东西,不得不在提示或不相关的回应上输入,这是令人头疼而且迷惑不解的。在以前测试的项目中,就曾经出现过由于屏幕未正确刷新导致的清屏不完整及无故弹出不相关提示的问题――这种问题比较普遍,需要多加注意。

    ――未能突出显示部分屏幕

    如果程序常常需要突出显示某个特定类别的项目,例如提示或者在激活窗口中的所有文本,那么它就必须一直这么做。

    ――未能清除突出显示

    屏幕位置的属性与显示的文本分开储存时这是很普遍的。程序员删除了突出显示的文本,但是忘记了从屏幕的那一区域清除突出显示。这类问题一般都和数据刷新有关系,无论是界面上的处理还是系统底层的处理。

    ――显示的字符串错误或不完整

    显示的消息可能是毫无价值的文本,一个冗长的信息的一个片断或是一条应该显示在其他时间出现的完整信息。这其中任何一条都可能反映出程序逻辑上,用来发现消息文本的指针的值或者已储存的文本副本中的错误。

    ――显示信息过长或者不够长

    消息在屏幕上显示的时间应该足够长,至少应该保持到能让用户读到结束为止。如果对同一条消息有时显示时间长,有时显示时间短则需要注意,这可能预示着外部资源之间的竞争条件(比如对内存资源的争夺),往往这些条件是在我们考虑之外的,需要认真对待。

    4)界面布局的显示

    屏幕看上去应该是很有条理的,别让它看起来像是一个乱糟糟的房间。不同类别的对象应该在可预知的区域分开显示。你可以参考一些关于UI布局的文章,但归结起来说:显示布局应该很容易让你在屏幕上找到你要的东西。

    ――从美学角度看屏幕布局很拙劣

    屏幕可能是不平衡的,大多数情况下是这样子,行或者列不对齐,或者只是看起来很“糟糕”。好好利用你的鉴赏力,如果没有信心,可以问问别人的意见,参考一些界面设计很合理的软件。如果对你而言它的布局的确看起来很糟,相信你的直觉,肯定有什么东西错了,尽管现在你还没有发现。

    ――菜单布局错误

    这是最常见的问题之一了:我们有时候会发现在编辑菜单下突然冒出了一个文件关闭的选项,而一般它是放在文件一栏下的。在很多的参考文献中,已经对这方面的内容做了比较详实的说明,我想强调的是以下一些问题:

    1. 相似的或从概念上相关的菜单选择应该分组,或者应该在屏幕上说明。
    2. 选择一个菜单项通常应该独立。为了获得一个独立的结果,用户不应该必须在不同的菜单上做出两个或更多的选择(这可绝对“难”用)。
    3. 通过键入其首字母来选择菜单项通常要比使用数字来得好。当然,你要留神不要给菜单项过于奇怪的名称;另外,还要注意不要在同一栏下面不要出项重复的字母。

    ――对话框布局错误

    1. 对话框应该一致。如:他们应该一致使用大小写,字体和文本对齐规则。对话框标题应当占据某个一致的位置,并与用来调用该对话框的命令名相符合。相同的快捷方式在不同对话框之间应该起相同作用――如<ESC>不应取消某些对话框,而在其他类似情况下完成其他的任务。
    2. 对话框中的控件布局必须合理安排。应使用必要的间隔把组隔开。
    3. 选择和录入区域应该垂直和水平排列,这样用户就可以以直线模式操作光标的运动(为了方便)。
    4. 留意对话框之间的相互依赖性。如果某个对话框中的选择将最终决定另一个对话框的选项将是令人困惑的。如果程序不得不这样做,务必要求开发人员给出具体提示。

    ――模糊不清的指示

    你应该总是知道去哪里查找以找出下一步。如果屏幕排得很满,总是应该为命令和消息留出一块空间。使用气泡显示信息也是一个不错得选择。

    ――闪烁的误用

    闪烁的图片或文本很引人注意,不过记得不要太多闪烁。太多的闪烁会让人觉得不舒服。你应该每次最多只让一个目标进行闪烁而且频率不能太高。

    ――颜色的误用

    不要太多颜色,它会让我们的眼睛很疲劳。颜色不应该使我们分散注意力,也不能使屏幕看上去杂乱无章,尽量使用统一风格的颜色,如果程序的颜色组合看上去很难看,抗议吧,没有人会愿意买毫无美感的产品的。

    ――过于依赖颜色

    如果程序在项之间使用颜色为唯一分隔符,那么它将限制使用者的范围,对于一些特殊的产品,需要考虑到例如色盲之类对颜色不敏感的人群或是使用单色显示器的用户。

    ――与整体风格不符合

    如果与计算机相关的风格提供了某种一致性和便利,尽量好好利用。也许对程序员来说可以使用更好的技术来代替,对于用户来说也未必不是不可接受的。例如:在习惯了鼠标和图标之后,恐怕很少有用户会习惯敲击键盘书写命令来完成计算机可以使用鼠标完成的工作。当大多数其他的程序以某种特定方式在屏幕的特定位置显示错误信息时,新程序也应该是这样的。

    ――不能去掉屏幕上的信息

    在屏幕上某个部分的可用命令选择菜单是很好的选择。一旦用户精通了程序,有些菜单就会成为屏幕空间资源的浪费。你应该可以提交一个命令能去掉和重新调用它。这点上,值得向微软的Office系列软件学习。

    3、命令结构和录入

    这里只处理实现中的缺陷。(即假定程序员对风格的选择是合理的)

    不一致性

    增加永真规则的数量可以缩短学习时间,并减少文档,而且使程序看上去更专业。不一致性如此的普遍,是因为它需要规划并进行斗争来选择能一直遵循的操作规则。每个微小的不一致性都是不重要的,但是一旦达到了一定量,一个本来构想很好的产品有可能会变得难以使用,甚至变成废品。从开发人员本身来讲,也体现出其开发本身的严密性。一个好的测试实践要标注出所有发现的不一致性,无论多么微不足道都要如此。

    “最优化”

    程序员有时候会有意引入不一致性来对程序进行优化。的确很吸引人,但是也要注意优化所带来的风险和一些优化的必要性:保存一两次按键操作是否与学习时间的增加或信任度的减少价值相当?未必。

    ――不一致的缩写

    如果没有很明确的缩写规则,缩写就不能容易地被记住。把Delete缩写为Del,把Grep缩写为Grep,是没有任何意义的。

    ――不一致的终止规则

    程序应该为多重键录入要求终结符。

    ――不一致的命令选项

    如果一个选项对两个或者更多的命令有意义,那么它就应该对这些命令都可用(都不可用),它应该具有同样的名称,并且应该在两种情况下以同样的顺序被调用。

    ――名称相似的命令

    如果两个命令名称相似,就很容易搞混。尽量不要使用相似的名称命名命令。这个问题在中文界面的软件中表现得尤为突出。

    ――不一致的大写

    如果命令录入是区分大小写的,所有命令的第一个字符都应该使用大写(小写)。命令中嵌入单词的第一个字符应该一直大写(小写)。另外,如非必要,不要在一个命令中使用多国语言。

    ――不一致的菜单位置

    如果同一命令在不同子菜单中出现,那么要在不同菜单的同一位置保留同一命令是很困难的。这句话不是很好理解,不过把话说白了就好理解很多:要保持命令在同一子菜单中的位置,而不是让它东搬西迁在其他的子菜单中停留。

    ――不一致的功能键用途与其说明

    功能键的意义在程序中应始终保持一致(颠倒或是功能冲突是不能接受的)。

    ――不一致的错误处理规则

    当程序检测到一个错误之后,它可能会公布该错误,或者尝试更正错误。任何一个程序的行为都应该是可预测的。如果当提交错误数据时没有任何的提示或尝试更正错误的说明,那么用户就无法确认数据是否是干净的。

    ――不一致的编辑规则

    当你输入或稍后检查任何数据时,同样的键和命令应该可以用来对其进行修改。

    ――不一致的数据保存规则

    应该在每处都以同样的方式,在同样的时间和范围内保存数据。它不应该在每个区域输入数据时保存数据,而其他时间则在一个记录、一组记录的末尾保存数据,或恰好在退出前保存数据。

    ――浪费时间

    看起来为了浪费时间而进行的设计会激怒每个人,应该把时间花在更有意义的事情上去。

    ――曲折路径

    如果为了到达想要的命令,你必须一个接一个做出选择。结果到最后发现,该命令不存在、不能实现或者要求你先完成某件事甚至几件事后才能使用――明显的欺诈行为!相信客户的不满和你(测试人员)的不满几乎没有任何区别。举个例子说:当用户辛辛苦苦填满了整整一页的数据,最后提交时发现:该页数据中的某项已经被使用了时,用户的焦躁可想而知。

    ――不能采用的选择

    事实上没有任何接口在一个不能建立的菜单中包含选择项。如果没有任何数据存在,你如何评审、保存和擦除数据?没有打印机,如何打印文档?有的命令不适合出现在某些条件下(虽然对使用没有什么影响),但是开发人员可能为了图方便而保留了此类命令(很遗憾地说:这太不专业了);有时候,程序会提示寻求帮助,而当你真的去使用的时候,程序却告诉你“您没有使用帮助的权限”――面对可望而不可及的东西,很多人宁愿选择不去看见。这种情况很常见,至于常常被开发人员和测试人员共同忽略――但这是不应该存在的错误。

    ――你真的,真的确定么?

    严重毁坏数据的命令需要这样重复的确认。是的,这是必须的,如:对一个写满数据的硬盘进行格式化的确需要多次确认。但是没有必要对每个细小的删除操作进行繁复的确认操作,用户会变得不耐烦,其结果有可能是:当用户真的在进行严重毁坏性命令时,无视屏幕提示,造成不可预计的后果。

    ――模糊不清或者带有个人风格的命令

    命令名应该明确指示该命令的作用。不要让用户一边使用软件,一边查询用户手册中关于该命令的解释。调查表明:大多数用户在使用软件产品的时候只对软件手册做大概的了解,甚至根本不阅读。别指望用户会很完整地阅读手册,那是我们的工作。没有任何理由在发布的程序中生成如:finger等带有明显个人风格的命令,当然,如果在程序中出现了脏话,我希望(仅仅是希望)客户没有气到火冒三丈。

    菜单

    菜单应该尽量简洁,当存在了太多风格不一,冗长和拙劣的图标或命令名,以及当选择隐藏在不明显的主题之下的子项时,理解它们将会变得非常复杂。一个菜单覆盖的命令越多,无论如何规划,都会变得复杂,如果没有良好的规划,这对用户的使用将是一大障碍。

    ――过于复杂的菜单层次

    如果必须在最后到达你想要的命令之前很吃力地通过一个又一个菜单,那么我想我会选择使用另外一个功能相近的程序。创建深层菜单树的程序员所引用的设计规则表明,没有哪个菜单应该具有七个以上的选项,这一点对新手来说可能时最好的。有经验的用户更倾向于每个菜单级别有更多选择,犯更少错误并更快速有效的做出反应,只要选项能合理组织,整齐排版,而且没有可笑的拥挤或拼写错误就行了。

    -不适当的菜单导航系统

    即使在一个最适当的深层菜单系统中,你也必须能够返回到前一菜单,或者移到菜单结构的顶层,并能在任何时刻离开程序。

    ――太多路径到达相同位置

    如果许多命令在菜单中重复出现,那么程序就需要重新组织。让一个命令在不同位置重复可能会很便捷,但是存在一定的限制。如果感觉上你可以从程序的任何位置到达另一个任意位置――那就得重新考虑下程序的内部结构和可靠性。

    ――相关的命令被归属到不相关的菜单

    把一个复杂菜单中对命令或主题进行分组并不是一件容易的事情。人们都很容易忽视两项之间明显关系,并把它们分配到分开的菜单中去,当需要对此进行调整时,我们需要做的是:解释两项之间的关系,并建议两者都应属于哪个菜单。

    ――不相关命令被放置到同一菜单下

    有些命令被扔到了完全无关的菜单下,这样并不好,宁可重新选择一个更高级别的标题并重新组织这些命令也不要那么做――如果那样做导致的混乱比较严重的话。

    ――键盘不能正确使用

    不能正确使用键盘无论在何时都是一个问题。

    ――无法使用编辑键或功能键

    如果一个程序从某些其他没有这些键的机器上移植过来,那没关系。相反可能就不行。要确保程序可以使用已有的编辑键和功能键。

    ――光标和编辑键的非标准使用

    这些键应该按照他们通常在该机器上工作的方式进行工作,而不是按照他们通常在其他某个机器上工作的方式来工作。

    ――功能键的非标准使用

    如果大多数程序用F1作为帮助键,那么如果在程序中将它定义为其他的功能,那将是不合适的。

    ――不能过滤无效键

    程序应该能挡住并抛弃无效字符,比如进行数字相加时输入的字母。它不应该做出回应。与错误消息相比,这样做更快更有效。

    ――未能指示键盘状态的改变。

    键盘上的灯或屏幕信息应该告诉你何时你的Num Lock键和其他类似的状态转换特征是开着的。

    ――未能扫描功能键或快捷键

    你应该能够告诉计算机从它正在进行的工作中退出;程序应该总是能辨别出任何其他系统指定的键――即那些本机上的程序通常可以很快识别出来的键。

    4、遗漏的命令

    1)状态转换

    大多数程序从一个状态转到另一个状态,在你选择某个菜单项或者提交一个命令之前,程序处于某种状态。为了回应你的选择,程序回到另一个状态。程序员通常会对他们的代码进行足够的测试,以确保你能达到任何你应该可以达到的状态。

    ――什么都不作就退出(状态返回)

    你应该能够告诉应用程序,你做出的最后一个选择有误,并返回到其前一个状态。

    ――不能在程序中间退出

    当使用一个程序但还没有对存储的数据造成不利影响时,你应该能够从中退出;如果你正在编辑的文件出现了预想不到的错误,在中止后应能回到先前保存过的状态。

    ――不能在命令中间停止

    告诉程序停止一个命令很容易,而返回到起始点或选择一个其他的命令也应该不太难。如果其中任何一个方面出现了问题,就需要重新考量先前的设计是否真的合理了。

    ――不能暂停

    如果程序限定了你输入的时间,时间一到,状态就改变,那么当你离开时你就需要它暂停一会儿。这中类型的情况在游戏软件中见得较多,比如说暂停游戏。

    2)危机预防

    系统故障和用户错误发生了,程序应具备将其后果降到最低的能力。

    ――没有备份工具

    对开发人员而言,为了一个文件做一个额外备份应该不是一件困难的事。如果你正在修改一个文件,计算机应当保留原始版本的一个副本,因此如果你的更改有错误,还能返回到一个已知的好的版本。

    ――不能撤销

    撤销一个你已经发出的编辑命令,至少是一步。恢复被删除的文件是一种受限制的撤销,它能让你恢复错误删除的数据。撤销是可取的,恢复被删除文件也应是必须的。

    ――没有“你确定吗?“的提示

    提交一个大量数据清除的工作,或者提出一个清除少量数据但是会影响其他作业的命令或者很容易错误提交的命令,都需要程序在用户操作时进行确认,不声不响地进行将会带来安全方面的隐患(尤其是在后台进行暗箱操作时,这种危险性更高)。

    ――没有增量保存

    当输入大量文本或数据时,你应该能告诉程序相隔一定时间对你的工作进行保存,至少应该提供用户此类选项。对于突发的掉电和硬件损坏情况这样做将是非常有好处的。

    3)由用户进行的错误处理

    人们可以捕获自己的错误,而经验告诉我们,他们还容易犯其他的错误。他们应能自理修复错误,并建立自己的错误检查机制。

    ――没有用户能指定的过滤器

    当设计数据录入表格和电子表格模板时,你应该能够让每个区域指定什么样的数据类型有效、程序应忽略或拒绝什么。例如,你可以让程序拒绝数字、字母、不在某个特定范围内的数值,一个有效日期或者与磁盘上匹配的日期等等。

    ――难用的错误更正

    修改一个错误应该很容易。不应该因为犯了错误的数据录入而让整个系统重新启动。在输入一串数据时,你应该能在不重新输入剩余部分的情况下,更正错误的数据。

    ――不能包括注释

    当设计数据录入表格,电子模板,专家系统时,你应该能够为未来参考和调试输入注释信息,这是很必要的。

    ――不能显示变量之间的关系

    录入表格、电子模板中有些变量是相互关联的,应该能很容易的检查任意变量对其他变量的依赖性。这在设计时应该被周密考虑到。在大多数的财务管理系统中,这类应用是较普遍的。

    4)其他问题

    ――隐私和安全性

    对于某些特定的程序,需要考虑数据的充分安全性,保护公司,集体或个人的机密和隐私。在多用户系统上,你应该能很好的隐藏你的文件(一般都是通过加密手段实现的),并且能很好的锁定你的文件不被篡改或阅读。

    ――安全性的困扰

    一个程序的安全性控制应尽可能谨慎考虑与实施。

    ――隐藏菜单

    很多程序在顶端、底部或屏幕边缘显示一个菜单(包括我以前测试的大多数应用程序)。它们使用屏幕的剩余部分作为数据录入和处理的区域。菜单只是记忆的辅助物。一旦用户了解了他所需要的所有命令后,就应该给予用户充分的自由,让其选择是否需要保留菜单的权力。

    ――不支持标准O/S特征

    例如:如果系统使用了子目录,那么程序就应该能引用其他子目录。如果操作系统提供了通配符(比如*),那么程序也应该能使用。

    ――不允许长名称

    应当允许使用长名称(只要不是太离谱),毕竟,内存不足和编译器反应迟钝的时代已经成为过去了。别让自己的程序也成了文物。

    5、程序僵化

    程序有灵活与固定之分。灵活的程序更显个性化一些,而固定僵化的程序一般都是由于业务流程的关系而不得不如此。如借还书的过程,必先借了才能还。别给用户太多的自由,否则程序看起来会让人觉得松散,也不要把程序定得死死的,那看上去给人太多压力了。

    1)用户可调整性

    ――不能关掉噪音

    犯错误时,许多程序都会给出“咄”的警告声。而如果每次接触键盘都发声,这简直是不能容忍的――特别是在公共场所。必须关闭没有必要的噪音,至少程序要提供这类控制选项。

    ――不能关闭大小写区分

    一个能区分大小写的系统应该允许你告诉它忽略大小写的问题。

    ――不能配合手边的硬件

    有些程序被锁定针对了特定的输入输出程序。升级或更换了设备的用户可能就无法使用这些功能了。这是令人遗憾的。同时,也会让用户觉得是否是一种商业捆绑的模式而拒绝使用此产品。尽量让开发人员编写通用的硬件接口代码以适应大部分通用的硬件设备。

    ――不能改变设备初始化

    一个应用程序应该能够发送用户定义的初始状态,或者至少应该让它保持现状。每次启动都需要重新配置将会是很烦人的工作。假定你想要向一个打印机发送控制代码,以转换到压缩字符,如果打印数据的程序不让你初始化打印机,你就不得不从设备来改变打印机的模式和状态,然后重新运行程序。如果程序阻挠了你的打印机设置,那就是一个设计错误。

    ――不能关闭自动保存

    自动保存是件好事,不过无事生非也是一件糟糕的事情。过于频繁的自动保存可能会让用户觉得程序不可靠。所以还是老老实实加上关闭自动保存的选项吧。

    ――不能改变滚动速度

    严格来说,这不是一个很严重的问题。目前很多的设备驱动中已经提供了此类选项。

    ――不能重复上次的操作

    这样的例子比如Word软件中的Redo。

    ――无法找到你上次完成的内容

    此类问题对数据编辑特别是文本编辑类的程序较为常见。应当提供保存的文件列表,除非用户禁止了它。

    ――无法执行一个定制的命令

    在程序选项中,一旦对其更改,应该立即生效,不需要再次重新启动程序进行加载――特殊情况除外(如果你无法避免)。

    ――无法保存定制的命令

    你不应该只告诉程序此次运行关闭了警告声,而是应该让程序永远可以关闭这些――只要设置没有发生变化。

    ――特征更改的副作用

    这种情况较常见,修改了某一个特征,相关的特征也会改变。如果确实存在副作用,应当在手册和屏幕中提供详实的文档证明和提示。

    ――无限可调整性

    开发人员可以改变某些程序的方方面面。但是在开篇时说过,提供了太多灵活性的程序并非一直都是一件好事。好好斟酌再做决定要比草率地修改来得更好。

    2)控制方式

    有些程序很“霸道”。它们的错误信息和帮助消息自认为高人一等,它们的风格不可原谅的不便――你甚至无法放弃命令或者在输入数据后进行更改。程序应该使你觉得能更容易,更惬意地完成一个任务。至少,它不应该浪费你的时间。

    ――一个概念风格的不必要和不合理要求

    有些程序要求你以某种顺序输入数据,或要求你在进行下一步之前先完成某项任务,再要么就要求你再考虑它们的潜在后果之前做出决定。例如:

    当设计一种数据录入格式时,为何你必须再屏幕显示之前确定一个数据录入域的名称,类型,宽度或者计算顺序?当你察觉不同的域放在一起看起来有神么不妥的时候,你是否会更改某些域,把它们的位置换来换去,甚至去掉少数域?你可能不得不在使用该格式之前输入域的规格说明,但是在该约束条件下,你应该决定何时填充细节。

    当向一个项目管理系统描述任务时,为何你必须首先列出所有的任务,然后列出说有可用的人员,接着在为下一项工作输入任何数据之前就把分配给某个人的工作完全对应?既然你可能试着决定什么工作分配给什么人,那么你不想看到结果后再更改这些数据么?

    限制的数量如此多,是因为有些开发人员认为,人们应该以某种方式组织它们的工作。但是他们所想的最佳途径未必都是最佳的。我们应该更清醒地意识到,除了业务流程上的禁锢,不需要再对用户在风格上多加任何的限制――当然,如果用户需要的话。

    ――对新手友好,但是对老手并不一定友好

    为初学者设计的进行过优化的过程可能为他们掌握系统会有帮助,但是同时会令一些有经验的老手带来烦恼。他们更希望能自由地使用软件;其中一个解决办法就是提供两条以上地路径实现对不同层次用户的需求。

    ――人工智能与自动化

    有些更智能和更便利的程序会猜测你的下一步动作,并枉加执行这些猜测;自动纠错的程序的确很好,除非它“纠正”了正确的数据。而有时候,用户并不一定希望这样做。提供可用的选项可以缓冲一下这方面的矛盾。

    ――过剩或多余的必需信息

    过剩和多余的必需信息就像我们身上的赘肉一样讨厌。有些程序会请求他们从来不会使用或者只会用来在屏幕上显示一次的信息,或者会要求你重新输入你已经输入过的数据――并非是为了验证,仅仅只是重新获取一次数据,这对时间的浪费是非常惊人的。

    ――不必要的步骤重复

    如果你在输入一个较长的命令步骤或数据时犯了一个错误,有些程序就不管青红皂白让你重新输入;有的程序则强迫你重新输入或确定可能有错误的任何命令。为了某些任务,你甚至可能需要确认每个步骤。相信我:不必要的重复或确认都是浪费时间。

    ――不必要的限制

    为什么要把一个数据库限定为如此多的字段或记录,或限制一个电子表格仅使用数字,把一个项目经理限制在如此多的任务中,一个字处理程序限制在如此多的字符呢?对性能或可靠性而言并非必要的限制不应该成为约束条件。

    6、性能

    许多有经验的用户认为性能是最重要的可用性因素:使用一个快速程序,他们感到更能集中精神工作,而且更多的东西处在掌握之中。在极少出现异常的情况下,程序越快越好。

    性能有很多定义,大致来说主要有如下的感性认识:

    1. 程序速度:执行标准任务的速度有多快?
    2. 用户吞吐量:你能使用程序执行标准任务的速度有多快?
    3. 感觉到的性能:在用户看来,该程序速度有多块?它是否令你满意?

    无论如何定义,程序速度总是一个关键因素。但是一个界面设计拙劣的快速程序无论怎么看都要比它实际的运行和处理速度要慢得多。

    1)降低程序速度

    很多设计和代码错误会降低一个程序的执行错误。程序可能会执行很多不必要的工作,如对一个在读前会被重写的内存区域进行初始化;也可能会对工作进行不必要的重复,如在一个在循环中执行的任务可以在循环外完成;设计的决策也会影响到程序的速度,而且通常要比明显错误导致的慢速情况更加严重。

    2)缓慢回应

    程序应立即对输入做出响应,如果在你输入一个字母的时刻和你看到这个字母的时刻有延迟,显然,程序就太慢了。快速反馈对任何输入事件都必须是有效而且是必要的,它包括:鼠标,键盘,轨迹球,键盘等等。

    3)如何减少用户吞吐量

    一个闪电般快的程序执行任务时可能比蜗牛还要慢。这包括:
    1. 任何可能使用户错误更可能发生的事情。(培训不周,用户习惯,程序风格等等)
    2. 缓慢的错误恢复。如:在输入一长串字符后发现错误却必须要重新输入。
    3. 任何使你感到迷惑,却得不到帮助文档或手册提供资料的事情。
    4. 输入很多,却做得很少的程序――这不是一个好程序。如:把一个简单任务划分成很小的子任务,要求对所有事情进行确认等等。

    在测试时,使用比较性测试是个有效的方法:即把开发中的产品与竞争对手的产品进行比较,如果人们使用你的产品花费的时间要更长,那么发现这个问题就是有意义的。

    4)反应拙劣

    我曾经测试过一个产品,在输入第一条数据后,居然花了将近一分钟才从数据库中将数据取回。这不能不说是一个反应很慢的程序。一份表单做下来将近300条数据,按此速度计算,我将花上至少半天才能完成输入。这种情况是不能允许的。迅速地对输入做出回应是一个程序最最基本的功能。一个反应迅速的程序不会强迫你在提交下一个命令之前让你持续等待,而是让你继续做其他事。

    5)没有提前输入

    一个允许提前输入的程序会让你在它从事其他工作的时候仍然可以键入,它会记住输入内容,加以显示并在稍后进行处理。你不应该等着输入下一个命令。

    6)没有给出某个操作会花很长时间的警告

    如果程度需要超过几秒钟的时间来进行某事,程序应该告知用户。对于较长时间的任务,它应该给你一个大概的时间印象而不是让你干等着它结束。给出大致需要完成的时间或是进度条是处理此类问题一般的方法。

    7)程序太多提示和询问

    提示,警告以及询问可能很有用,不过如果它们出现得太频繁,就会让人很窝火。

    8)尽量使用简单命令和提示

    在慢速终端上,帮助文本,长菜单以及漂亮的图片常常会令人不耐烦。你应该使用简要的语言取而代之。不要使用诸如“你真的想以500k/s的速度传送此邮件到某邮箱”么之类罗嗦的语句。

    7、输出

    程序的输出应如输入一样完整。它要求更精确,尽量快速和能实现多路径及对输出内容更有效的管理,这四类标准几乎决定了输出功能的主要表现特性。

    1)不能输出某种数据

    你应该能打印出你输入的任何信息,打印不出输入的内容对任何程序而言都是致命伤。

    2)不能重定向输出

    你应该可以重定向输出。特别是,你应该能向磁盘发送一个很长的“打印输出”标记,并稍后打印该磁盘文件。程序不应该阻止你把数据输出发送到预料之外的设备,如绘图仪,磁带,打印机等。

    3)与一个后续过程不兼容的格式

    如果一个程序声明能够以第二个程序可以理解的格式保存数据,那么就应该测试它是否可以真正做到。这意味着购买或借用第二个程序的副本。使用第一个程序保存数据,用第二个程序读数据,同时看看第二个程序得到了什么,这是对此进行测试的最简单方法。

    4)必须输出的很少或很多

    你应该可以修改报告,从而呈现你需要的信息。不得不在仅包含少量有用信息行的打印输出的大量页中找出所需信息,几乎和没有得到信息一样糟糕。

    5)不能控制输出布局

    你应该可以改变字体,对输出信息增加特殊标记来强调信息。你应该可以修改信息之间的间距,最低限度来说,程序应该可以以一种由合适文字处理进行修饰的格式把报告输出到磁盘文件。

    6)荒谬的精度输出级别

    要是说4.2加上3.1等于7.3000000或者说3.1111+2.11等于5.22110102都是很愚蠢的。在最终输出的结果中,程序应该按照规定的格式和精度输出最后的数据。

    7)不能控制表或图的标记

    你应当能够改变字型,措辞及任何说明,包括标题,表格,图形或是图表中文本的位置。

    8)不能控制图形的缩放比例

    绘图程序应该提供默认的垂直和水平比例,不要告诉我你最后输出打印报表中的图形超出了整个页面或是只占据了整个页面的一角。

    二、错误处理

    在处理错误时发生的错误通常是最常见的缺陷。错误处理产生的错误包括:未预料到错误发生的可能性并防止其发生,没有注意错误状态,以及较严重的:程序可能与错误数据一起工作并最终产生错误结果的情况。

    1、错误预防

    程序应具备这种能力:它能保护自己不受到系统其他部分的影响(包括有害输入和有害处理)。如果程序可能与错误数据共同工作,确保其在发生严重可怕的影响之前(如程序崩溃,数据丢失与错误,系统崩溃等),检查并消除这些问题。

    1)不充分的初始状态验证

    如果内存的某个区域必须以其中所有位都是0开始,那么程序应该可以运行一个抽样检查,而不是假定已经存在0值。这会导致程序初始化时发生内存错,甚至不能启动。

    2)不充分的用户输入检查

    此类问题非常常见,开发人员可能会在编写程序时遗漏掉大量这方面的问题。告诉人们输入1位到3位数是不够的,有些人可能会输入5位甚至更多,也有人会输入特殊字符或是运算符,还有些人会按下功能键一次或多次,如果程序允许输入,那么程序就应能顺利应付,而不是一打非专业人士不能明白的提示甚至更糟的情况。

    3)对受损数据不能充分预防

    没有人能保证磁盘上的数据是好的。可能是有人已经编辑过或者根本是有硬件问题。即使开发人员认定在保存前的文件是有效的,那么他也应该检查(校验)下次打开的是否是同一个文件。

    4)不充分的参数传递测试

    一个子程序不应该假定得到了正确的调用(事实上,采用相反的想法可能会让测试进行得更加顺利一些)。它应该确保传递给它的数据在其可控制的范围之内。

    5)针对操作系统的预防不充分

    操作系统存在缺陷――不光是过去,现在甚至将来也是,应用程序可能会触发其中存在的问题。如:如果开发人员知道,他把数据送到磁盘后很快又把数据送到打印机,会引起一些操作系统的崩溃,那么他就应该确保程序在任何情况下都不会这样做。

    6)不适当的版本控制

    如果可执行代码不止存在于一个文件中,那么有人会尝试把某一文件的新版本和老版本一起使用,客户对其软件升级使得这类问题时常发生,但是又不能明白出了什么问题。新版本应确保所有的代码都是最新的,当然也要对老版本有完整的备份。

    7)针对恶意使用的不充分预防

    人们有时会有意无意的提供程序有害输入,或者尝试触发错误状况(特别是做测试的家伙们)。不要假定“任何有理智的人都不会这么做”,相信我:程序不完全是为了“有理智”的人开发的。

    2、错误检测

    程序通常有足够的可用信息来检测数据中或其操作中的错误。这部分内容将指导一部分常见的错误检测方式并对其进行归类。

    1)忽视溢出

    一个数值计算结果对于程序来说太大以至于无法处理时,就会产生溢出。溢出由较大数字相加和相乘或者被0除或是由于过小的分数除而引起。在有既定规则的情况下,溢出是很容易检测到的。

    2)忽视不可能的值

    在计算机当中,几乎没有什么不可能发生的事。程序应该检查其变量,以确保它们在合理的界限之内,它应可以捕获并拒绝如2月31日这样的日期值。如果当变量为0时,程序完成某动作,变量为1时完成另一工作,并假设其他所有值都是不可能,那么就必须保证变量只能为0或者是1,对其他所有值进行额外的处理。在一个项目中,经过数年维护编程后,旧的假定就不一定安全了。

    3)忽视看上去不真实的值

    有些人可能会从自己帐户里提取100,000,000,000的钱,那么就算他有这么多钱,也应该在通过交易之前向几个不同的人进行确认。这类看似荒唐的用例往往包藏着错误的祸心,应该小心应付。

    4)忽视错误标志

    程序调用了一个子程序,结果操作不成功,它在一个被称为错误标志的特殊变量中报告了该失败。与通常一样,程序能检查或忽略它,并把从例程返回的误用数据当作真实的进行处理。

    5)忽视硬件缺陷或错误情况

    程序应该假定它能连接的设备是失败的,许多设备能够发送警告某件事情出错的返回信息。如果有设备这样做了,停止尝试与其交互,并向某人或更高级别的控制程序报告该事件。不能忽视该类情况以避免造成不必要的困扰。

    6) 数据比较

    结算银行存折时,你有一个你自己认为的余额数值,银行也会提供一个余额数值。在考虑了服务费,银行利息,最近帐单等等数据之后,两个数据不吻合,那么就要好好查一查了。在互相检查两个数据集或计算结果集时,也会产生类似的情况。

    3、错误恢复

    程序中存在错误,程序已经检测到了错误,而且现在正设法对其进行处理。许多错误恢复代码只是稍微进行了测试,或者根本没有进行测试。错误恢复例程中的缺陷可能比原始问题更严重。

    1)自动错误更正

    通过检查其他数据或规则集,有时程序不仅能检测错误,而且还能纠正错误,而用不着麻烦任何人。这样的程序是令人满意的,但仅当这种“纠正”是正确的情况时才是如此。

    2)未能报告一个错误

    程序应该报告任何检测到的内部错误,即使它能自动纠正错误产生的后果也一样。在稍微不同的环境下,它可能检测不到相同的错误。程序可以向用户报告这一错误,也可以向一个多用户系统的操作员,向磁盘上的日志文件,或者是这些对象的任一组合报告错误。总之,不管怎么样,只要发生了,它就必须报告。

    3)未能设置一个错误标志

    某子程序被调用,但是结果失败,假定它在失败时设置了一个错误标志,它把控制返回给调用程序,却没有对这个标志进行设置,那么调用程序就会把无用数据当作有效数据传回去,这是应坚决避免的状况。这可能会造成数据冗余,脏数据或是直接导致当前操作失效,严重的则会引起崩溃。

    4)程序要走向何方?

    一部分代码失效了。它记录了错误,并设置了一个错误标志,接下来干嘛呢?尤其是经过了几个跳转的情况下,它如何才能得知程序中的什么地方返回了控制?

    5)中止错误

    停止了程序,或者当它在检测到错误时自动停止了,那么它是否关闭了任何打开的输出文件呢?它是否在关闭时会记录退出的原因呢?在最普通的条件下,在即将结束之前它是否进行了整理或者它只是结束但可能留下一团混乱呢?这都是开发人员和测试人员需要考虑的问题之一。

    6)从硬件问题中恢复

    程序应该适度地处理硬件故障。如果磁盘或其目录已满,你应该能够放入一张新的磁盘,而不只是关闭了你所有的数据。如果一个设备很长时间还没有准备好接收输入,你就没有应该假定它已经断线或断开连接而进行处理。程序决不能够让我们永远在那里坐等。

    7)不能从遗失磁盘中退出

    假定你的程序要求你插入一张具有它需要的文件的磁盘,如果插入的磁盘不正确,它会再次提醒你,直到插入了正确的磁盘为止。然而,如果没有正确的磁盘,你就没有任何办法可以退出,除非你重启系统。不,这种做法是极端蛮横的,决不能允许出现这样的问题。

    4、边界相关的错误

    一个边界描述了程序的一个改变点,假定程序在边界的一边以某种方式做所有事,而在边界的另一边,它以不同的方式完成所有事。

    边界相对立的两边的典型“东西”就是数据值。存在三种标准边界缺陷:

    • 边界情况的处理不当

    如果一个程序把任何小于100的两个数相加,不接收任何大于100的数,那么当你恰恰输入100时它会做何反应?它又该怎么做?

    • 错误边界

    规格说明表示,程序应该把任意两个小于100的数相加,同时不接收大于95的数。

    • 边界外情况的错误处理

    边界某一边的值是不可能,不可信,不能接收,或是预料之外的,没有为其编写任何处理代码。程序是否成功拒绝了大于100的值?或者是否当它获取了一个大于100的值时就会崩溃?

    我们把边界的概念看得更广泛,边界描述了考虑一个程序以及它在其极限周围得行为得方式。存在很多种的极限:最大,最小,最新,最旧,最近,第一个等等。相同类型的缺陷可以伴随其中任何一种极限而产生,我们可以用相同或类似的观点考虑它们。

    不同边界错误的考虑方式

    不同类型的边界,其考虑方式也是不同的,但是其思想基本上都相近:无外乎上溢出与下溢出。

    1)数值边界

    有些数值边界是任意的,如大于100;而有些则要描述自然极限,如三角形的特征和子母的ASCII码等。

    2)与一个边界相等

    在一个列表中的所有元素可能相同,也可能不同。如果你试着对任一列表进行排序,会发生什么?如果列表由数字组成,当你尝试计算平均值,标准偏差,对称系数时又会发生什么?(以上是概要统计概念,按算法,对称系数可能会计算为0或引起被0除的错误。)

    3)多种多样的边界

    一个输入串可以长达80个字符么?如果你输入79、80或81个字符会如何?程序是否在每种情况下都接收你的输入?一个列表可以只是一个元素么?没有元素可以么?仅含一个数值的标准偏差又是什么呢?

    4)空间中的边界

    例如,如果一个绘图程序绘制了一个图形,并在其周围绘制了一个方框,那么该如何处理一个应当在方框外正确显示的点?

    5)时间的边界

    假定程序显示了一个提示,停留60秒等待你回应。然后,如果你没有输入内容就显示菜单,如果正当它开始显示菜单时,你开始输入内容,会发生什么?

    假定你在计算机仍然在从磁盘中装入程序时按下空格键,发生了什么事?空格键是被发送给操作系统,为正在装载的程序进行了保存,还是仅仅因为预料之外而导致计算机崩溃?

    6)硬件相关边界

    如果一台主机可以连接100台终端,那么当你加入99,100,101台时会发生什么?如果你让100台终端同时登陆会怎样?

    如果磁盘已经塞满了会如何?如果一个目录能保存1000个文件,当你尝试保存第999、1000、1001个的时候会发生什么?如果打印机有较大的输入缓冲区,当你的数据填满缓冲区,但是却还没有更多数据要传递时,会发生什么?当打印机缺纸或颜料用完了又会发生什么?

    5、计算错误

    程序计算一个数据得到了一个错误的结果。发生计算错误通常因为下面三种类型的原因:

    • 很差的逻辑:

    可能存在一个录入错误,开发人员可能会在编制程序时无意中错误简化了复杂关系地表达式,或者由于拼写错误或笔误导致。另外一种糟糕的情况则是设计错误,开发人员关于代码如何做的概念可能一开始就错了。

    • 很差的算法:

    如果1+1=1,可以理解为一种特殊逻辑,但是如果把它作为数值运算,恐怕是没有人会同意的。无论何时,一个错误的算法总不会得出正确的结果。

    • 不精确计算:
    由于使用了舍入的计算方法,很可能在计算时丢失精度。

    【小结】

    这篇文章最早成形于2004年10月,当时正接手一个项目的黑盒测试工作。然而,在对软件项目实施黑盒测试的过程中,的确也看到了很多值得思考的地方。作为一名刚进入测试行业的学步小儿,也谈不上有什么丰富的经验累积,唯希冀本文能给刚进入测试领域的同仁提供了一些有价值的参考

911/512345>
Open Toolbar