发布新日志

  • 你没跑过的地方,就一定会出事

    2010-06-24 15:51:44

    转载http://www.51testing.com/html/61/n-216061.html

    正好这两天忽略了两个网页同时打开会互相窜数据的BUG.

    另外对于对象里的每个数据单元(下拉框数据的各种可能性,上传附件的增删改等等都是最近所忽略的)都要酌情考虑到。没跑过一定会出事绝对是真理~~~

    软件测试人员易遗漏的一些隐藏缺陷

    通常软件测试会 暴露软件中的缺陷,经过修正后可以保 证软件系统的功能满足需求并正确运行。但是,在系统测试和确认测试中,测试人员容易遗漏一些隐藏的缺陷。众所 周知,软件测试不可能发现所有的缺陷,而软件开发周期各个阶段仍然存在注入缺陷的可能,但是,有一些缺陷是测试中容易忽略的,也就是说,通过测试方法和用 例可以充分暴露这些缺陷,遗憾的是,它们往往被忽略或者某种原因忘记测试了,这就给软件留下了隐患或者危机。这些容易被忽略的缺陷包括:

       1、安装缺陷

      通常项目组完成代码后,发布时候安装打包是最后一个环节,而软件测试人员通常在测试 的时候,没有仔细的测试这一部分,而把用例集中在其 他功能上。安装时候的缺陷通常通过拷贝而不是运行安装程序方式给测试人员安装软件,结果正式安装时候出现问题,引起例 如控件没有注册,注册表没有导入等。删除时候没有注意安装文件夹是否存在用户文件,造成数据丢失;使用绝对路径;安装顺序没有说明书。

      2、 配置文件

      有些文件在ini等配置文件中写出了管理员口令密码等信息,而且是明文的!这是一个安全隐患。另外,有些安 装文件的 XML 文件,为了方便在数据库和中间层连接文件中写入了Admin 口令和密码。作为一个合格的软件测试人员,必须检查这些可以用记事本打开的文件。因为,一个稍有常识而且喜欢探索的用户,可能从中获取信息而成为不自觉的 黑客。所以,配置文件可能成为软件安全方面的一个缺陷。

      3、网页安全缺陷

      现在网 站开发已经注意到:登陆网站进入其内部网页后,直接拷贝网址,然后粘贴到另一IE 窗口输入,可以绕过登陆直接访问。也许商业网站很关注这个问题,但是很多行业软件却很容易忽略。

      网页安全缺陷还可能存在于 IE 弹出的子窗口。有些设计不严格的软件,在主页面关闭的时候子页面还可以运行,这是一个明显的漏洞,而且还大大增加了错误发生的几率。

      4、 判断顺序/逻辑缺陷

      对界面进行多个输入判断的时候,非常容易出现这种问题。例如判断年月顺序,判断长度,判断非空 等。假如操作员仅仅满足单个条件,保存不能成功;而按界面从上之下顺序一一满足条件之后,保存是没有问题的。但是,改变一下输入的次序,校验失效。例如, 一一满足条件之后,不保存,倒过来将上面的输入改成非法输入,然后保存,结果居然也能成功,这是因为原先的判断由于发生过,或者根据语句顺序只检查最后一 个判断,所以没有报错。这种错误尤其在 Java scrīpt 脚本的页面中要注意。能够保存不能保证数据正确,有可能引起系统崩溃或者后续数据错误。所以,在测试的时候,不要按照正常的顺序输入,而是要打乱步骤,看 看代码是否强健,是否在判断逻辑上没有错误。良好的代码应该经得起折腾,至少保存时会再此全部进行判断,而不只是简简单单走到判断的最后一行。

       5、调试语句和冗余信息

      维护项目和升级改造的推广系统最容易潜伏这类缺陷。典型表现在没有删除或 者屏蔽调试语句。弹出一个界面不友好的提示信息,会使不明真相的用户产生误以为系统发生了严重故障,从而引起对软件的不信任感。页面中某个角落存在当前客 户不需要的冗余按钮和功能也是一种缺陷。多余的功能会使用户以为是额外附加部分而去使用,其结果可想而知;而多余的按钮会误导好奇心强的用户操作,产生不 必要的错误。

      同样值得关注的还有参数设置,由于没有实际数据,开发人员在调试或者单元测试的时候,习惯性的进行自我设定而忘了删除,软件测试人 员可能会忽略掉了这部分测试,也可能导致在客户现场发生错误而影响系统发布和验收。


    6、不可重现的故障

      新参加软件测试的人员或者新来的开发人员总是要问,不可重现的缺陷是否需要记录,有必要吗?回答是肯定的。测试必须如实的记录发生的问题,也许 不能重现,或者使非软件系统本身问题,但是,可能这些偶然性背后是有规律的,不记录这些,就不可能发现这些规律。

      7、多节点的逆向流转缺陷

      当前软件不少喜欢使用工作流来驱动。工作流的问题,就是可能出现多个流向分支。测试容易忽略的部分,就是工作流多节点的逆向流转。例如,通过不 通过涉及两个分支,但是流程逆转的时候,有可能不是回到上一节点而是平级的另一个节点去了。软件测试要格外注意这类用例的设计。另外,有些时候默认分支在 向前的时候是有默认值的,例如默认通过,那么保存的时候要提示用户是否通过,否则可能由于操作疲劳而走错了节点,引起回退。

      8、输入框缺陷

      试过往输入框粘贴数据而不是直接输入吗?可能这里会出现问题。按 Ctrl+V 的时候,输入框会根据长度大小自动截断输入长度。但是用鼠标,截断可能会失效。有一次测试人员就是用这种方法把一篇 Word 文档输入进去了,保存的时候,数据库崩溃。有些网站登陆的口令****可以拷贝下来的,只要放在剪贴板里面马上明文显示。

      输入框可以说是问题最多的部分,能够引起的麻烦也很多。日期、数字、文本等等,都需要耐心的测试一下。

      9、界面布局缺陷

      曾经有一次,项目经理回来向测试部反映一个问题,客户对界面不满意。原因很简单,因为界面上删除按钮和保存按钮挨得很近。结果有些操作不熟练的 业务人员,很容易误按。这个问题是测试人员没有意料到的,因此注意关闭、删除、退出按钮与保存、下一步等按钮的距离。类似的按钮应按此规则排列分布。

      界面布局还可能发生在窗口最大化和最小化上,有可能窗口缩小的时候没有下拉框或不匹配分辨率,对用户来讲,这个错误实在很低级。有些用户由于操 作习惯,非常不喜欢腾出手使用鼠标,尤其是大量输入的界面,因此,要注意设置键盘的快捷方式。还有,按 Tab定位到下一焦点时要注意顺序,避免跳转太灵活而让操作人员感到无从适应,在界面进行维护或者修改的时候,不要忘了软件测试开发人员是否无意改变了这 些快捷方式和跳转顺序。

      10、版本和补丁包的环境问题

      理论上讲,这属于兼容性测试应该覆盖的问题。有些客户很喜欢更新最新的软件版本或者微软时不时打些补丁包,问题就出现了。有时候升级不一定是好 事。这些问题最好在测试的时候增加几个用例,多用不同软件版本的机器跑一跑。软件测试有个定律是:你没跑过的地方,就一定会出事。经常听到开发人员抱怨, 怎么我的机器没问题,你的机器就有事了呢?这不能完全靠配置管理员解决问题,环境配置项是大家最容易忽略的。

      11、用户管理缺陷

      用户管理的角色和授权需要好好研究一下,作过测试的人员都知道,有时候为了测试的方便,测试用户都是具有超级权限的用户。而且,比较容易忽略用 户管理这一部分的测试。往往发往客户的时候,很多测试用户都没有删除。

      另外,有些接口的用户和口令,到软件使用寿命结束都没有更改过。在一次测试中,软件测试人员发现,给一个用户授超级用户权限,之后更改这个用户 为受限权限。使用中发现,用户居然没有真正回收权限,用户管理界面上没有任何不对。及早准备用户管理用例,不要等到测试快结束时候才想起。

      12、常识缺陷

      从逻辑或者统计学上讲,计算机是允许如此处理的,但是从常识上来讲,这些情况不可能发生。例如电话号码不可能出现小数点,终止时间不能大于开始 时间等等。除此之外,常识还要结合业务特点来进行判断,因此,开发和测试人员要格外注意对自己知识的培养以及增加对需求细节的了解。不能因为一味追求进度 而采用最简单的代码来实现,对用户来说,这些错误可能是很荒谬的。

      尽管我们不可能完美的测试一个软件,但是我们仍然可以改进我们的软件测试。每次测试结束,及时总结测试中的不足,进一步完善用例。思考一下那些 容易忽略的软件缺陷,能提高对软件测试的认识,提高所在组织软件的质量。



  • 测试管理的一些看法

    2010-01-04 17:24:15

    在网上看了一篇关于软件测试管理常见问题及其回答。一大片文档化的东西,没还真要点耐心看。虽然还是小兵一个,但感觉管理这东西还是要基于组织架构的。此文的很多内容有的是针对测试主管的,有的是针对测试经理的。不同的级别有不同的问题以及解决方案。

    同化效应和先入为主的定位效应应该是我这种小兵在工作的时候特别要注意的。前一个就不用说了。这个是性格问题。有的同学缺乏对自己的观点的认同感跟坚持,一下子就被忽悠了。至于定位效应的避免需要测试人员对系统以及代码更加熟悉,根据已经产生过BUG的地方,去判断有可能出现的“附加BUG”。只是目前还感觉有些BUG出现的原因比较“灵异”。都不知道为什么会这样。有时候也是自己太懒,不会对BUG的根源刨根问底。

    这篇文章贴过来了。PS:以后自己写文档一定要有层次感才好啊!!

    软件测试管理常见问题及其回答

    1、测试负责人要进行严格的测试进度跟踪吗?
    很多时候,由于人力资源的不足,测试项目负责人都是在执行测试,这样就使整个项目缺乏控制,一些问题(例如:有些成员的缺陷质量不够合格;开发人员修改不及时,系统某些功能发生严重问题导致部分功能无法测试。)得不到解决,耽误了进度。所以测试负责任必须全程监控项目,尽可能多的掌握信息。通常,测试负责人需要完成下面这些内容的管理工作:
    测试用例执行情况;
    每个测试员提交的缺陷情况;
    测试中是否发生突发问题。


    2、 测试也有版本控制吗?
    这里的版本主要是指测试对象的版本控制,也就是指对开发部提交的产品进行版本控制。在开发小组版本管理不规范的情况下,测试小组进行版本控制十分重要,要保证测试对象是可以控制的。建议开发和测试双方进行明确的约定,可以各自指定专门的测试版本负责人,制定提交原则,对提交情况进行详细的记录,这样基本避免了版本失控导致的测试失误或无效。


    3、如何处理测试人员的流动问题?
    人员流动不仅仅是测试部门,这是IT行业的普遍现象。从管理者角度,主管需要多多和团队内成员进行沟通,建立一个融洽的团队环境,及时掌握情况,可以早些进行相应的调整。但是只有企业建立好的用人制度,给员工提高广阔的发展空间和好的培训学习机会,才能从根本上解决这一问题。
    加强项目管理,强化文档管理并保证文档的有效性,可以大大减少由于人员流失带来的损失。同时,测试部门要建立培训机制,使新到员工接受直接或者间接的培训,快速适应工作。


    4、为什么开发人员经常抱怨测试工程师提交的缺陷质量太差?
    我们经常听开发人员说:“这不是缺陷!”,“这个缺陷没有,因为我的系统上运行正常!”。测试工程师本身就是做质量工作的,提交的成果本身就应该质量高些,为什么还会有这种现象?
    提交的缺陷引起争议是一种正常的现象,例如测试人员描述不清楚就会引起争议。减少甚至避免这种现象的方法是交叉测试,交叉测试是提高测试质量的一个有效手段,当然交叉测试会增加一定的测试成本投入。在测试任务完成后,测试工程师之间互相验证彼此提交的缺陷,就会避免了缺陷描述不清、因运行环境而产生的缺陷等一系列问题,从而大大降低了回归测试以及交流的成本,因而这种投入也是值得的,实际开发人员在单元测试阶段也会进行交叉测试,来提高开发质量。
    另外,测试人员一定要按照规范描述测试中发现的缺陷,一个缺陷至少描述清楚概要描述、详细描述、重现步骤三方面的内容,缺陷管理参考第八章的内容。


    5、“让那些新手来做测试,反正他们也不会什么”正确吗?
    在实际项目开发中,我们常常看到有些单位忽视测试团队存在的意义,当要实施测试时,往往临时找几个程序员充当测试人员。也有些单位尽管认识到了组建测试团队的重要性,但在具体落实的时候往往安排一些毫无开发经验的行业新手去做测试工作,这常常导致测试效率低下,测试人员对测试工作索然无味。
    根据笔者的经验,测试团队应首先聘请一名资深的测试领域专家,他应具有极为丰富的同类项目软件测试经验,对软件开发过程中常见的缺陷或错误了然于胸;此外,他还具有较好的亲和力和人格魅力。其次,项目测试团队还具有很多具备一技之长的成员,如对某些自动化测试工具运用娴熟或能轻而易举地编写自动化测试脚本等。
    另外,测试团队还应聘请一些兼职成员,如验证测试实施过程中,同行评审是最常使用的一种形式,这些同行专家就属于兼职测试团队成员的范畴。至于测试团队里里的测试新手,这部分人可以安排去从事交付验证或黑盒测试之类的


    6、测试同化现象是什么?
    同化现象是指随着时间的推移,开发人员会逐渐影响测试人员的思维和对缺陷的判断能力,尤其是针对同一产品,同一组开发人员和同一组测试人员共同配合了很长时间,很多本来是缺陷的问题,由于测试人员对软件“习惯成自然”的使用,会不被当成缺陷,尤其是在开发人员的解释和说服下。同化现象发生可能意味着“恶性循环”的开始:测试人员会帮着开发人员解释一个个缺陷的合理性,一轮有一轮的测试都不会发现问题。
    招聘新的人员,不同的测试项目组轮换去测试不同的产品,就可以避免。同时建议产品可以发布测试版,更多的人对其进行测试,就可以发现更多的问题。


    7、测试工程师如何避免定位效应?
    社会心理学家曾作过一个试验:在召集会议时先让人们自由选择位子,之后到室外休息片刻再进入室内入座,如此五至六次,发现大多数人都选择他们第一次坐过的位子。这种现象称为定位效应,说明人们习惯上凡是自己认定的,人们大都不想轻易改变它。
    定位效应在开发人员和测试人员身上都有体现。例如开发工程师针对某一自己写的功能,经常进行代码移植,这种复制的“功能”,由于上一次经过调试,在新的地方往往不会认真调试,这些代码往往会带来共享变量冲突等许多种类型的缺陷。
    定位效应体现在测试人员身上就是测试过的功能不再进行认真测试:在回归测试时,之前由于进行过认真的测试,往往会认为某些功能是可靠,只要验证一些以前发现的缺陷是否修改完成就可以了。这种现象在反复多次回归时表现的更加突出,因为回归测试中很多功能都会进行多次反复测试。众所周知,开发人员在修改缺陷时往往会引入新的缺陷,测试人员的疏于防范就会把这些缺陷带到用户这里。
    解决这种问题的方案一般有两个:
    (1)完整的执行测试用例:这种方法投入较大,但是在开发产品时最好在最后一次回归测试时测试的执行一次全部的测试用例。
    (2)交叉测试:测试人员交叉测试,就可以很大程度的避免定位效应。测试工程师在回归测试时互相交换任务,反复测试某一功能的机会大大减少,从而也就不会“主观的”人员某些功能没有缺陷。
    通常上面的两个方法都是结合使用的,既要进行交叉测试,又要全面执行测试用例,测试覆盖面要尽可能的广泛。


    8、测试人员忽然辞职怎么办?
    目前IT行业人员流动较大已经成为一种不争的事实,员工的辞职大多数都会给组织带来一定的影响,而这种影响基本是不可能避免的。在测试领域,员工忽然辞职也会带来很大的负面影响,尤其测试队伍规模较小时。面对这种情况,我们所能做的,就是如何最大限度的降低这种影响。
    根据作者的经验,主要有两种方法:第一种是在测试人员内部建立一个良好的学习环境,大家互相学习,这样某些特有技术不会被某一个人所掌握,而互相学习和提高自身,也是大多数成员愿意做的;第二种就是在组织中进行知识管理,把技术作为知识沉淀下来,这样新的员工在接手工作时容易上手,通过学习快速适应环境。
    此外,日常还要注意工作规范化,例如形成尽可能多的文档,都可以降低员工离职带来的损失。


    9、测试人员工作发生问题测试经理应该如何做?
    测试人员工作发生问题是测试经理经常要面对的问题,作为测试部门的领导,首先要做的是指出测试人员所犯的错误,使其尽快改正错误。
    唯一不能做的就是盯着下属的错误不放。总盯着下属的失误,是一个领导者的最大失误。英国行为学家波特说:当遭受许多批评时,下级往往只记住开头的一些,其余就不听了,因为他们忙于思索论据来反驳开头的批评。身为测试经理要根据测试人员的心理来进行指导,最大限度的调动每个人员的积极性来参加工作。


    10、不深入到具体测试工作时,测试经理如何考核员工?
    这种现象在测试规模较大的组织中很常见。测试经理应该尽可能的安排每周与每个成员在不被打扰的环境下进行谈话,这样可以尽早发现和解决很多问题。
    最为一个测试经理,主要工作之一就是定期的评定组织做了些什么并且是怎样做的。同时还要为员工做一个报告——关于充分了解测试人员正在做什么和怎样做的报告,以此来给测试人员做做工作成绩考核。这份报告要了解到每个人的动态。
    测试经理和每个员工重点是谈谈目前的工作,例如大家在工作中的问题或意见;是否需要帮助等。许多管理者经常抱怨没有时间在一周会见每一个员工来谈他们的工作。但是根据作者的经验,如果不能安排时间和员工进行每周的谈话,员工会来打扰测试经理的工作,因为员工很多问题还要要来找测试经理商议。
    同时对待员工要用他们能接受的方式,而不是我们自己可以接受的方式。“己之不予,勿施于人”,这条黄金法则可能会对许多生活中的纯粹的社交因素有效,但是并不是总对工作有用。有效率的管理者知道应该逐渐了解每一个员工需要怎样的对待方式。
    总之,只有尽可能多的和员工接触,才能更精确的进行考核。


    11、测试经理如何面对加班问题?
    大多数情况下,作者是不主张加班的。当员工每周工作超过40个小时的时候,他们开始在工作的时候关心自己的事。他们花钱,会给很久没有联系的人打电话,因为员工们一直都在工作。员工不能在太疲劳的状态下完成工作,这是因为他们在工作时不能关心自己,这种情况下通常效率很低。
    测试管理工作的重要任务之一就是要创造一个环境,让员工在工作时间内完成工作,同时还要鼓励他们每周不要超过40小时,甚至可以基于他们在40个小时能够完成的工作量给他们酬劳。通常情况下这样做能够提升创造力,从而会逐渐提高效率。
    测试工作本身的一个突出特点就是不断重复枯燥、冗长的测试,如果在疲劳状态下,很有可能精力不集中,略过一些重要的测试环节。而且有的时候测试需要编写测试驱动程序,这种情况更需要较好的状态来工作。


    12、测试管理者如何面对自己的错误?
    每个人都会犯错。我们可能会因为忘记开会而使客户发怒,承认自己犯错是一件尴尬的事情,尤其是管理人员认为对自己负责的项目小组承认犯错可能会失去尊严。如果我们不是经常犯错,承认错误的时候其实能够赢得尊敬。例如我们忘记一次会议,然后为此向同事或者客户道歉,其他的人会理解我们的。
    不管做了什么,不要否认或故意忽略自己的失误。故意忽略不会让错误消失,这只会让错误成长为怪物。


    13、为什么计划定期的培训?
    测试工作和开发工作一样,不但要面对日新月异的新技术,还要学习相关系统的领域知识。只有在不断的学习中,才能做好工作,跟上行业的发展。如果测试管理者没有基于不断的变化而培训员工,就会给组织带来一定的损失。日常培训可以是关于特定项目或者是技术,通常采用下面几种方法:
    (1)测试部门内自由交流方式的培训。这种培训的交流比较随意,可以在周五的例会上进行交流,也可以大家一起坐在茶馆里进行交流。方法可以采用“头脑风暴法”,让每个组员讨论一个特定的领域,这种交流方法特别对同时要做很多不同项目的小组比较有益处。当每个人做不同的项目,这会有助于每个人了解你小组所有的工程。
    (2)跨部门的互相学习。测试工作需要很多领域以及技术知识,这些知识单靠自学是远远不够的。和其它部门的同事进行交流是一个相当好的办法,大家在工作中可以在技术等各个方面互相得到提高。
    (3)外部培训。外部培训尽管投入较高,但也是值得的。这些专家一般在自己的领域非常精通,可以快速提高整个测试团队的水平。也可以通过测试小组介绍一些朋友来进行培训,这种方式可以降低成本。
    培训是构造学习型组织的基本条件,也是提高员工水平的重要方法。经常的定期培训,可以增强组织凝聚力,使员工更加愿意长期留在组织中发展。做为测试负责人,定期的进行培训是十分必要的。


    14、时间上不允许进行全部测试,测试负责人应该如何做?
    这个问题也许十分可笑,可是现实中我们的测试经理们却不得不面对这个问题。这里的全部测试不是指对软件进行遍历测试,而是指测试负责人制定的测试计划包含的全部测试内容。
    通常,不管是开发产品还是做具体的项目,都会发生耽误进度的情况。一旦整体进度不能向后延迟,项目相关人员习惯上的做法就是缩减测试时间。尤其在功能还没有开发完成的情况下,这种现象更为突出。
    担负着质量重任的测试经理,如何来解决这个问题呢?比较好的做法是按照下面的步骤逐步来完成和改进工作:
    (1)按照测试任务的轻重缓急,尽最大努力完成测试任务。在时间不足的情况下,我们应该对测试任务按照优先级来划分,重要紧急的任务先完成。这个时候的测试任务是一种辅助性工作,其目的就是尽最大努力来提高质量。因此,面对这种情况,测试负责人要做的就是带领测试小组充分利用所有资源来保证质量。
    (2)在实际工作中和开发人员共同配合,逐步改进工作。只有整个团队的软件开发能力提高了,才能从根源上解决问题。因此,测试负责人要带领团队和开发小组共同寻找适合自己的开发模式,从而使项目规划的更加合理,进而按照预定计划来开展测试工作。
    总之,在任何情况下,测试负责人都不应该抱怨。只有积极的面对问题,才能更好的解决问题。


    15、公司不重视测试,测试负责人如何开展测试工作?
    目前国内的软件公司不重视测试仍然是一种普遍现象。尽管很多公司在意识上已经开始重视测试,但是在具体工作中,往往由于追赶进度、节省资源等方面原因而忽略测试工作。在这种情况下,测试负责人仍要对软件质量负主要责任。在这种环境下,测试负责人应该如何开展工作呢?
    首先,要主动去配合开发人员完成工作。尤其是不能抱怨环境,在任何情况下抱怨是不能解决问题的,只能加重矛盾的激化。在此基础上,逐渐显出测试工作的重要性,然后再逐步健全测试体系。
    其次,用实际行动来证明测试工作的重要性。只有测试工作的业绩逐步表现出来,人们才会真正的注意到测试的重要性。因此,测试负责人从点滴开始做起,才能逐步做好测试工作。
    要想做好软件,把开发的软件产品形成商品,测试工作必须和开发一样重视。否则,质量不好的产品,很快会被市场淘汰的。现代的软件规模越来越大,测试工作也会越来越重要,因此测试负责人只要坚持做好工作,可发挥作用的空间会越来越大。
    最后要说的是,如果真的是在一个没有希望的团队里,测试负责人可以考虑辞职。辞职也是一个不错的选择,到新的环境去发挥自己的能力,要比长时间的怀着“郁闷”的心情去工作好的多。


    16、测试管理者需要是技术专家吗?
    测试管理者在测试项目中的主要任务是制定测试策略,管理测试计划的落实情况,并且还要为测试项目的进行创造良好的执行环境。同时还要调动员工的创造性,对员工的工作作出评估。这些工作不一定要求测试管理者达到专家的水平。
    但是在实际工作中,由于测试人员的短缺,测试管理者常常做为测试员来执行具体的测试任务。尤其在规模较小的测试团队,测试管理者的日常工作通常以具体的测试执行工作为主,这个时候更需要测试管理者有较好的背景知识。
    总体说来,技术方面的背景知识对测试管理者是十分有益的。例如:分配工作任务、做进度预算,以及一些具体的执行工作,都需要一定的背景知识。当然,做为一个测试管理者,没有必要精通所有的技术,那也是办不到的。测试管理者做到正确的帮助员工最好地完成工作,并且提供最好的完成工作的环境就可以了。

Open Toolbar