用最真诚的态度,和你分享生活

发布新日志

  • Tomcat

    2008-12-25 11:47:21

    在Tomcat安装目录下的bin子目录中,有一些批处理文件(以.bat作为后缀名的文件),其中的startup.bat就是启动Tomcat的脚本文件,用鼠标双击这个文件,你将看到一个窗口一闪而过,之后就什么也没有了,这说明Tomcat的启动出错了。

    单击Windows的【开始】菜单,选择【所有程序】→【附件】→【命令提示符】,打开“命令提示符”窗口,进入Tomcat的bin目录中,在“命令提示符”窗口中输入startup,你将看到如图1-9所示的画面。

     
    (点击查看大图)图1-9  运行Tomcat提示出错信息

    笔者以前碰到过很多学员,在初次运行Tomcat时,看到如图1-9所示的信息就不知所措了。有的学员以前还配置过Tomcat,但是再次使用的时候,由于忘记了上次是如何配置的,同样感觉无从下手。

    我们在学习软件开发时,一定要养成查看错误提示信息,进而根据错误提示解决问题的良好习惯。笔者第一次配置Tomcat时,就是根据错误提示信息一步一步配置成功的。当看到错误信息时,首先不要慌张和无所适从,要仔细看清楚错误提示,弄明白错误的原因。

    图1-9中的错误提示信息,已经很明确地告诉你了错误的原因。我们看图1-9中的错误信息,如下所示:

    Neither the JAVA_HOME nor the JRE_HOME environment variable is defined
    At least one of these environment variable is needed to run this program

    这个错误信息是告诉你要配置JAVA_HOME或者JRE_HOME环境变量,以便Tomcat能够找到JDK或JRE的安装目录。从环境变量的名字,我们可以猜测到JAVA_HOME是配置JDK的安装目录,JRE_HOME是配置JRE的安装目录。

    由于Tomcat 6.x不再需要JDK的支持,所以才新增了JRE_HOME环境变量,对于6.0之前的Tomcat版本,没有JRE_HOME环境变量,只能配置JAVA_HOME环境变量。

    下面,我们在Windows XP Service Pack 2操作系统下设置JAVA_HOME环境变量,步骤如下。

    ① 右键单击“我的电脑”,选择【属性】,出现如图1-10所示的画面。

    ② 单击“高级”选项卡,选择“环境变量(N)”,如图1-11和图1-12所示。

    ③ 在“系统变量”下方单击“新建”按钮。在“变量名”中输入“JAVA_HOME”,在变量值中输入JDK所在的目录“D:\Java\jdk1.6.0_05”(读者可以根据自己机器上JDK的安装目录来修改这个值),然后单击“确定”按钮,如图1-13所示。


     
    (点击查看大图)图1-10 “我的电脑”属性

     
    (点击查看大图)图1-11 “高级”选项卡

    ④ 最后在“环境变量”对话框上单击“确定”按钮,结束JAVA_HOME环境变量的设置。

    我们再一次转到Tomcat的bin目录下,用鼠标双击startup.bat文件,可以看到如图1-14所示的启动信息。

    注意图1-14中圆角矩形框中的文本,可以看到启动的是Tomcat 6.0.16。

     
    (点击查看大图)图1-12 “环境变量”对话框

     
    图1-13  新建JAVA_HOME系统变量

     
    (点击查看大图)图1-14  Tomcat启动信息

    然后,打开浏览器,在地址栏中输入http://localhost:8080/(localhost表示本地机器,8080是Tomcat默认监听的端口号),将出现如图1-15所示的Tomcat页面。

     
    (点击查看大图)图1-15  Tomcat的默认主页

    注意图1-15中鼠标(小手形状)指向的链接——“Tomcat Documentation”,单击这个链接将进入Tomcat的文档页面,有关Tomcat的帮助信息可以在文档页面中找到;读者也可以直接访问Tomcat的文档,文档首页的位置是Tomcat安装目录下的webapps\docs\index.html。如果要关闭Tomcat服务器,可以用鼠标双击Tomcat bin目录下的shutdown.bat文件。

  • Java 程序编码命名规范

    2008-12-17 20:06:25

    Java 程序编码命名规范

    命名规范
    定义这个规范的目的是让项目中所有的文档都看起来像一个人写的,增加可读性,减少项目组中因为换人而带来的损失。(这些规范并不是一定要绝对遵守,但是一定要让程序有良好的可读性)


    Package 的命名
    Package 的名字应该都是由一个小写单词组成。
    Class 的命名
    Class 的名字必须由大写字母开头而其他字母都小写的单词组成
    Class 变量的命名
    变量的名字必须用一个小写字母开头。后面的单词用大写字母开头。
    Static Final 变量的命名
    Static Final 变量的名字应该都大写,并且指出完整含义。
    参数的命名
    参数的名字必须和变量的命名规范一致。
    数组的命名
    数组应该总是用下面的方式来命名:

    byte[] buffer;


    而不是:

    byte buffer[];



    方法的参数
    使用有意义的参数命名,如果可能的话,使用和要赋值的字段一样的名字:

    SetCounter(int size){
    this.size = size;
    }




    Java 文件样式
    所有的 Java(*.java) 文件都必须遵守如下的样式规则


    版权信息
    版权信息必须在 java 文件的开头,比如:

    /**
    * Copyright ® 2000 Shanghai XXX Co. Ltd.
    * All right reserved.
    */


    其他不需要出现在 javadoc 的信息也可以包含在这里。


    Package/Imports
    package 行要在 import 行之前,import 中标准的包名要在本地的包名之前,而且按照字母顺序排列。如果 import 行中包含了同一个包中的不同子目录,则应该用 * 来处理。

    package hotlava.net.stats;

    import java.io.*;
    import java.util.Observable;
    import hotlava.util.Application;


    这里 java.io.* 使用来代替InputStream and OutputStream 的。


    Class
    接下来的是类的注释,一般是用来解释类的。

    /**
    * A class representing a set of packet and byte counters
    * It is observable to allow it to be watched, but only
    * reports changes when the current set is complete
    */


    接下来是类定义,包含了在不同的行的 extends 和 implements

    public class CounterSet
    extends Observable
    implements Cloneable



    Class Fields
    接下来是类的成员变量:

    /**
    * Packet counters
    */
    protected int[] packets;


    public 的成员变量必须生成文档(JavaDoc)。proceted、private和 package 定义的成员变量如果名字含义明确的话,可以没有注释。


    存取方法
    接下来是类变量的存取的方法。它只是简单的用来将类的变量赋值获取值的话,可以简单的写在一行上。

    /**
    * Get the counters
    * @return an array containing the statistical data. This array has been
    * freshly allocated and can be modified by the caller.
    */
    public int[] getPackets() { return copyArray(packets, offset); }
    public int[] getBytes() { return copyArray(bytes, offset); }

    public int[] getPackets() { return packets; }
    public void setPackets(int[] packets) { this.packets = packets; }
    其它的方法不要写在一行上


    构造函数
    接下来是构造函数,它应该用递增的方式写(比如:参数多的写在后面)。
    访问类型 ("public", "private" 等.) 和 任何 "static", "final" 或 "synchronized" 应该在一行中,并且方法和参数另写一行,这样可以使方法和参数更易读。

    public
    CounterSet(int size){
    this.size = size;
    }



    克隆方法
    如果这个类是可以被克隆的,那么下一步就是 clone 方法:

    public
    Object clone() {
    try {
    CounterSet ōbj = (CounterSet)super.clone();
    obj.packets = (int[])packets.clone();
    obj.size = size;
    return obj;
    }catch(CloneNotSupportedException e) {
    throw new InternalError("Unexpected CloneNotSUpportedException: " + e.getMessage());
    }
    }



    类方法
    下面开始写类的方法:

    /**
    * Set the packet counters
    * (such as when restoring from a database)
    */
    protected final
    void setArray(int[] r1, int[] r2, int[] r3, int[] r4)
    throws IllegalArgumentException
    {
    //
    // Ensure the arrays are of equal size
    //
    if (r1.length != r2.length || r1.length != r3.length || r1.length != r4.length)
    throw new IllegalArgumentException("Arrays must be of the same size");
    System.arraycopy(r1, 0, r3, 0, r1.length);
    System.arraycopy(r2, 0, r4, 0, r1.length);
    }




    toString 方法
    无论如何,每一个类都应该定义 toString 方法:

    public
    String toString() {
    String retval = "CounterSet: ";
    for (int i = 0; i < data.length(); i++) {
    retval += data.bytes.toString();
    retval += data.packets.toString();
    }
    return retval;
    }
    }



    main 方法
    如果main(String[]) 方法已经定义了, 那么它应该写在类的底部.

    代码编写格式


    代码样式
    代码应该用 unix 的格式,而不是 windows 的(比如:回车变成回车+换行)
    文档化
    必须用 javadoc 来为类生成文档。不仅因为它是标准,这也是被各种 java 编译器都认可的方法。使用 @author 标记是不被推荐的,因为代码不应该是被个人拥有的。
    缩进
    缩进应该是每行2个空格. 不要在源文件中保存Tab字符. 在使用不同的源代码管理工具时Tab字符将因为用户设置的不同而扩展为不同的宽度.
    如果你使用 UltrEdit 作为你的 Java 源代码编辑器的话,你可以通过如下操作来禁止保存Tab字符, 方法是通过 UltrEdit中先设定 Tab 使用的长度室2个空格,然后用 Format|Tabs to Spaces 菜单将 Tab 转换为空格。
    页宽
    页宽应该设置为80字符. 源代码一般不会超过这个宽度, 并导致无法完整显示, 但这一设置也可以灵活调整. 在任何情况下, 超长的语句应该在一个逗号或者一个操作符后折行. 一条语句折行后, 应该比原来的语句再缩进2个字符.
    {} 对
    {} 中的语句应该单独作为一行. 例如, 下面的第1行是错误的, 第2行是正确的:

    if (i>0) { i ++ }; // 错误, { 和 } 在同一行

    if (i>0) {
    i ++
    }; // 正确, { 单独作为一行


    } 语句永远单独作为一行.


    如果 } 语句应该缩进到与其相对应的 { 那一行相对齐的位置。
    括号
    左括号和后一个字符之间不应该出现空格, 同样, 右括号和前一个字符之间也不应该出现空格. 下面的例子说明括号和空格的错误及正确使用:

    CallProc( AParameter ); // 错误
    CallProc(AParameter); // 正确

    不要在语句中使用无意义的括号. 括号只应该为达到某种目的而出现在源代码中。下面的例子说明错误和正确的用法:

    if ((I) = 42) { // 错误 - 括号毫无意义
    if (I == 42) or (J == 42) then // 正确 - 的确需要括号


    程序编写规范


    exit()
    exit 除了在 main 中可以被调用外,其他的地方不应该调用。因为这样做不给任何代码代码机会来截获退出。一个类似后台服务地程序不应该因为某一个库模块决定了要退出就退出。
    异常
    申明的错误应该抛出一个RuntimeException或者派生的异常。
    顶层的main()函数应该截获所有的异常,并且打印(或者记录在日志中)在屏幕上。
    垃圾收集
    JAVA使用成熟的后台垃圾收集技术来代替引用计数。但是这样会导致一个问题:你必须在使用完对象的实例以后进行清场工作。比如一个prel的程序员可能这么写:

    ...
    {
    FileOutputStream fos = new FileOutputStream(projectFile);
    project.save(fos, "IDE Project File");
    }
    ...


    除非输出流一出作用域就关闭,非引用计数的程序语言,比如JAVA,是不能自动完成变量的清场工作的。必须象下面一样写:

    FileOutputStream fos = new FileOutputStream(projectFile);
    project.save(fos, "IDE Project File");
    fos.close();



    Clone
    下面是一种有用的方法:

    implements Cloneable

    public
    Object clone()
    {
    try {
    ThisClass ōbj = (ThisClass)super.clone();
    obj.field1 = (int[])field1.clone();
    obj.field2 = field2;
    return obj;
    } catch(CloneNotSupportedException e) {
    throw new InternalError("Unexpected CloneNotSUpportedException: " + e.getMessage());
    }
    }



    final 类
    绝对不要因为性能的原因将类定义为 final 的(除非程序的框架要求)
    如果一个类还没有准备好被继承,最好在类文档中注明,而不要将她定义为 final 的。这是因为没有人可以保证会不会由于什么原因需要继承她。
    访问类的成员变量
    大部分的类成员变量应该定义为 protected 的来防止继承类使用他们。
    注意,要用"int[] packets",而不是"int packets[]",后一种永远也不要用。

    public void setPackets(int[] packets) { this.packets = packets; }

    CounterSet(int size)
    {
    this.size = size;
    }




    编程技巧


    byte 数组转换到 characters
    为了将 byte 数组转换到 characters,你可以这么做:

    "Hello world!".getBytes();


    Utility 类
    Utility 类(仅仅提供方法的类)应该被申明为抽象的来防止被继承或被初始化。


    初始化
    下面的代码是一种很好的初始化数组的方法:

    objectArguments = new Object[] { arguments };


    枚举类型
    JAVA 对枚举的支持不好,但是下面的代码是一种很有用的模板:
    class Colour {
    public static final Colour BLACK = new Colour(0, 0, 0);
    public static final Colour RED = new Colour(0xFF, 0, 0);
    public static final Colour GREEN = new Colour(0, 0xFF, 0);
    public static final Colour BLUE = new Colour(0, 0, 0xFF);
    public static final Colour WHITE = new Colour(0xFF, 0xFF, 0xFF);
    }


    这种技术实现了RED, GREEN, BLUE 等可以象其他语言的枚举类型一样使用的常量。 他们可以用 '==' 操作符来比较。
    但是这样使用有一个缺陷:如果一个用户用这样的方法来创建颜色 BLACK

    new Colour(0,0,0)

    那么这就是另外一个对象,'=='操作符就会产生错误。她的 equal() 方法仍然有效。由于这个原因,这个技术的缺陷最好注明在文档中,或者只在自己的包中使用。

    Swing


    避免使用 AWT 组件
    混合使用 AWT 和 Swing 组件
    如果要将 AWT 组件和 Swing 组件混合起来使用的话,请小心使用。实际上,尽量不要将他们混合起来使用。


    滚动的 AWT 组件
    AWT 组件绝对不要用 JscrollPane 类来实现滚动。滚动 AWT 组件的时候一定要用 AWT ScrollPane 组件来实现。


    避免在 InternalFrame 组件中使用 AWT 组件
    尽量不要这么做,要不然会出现不可预料的后果。


    Z-Order 问题
    AWT 组件总是显示在 Swing 组件之上。当使用包含 AWT 组件的 POP-UP 菜单的时候要小心,尽量不要这样使用。



    调试


    调试在软件开发中是一个很重要的部分,存在软件生命周期的各个部分中。调试能够用配置开、关是最基本的。

    很常用的一种调试方法就是用一个 PrintStream 类成员,在没有定义调试流的时候就为 null,类要定义一个 debug 方法来设置调试用的流。



    性能


    在写代码的时候,从头至尾都应该考虑性能问题。这不是说时间都应该浪费在优化代码上,而是我们时刻应该提醒自己要注意代码的效率。比如:如果没有时间来实现一个高效的算法,那么我们应该在文档中记录下来,以便在以后有空的时候再来实现她。

    不是所有的人都同意在写代码的时候应该优化性能这个观点的,他们认为性能优化的问题应该在项目的后期再去考虑,也就是在程序的轮廓已经实现了以后。
    不必要的对象构造
    不要在循环中构造和释放对象


    使用 StringBuffer 对象
    在处理 String 的时候要尽量使用 StringBuffer 类,StringBuffer 类是构成 String 类的基础。String 类将 StringBuffer 类封装了起来,(以花费更多时间为代价)为开发人员提供了一个安全的接口。当我们在构造字符串的时候,我们应该用 StringBuffer 来实现大部分的工作,当工作完成后将 StringBuffer 对象再转换为需要的 String 对象。比如:如果有一个字符串必须不断地在其后添加许多字符来完成构造,那么我们应该使用 StringBuffer 对象和她的 append() 方法。如果我们用 String 对象代替 StringBuffer 对象的话,会花费许多不必要的创建和释放对象的 CPU 时间。

    避免太多的使用 synchronized 关键字
    避免不必要的使用关键字 synchronized,应该在必要的时候再使用她,这是一个避免死锁的好方法。

    可移植性
    Borland Jbulider 不喜欢 synchronized 这个关键字,如果你的断点设在这些关键字的作用域内的话,调试的时候你会发现的断点会到处乱跳,让你不知所措。除非必须,尽量不要使用。


    换行
    如果需要换行的话,尽量用 println 来代替在字符串中使用"\n"。
    你不要这样:

    System.out.print("Hello,world!\n");

    要这样:

    System.out.println("Hello,world!");

    或者你构造一个带换行符的字符串,至少要象这样:

    String newline = System.getProperty("line.separator");
    System.out.println("Hello world" + newline);


    PrintStream
    PrintStream 已经被不赞成(deprecated)使用,用 PrintWrite 来代替她。
  • 感谢这些不曾相识的人在我工作中的帮助(*……*)

    2008-12-17 19:04:38

  • 从JDK下载到HELLOWORLD调试成功

    2008-12-17 19:00:46

    文章来自于java.com.cn:ZHANGTAOCN

    [编者注]

    你是否还只是一个程序设计初学者?并且早已被Java语言的魅力所吸引已经很久了?你是否强烈像走进Java的世界却感到无从下手?

    不像很多文章的作者,每当遇到这样的初学者遇到入门难的问题时,总是以一大堆入门书籍(这些书籍通常都是行业中的“圣经”)来把这些可怜的孩子们从刚进了一半的编程圣殿之门中重重砸出去……

    本文的作者另辟蹊径,从Java的开发工具包(JDK)的获取(下载)安装说起,一直讲到调试一个经典范例HelloWorld的撰写和调试,一步一步,不惜放弃“Java程序设计高手”的身份,亲自伸出自己仅用于写程序和吃饭的手,把一个初学者带入了Java程序设计的殿堂。

    不过,如果你真的是一个十足的初学者,并从本文中得到了很大帮助的话,请暂时不要沾沾自喜,还是要把“大虾”们推荐的大部头拿出来努力地啃上些日子。程序设计的殿堂是宏伟的,有很多房间,中间有一个宝座,Java不例外,每当你啃完一个大部头,并进行了大量的修炼(写程序),你就能走进下一个房间,这可能需要很多年,但不必害怕,无论你身处哪个房间,你都有你的价值。当你啃完所有的书你就走到了最后的房间,再过若干年的修炼,你最终坐上圣殿中的宝座。

    这很可怕么?不,你去问问“大师”,至今没有人坐上这个宝座,只不过有的人走到了比较靠前的屋子罢了。尽管努力吧!

    [正文]

    方法针对(WinXP/J2SDK1.4.1_03)

    步骤一:访问JDK环境下载网址 http://java.sun.com/j2se/1.4.1/download.html

    选择 Download J2SE v 1.4.1_03 下

    点击 Windows (all languages, including English) 行最右边的 DOWNLOAD.

    步骤二:接下来的页面里填写自己的简略资料,并点击 Yes,submit 按钮.

    步骤三:接下来的页面里点击 ACCEPT 按钮.

    步骤四:接下来的页面里点击 Download j2sdk-1_4_1_03-windows-i586.exe 链接便下载.

    步骤五:安装已下载的JDK (默认安装盘符为 C:\j2sdk1.4.1_03 ).

    注意:无需更改安装路径

    步骤六:现在开始具体配置环境

    右击"我的电脑",选择"属性",再选择"高级",点击"环境变量",注意到

    "系统变量",点击"新建"三次,每次创建一个系统变量 (注意大小写).

    变量名 变量值
    path C:\j2sdk1.4.1_03\bin
    java_home C:\j2sdk1.4.1_03
    classpath C:\j2sdk1.4.1_03\lib\tools.jar;C:\j2sdk1.4.1_03\jre\lib\rt.jar;


    变量创建完后点击"确定",直到"属性"窗口消失.

    步骤七:打开"记事本",输入这段代码 (注意大小写)

    class HelloWorld
    {
        public static void main(String args[])
        {  
            System.out.println("Hello World");
        }
    }

    步骤八:以 HelloWorld.java 保存文件到 d:\java

    注意:保存地址可自由选择,文件名注意大小写.

    步骤九:进入"开始"-"所有程序"-"附件"-"命令提示符"

    直接键入 javac 回车,数秒后显示环境测试结果,出现大片英文字符即为正常.

    步骤十:更换盘符到 HelloWorld.java 文件所在目录 (D:\java>).

    键入 javac HelloWorld.java 数秒后回到文件所在目录 (D:\java>) 编译成功.

    键入 java HelloWorld 数秒后显示将显示 Hello World

    步骤十请注意大小写!

    大功告成啦!我们的 Java 旅途要开始咯!


  • 工作辛酸的生活

    2008-11-01 13:43:28

    曾经以为做测试的管理可以任意的驰骋测试领域,可以根据自己的思路来对项目进行全方面的测试,公司也曾经以此处为说服我留下的理由。可现在成为Leader才知道原来自己的测试思路还是限制在利益里面,而不是具有意义的真正的测试,自己才明白原来当前的这些不是我想要的。

          感觉xxx已经不太让我留恋了,除了自己带出来的实习生让我觉得有点味道之外,整个公司已经冷冻成冰。

           我觉得昨天的Weekly meeting中职责我case不到位和周末不来丢下组员不和他们加班,对我而言太残酷了————开发经理不知道你要测试的模块做什么,怎样写功能测试用例?什么文档也没有的模块怎样写测试用例?只知道要测Framework,IME,Launcher的模块什么也不知道要怎样写测试用例,而且还要从性能,交互性,压力方面考虑怎样写测试用例?项目经理告诉大概的样子,自己根据功能进行遍历来写测试用例,说你写冗余,告诉你要写出能测出问题的测试用例,产品都不出来,你哪里知道哪里有问题,你怎样写出可以测出问题的 测试用例?我手下的组员他们和在之前和公司签订协议工作日有一天不上班,周末补上,为什么要无礼要求我周末跟着过来?

           首先说当前的Android项目:UI Specification从理论上来说应该算得上是软件项目里面的圣旨,无论开发和测试都必须无时不刻的根据该文档来执行任务。可好笑的是,项目平台不断更换,策略不断变更,还有多少相关人员在关注Specification呢,如果不是上次Camera的跑过来问我相关的次数问题,我灵机的想到UI Specification,谁还想到咱们还有依据呢?感觉流程已经完全的模糊。再说自己的范畴,阶段性的任务开启后,公司陆陆续续的招收共七名实习生,都安排放在我的团队里面。居然他们的报道的时间都不和我说一下,弄得自己需要重复的给它们单个的进行培训,而且还是从流程,测试理论,当前进展概况,使用工具等方面进行讲解,做很多重复的工作,我真的不明白领导们怎样想的。实习生来之后,很多不懂,从Excel使用到系统等方面的足个的来问。我不是说不喜欢教授他们而是我自己还有一堆的测试任务,而且领导们居然规定的任务完全是当他们是熟练的Engineer来对待。我不知道领导们认为Testing很简单还是要为难我。周会上的我没有发表任何意见,因为我知道自己的意见已经是很苍白无力的,所以我要想办法的是怎么样来达到领导们规定的不可能的任务。

         经过考虑之后,我开始规定我的团队要开Daily meeting,因为我知道我如果还是按照公司制度规定给他们公布一个星期的任务,而不具体到天的话,他们根本不可能完成的,因为毕竟他们还新的实习生还有很多不明白。由此,我除了自己设计给他们进行测试培训之外,Daily meeting上还单独的进行指导性的测试策略给他们的提供测试思路。最后,证明我的方法是对的,因为Bug量相对于前一个星期提升了好几十个百分点。可周会上领导们还是不满意,忽然我觉得自己的辛苦惘然了,他们永远只会鸡蛋里面挑骨头。现在,培养出来的实习生多数给开发要过去了。我却带领少数实习生要完成接近30个模块的测试。

         我觉得我的Test Leader算什么,Manager根本是在按照他的思想想到哪里便到哪里的给你设定任务,然后我来划分完成他的要求,那么我的测试思想体现在什么地方。而且现在公司对测试已经很不重视,除了提出无理要求,还能做什么?领导们与其用精力来幻想之外,还是多花点精力来很正式的走开发流程,什么文档约束也没有,能做好什么产品呢?

         或者,该是真的要和xxx分手的时候,自己也已经给实习生教熟练了,也算对得起他们。至于我自己留在这里继续工作也只能算是虚度青春,什么长进也没有。测试是自己喜欢的职业,我要努力起来,找到好的新工作重新打拼自己的职业生涯。

  • Viewpoint of cleverman with testing career

    2008-07-27 21:10:36

    引用:
    原帖由 sunxy5291 于 2007-2-27 16:20 发表
    怪不得呢
    楼主好棒!
    那楼主给我建议一下:
    我的情况:我05年毕业 本科,计算机专业
    毕业就去上海一下一般大的软件公司做.net开发,待遇一般,感觉自己也没多大进步。
    06年8月回到家乡西安在一家软件公司做 ...
    那我说一下我的看法吧。因为大家都是搞测试的,这里我也只谈测试。
    首先,我们可以有两条路发展,技术和管理。管理就是做team lead, manager, director这么走。因为我没有走这条路,所以,我这里也只谈技术。而且,即使走管理,也是应该

    具备很强的技术能力才行,所以技术是我们的发展之本。我个人不喜欢技术不精通的领导,也不喜欢被这种人管理。

    技术的发展是分阶段的,基本上你要是能发展到最后的阶段,工作,钱,房子,车子,老婆都不用发愁了。当然要一步一步走,不可能一步升天,而且一路走过来也不是很容易,

    应该说大部分人可能都达不到。不过只要你肯努力,坚持不懈,就一定能达到。

    第一阶段:就是基本功的问题。这个阶段从大学入学就开始了,我接触不少人工作几年都没有达到要求。这个要求是一定要达到的,不然以后没法往高发展。大学的一些课程一定

    要学好,主要是数据结构,算法,数据库,操作系统,计算机网络。争取精通两门。数据结构,算法对软件开发非常的重要,很多大公司面试就考这些。你不过关,根本通过不了

    面试,一两道算法题一下就把你难住了。另外,我可以告诉你,顶尖公司的面试80%都是考算法,你有没有经验不要紧,做没做过项目不要紧。关键是考察你的基本功,基本功打好

    了,其他工作就都容易很多了,基本功打不好,什么都白说。操作系统,争取要精通windows或者linux内核,看你走哪条路了,我是搞windows的,不过他们之间很多地方也是相通

    的。计算机网络,争取精通TCP/IP协议。数据库我不怎么懂,我的理解是要精通oracle, sqlserver, 还有sql编程。
    另外就是编程技术了. C,C++,面向对象一定要搞懂,搞熟。大公司面试的算法就是要你用C/C++实现的。这些搞熟了,学习其他语言就是几个小时的事情。(我指的是上手,不是精

    通)。这些东西搞不透,不管你其他语言用多少年,回来学他们还是难。
    再有就是英语水平了,听说读写,各个方面都要达到要求。技术到了一定程度,英语对你的发展就起到了非常决定性的作用了。你英语好,就可以去外企,就可以外派出国,甚至

    在国外发展。
    以上这些都是在大学应该掌握好的。当然了,能在大学掌握好这些的毕竟是少数。这些少数人就是去了微软,google的那些,一毕业就拿到月薪上万工资的。大部分人都是达不到

    要求的,这没关系,毕业后一定要找时间把这些基本功补上。不然的话,在下个阶段的发展就很受限制了。

    第二阶段:计算机知识的扩展,行业知识的精通。这个阶段从你大学毕业走向第一个工作岗位开始。工作之后,发现计算机的世界比大学的知识要博大精深很多。一开始工作,就

    要拼命吸收以前没有接触过的,新的知识。这个就不多说了,大家都会有很多感受的,会觉得很多东西都不会,不会就学。以后你跳槽去面试,人家就会看你工作几年,这几年干

    什么了。工作1,2年之后,很重要的一件事情就是要选择一个行业了。也许是你现在正在从事的行业,也许是一个新的行业。总之,你自己要为自己规划,选择一个适合自己,而

    且又热门,以后有发展的行业。无论是现在的行业,还是跳槽到一个新的行业,都需要你开始积累在这个行业的经验了,要精通这个行业。有这个基础之后,就要去这个行业里top

    的公司了,国企,外企都可以,一定要有名气,大公司。比如,通信的华为,搜索的百度,等等。如果你精通了这个行业,去这些公司不是很难。
    另外有一点很重要,如果你本科不是一所名校毕业的话,争取能上一个名校的研究生,全职,兼职都可以。这样可以为下一阶段做好充分的准备,否则的话会有比较大的困难。总

    之了,是自己的短处都要想办法去弥补,不然发展总会受限制。

    第三阶段:国际著名大公司。有了前两个阶段的积累,加上自己的英文水平,就要找机会进入国际的大公司了。相信这个时候就会有很多猎头来联系你了。选择你这个行业的世界

    前3,最好是第一或者第二。进去之后要学习两个方面,一是英文,中国人可以学一辈子英文的。另外一个就是大公司的管理。可以这样说,国际大公司的管理有很多类似的地方,

    因此他们的招聘非常愿意招其他国际大公司的职员。这就是为什么,你一旦踏上一家公司,一辈子都不用愁工作了,可以在这些大公司跳来跳去,工资节节高。到了这个阶段,你

    基本上可以有个比较不错的生活了,房子,车子都不会是太大的问题。

    第四阶段:向国际化发展。如果你还不满足,觉得自己还有能力更进一步,那我就建议你向国际化发展了。中国的工资毕竟有限,到了第三阶段也不过就是20万左右,你可能还不

    满足。那么你就可以联系国外的公司了,有了你的英文,你的经验,你的背景,到时候就是水到渠成了。我相信国际的猎头也会盯上你的。

    最后说一下,如果你现在已经具备了我所说的各个阶段的能力,那么你的简历是任何公司都很难拒绝的了。因为目前的情况,具有这些素质的测试人员在世界都紧缺。很多公司都

    招不到人,即使连google,MS也不列外。他们都在到处寻找这种人。

    最后说一下测试。我一直没有讨论测试的问题,因为我一直没有把测试当作一个难得东西来看待。我认为测试是表面上的,我前边提到的东西要比它重要的多。欢迎大家一起来讨

    论。我也是进入测试才2年多的时候,其中大多数的时间也像大家一样的迷惘,很多时候也很悲观。不过通过自己的努力,最后终于得到了一个满意的结果。我发现自己对测试这个

    行业的理解和很多人都不同,希望我的理解能给大家一点帮助。
  • Reprint a article with testing profession

    2008-07-25 22:07:07

    测试工程师如何规划自己的职业生涯

         初级测试工程师––入门级,具有一些手工测试经验,开发测试脚本并开始熟悉测试生存周期和测试技术;
         测试工程师––能够独立编写自动测试脚本程序并担任测试编程初期的领导工作,进一步拓展编程语言、操作系统、网络与数据库方面的技能;
         高级测试工程师––帮助开发或维护测试或编程标准与过程,负责同级的评审,并能够指导初级的测试工程师;
         Team Leader––一般具有5年左右工作经验,负责管理一个小团队。负责进度安排、工作规模/成本估算、按进度表和预算目标交付产品,负责开发项目的技术方法,能够为用户提供支持与演示;
         测试经理––能够担当测试领域内的整个开发生存周期业务,能够为用户提供交互和大量演示,负责项目成本、进度安排、计划和人员分工;
          计划经理––具有多年纯熟的开发与支持(测试/质量保证)活动方面的经验,管理从事若干项目的人员以及整个开发生存周期,负责把握项目方向与盈亏责任。
     
    职业规划:
    1.第一阶段,学习自动化测试工具,学会编写脚本;
    2.第二阶段,学习编写测试计划,测试方案,测试用例;
    3.第三阶段,学习配置管理,版本控制,项目管理,bug管理;
    4.第四阶段,转向做一个管理者.

     

          每个人选择测试工程师职位的原因不尽相同.为了以后转开发积累经验的的,为了入门简单的,为了不加班的,有看好职业前景的,等等,..
    技术方向就沿着测试开发的路一直走下去.最终成为技术上的大拿,在一个公司里成为核心技术人员
    这个方向对技术的积累要求最高,适于那些对管理没什么兴趣,就想专心做技术的人。要沿着这条路走下去,需要一直不断地在开发能力上的积累,并且还要求一定的知识广度和对职业的独特理解。
    管理方向呢,工作个几年以后转向测试经理,以后的发展就多样了,质量总监\项目经理等等
    有些人说做管理不需要技术,却没想过作过一个技术工作,自己都不会的东西怎么去管理别人,当然也有例外,有些管理人员也的确是靠自己的人格魅力去让一个团队健康发展的。不过那只是极少数罢了。大多数测试管理人员也是需要在技术上有一定积累的。而且对于所有工作都一定要比较熟悉,黑白盒,自动化,性能,用例设计,配置管理,计划方案的设计等等,并且还要去调合团队内部的工作氛围,制定适当的激励机制,作为一个管理者绝不比一个技术人员需要积累的东西少。
    而流程控制大概是选的人最少的,QA累死不讨好,最终成为一代终极流程控制顾问
    这一类工作需要有非常大的耐心和自信,需要在工作中对流程控制方面有自己的感悟,需要对理论很熟悉。对人的毅力也是个极大的考验呢
    其他的,还有做用例做到极至,做功能测试做到极至,做用户体验做到极至的等等,总之各种发展方向者需要努力的坚持,任何一个方向做好了都很好。

     

    如果你是测试员或是高级测试员,有志转向管理发展,那么需要加强以下几点:

    1. 测试计划的编写(要结合测试的项目,能以此来控制和确定测试所需人员,设备及时间来管理测试时间)

    2. 要熟悉BUG跟踪工具及软件测试流程.(如: TD, Bugzilla, CQ等)

    3. 要熟悉配置管理工具. (如: CVS, VSS等)

    4. 要熟悉自动化工具.(例如:WinRunner, QTP, Robot, RFT, Automation等,能结合录制完的脚本编写代码)

    5. 要熟悉压力及性能测试工具.(例如: LoadRunner, webload, silkperformance等,能结合相关数据,分析出性能瓶颈)

    6. 要熟悉或精通一门语言. (例如: Java, C++)

    7. 要熟悉数据库.(例如: Oracle, DB2, SQLServer, MySQL)

    8. 要熟悉主流操作系统. (例如: HP Unix, IBM AIX, Sun Solaris, Red Hat Linux, SuSE Linux, Windows)

    9. 能用英文流利的和老外交流以及往来Email.

    10. 语言表达能力强,表达问题清晰明了.

    11. 沟通能力强,能和上级/开发经理很好的达成测试相关/BUG事宜.

    12. 学习技术的能力要强,能快速上手一个新的技术.

    13. 乐于与人交流.

     

     

    初级测试工程师:刚走出大学校门或者刚从些培训机构出来的学员,之前没有或具备很少的测试经验,这个阶段主要是掌握最基本的测试方法、测试计划、测试用例、测试报告、环境搭建等。北京上海地区,该职位薪水一般在2000-5000之间。

    中级测试工程师:从事过2-3年实际工作的测试工程师,能够独立制定测试计划,编写测试用例,对初级测试工程师进行指导等。北京上海地区,该职位薪水一般在4000-6000之间。
    达到中级测试工程师水准后,以后的发展可以存在多种方向:
    管理方向:
    测试组长:一般5人以下团队,能够同时承担2-3个较小项目(程序代码在5000行以下)或者1个中、大型项目(程序代码在5000行-25000行左右)。北京上海地区,该职位薪水一般在5000以上,好的过万。
    测试经理:可以管理多个小型测试团队,能够承担多个中型及较大型项目的测试,及具备至少1个大型项目(程序代码在25000行以上)的测试管理能力。该职位薪水一般过万,年薪二三十万正常。
    质量经理/项目管理:跳出测试的执行转而关注过程。SQA待遇差别比较大,但有2年以上测试或开发经验的人5000以上应该没问题,好的也过万。

    技术方向:
    白盒测试:这个由开发人员转过来的比较多,一般技术上要至少达到技术经理的水准。待遇比较好,一般7k以上,好的年薪二三十万。
    自动化测试方向:熟练使用一种以上自动化测试工具,做的好的待遇与白盒测试有的一拼,一般6k以上,不过最近学的人多了,待遇贬值可能比较快。
    测试分析师/技术总监:主要职责是对系统的测试结果进行综合的分析,例如缺陷分析、性能分析等。不但测试技术能力较强,还要具备数据库、操作系统等多方面的技术知识。这个待遇一般过万了吧.
    行业测试专家:物以稀为贵,过万一般问题不大。

    经历了以上一些阶段,大概在35岁左右,职业发展上基本达到瓶颈,此时只要混的不是很差收入一般可以算的上中产阶级,日子可能依然过的比较郁闷,之后的方向可能有做培训,咨询,自己开公司创业等。
    好了,暂时先罗嗦这么多,具体的发展路线嘛各位八仙过海各显神通了!~

     

     

     

    入测试行已有五、六年,谈谈自己的规划和一些想法:
    一、自己的规划:
        做了几年之后,积累的了一些行业经验(电子商务型,电信通信行业)和管理经验(指的是测试管理),毕竟是女孩,这么多年一直都在不断地学习各种技术,总怕落后。时间长了,感觉还是很累,感觉比做开发累。所以将来的方向是:走管理路线。(当然这条线也不好走,但是做了2年管理后,感觉在这方面有一定能力,只要努力就一定会成功的)

    做好测试:主动性强,有信心,能听取接纳别人的意见。( 自己悟出的)

    二、对于测试新手来说,如何入行,需要具备的知识和能力

    1、测试的基础理论知识,知道测试流程是什么?测试的常用的文档有哪些,该如何编写?测试方法有哪些?
    方法:去一些测试论坛(如:51testing,测试时代,3atesting,一起测试网等)找些资料来学习。或者买一些测试的书籍。再有也可以参加测试培训。

    2、要熟悉或精通一门语言. (例如: Java, C++,.net,VB,PB,Dephi),做到能读懂代码。当然能独立编写代码更好。
    方法:学习一种比较流行的语言即可,因为时间有限不可能学很多开发语言。学习的过程一定要给自己制订时间计划,而且语言这东西最好结合实例来学习,主要学习设计思路。

    3、要熟悉BUG跟踪工具.(如: TD, Bugzilla, CQ等),学习一种即可,主要能领悟出bug的处理流程是什么,如何管理。
    方法:到网上看资料,装上工具适用。

    4.  要熟悉配置管理工具. (如: CVS, VSS等),会一种即可,当然有时间的话,2种工具都会更好。

    5.  精通OFFice系列工具,排版能力强。测试中经常会写文档,所以这方面要强。

    6、 要熟悉数据库.(例如: Oracle, DB2, SQLServer, MySQL),对一种数据库精通就可以了。

    7、要熟悉主流操作系统. (例如:  Red Hat Linux, Windows)

    8、需要增强的能力:
    学习能力强;表达能力强;耐心,细心,信心,责任心;能承受压力;沟通能力强。

    以上这些,都是需要下功夫的,不能做表面功夫,那样的话,就算你入行后,会发现自己要学的东西会很多。

    三、入行后,要学习的知识和能力:
    1 、公司的文化和制度
    2、熟悉业务,这块很重要,需要认真对待。
    3、熟悉公司的开发流程和测试流程。
    4、业务熟悉后,将自己所学的知识运用到实际工作中。提高自己的测试水平。
    5、培养自己的沟通能力,与业务相关的所有人都能很好的沟通。
    6、工作中遇到的问题及解决措施要及时总结整理。
    7、针对公司的项目或产品选择适合的自动测试工具,帮助公司提高测试效率。
    这一阶段重在:熟悉业务,熟悉工作流程

    四、入行半年——1年后,要学习的知识和能力
    1)提高编写用例的技巧。
    2)熟悉一种单元测试工具。(针对公司的项目或产品使用的开发语言而定)
    如果公司这块一直都是开发人员来做,暂且跳过。
    3)熟悉一到两种自动化工具。(功能类和性能类的,如:WR,QTP,LR,ROBOT等)
    建议:学习工具的话,一定要结合实际的项目,这样学得快而且效果比较好。
    4)熟悉一种测试管理工具。
    (呵呵,为以后做测试管理者打算)
    5)了解新业务,开发的新技术。

    这个阶段的重点:就是提高自己编写用例的水平,工具的使用。

    五、 多年以后,相信自己都自己的目标了。
    1)如果做专职的性能测试工程师:精通一种性能测试工具,并能分析出瓶颈。(这点我没做到)(这些需要提高多方面的知识:服务器,中间件,开发,数据库等)
    2)如果做自动化测试工程师,精通一种自动化工具,并能独立编写脚本,了解一些最新自动化测试方面的技术。
    3)测试管理者。(技术+管理),哪方面薄弱就补哪块。多多听取别人的意见,改进自己身上的缺点。


       不管做任何事,都要有目标。有了目标,就会坚持到底。否则。。。。。

     

  • 前言【Preface】

    2008-07-12 13:19:34

    Dear,

       I opened the personal space.At first of all,i want to introduce me to all of you,because i want to be your friends.Wow...

       Testing field is my loved ,and i have been joined this team for two years.In this process,i did many each project,for example:System of B/S structure , mobile phone of MTK platform ,mobile phone of Brew platform and Android platform and so on.

       In my job, most of time is to do blackbox testing and design test case or discuss requirement.I know if i want to enhance my capacity, i have to devote myself into study.

       Cause i open this space,and record my process of growth.

       Ok,let's go!

我的栏目

数据统计

  • 访问量: 4946
  • 日志数: 8
  • 建立时间: 2008-06-27
  • 更新时间: 2008-12-25

RSS订阅

Open Toolbar