努力的去做好一件事,那也许就叫做成功^_^

发布新日志

  • 测试转开发

    2007-09-20 15:53:30

       

       工作快半年了,毕业快三个月了,做测试也快半年了,在这半年的测试生活里,感觉不好也不坏,日子就那样过,没有感觉,收获也不大,现在的能力是:可以写功能测试用例,可以做黑盒测试,知道了测试流程.

       个人体会是学不到什么东西,感觉做测试没什么意思,是重复了再重复,工作就是一个水平面,公司的测试流程是混乱的,有的时候竟然是更新一个bug后,也要换包!天啊,每天点鼠标.像个呆子!就象黑盒测试的定义一样,你不需要知道软件的内部结构,我们只关心它能不能完成这个功能.每天打开网站,"什么测试职业的前途,没有技术含量,环境造成低人一等,测试人员的困惑!"我觉得特别的不便服.这种环境让我感觉压抑,我希望我刚工作就是这个样子,我有能力去改变.于是我决定转开发!

       当然,上面我讲的有可能太过于偏激,但是那确实是我的工作感受.我想测试工程师要求其实还是挺高的,要站得比开发人员更高.在测试的过程中我也学到不少的测试知识,方法,技巧,我想如果我转测试的话,一定会做的更好,写出更优秀的代码.也许以后我会再杀回来呢,呵呵,来个回马枪!

     

      

      

  • java中的Object()类的一点认识.

    2007-09-20 12:08:01

    先讲一下:Object类,它是java中所有类的直接或者间接类的父类,是类库中所有类的父类,所以可以和任意类型的对象匹配.所以在有些场合可以使用它作为形式参数的类型.例如:equals()方法其形式参数就是一个object类型的对象.这样就可以保证任意java类都可以定义与自身对象直接相互比较的操作.在以下的例子中覆盖了equals()方法,example:

    class MyOkDate{

    int day,month,year;

    public MyOkDate(int i,int j,int k){

    day=i;

    month=j;

    year=k;

    }

    public boolean equals(Object obj){

    if(obj instanceof MyOkDate){

         MyOkDate m=(MyOkDate)obj;

         if(m.day==day&&m.month==month&&m.year==year)

         return true;

    }

    return false;

    }}

  • 内部类与匿名类

    2007-09-19 14:27:59

    Inner Class AND Anonymous Class

    内部类是定义在其他类中的类,主要作用是将逻辑上相关联的类放到一起.而匿名类是一种特殊的内部类,它没有类名,在定义类的时候就生成该对象的一个实例.由于在其他类中不会用到该类,所以不要取名字.

    在封装它的类的内部使用内部类,与普通类的使用方式相同,在其他地方使用内部类时,类名前要冠以外部类的名字才能使用,在用new创建内部类的时候,也要在new前面冠以对象变量.如:Parcle是外部类,而Destination是内部类.则可以如下方法使用内部类.

    Parcle p=new Parcle();

    Parcle.Destination d=p.new Destination("Hawaii");

    内部类与类中的域,方法一样是外部类的成员,所以在内部类中可以直接访问外部类的其他域及方法,即使它们是private的,这也是使用内部类的一个好处.如果内部类中与外部类有同名的域或者是方法,可以使用冠以外部类名.this来访问外部类中的同名成员.

    使用方法中的内部类要注意如下几点:

    1.同局部变量一样,方法中的内部类前面不能用public,private,protected,static,但可以用final and abstract.2.方法中的内部类,可以访问外部类的成员;若是static 方法中的内部类可以访问外部类的static成员.3.方法中的内部类不能访问方法的局部变量,除非是final的局部变量.4.方法中定义的内部类,在其他地方使用时,没有类的名字,正像上面的例子中一样,只能用其父类来引用这样的变量(例中用Object)

     例:Object ōbj=new Outer().makeTheInner(47);

     

  • java基本概念的理解

    2007-09-19 13:20:08

    1. 通常,在一个类中定义一个方法为static,那就是说,无需本类的对象也可调用 

    此方法.
     调用一个静态方法就是"类名.方法名"
     静态方法常常为应用程序中的其它类提供一些实用工具所用,在Java的类库中 

     大量的静态方法正是出于此目的而定义的
      例:class Simple{
     static void go(){
     System.out.println("Go go");
     }
     public static void main(String args[])
     Simple.go();
     }
    2. 静态变量
     
       静态变量与静态方法类似。所有此类实例共享此静态变量,也就是说在类装载

    时,只分配一块存储空间,所有此类的对象都可以操控此块存储空间,当然对于final

    则另当别论了。static 变量有点类似于C中的全局变量.
    看下面这段代码:
    3.域变量和局部变量:
      从语法形式上看域变量属于类或者是接口,而局部变量是在方法中定义的变量或者是

    方法参变量.域变量可以被public ,private,protected,static 等词修饰.而局部变量

    则不能被这些词修饰,但是域变量和局部变量都可以被final词修饰.
      从内存的存储形式上来看,域变量是对象的一部分,而对象是存在于堆中的.但是局部

    变量却是存在于栈中的.
      从变量在内存中的存在的时间上看,域变量是对象的一部分随着对象的创建而被创建,

    而局部变量则随着方法的调用而产生,随着方法调用的结束而自动消失.
      域变量如果没有赋初值的话,会自动以该类型的默认值(0,false,null等)来赋值.当然

    也有例外,被final修饰但是又没有被static修饰的域变量必须显式的赋值.而局部变量

    必须显式的被赋.
    例:class LocalVarAndMemberVar{
    int a ;
    void m(){
    int b;
    System.out.println(a);//a 被赋为0;
    System.out.println(b);//编译不能通过;
    }
    }
    4.参数的传递:JAVA遵循的是值传递.也就是说,当调用一个方法时,是将表达式的值复制

    给形式参数.
    5.与变量的传递一样,方法的返回值可以是基本类型也可以是引用类型.
      如果一个方法返回的是一个引用类型,由于引用类型是一个引用,所以它可以存储对象

    的实体.
      例:Object GetNewObject(){
    Object ōbj=new Object();
    return obj;
    }在引用方法时候可以这样用,Object p=GetNewObject();
      由于JAVA中所有的东西都是引用(句柄),所以只需要做简单的传递或者返回引用即可.
    7.所谓多态是指一个程序中相同的名字表示不同的含义.
      简单情况下,可以通过子类对父类方法的覆盖(override)实现多态.也可以利用重载在

    同一个类中定义多个同名的不同方法.面向对象的程序中,多态还有更深刻的含义,就是

    动态的绑定(dynamic binding),称为虚方法调用.它能够使对象所编写的程序,不用做修

    改就可适应于其他所有的子类,如在调用方法时,程序会正确的调用子对象的方法.
    8.上溯造型
      类似于基本数据类型数据之间的强制类型转换,存在继承关系的父类对象引用和子类

    对象引用之间也可以在一定条件下相互转换.但须注意以下的原则::
    (1).子类对象可以被视为父类的一个对象,如一个student对象也可以是一个person对象
    (2).父类对象不能被当做某一子类对象.
    (3).如果一个方法的形式参数被定义的是父类对象,那么调用这个方法时,可以使用子类

        对象做为实参.
    (4).如果父类对象引用指向的实际上是一个子类对象,那么这个父类对象的引用 可以强

       制转换成子类对象的引用.
    把派生类型当作它的基本类型处理的过程,又称(upcasting)
      如果一个方法声明成final,它能防止覆盖该方法同时告诉编译器不需要动态的绑定.
      如果一个方法是static或private,它不能被子类所覆盖,自然也是final的,不存在虚 

    方法.

  • 国税项目---结束收获总结;

    2007-09-13 14:34:04

       最近公司做了一个小项目,是给国税做的,国税执法系统.这个星期就要结束了,想谈一谈刚踏入测试门所做的第一个项目的收获.小结一下:

    1.这个项目是由我们新来的几个人做的,我和一个同事学着配置了测试服务器,ORACLE+TOMCAT;由于以前没有装过ORACLE所以不知道是什么一种情况,就连象新建数据库这样的东西都不知道是怎么搞的,颇废了一番的周折.从中学习到ORACLE中的IMP/EXP命令的使用,例:exp zffzxt/kjlink@zffzxt2 file=d:\1.dmp;测试服务器的配置.不过还是不够深,要继续学习.

    2.在测试的过程中,特别是对数据库的操作中,如果数据库有重复的数据,比如讲某一个键值重复或者为空的话,可能会导致报错,当然注重逻辑顺序的操作能够发现很多的BUG,也就是说尽量的多设计几个测试的顺序流,然后按照这个流程去走.

    不想讲了,下次再写吧!

  • java中的static的理解;

    2007-09-12 17:50:35

    static:

    用static修饰符修饰的域仅属于类的静态域,又移称为静态量,类域,类变量.不用它修饰的域称为实例变量和实例域.

    静态域的本质特点是:它们的类域不属于任何一个类的具体对象实例.它不保存在某个对象实例的内存空间内,而是保存在类的内存区域的公共存储单元.也就是说静态域是一个公共的存储单元.任何一个类的对象访问它,取到的都是相同的数值,同样任何一个类去修改它,也都是对同一个内存进行操作.

    用static 修饰的方法仅属于类的静态方法,又称类方法.不用它修饰的为实例方法.

    声明一个方法为static有以下的意义;

    1.非static修饰的方法是属于某个对象的方法,在这个对象被创建,对象的方法在内存中拥有自己专用的代码段,而static方法属于整个类,它在内存中的代码段随着类的定义而进行分配和装载,不被任何一个对象所占有.

    2.由于static方法属于整个类,所以它不能操纵和处理属于某个对象的成员变量,而只能操作属于整个类的成员变量,即或static方法只能处理static域或者是static方法,.

    3.类方法中不能访问实例变量.在类方法中不能使用this 和super.

    4.调用这个方法的时候可以使用类名直接调用,也可以用某个具体的对象名.

    注:不能在类的方法中去存取实例变量.但是可以在实例方法中去存取类域.

    从类成员的特性可以看出,可用static来定义全局变量和全局方法.

    final:

    如果一个类被final修饰或者是限定的话,说明这个类不能被继承,也就是说不可能有子类.

    用它来修饰的类一般为了完成固定功能或是某种标准功能.用final修饰的方法不能被覆盖.

    一个域被static final修饰符所限定的话,它实际的含意也就是常量.

    synchronized:

    如果synchronized修饰的方法是一个类方法(即static方法),那么在被调用执行前,将把系统类Class中对应的当前类的对象加锁.如果修饰的是一个对象方法(未用static修饰),则这个方法在被调用执行前,将把当前的对象加锁,多用于多线程共存的程序中的协调与同步.

  • java学习之Calendar类的使用

    2007-09-11 17:04:31

      最近在学习java中的Calendar类的使用,感觉有点收获.一边看项目的代码一边学习JAVA感觉挺好的.

    不过里面有好多不懂的东西,里面还有HTML方面的东西.呵呵,碰到不懂就上网查查!

    明天看ZB8的代码,看看一下关于JAVA里面的工具类,ArrayList,Hashmap,map.

     就应该这样子,前几天没事做感觉好空虚,整天的没有收获,就像是在混日子,今天感觉好多了!

    希望自己加油.

     

     

  • 两个月的测试生活和收获

    2007-09-07 17:51:04

       上班快两个月了,感觉没学到什么东西.感觉公司的测试流程相当的混乱,软件产品出来只是做了功能方面的测试,看一看功能能不能执行,流程能不能走得通就行了.什么性能方面的测试也不做靠感觉.呵呵

    感觉有点无聊,来了个新包就要重复原来的动做,拜托能不能用一下ROBOT之类的软件进行一下回归测试.可是公司没有人会啊!感觉现在会工具的高手现在还没有见到过,只是在网上看到几个N人在讲,不过他们讲的我大多都不懂,很想学习,觉得有前途.

    编程能力不是太强,好好学,方向是java ,比较的感兴趣.最近没事就拿我们测试的这个项目的源代码来看看,还真能看得的懂,只不过如果让编起来可能就太困难了,还有就是对j2ee的整体构架不是太清楚.

    学了点关于oracle方面的东西.以前以为多么深奥的东西,其实数据库都是一样的东西,不过oracle的测试服务器还真的很难搭建.搞了好长时间没弄好,找开发帮弄的,也不知道为什么.想研究一下.

    还有最近回去没事,玩起了单机版的 游戏:大航海时代,呵呵,觉得挺好玩.一定程度的影响了自己学习java的时间.

    好了,一个星期又快要过去了,感觉时间真的很快呀,

    现在回头看了一下全文一点逻辑都没有,讲出来也挺开心,在写的过程中总结了这段时间的收获,不错对以后的工作和学习都有好处.希望以后要坚持!

    祝看到我的贴子的测试朋友,天天 开心,享受测试的快乐!

     

     

     

  • java 中this 的理解;

    2007-08-28 17:25:19

    自学java 也有一段时间了,可是对java中的this关键字总是理解的不是那么产透.也许以前看的都是些理论的东西没有看到更多的实例.今天没事在网上搜了一下,发现一个例子能够清楚的说明一切,拿出来分享一下?

    this应用的最普遍的情况就是,在你的方法中的某个形参名与当前对象的某个成员有相同的名字,这时为了不至于混淆,你便需要明确使用this关键字来指明你要使用某个成员,使用方法是“this.成员名”,而不带this的那个便是形参。另外,还可以用“this.方法名”来引用当前对象的某个方法,但这时this就不是必须的了,你可以直接用方法名来访问那个方法,编译器会知道你要调用的是那一个。下面的代码演示了上面的用法:

    this也即是当前的对象.

    public class DemoThis{
    private String name;
    private int age;
    DemoThis(String name,int age){
    setName(name); //你可以加上this来调用方法,像这样:this.setName(name);但这并不是必须的
    setAge(age);
    this.print();
    }
    public void setName(String name){
    this.name=name;//此处必须指明你要引用成员变量
    }
    public void setAge(int age){
    this.age=age;
    }
    public void print(){
    System.out.println("Name="+name+" Age="+age);//在此行中并不需要用this,因为没有会导致混淆的东西
    }
    public static void main(String[] args){
    DemoThis dt=new DemoThis("Kevin","22");
    }
    }

  • java环境变量的配置

    2007-08-15 17:23:44

    假如你安装的JDK的路径是:D:\jdk1.5.0_06

    则你可以像如下配置,在我的电脑--》属性--》高级--》环境变量

    新建几个变量:classpath,java_base,java_home,path;

    则各个变量的值如下所示。

    CLASSPATH:
    .;%JAVA_HOME%\lib\tools.jar;
    JAVA_BASE
    D:\jdk1.5.0_06
    JAVA_HOME
    D:\jdk1.5.0_06
    path
    %JAVA_HOME%\bin;D:\jre1.5.0_06\lib\javaws.jar;

  • 跟踪的bug,bug的状态

    2007-08-15 16:55:09

     跟踪bug 报告类型

     

    为了帮助我们更好的跟踪bug,分析bug,为以后的项目总结经验,我们在TD里增加了QA Tracking,并定义了4个选择值:

    Ø  New Discovery表示这个bug是新发现的,这就意味着这个bug一直存在,但是QA在之前的测试中没有发现

    Ø  New Feature introduction: 表示这个bug是因为新功能的改动而引起的

    Ø  Regression 表示这个bug不存在以前的测试版本或build,但是存在当前测试的版本或build

    Ø  Undefined:  如果我们不能确定是否是上面的3种情况的,请选择这项,但是我们要尽量少选这个.

     

     Bug 状态

      只有Closed 才是bug的最后状态,当前我们有7种状态,每种状态的意思为:

     

    Ø        New: 这是一个bug的初始状态,我们所有的新发现的bug,其状态都是New

    Ø        Open: 项目负责人或者资深的人员review 所有的New bug后,认为bug是有效的话,将bug的状态从New改为Open.

    Ø        Fixed: 开发人员把相应的代码修正后,并通过了单元测试,将对应的bug状态改为Fixed, 并加一定的注释.

    Ø        Closed: QA人员拿到新的测试版本后,验证Fixed bug,确实不存在的,把bug的状态改为Closed.并要加注释

    Ø        Rejected: 开发人员认为这个Bug是无效的,将会把bug的状态改为Rejected,这种状态不是最后的状态,QA人员要仔细的分析,如果真的是无效的,那么需要将其状态改为closed;否则改为Reopen

    Ø        Reopen: QA验证Fixed/Rejected bugs后,bug仍然存在或者有效的,将其状态改为Reopen

    Ø        Deferred: 这是新增加的一种状态,其目的避免开发人员将一些设计的问题改为Rejected状态;当前,一些设计需求已经确定,但是一些设计确实存在不合理的地方,而因为项目周期的原因,当前项目无法做需求上的改动,所以只有在下个版本了做Fixed,我们将会把这些bug放到下个版本里fixed.

     

      Bug fixed/closed/Rejected/Deferred 的注释

     

    为了保证QA能够精确的估算因为fixed bug而要测试的范围,开发在fixed bug时候,必须增加注释,包括解决方案,修改的文件名, 同样,开发在原代码中,也必须增加一个注释,表明这个代码改动的原因(fixed bug还是新的需求). QA验证一个fixed bug后,无论是re-open 还是closed,都要加个注释,表明在那个版本里或者build里验证的.

    同样,开发人员在把一个bug的状态改为Rejected or Deferred的时候,也必须加足够的说明,如果没有任何的说明,QA将会直接的把这些bug改为Reopen状态.

  • bug的定义级别

    2007-08-15 16:50:51

    1.  Bug 级别定义:

    Ø  Urgent 致命错误,造成系统或应用程序崩溃(Crash),死机,数据库死锁等使程序无法正常运行下去的缺陷

    Ø  Very High: 严重错误,指功能或特性没有实现,整个模块或大功能不工作的,影响大量的案例不能执行的, 严重的安全性问题

    Ø  High: 较大的问题,虽然不影响系统的使用,但没有很好地实现产品的功能,或者功能的实现和需求不符合, 没有达到预期效果,或用户界面差、操作时间长,一些大的逻辑性问题,主要页面的拼写错误等一些问题,一般的安全性问题

    Ø  Medium: 界面中的会影响用户使用方便性的错误,如滚动条无效,鼠标(光标)定位错误,光标跳转设置不好,提示信息不精确, 可编辑区和不可编辑区不明显等错误;

    Ø  Low: 不明显的对齐问题、非主要页面的个别的拼错等一些小问题,或者建议程序做适当的修改,来改善程序.

     

    正常的项目发布之前,我们必须要求fixed 所有medium及以上的bug, 至少要fixed 所有High级别以上的bug.

     

  • 态度决定你的“薪”情

    2007-08-15 10:53:35

     我的同事C,也是我的好朋友,跳槽去了一个正在迅速发展的IT公司,年薪翻了一倍。而他,从准备找工作到工作敲定,仅仅一周。二十万的年薪,在IT行业,对于不到五年工作经验的人来说,是一个很不错的收入了,我的同事自然也很开心很满足。我的其他同事,还有我的朋友,听说后,都非常羡慕,觉得他的运气很好。我也觉得他的运气不错,但除了运气外,我更多地觉得,他具备了这样的实力,所以当机会来了,自然就是他的了。我也会觉得,他的实力,源于他的态度,源于他一点一滴的积累与提升。
      

      在与C合作的两年多的时间,我们的合作非常愉快,虽然存在异议,但是所有的争议都是为了把工作做得更好。我们的第一次合作,是一个短信过滤模块,产品出来后,是一个初步的原型,根据我对SMS的理解、业务的需求和维护方便,给他提了很多不错的建议,对于我所提的建议,他没像其他开发那样讨价还价,几天之后又交给我一个比较完美的产品。

      对产品的测试,我非常挑剔,不满足于简单的需求,在产品满足了功能需求后,继续进行了深入的测试、改进和性能调优;产品试行后,继续跟进产品在实际环境的运行情况,对产品进行二次完善,所有的这个过程,C都非常配合,力求完美,毫无怨言。最终,他开发的这个产品,是我们SMS系统中,功能最完善、故障最少的产品。如果当初,没有他积极的配合,也许,这个产品也像其他的产品一样,只是一个普通的模块,我再努力也是徒劳。
      

      在05年春节,我们的P2P系统出现了很大的故障,故障的原因无法定位也无法重现,当时整个团队都承受了很大的压力,我自己也在想方设法定位问题解决问题。那段时间,C给了我非常大的帮助,我们在一起讨论问题可能产生的原因,在交换各自的见解,每有一个新的想法就测试问题是否重现,同时配合代码白盒检查,将问题一个个地解决。我们都很清楚,这些隐藏的问题,仅仅靠一个开发或测试是很难定位的,需要的是一个配合良好的团队的努力。在后来的性能调优中,我提了很多建议,别的开发都没时间去做优化,是C主动接过了别人负责的模块,积极地配合我对P2P进行了长达两个月的性能调优与隐患挖掘,P2P最终成了一个从05年底到现在都无任何来自于软件的故障。现在再翻开我们合作完成的P2P性能调优报告,整整50页,每个改进都密密麻麻地写满了我们各自的原因追踪、改进建议和结果分析,现在再看,我自己还会感动。我想,这样的工作态度,是成就了他年薪翻倍的主要原因。
      

      在他刚进入公司的时候,回复bug也跟其他同事那样只是简单地写上“fixed”或“ok”,我对他说:“回复bug的时候,最好能够写上产生bug的原因、解决的方法、升级的步骤以及这个改动引起哪些变动,方便测试进行模块升级和问题跟踪,也方便以后维护管理。”从此以后,他所有的bug回复都非常详细、专业。但,我其他的同事,同样的话我重复了N次,部门经理也发邮件要求大家去遵循,但是没几个同事能够像C那样自觉、认真的地回复,也没几个同事可以坚持两年多来一直都是那样认真地回复每个bug。我想,这就是人与人之间的差距,从这么一件简单的事情上,可以看到不同的人的工作态度。我们在羡慕别人得到了好机会的青睐,以为这只是运气,但事实上,运气的背后,是他的付出。

      现在,当我们再回头查看两年前C所负责的bug,对于每一个问题,都可以从他的回复中看出当初问题产生的原因以及解决方法,对于公司来说,这无疑是一笔财富。我的这个同事,并不是一个非常聪明的人,也不是一个很能说会道的人,却是一个勤奋、认真的人,也是一个知道自己要的是什么的人。在项目不紧张的时候,他会主动去研究公司的核心产品,尽管那不是他所负责的,但他的主动为他积累了基础,也为他积累了机会;他甚至还会去学习与IT毫不相干的法律,为了维护自己的合法权益。他知道上班时间,也知道下班时间,上班的时候全部投入认真工作,但下班之后就很难得在公司找到他的影子。因为他觉得,下班了,就是自己的时间了,应该回家跟家里人一起分享。我非常欣赏他的这样的一种工作状态,也非常欣赏他的生活态度。公司的人才保留机制做得不好,他来公司两年工资的提高并不是很大,但他还是坚持以学习的态度认真做好他的工作,当他所负责的项目接近了尾声,他觉得自己的努力付出并没有得到相应的回报,所以决定离开。他知道自己的英文口语并不太好,没有像我那样一心坚持进管理完善的外企;因为决定了要离开,他也不像别人那样,边工作边找工作;他看中了一间正在迅速发展的公司,请了10天的年假,开始了他的应聘之路,而他也真的幸运,一周不到,就收到了他想去的公司的offer,当然,最令人兴奋的是他想去的公司满足了他二十万年薪的要求。


      同事C去新的公司上班将近一个月了,我的其他同事和朋友说起他新的工作,仍然羡慕不已,但我会觉得,这不仅仅是因为他的运气,而是因为在过去的几年中,他努力的付出、认真的学习、塌实的工作,当然,更重要的是他清楚自己需要什么,也努力去争取自己想要的。我的身边,很多人都会在抱怨自己工资不高,也有很多人抱怨自己没有机会,但是,他们很少在自己的身上去找原因,只是将一切归于运气。我很想对他们说,你是否觉得C的运气很好?那你是否也像C那样在好运降临之前主动、认真、塌实地做好每一件事情?


      其实,机会,并不是天上掉下来的馅饼,而是抓住机会的本事。当你历练出了抓住机会的本事,好运自然降临。

  • 测试人员应该如何报bug【转】

    2007-08-15 10:48:19

       首先,确保你所发现的问题是确实是一个bug,不要出现因为测试人员操作错误或配置错误所引起的“bug”,这样会降低你在开发人员心中的可信度。在测试的时候,如果发现测试的实际结果与预期测试结果不符时,不要着急马上报bug,先想想为什么会出现错误。作为专业的测试人员,应该能够对出现的问题进行跟踪,确认了在配置、操作没有错误的前提下,通过追踪分析确认所测试的业务流程确实是存在bug,并能大概对bug的产生原因进行定位。测试人员,需要做到专业,尽量少给开发找麻烦,不要制造实际上并不存在的bug。
        确认了所发现的问题是一个bug之后,按照测试步骤再执行一次,确保bug是可重现的而不是随机的。如果bug不能重现,应该尽量找到bug重现的规律,在一些比较难重现的问题可以找开发配合一起查找原因,如果还是无法重现则需要在bug report中对出现的问题描述清楚并说明出现的随机性。
        接下来就是填写bug report了,在填写bug report的时候,最重要的是bug的标题和bug描述。在bug报告中,首先用一句话对bug进行简要精确的描述作为bug的标题,让开发或项目经理一看就知道存在什么问题,比如“XX模块在压力测试2小时后出现内存泄露”。而在bug的描述中,需要使用简明准确的语言描写出现bug的测试步骤、实际的测试结果、预期的测试结果和结论;也就是说描述导致出现bug的操作步骤是怎样,由测试步骤所做的操作引起的测试结果是什么,而预期的结果应该是怎样,并由实际结果与预期结果相对比说明问题所在。比如:“在管理网页新增用户,当新增的用户登录名名称很长(例如登录名长度为输入框允许的最大长度),按‘新增’按纽新增后系统提示已经有该用户存在,而事实上该用户并不存在,建议对超长的用户名进行处理。”
        在测试人员发现了一个已隔离的,可重现的问题后,应该对问题进行归纳。同一个问题是否出现在其他的模块或其他的流程?同一个故障是否会引起更加严重的问题?如果存在,也需要提出来让开发一并处理。
        在开发对bug进行修改之后,测试需要报着怀疑的态度认真地对问题进行验证,需要严格按照测试步骤来进行测试,检查开发是否已经正确修改了所出现的问题,以及开发对bug进行了修复之后是否会引进新的问题。不要相信开发说“已经修改好了,肯定没问题了”就不对问题进行细致的检查了,如果开发修改得不彻底,问题仍然会存在的,或者可能会由于开发在修改bug的时候忽略了另一些细节导致了新bug的出现。尽量不要在关闭bug之后,才发现这个问题还没有修改彻底;也不要出现bug关闭之后,出现了新的bug。
        测试对bug进行验证确认已经修改ok之后,关闭bug。在关闭的时候,应该对Bug最终修改结果进行简要描述,如果bug的修改引起配置或数据库或业务流程的变更,也需要在bug关闭描述中进行说明。

数据统计

  • 访问量: 7921
  • 日志数: 15
  • 建立时间: 2007-08-15
  • 更新时间: 2007-09-26

RSS订阅

Open Toolbar