发布新日志

  • [转帖] QC 权限分配详解

    2010-10-19 16:51:29

     

    QCbug状态更改权限分配


    1.首先用admin用户登陆QC指定项目,在状态栏选择【工具】→点击【自定义】
       QC001.bmp


    2.打开“Quality Center – 项目自定义”页面
    设置“错误状态”
    点击【自定义项目列表】→在“自定义项目列表”的“列表”属性框中选择【错误状态】
    attachment.php?aid=Mzg1MXxjOGNkY2MwMHwxMjU3NzQ3NzI2fGFkYTN4Y2dJQ1RCWnp4MGIrUFVmMEtWMkFONDlTMDJNeEt3V

    可以添加项目中需要的错误状态。

    3.自定义组:点击【设置组】→在“设置组”页面→点击【新建】按钮→弹出的对话框中新建自定义组,并添加相关人员进去。
    attachment.php?aid=Mzg1M3w3MjA3MTBiM3wxMjU3NzQ3NzI2fGFkYTN4Y2dJQ1RCWnp4MGIrUFVmMEtWMkFONDlTMDJNeEt3V
    4.紧接着步骤3,点击【更改】按钮,弹出的权限设置 XXXX (这里‘XXXX’是你刚才新建组的名称)→点击【缺陷】→在“修改状态”项中选择状态→在转换规则中,设置字段和状态。
    attachment.php?aid=Mzg1NHw3NDYwYjY2MHwxMjU3NzQ3NzI2fGFkYTN4Y2dJQ1RCWnp4MGIrUFVmMEtWMkFONDlTMDJNeEt3V




    5.这里还可以修改其他的权限,就简单的介绍这一个,举一反三,其他的如法炮制

  • mysql update:数据库字段值修改的方法

    2009-08-14 08:27:57

    转载请以链接形式注明祝君成功网站建设本页链接

    进入mysql,提示符下输入:

    use 你数据存放的数据库名字,回车:

    update 你输错日期的那个表的名字 set 输错日期的那个字段=‘你期望的日期’where 输错日期的那个字段 =’你输错的那个日期’ ;回车
    比如说:你输错日期的那个字段名是borndate,你的表名字是user,你输错的日期是1986-06-04那命令就是

    update user set borndate =’你期望的正确的日期’ where borndate =’1986-06-04′ ;回车就好如果有日期重复了,你最好先这样:

    select * from user where borntime =’1986-06-04′ ;
    然后找到你输错的那个具体的单个记录,看看他叫什么名字,或者他的编号什么的,再有问题,你继续问。。。希望能帮助你,我也刚学没多久。
    友好提示:最好先备份数据库,开始-运行,cmd回车,cd\回车,cd mysql回车

    输入 mysqldump –u root –p 3306 mysql>d:\backup.sql

  • 英语论坛

    2009-07-14 17:31:02

    非常喜欢的英语论坛,下面是我的空间

    谢谢大家光临哦希望大家也喜欢啊。。。

    http://bbs.hxen.com/?fromuid=82465

    http://bbs.hxen.com/?fromuser=LoveBeijing

     

  • C++ Test

    2008-10-20 15:41:43

    C++ Test是什么
        C++ TestParasoft公司出品的一个针对C/C++源代码进行代码风格测试,自动化单元测试的工具。
    C++ Test能给我们带来什么?
            1.         可以帮助我们检查程序的编码情况,判断是否严格按编码规范进行开发。
            2.         C/C++源代码进行分析,自动生成相应的测试用例,对函数进行初步的测试。
    C++ 软件介绍
           C++ Test的使用比较简单。可以自己新建一个工程,也可以根据一个VC工程生成一个工程。可以对整个工程进行全面的测试,也可以一次只对一个C/C++源文件进行测试。

            

    1

    1.         Command1:静态分析当前的文件。主要是对代码的风格进行检查。

    2.         Command2:动态分析当前的文件。主要是自动生成测试用例,对函数进行测试。

    3.         Command3:静态分析和动态分析。

    4.         Tab1           显示源代码。

    5.         Tab2           显示静态分析结果。

    6.         Tab3           显示动态分析结果。

    7.         Tab4           显示测试进度。

    8.         Message Area   显示一些具体的信息。 

    C++ Test的使用

    让我们先来看看一段很简单的程序。

           #include "windows.h"

           int Sum(int *pNum1, int *pNum2)
           {
                  return *pNum1 + *pNum2;
           }
           int main()
           {
                  int nSum;

                  int Num1,Num2;
            
           Num1 = 1;
                   
    Num2 = 2;
                   nSum = Sum(&Num1,&Num2);
                   return 0;
    }

           够简单了吧?并且也许你也写过这些代码。但这些代码书写的风格如何?存在隐患吗?那就用C++ Test分析一下。

           先来看看代码风格如何。在上图中就显示出很多,大致可归纳为如下几种:

    1.         如果不允许改变参数的内容,声明参数为const

    2.         不要使用tab作为空格。

    3.         全局函数或变量前使用::操作符。

    4.         所有int型的变量都要以“i”开头。

    5.         变量声明,但没有初始化。

    6.         Return的值要使用括号。 

                  有六条?不太相信自己的眼睛吧?我想要有好的风格,这些建议是比较好的,但在实际工作中可能规定的太细了。要想把一匹野马驯服,还是要慢慢来的。

           C++ Test可以设置、编辑、创建静态编译的规则。就让我们来设置一下。

    2

           打勾的就是选择的规则,在静态分析时就会使用这些规则。在图1Message Area中第一行显示表示所有int型的变量都要以“i”开头属于User-110规则。如果你想取消这条规则,那你在图2中找到这条规则,把勾去掉就行了,重新静态分析一下,这条提示就没有了。

           那么动态分析能做什么呢?我们先来看看结果。

          

                                                图3
         
    先看第一行,这就是分析结果的总结。它表明的意思是总共产生了51条测试用例,37条测试成功,14条测试失败。

           先分析第一条失败的测试用例(AUTO_14_A0),以pNum1 = NULL pNum2=NULL为参数输入,测试失败,这就表明在函数中没有对参数的有效性进行判定,这就是程序的一个隐患。当然用户可以对测试用例进行删除和更改,还可以添加自己的测试用例,以弥补自动生成的用例。

           上面提到可以创建用户自己的代码规则,我这里也就不多说了,因为C++ Test自带的帮助已经说的很详细了。

    总结

             使用了一下C++ Test,初步的个人感受有以下三点:

    1.          对项目的代码统一还是很有帮助的,同时也能让编程者慢慢养成好的编码习惯。因为通过静态分析,能强制你书写规范的代码。

    2.          对项目的一些简单函数进行测试,特别是边界的测试,排除一些基本的错误或代码的隐患。

    最好在项目的一开始就使用C++ Test,边编写代码边检查,这样就不会欠下太多的债。在试用中发现,如果项目比较大时,最好不要直接对一个工程进行自动测试,而应按文件一个一个地测试,否则可能会导致程序死掉。
  • 一般人绝对不会的电脑小绝技

    2008-09-17 11:15:33

    一般人绝对不会的电脑小绝技

    常见用法:
    F1 显示当前程序或者windows的帮助内容。
    F2 当你选中一个文件的话,这意味着“重命名”
    F3 当你在桌面上的时候是打开“查找:所有文件” 对话框
    F10或ALT 激活当前程序的菜单栏
    windows键或CTRL+ESC 打开开始菜单
    CTRL+ALT+DELETE 在win9x中打开关闭程序对话框
    DELETE 删除被选择的选择项目,如果是文件,将被放入回收站
    SHIFT+DELETE 删除被选择的选择项目,如果是文件,将被直接删除而不是放入回收站
    CTRL+N 新建一个新的文件
    CTRL+O 打开“打开文件”对话框
    CTRL+P 打开“打印”对话框
    CTRL+S 保存当前操作的文件
    CTRL+X 剪切被选择的项目到剪贴板
    CTRL+INSERT 或 CTRL+C 复制被选择的项目到剪贴板
    SHIFT+INSERT 或 CTRL+V 粘贴剪贴板中的内容到当前位置
    ALT+BACKSPACE 或 CTRL+Z 撤销上一步的操作
    ALT+SHIFT+BACKSPACE 重做上一步怀废牟僮?br>
    Windows键+M 最小化所有被打开的窗口。
    Windows键+CTRL+M 重新将恢复上一项操作前窗口的大小和位置
    Windows键+E 打开资源管理器
    Windows键+F 打开“查找:所有文件”对话框
    Windows键+R 打开“运行”对话框
    Windows键+BREAK 打开“系统属性”对话框
    Windows键+CTRL+F 打开“查找:计算机”对话框
    SHIFT+F10或鼠标右击 打开当前活动项目的快捷菜单
    SHIFT 在放入CD的时候按下不放,可以跳过自动播放CD。在打开word的时候按下不放,可以跳过自启动的宏

    ALT+F4 关闭当前应用程序
    ALT+SPACEBAR 打开程序最左上角的菜单
    ALT+TAB 切换当前程序
    ALT+ESC 切换当前程序
    ALT+ENTER 将windows下运行的MSDOS窗口在窗口和全屏幕状态间切换
    PRINT SCREEN 将当前屏幕以图象方式拷贝到剪贴板
    ALT+PRINT SCREEN 将当前活动程序窗口以图象方式拷贝到剪贴板
    CTRL+F4 关闭当前应用程序中的当前文本(如word中)
    CTRL+F6 切换到当前应用程序中的下一个文本(加shift 可以跳到前一个窗口)
    在IE中:
    ALT+RIGHT ARROW 显示前一页(前进键)
    ALT+LEFT ARROW 显示后一页(后退键)
    CTRL+TAB 在页面上的各框架中切换(加shift反向)
    F5 刷新
    CTRL+F5 强行刷新

    目的快捷键
    激活程序中的菜单栏 F10
    执行菜单上相应的命令 ALT+菜单上带下划线的字母
    关闭多文档界面程序中的当
    前窗口 CTRL+ F4
    关闭当前窗口或退出程序 ALT+ F4
    复制 CTRL+ C
    剪切 CTRL+ X
    删除 DELETE
    显示所选对话框项目的帮助 F1
    显示当前窗口的系统菜单 ALT+空格键
    显示所选项目的快捷菜单 SHIFT+ F10
    显示“开始”菜单 CTRL+ ESC
    显示多文档界面程序的系统
    菜单 ALT+连字号(-)
    粘贴 CTR L+ V
    切换到上次使用的窗口或者
    按住 ALT然后重复按TAB,
    切换到另一个窗口 ALT+ TAB
    撤消 CTRL+ Z
    二、使用“Windows资源管理器”的快捷键
    目的快捷键
    如果当前选择展开了,要折
    叠或者选择父文件夹左箭头
    折叠所选的文件夹 NUM LOCK+负号(-)
    如果当前选择折叠了,要展开
    或者选择第一个子文件夹右箭头
    展开当前选择下的所有文件夹 NUM LOCK+*
    展开所选的文件夹 NUM LOCK+加号(+)
    在左右窗格间切换 F6
    三、使用 WINDOWS键
    可以使用 Microsoft自然键盘或含有 Windows徽标键的其他任何兼容键盘的以下快捷键。
    目的快捷键
    在任务栏上的按钮间循环 WINDOWS+ TAB
    显示“查找:所有文件” WINDOWS+ F
    显示“查找:计算机” CTRL+ WINDOWS+ F
    显示“帮助” WINDOWS+ F1
    显示“运行”命令 WINDOWS+ R
    显示“开始”菜单 WINDOWS
    显示“系统属性”对话框 WINDOWS+ BREAK
    显示“Windows资源管理器” WINDOWS+ E
    最小化或还原所有窗口 WINDOWS+ D
    撤消最小化所有窗口 SHIFT+ WINDOWS+ M
    四、使用“我的电脑”和“Windows资源管理器”的快捷键
    目的快捷键
    关闭所选文件夹及其所有父
    文件夹按住 SHIFT键再单击“关闭按钮(仅适用于“我的电脑”)
    向后移动到上一个视图 ALT+左箭头
    向前移动到上一个视图 ALT+右箭头
    查看上一级文件夹 BACKSPACE
    五、使用对话框中的快捷键
    目的快捷键
    取消当前任务 ESC
    如果当前控件是个按钮,要
    单击该按钮或者如果当前控
    件是个复选框,要选择或清
    除该复选框或者如果当前控
    件是个选项按钮,要单击该
    选项空格键
    单击相应的命令 ALT+带下划线的字母
    单击所选按钮 ENTER
    在选项上向后移动 SHIFT+ TAB
    在选项卡上向后移动 CTRL+ SHIFT+ TAB
    在选项上向前移动 TAB
    在选项卡上向前移动 CTRL+ TAB
    如果在“另存为”或“打开”
    对话框中选择了某文件夹,
    要打开上一级文件夹 BACKSPACE
    在“另存为”或“打开”对
    话框中打开“保存到”或
    “查阅” F4
    刷新“另存为”或“打开”
    对话框 F5
    六、使用“桌面”、“我的电脑”和“Windows资源管理器”快捷键
    选择项目时,可以使用以下快捷键。
    目的快捷键
    插入光盘时不用“自动播放”
    功能按住 SHIFT插入 CD-ROM
    复制文件按住 CTRL拖动文件
    创建快捷方式按住 CTRL+SHIFT拖动文件
    立即删除某项目而不将其放入 SHIFT+DELETE
    “回收站”
    显示“查找:所有文件” F3
    显示项目的快捷菜单 APPLICATION键
    刷新窗口的内容 F5
    重命名项目 F2
    选择所有项目 CTRL+ A
    查看项目的属性 ALT+ ENTER或 ALT+双击
    可将 APPLICATION键用于 Microsoft自然键盘或含有 APPLICATION键的其他兼容键
    七、Microsoft放大程序的快捷键
    这里运用Windows徽标键和其他键的组合。
    快捷键目的
    Windows徽标+PRINT SCREEN将屏幕复制到剪贴板(包括鼠标光标)
    Windows徽标+SCROLL LOCK将屏幕复制到剪贴板(不包括鼠标光标)
    Windows徽标+ PAGE UP切换反色。
    Windows徽标+ PAGE DOWN切换跟随鼠标光标
    Windows徽标+向上箭头增加放大率
    Windows徽标+向下箭头减小放大率

    八、使用辅助选项快捷键
    目的快捷键
    切换筛选键开关右SHIFT八秒
    切换高对比度开关左ALT+左SHIFT+PRINT SCREEN
    切换鼠标键开关左ALT+左SHIFT+NUM LOCK
    切换粘滞键开关 SHIFT键五次
    切换切换键开关 NUM LOCK五秒
  • Regsvr32.exe

    2008-09-16 15:09:24

    功能强大的Regsvr32命令
    2007年09月03日 星期一 00:23

    一个网友的提问,提醒有必要对WingdowsXP的“Regsvr32”命令作一简要介绍——

          “Regsvr32.exe”命令是用来对“ActiveX控件”进行注册的。

    Regsvr32命令格式
    /u       卸载ActiveX控件
    /s       注册成功后不显示操作成功信息框
    /c       控制台输出
    /I       调用DllInstall安装函数并将可选的参数[cmdline]传给它,当使用 /u时调用卸载函数

    Regsvr32主要功能  

    A、修复 IE 浏览器
        如果发现IE不能打开新的窗口,用”鼠标左键“点击超链接没有任何反应,用鼠标右键点击超链接,在弹出的菜单中选择“在新窗口打开”也没有任何反应——
           1、单击“开始-->运行”,在“运行”窗口中,输入“regsvr32 actxprxy.dll”,然后“确定”,接着会出现一个信息对话框“DllRegisterServer in actxprxy.dll succeeded”,再次点击“确定”;
           2、再次打开“运行”窗口,输入“regsvr32 shdocvw.dll”,单击“确定”;
           3、重新启动Windows系统,运行IE,就会发现——OK了。

    B、卸载无用“鸡肋”
        Windows XP自带ZIP功能,占用了很多系统资源,其功能还不如第三方解压缩软件。如要卸载它——
          点击“开始→运行”,在运行对话框中输入“regsvr32 /u zipfldr.dll”,单击“确定”后,弹出卸载成功信息框,就完成卸载ZIP功能。恢复ZIP功能,输入“regsvr32       zipfldr.dll”即可。

    C、防范脚本病毒

            当前嵌在网页中的脚本病毒很是厉害。很多脚本病毒的复制、传播都离不开“FSO对象(File System Object)”,因此禁用“File System Object”就能有效地控制脚本病毒的传播。方法——
          单击“开始-->运行”,在“运行”窗口中,输入”regsvr32 /u scrrun.dll",就可以禁用FSO对象。需要使用FSO对象时,输入“regsvr32 scrrun.dll ”即可。

  • 软件测试职业发展三步曲之一

    2008-09-09 17:28:35

    软件测试职业发展三步曲之一






    http://hr.51testing.com/testcareer.asp
    软件测试职业发展三步曲之一

    ——软件测试职业发展方向

    作者:叶赫华


    天地玄黄,宇宙洪荒;所谓光阴似箭,因为一转眼滚滚的历史车轮就将人类文明推进了二十一世纪的信息时代!葛大爷有对白曰:“二十一世纪最宝贵的是什么?”对曰:“人才!”何为人才?sincky曰:“适应时代潮流,把握社会需求,并为我中华老大帝国创造社会价值的人!”哎哟,不诹了,其实今天笔者在这里要和大家探讨的,是软件测试的职业发展问题,重点要阐述的是软件测试从业者的职业发展方向,欢迎大家按enter键换行,继续浏览!
       一个人从大学毕业,即开始发生从学生时代向职业人士的过渡,这种过渡走的好,可以实现毕生宿愿,体现个人价值,不管你是否喜欢,功名、利禄尽收眼底;如果走的不好,则会误入歧途,纵有凌云壮志、万丈豪情,难免一生郁郁不得志,终归化作片片飞尘,无语对穹苍!那么如何才能顺利的完成这种过渡、踏上我们豪迈的职业旅程呢?答曰:认清自己,选择适途!战国的魏人荆轲具有“十步杀一人,千里不留行”的本领,曾向魏王献策曰:“国君,我是职业杀手,我杀人的技术很强!”魏王问:“那么你想杀谁呢?”对曰:“杀他个国君如何?”魏王大惊,慌然离去!后来荆轲离开魏国,与燕太子丹密谋,留下了“图穷匕首见”、“荆轲刺秦王”的千古佳话。荆轲,良禽也,择木而栖和太子丹合作,是他的高明之处;不过笔者认为他是一个典型的“低管理、高技能”的人才,当他紧握嬴政的脖领、持剑相逼时,他太得意忘性了,可见他没有领导的“统御力”和“决断力”,所以落了个刺杀失败、拔剑自刎的下场,虽然他的侠义与胆识流畅千古,但是终究是个“杀手”而已;当今社会下,如果“低管理、高技能”的人干工作干到丢了性命,那也真是一个笑谈了!

       目前我们国家高等学历大幅度扩招,造成社会的低端人才严重过剩,大学生毕业找不到工作、或者找不到合适的工作例子鳞次栉比;但是社会各行各业对高端人才的需求又求贤若渴;那么如何解决这种矛盾呢?从大环境来说,国家应该改革教育体制、提高教学质量、重视高端人才的培养,但是,一个问题一旦上升到国家的层次,就要等它个十年八年!我们没有办法改变世界,但是我们有能力改变自己;所以我们从个人的角度来讲,讲讲我们这些软件测试的从业者们,如何“认清自己、选择适途!”

       纵观当今社会各行各业,对于个人的职业发展方向,从宏观上都可以划分为四个群体,即:

       “低管理、低技能”
       “高管理、低技能”
       “低管理、高技能”
       “高管理、高技能”

       而在IT 行业这种划分方法更为合理,sincky为其命名为“一起点-三方向示意图”:



       告别了象牙塔,带着对校园生活里那段风花雪月的追忆,年轻的毕业生们走上了社会;这时候的年轻人,大多数是属于“低管理、低技能”的群体,我们没有工作经验,不知道企业的工作流程,不清楚各个职业的工作技能,更不具备任何行业的管理能力;然而值得庆幸的是,人类问明发展到现在所出现的众多行业,都已经有了众多可以参考的群体,这些群体就理所当然的成了我们可以借鉴的发展方向!虽然我们的起点都是一个,但是可以选择的发展方向却是丰富多样!

       高管理-低技能,即是我们通常所说的管理路线!在IT业,这个方向的成功者不乏项目经理、项目总监直至企业的最高管理层;但是走这个方向也要有技术方面的积累,因为管理者的影响力中,除了职位赋予的权力以外,还包括个人人格方面的能力和专业领域的专业能力,而后者就是技术水平!而计算机行业本身,也决定了技术底蕴对职业发展的重要影响,所以年轻的IT朋友们,如果想为自己的职业人生设计成这个路线,除了适当的技术积累外,更要有意识的锻炼自己的管理素质,下图可做参考:




       低管理-高技能,即通常所说的技术路线!IT业以技术为主导,对于喜欢钻研技术、探讨技术的人,可以选择该条路线,走的深入、走的彻底!只因中国对于技术与管理的认识不同,造成很多人认为做技术不赚钱、不被重视,自身误以为不过是个工程师而已,所做事情只是辅助企业的运作。实际上,在欧美发达国家,资深技术人员的薪资非常高,从业时间的周期也相当长,在Microsoft、IBM等巨头企业,不乏年龄在50岁以上的资深程序员或系统架构师,而其薪资也和高级管理者一样高!而另外一个不争的事实是,企业对于管理的职位是有限的,并且一些优秀的技术人员不愿做管理,或者不适合做管理,因此社会上出现的资深技术专家(或者类似职位),为喜好技术的从业人员提供向上的通道。

       高管理-高技能,即咨询方向是较为均衡、全面的路线,也是众多企业希望员工努力的方向。然而有调查结果显示,由于现实种种因素的制约,大约90%的个人是分别沿着管理方向或者专家方向发展的,真正实现在咨询方向达到一定的高度的人少之又少,而且在这为数不多的咨询方向达到又一定高度的人才,往往又会由于企业资源的限制无法将个人价值完全发挥而最终离开所在企业,成为专业培训师、咨询师;一些国际知名的咨询公司如麦肯锡、安达信乃至毕博或其他,可谓大家在个人职业生涯到达一定阶段,作为自己继续突破职业瓶颈的发展路线。

       那么,对于软件测试的从业者,我们的出路在哪里?我们的职业发展该如何设计?我们的发展方向又有哪些呢?这里笔者和大多数测试同行意识相同,笔者也曾在多篇文章里标明,中国的软件测试行业尚属起步阶段,其发展的步履上布满了荆棘与泥泞;然而其发展速度可谓惊人的,从笔者刚毕业时候对软件测试的“0”概念、从业同行者寥寥无几,到最近2年的各大媒体纷纷报道的中国软件测试人才缺口20万、软件测试工程师将成为未来10年最紧缺的人才之一、包括笔者所接触的众多国内外优秀企业对高端测试人才年薪10万、15万、20万的招聘需求……可见,选择软件测试这个朝阳行业的朋友,做了一个比较正确的选择!然而,如何任何事物总有它的两面性和矛盾性:2006年初在北京、上海、深圳举办的几次春季大型招聘会上,多家企业纷纷打出各类高薪招聘软件测试人员的海报,出人意料的是,收到的简历尚不足招聘岗位数的50%,而合格的竟不足30%……引起我们思考的是,我们的软件测试从业人员还有很大一部分不满足当今社会的需求;而另一层含义是,我们还有很大的提升空间!因此解决该矛盾的突破点是:每个人在这个行业里找到自己的发展方向,规划自己的职业蓝图,从而有针对性的锻炼自己的职业技能,增加个人的职业砝码!



       软件测试职业发展方向,大体上与上述的通用职业发展路线图相吻合,也可以分为管理路线、技术路线、管理+技术路线;只是针对该行业本身,有其特殊性和细致性。其图示如同两个重叠的”V”字样,我们为其命名为“双V模型”;该模型适用于大多数行业性软件测试从业人员,一些特殊领域如游戏测试、嵌入式测试、硬件测试,也可作为参考。本文是三部曲之一,只介绍职业发展方向定义,在下一曲会介绍各个职业方向应该具备的知识与技能体系!

       双V的底点是测试工程师,属于软件测试职业生涯的初级域,其适用范围是入行软件测试3年内的常规测试从业者,其主要工作内容是按照测试主管(即直接上司)分配的任务计划,编写测试用例、执行测试用例、提交软件缺陷,包括提交阶段性测试报告、参与阶段性评审等。初入测试行业,进入企业从事测试工作的人员,都要从该层次做起,虽然有时感觉乏味无趣,甚至迷茫困惑,但是我们可以根据个人的兴趣与特长,向上选择适合自己的路线,因为谁都不会甘心一辈子只做一个普通的测试工程师,那么大家看到这里,就可以摩拳擦掌,看看向上发展的通道中,哪一个适合自己,然后立刻从现在开始,确定自己未来5年、10年甚至一生的发展目标迈进,用笔者经常跟学员说的一句话来形容:把握现在,即刻做起,相信自己是最强的!

       首先是常规路线,即双V模型的重叠线,这条发展路线要求管理与技术并重,因为软件测试的行业特点决定了这个因素:测试工程师向上晋升到测试主管、测试经理、测试总监,直至咨询域的更高方向!

       测试主管是企业项目级主管,对于中小型软件公司也可以是企业级主管,属于中级发展域,适用范围是2到5年职业经验的测试从业者。其工作内容是根据项目经理或测试经理的计划安排,调配测试工程师执行模块级或项目级测试工作,并控制与监督软件缺陷的追踪,保证每个测试环节与阶段的顺利进行。严格来说,这个级别更多属于测试的设计者,因为企业的测试流程搭建是由更高级别的测试经理或相关管理者来做的,测试主管负责该流程的具体实施;而更多的工作,是思考如何对软件进行更加深入、全面的测试。因此笔者认为测试主管比较有创造性的工作内容就是测试设计,而恰恰很多公司忽略了或没有精力来执行此工作内容!应该说,在一个企业里做了3年左右测试工作的人员,很容易晋升到该职位,而之所以晋升,是与个人测试技术的过硬、测试方法的丰富,加上对测试流程的监控力与执行力的职业素质息息相关!

       测试经理是更高级别的测试管理者,属于高级测试方向域。对于大中型软件公司,该职位尤为重要,并且对其职业要求也比较高,一般适合4到8年的测试从业者,在管理与技术能力双双比较成熟的情况下,可以结合具体环境晋升到该级别。测试经理负责企业级或大型项目级总体测试工作的策划与实施。随着软件行业的发展,企业对软件工程里各个角色的定位逐渐明显,测试经理完全与开发经理(一些公司也成为项目经理)平齐,除了需要统筹整个企业级或项目级测试流程外,还要对于不同软件架构、不同开发技术下的测试方法进行研究与探索,为企业的测试团队成员提供指导与解决思路,同时还要合理调配不同专项测试的人力资源(如业务测试工程师、自动化测试工程师、白盒测试工程师、性能测试工程师),对软件进行全面的测试;另外,一些企业里,测试经理还需要与客户交流与沟通,负责部分的销售性或技术支持性工作。嘿嘿,看看那些高薪招聘测试经理的企业对该职位的要求里外语口语的描述,就可见一斑!

       测试总监,属于常规发展路线的最高域,如果再往上发展,那只能是咨询域了;不过笔者并没有将其在图中标记出来,因为该职位对于国内目前的大多数软件公司根本没有设立,也就没必要再在图中体现了。该职位一般在大型或跨国型软件企业,或者专向于测试服务型企业有所设立,由于其企业自身的职位定位不同,以及软件测试整体行情所处的阶段,这里不好归纳陈述;但是一般设立测试总监的企业,该职位都相当于CTO或副总的级别,是企业级或集团级测试工作的最高领导者,驾驭着企业全部的测试与测试相关资源,管理着企业的全部测试及质量类工作。而其职业要求,也是技术与管理双结合;基于目前软件测试行情看,这种高管理-高技能的发展目标,不会适合大多数人的选择,社会也不会提供如此众多的测试总监职位让我们去应征!

       应该说,大多数测试从业者都不是技术与管理双优的人,而如今一些到达测试经理或测试总监级别的优秀测试人才,已经领先一步开辟了这条发展路线的先河,希望这些朋友和大家多多分享经验,让更多的朋友弥补自己管理或技术上的不足,在这条路线上有所建树,共同提高,在实现个人人生价值的同时,也自然而然的推动了软件测试行业的发展;行业发展了,测试人员不再被忽视了,待遇自然也提高了,也就不会有很多朋友迷茫的跟我说“我的日常工作只是点击按钮和按键盘”了,因为我们相信行业的不断成熟,会逐渐将软件测试职业细化,我们的从业者就可以真正的在如下的管理路线和技术路线找到自己的位置,并潜心走向深入的!

       软件测试,是技术主导的职业;不管选择哪条发展路线,都是需要一定的技术沉淀,只是相对来说,管理路线对技术方面要求不高而已。那么我们就先挑重头的技术路线展开讨论。一般来说,一个普通的测试工程师刚入行,3个月左右熟悉企业的工作流程和模式,那么今后的工作内容趋于平稳。然而社会是残酷的!如果单单停留在测试工程师的阶段,若干年后,相信你再也竞争不过那个时候的应届毕业生,当你的工作技能和职业素质趋于与那些朝气蓬勃的年轻人相当时,企业会毫不留情的选择他们,而release你,因为你的成本消耗要比他们高,这是大实话!然而现实又是公平的!因为软件开发技术的不断日新月异,软件功能需求的不断丰富多样,决定软件开发这一系统工程的错综复杂,因此为了保证软件的质量,就要提高测试的水平,这也就为软件测试职业的细化起到先决因素,也是目前社会上出现招聘专项测试工程师的必然趋势!因此,这个趋势给了我们这些常规测试工程师一个空前的好机会!所谓“以毒攻毒”,软件开发靠的是技术,为了测试软件,也必须用技术;那么我们就来看一下从技术路线,软件测试职业发展有哪些方向。

       技术路线,笔者结合国内外软件测试行业现状,划分为三个半方向,分别是自动化测试工程师、白盒测试工程师、性能测试工程师和认证测试工程师,在“双V模型”中右侧体现;前三者适用于通用软件测试领域,认证测试工程师乃嵌入式测试领域职位,至少目前仅出现在嵌入式领域,因此以虚线标记,即“三个半”的“半”。前三条路线对技术的要求程度逐渐增加,三条曲线的斜率也依次递增(认证工程师不参与比较)。

       自动化测试工程师,笔者为其定义在功能测试范畴,指通常所说的依靠自动化测试工具进行软件黑盒测试的工程师。笔者接触的很多测试界朋友,尤其年轻的刚入行者,对测试工具充满了无限的兴趣,他们喜欢那种编写脚本、调试成功后的快感,喜欢看到自定义的日志里记录了本来手工测试烦琐的无聊头顶的工作、而采用自动化方式实现后如此清晰丰富的内容后的兴奋!可以理解,因为笔者也是从那段时光走过来的,现在也负责于我们学员的自动化测试教学工作。从大环境讲,自动化测试是软件测试执行阶段的必然趋势,社会对于软件测试的认可度以及对自动化测试人才的需求必将日益增加,从目前国内做自动化测试的从业者薪资情况看,也普遍高于常规测试工程师,最浅显的道理是“自动化测试比手工测试有了技术含量,^--^”虽然自动化测试在整个行业的普及不是一朝一夕,但是从个人角度讲,自动化测试可以作为个人的发展方向之一,因为如果你率先掌握了这种技术,等到社会需要时,你已成为这个职位的成熟操作者!而国内的51testing把握了时代前沿,与自动化测试工具巨头厂商Mercury(美科利)合作,在中国唯一推出Mercury自动化测试全套技能认证(CPE/SP/CPC),相比其它初等认证,它的实效性和价值性更具意义,也为测试从业者提供了一个进入自动化测试领域的快捷方式!

       白盒测试工程师,笔者定位于在软件测试周期的单元测试阶段对软件进行的代码级测试的人,包括代码走读、代码功能与逻辑测试、代码内存泄漏检查、代码运行效率检查、代码测试覆盖率分析等。如果说,自动化测试只是依靠脚本语言完成测试脚本编写与调试的过程(因为自动化测试工程师的工作重点不在编写脚本),对于自动化测试工程师的技术要求要相对偏低的话,那么白盒测试工程师就要对大型程序开发语言的完全掌握,因此其技术要求相对偏高!而另一方面,白盒测试在目前国内软件行情下,一些公司根本不做,其成本高、代价大的特点决定了这个现状,而一些对软件质量要求非常高(如军事类、电信类、财务金融类等)的企业,也会调动开发工程师来实施此事。但是,还是那句话,测试行业在发展,测试人员能力在提升,软件的开发技术在复杂化,要对软件进行尽可能全面的测试,白盒测试不可忽视!当下专门高薪招聘白盒测试工程师的企业也比比皆是,从中我们可以感知,白盒测试工程师会是很多有开发背景、意欲进入测试行业的良好突破口,白盒测试人员的需求也会逐渐增加。

       性能测试工程师,即在系统测试阶段、功能测试后对软件系统性能指标进行采集分析和运行效率检测的人。笔者认为,在一个尽量压缩的测试流程里,功能测试可以手工进行,白盒测试可以不做,但是性能测试必须要做,除非该软件非网络类软件即单机版软件!这里笔者再提一个观点供大家参考:软件测试,从宏观上可以划分为三个大方面:功能测试、性能测试、安全性测试,功能测试说明软件做对了,功能测试+性能测试说明软件做好了,三者结合起来说明软件做的非常好!安全测试暂且抛之不提,这是下一个发展域的内容,但是为了把软件做好,为了真正保证软件的质量,性能测试绝不容忽视;只因目前很多企业由于时间、成本、人力条件的限制,暂且不做性能测试。性能测试工程师相对来说,是三个技术路线里技术要求最高的,因为软件的性能瓶颈归根结底落实到代码的运行效率这个问题上,因此性能测试要做好,性能测试工程师起码要懂开发;而为了发现性能问题,要懂软件开发架构;为了定位性能问题,要懂操作系统、网络协议、应用服务器乃至数据库的原理与使用;为了最终解决性能问题,要根据定位的问题有针对性的对代码、操作系统、网络架构、服务器、数据库进行优化!当然性能测试是一个系统工程师,绝对不是一两个人的事情,对于常规性能测试工程师,具备定位性能问题的能力即可。正因为性能测试工程师技术要求的高超,该职位的待遇也是目前测试技术路线最高薪的一个,实为综合技术能力较强的测试人员的明智选择!

       上述四职业路线由于其技术程度的突出,一般在企业里由测试经理直接所属,与测试主管级别具有相同的待遇,并处于相同发展域。

       进入技术路线的高级域,根据中级域的四个路线,可以细分成五个路线,分别是资深自动化测试工程师、资深白盒测试工程师、资深性能测试工程师、安全性测试工程师、标准化工程师,这些高级技术类人才完全与常规测试经理平齐,属于软件测试职业发展高级域。

       资深自动化测试工程师由自动化测试工程师晋升而来。如果说常规自动化测试工程师只是负责自动化测试脚本本身的设计与开发,那么资深自动化测试工程师的工作内容就是自动化测试这项工作的实施!笔者早年在IBM公开讲座时候,讲过一篇《以RUP原则实施自动化测试》的主题,RUP里提倡自动化测试是一个庞大的系统工程,绝对不是有了技术、有了工具、有了掌握技术和使用工具的人就可以实施的,而是应该把自动化测试当成一个针对企业自身的项目来看待,需要经过引入、计划、设计、测试、执行、配置管理等环节(参加sincky的blog“天行健-君子以自强不息”),而这些自动化测试的流程搭建,就是资深自动化测试工程师的份内之事。另外,笔者要强调,按照国内外自动化测试领域的发展趋势,我们把自动化测试划分为四个发展阶段(我的blog里也有阐述);也就是说,录制脚本-添加验证点-回放脚本只是最初始的自动化阶段,要在企业实施自动化测试,要有资深自动化测试工程师来设计数据驱动,开发测试框架,甚至一些企业内部自主开发小型测试工具(而非商业工具)的先例,这些也都是建立在资深自动化测试工程师具有深厚的技术底蕴后,主导其他人员协调完成的事情。

       资深白盒测试工程师,其工作内容包含常规白盒测试工程师的内容,除此之外,要协助测试经理或测试总监攻关测试方法与技术性难题,因此其技术水平更加雄厚。如果常规白盒测试工程师是停留在某种程序设计语言类型的代码级测试,那么资深白盒测试工程师就要脱离程序设计语言本身,结合不同架构、多种开发技术交互的情况下,寻找代码测试方法,并具有对代码优化的能力。由于该路线在国内很少有实例参考,这里不再赘述。

       资深性能测试工程师,来源于常规性能测试工程师,按照常规性能测试工程师的技术要求,资深性能测试工程师应该具备性能测试整体方案的设计能力,以及软件系统性能问题定位和性能优化的能力!初此之外,也要对主流的软件开发模式下的应用系统具有敏锐的洞察意识和感知意识。软件开发的架构会日益复杂化,软件应用的各种软硬件平台、数据库类型、服务器类型、网络协议层出不穷,不得不说,都为性能测试的从业者们提出了严峻的考验!值得庆幸的是,各种同类产品的厂商在开发产品时都遵从业内统一标准,性能测试人员结合自身的丰富经验,加上对软件性能测试技术的研究,这样的考验我们欣然面对,这样的人才则会日益增多,在软件测试行业里充当佼佼者地位。

       安全性测试工程师,笔者将其从性能测试工程师衍生出来,因为只有具备性能测试经验的人,才对软件的开发模式、实现架构和技术本身充分了解,才会感知和预见软件系统存在的安全漏洞,加上其本人是测试出身,才知道如何通过系统漏洞尝试攻击软件系统,达到测试的目的。目前国内软件行业对于安全性测试的认识尚未清晰,该职业也更没有普及,一般只限于军事类、机密类、防病毒类或其他高安全性软件的测试工作中。

       再次强调,人类进入文明社会后,任何社会活动都不是独立的个体能够实现的;在高度讲究团队合作、协同办公的今天,软件测试工作更不是测试工程师几个人就能做完所有的事情的;上述各发展路线的技能要求,只是为了增强个人职业突破的砝码,你的砝码越多,“被利用”价值越大,为企业创造利润的程度越高,企业自然给予你更丰厚的回馈!达尔文伯伯的“优胜劣汰”自然规律不会变,“多劳多得、少劳少得”的市场规律也不会变!

       曾经有如此众多的测试职业发展路线放在我面前,结果我没有珍惜;等到软件测试行业发展到成熟阶段,我想入行却入不了行的时候,我才后悔莫及;尘世间干测试最大的不幸莫过于此;如果非要问sincky:再往上的发展通道是什么,那么sincky一定要告诉你,技术专家域!

       在技术路线,向上继续提升的方向,我们称之为“技术专家”;如果说前面描述的技术职位的所涉范围都定位在企业内部,即企业级资深性能测试工程师,那么技术专家,我们可以看作是领域级专项人才!随着软件测试行业的职位不断细化,每个人在自己擅长的领域走向深入,都可以成为该领域的技术专家,技术专家在自已经营的领域里,具有个人独到的见解和深厚的技术实力,而这类人才可以不再从事具体的测试工作,而是提供行业性测试技术咨询、培训等,为软件测试整体行业的发展,起到了鲜明的带头作用。在一些专业的咨询、培训公司,或者IBM、Microsoft等巨型公司,不乏这样的人才;然而目前在我国,这样的人才较少,但是却可以为我们大家提供努力方向,只要我们每个在技术路线供职的测试从业者,规划好自己的职业人生,并以坚韧的毅力和顽强的斗志,若干年后,你我皆可笑谈测试人生,把酒临风,其喜洋洋者矣!而目前在国内几个IT行业发达的省市,专项于软件测试服务或一些大型软件企业,也有这样的职位暂露头角,我们深信,社会对高端人才的需求趋势是越来越大的,更多的优秀企业也会为员工提供更多、更广的发展空间,值此大好形势,就看我们个人如何充分利用这些上升通道了。

       在我们的软件测试从业人员里,有这样一部分群体:他们非计算机相关专业毕业,不懂软件开发,由于国内种种对软件测试人才的偏激认识,认为测试人员不需要懂开发,只要会编写文档、执行用例即可;因此很多测试工程师并不具备开发背景,并且对软件技术掌握肤浅,而对于没有技术底蕴的人强迫其走技术路线,不能不说是一种折磨!因此,这个群体里的朋友,是不是认为自己只能做一辈子常规测试工程师呢?答案是否定的,因为在“双V模型”的左侧,是软件测试职业发展的管理路线。软件测试的管理路线,与通用职业发展示意图的“高管理-低技能”并不完全相同,只因软件测试独具的行业特点,我们认为软件测试行业的非技术路线发展方向,更多的是从软件测试行业衍生出来的职位,如质量保证、配置管理。如果说软件测试职业发展的技术路线更侧重于职业技能的提升,那么这条管理路线则更侧重于职业素质的积累(笔者强调是“侧重”,并不表示不需要);换句话说,技术路线更侧重人的智力因素,而管理路线更侧重人的非智力因素。

       从事了1到3年左右的常规测试工程师,在经过对个人性格特点剖析后,如果认为自己是一个倾向于“高管理-低技能”的类型,那么想要实现自己的职业提升,可以向中级发展域的配置管理工程师、质量保证工程师、业务测试工程师转型。

       配置管理(SCM)与质量保证(SQA)同是CMM中的关键过程域(KPA),也同是现代软件工程里的必要角色,与软件测试同属软件开发团队的重要组成部分。只因这两个角色在软件工程里的人员配比数量相对较少,还不如软件测试这样规模化乃至于形成行业,而最多是一个职业;另外一个社会现象是,企业很少直接从社会直接招聘配置管理工程师和质量保证工程师,而通常的做法是从企业内部的现有测试员工队伍里选拔,而转型后的测试工程师,就成为SCM或SQA。分析其原因,我们可以感知,SCM、SQA与软件测试工程师都是关注于软件质量的相似职位,社会对于配置管理、质量保证的定义和工作内容并未普及,与其直接从社会招聘“0”基础的人来培养,倒不如从软件测试人员里升华!一般来说,这两种职位的上报对象是项目经理或相同级别管理者。

       转型后的配置管理与质量保证工程师,一定要转变一个意识,那就是常规测试工程师的工作范围很大一部分(不是全部)只限于测试流程,而配置管理和质量保证的工作范围是面向整个软件开发流程,二者的职业要求都非常重视软件工程知识体系的建立和软件开发总体流程的实施能力。由于配置管理工程师除了企业配置管理流程的搭建与实施外,一般会涉及配置管理工具的管理与维护,而质量保证工程师更多的工作是软件开发流程的控制与维护,故而配置管理对技术的要求稍高于质量保证。随着我国软件行业水平的不断发展,众多软件公司纷纷通过CMM/CMMI,企业对于软件开发团队的角色配比制度也将逐渐健全,当前社会对配置管理与质量保证工程师的职位需求日益增加,种种现象表明,对于软件测试工程师出身的从业者,转型至SCM/SQA不失为突破个人职业生涯瓶颈的又一通道!

       业务测试工程师,笔者定义为面向行业类软件业务逻辑与工作流测试的人员。当前软件开发类型,很大一部分是行业类软件的应用,如ERP、SCM、CRM、OA、电信、金融、财务、嵌入式、通信、手机、游戏……这就要求从事行业类软件测试的人员具备行业背景、业务知识,熟练该行业工作流程。从社会上出现的很多对此类经验要求的测试工程师招聘信息中,我们更加肯定这种趋势;所谓存在即是道理,既然社会上有了需求,那么就可以作为个人发展的方向。而另外一个特点是,业务测试工程师的工作内容主要是黑盒测试,属于功能范畴,因此对技术要求不大,设置一些大型行业类软件公司的业务测试工程师薪资丰厚,但是完全可以不懂技术,因为它的工作性质决定了不需要懂很多的技术!他们甚至连软件的界面测试都不做——交给常规测试工程师实施,而完全关注软件的业务性和易用性,由于其深厚的行业背景,可以为软件的在正式发布前提出很多建设性的意见,而这些建议正是软件开发商提高产品易用性、增加用户满意度、开拓市场、创造利润的关键因素之一!

       当管理路线的中级域方向继续上升至高级域,就分别到达配置管理经理、质量保证经理、产品经理、业务专家,这类人才地位高、待遇厚,一般资深的软件工程领域专家都聚集于此。

       如果说配置管理工程师、质量保证工程师更加侧重于配置管理流程、质量保证流程的实施与日常管理维护,那么配置管理经理、质量保证经理就是更侧重于配置管理流程、质量保证流程的建立与改进。一般在中小软件企业,可能没有这两个角色,而全部的配置管理或质量保证工作都由工程师担当;但是大中型软件企业对资深配置管理经理、资深质保经理求贤若渴。软件系统越庞大,软件开发团队规模就越庞大,软件开发流程中出现问题的几率就越高,高效管理软件开发流程,不断改进软件质量,是每个软件公司在技术上没有顾虑后的下一个急需攻破的难关!

       业务专家,属于行业内咨询、顾问的角色,已经几乎脱离了测试工作本身,而更多为企业的产品需求分析、设计、开发、测试等各个环节提供指导工作,其目的也是提高软件的易用性和稳定性,减少后期不必要的需求变更。该职位也同样在目前热点行业的大中型软件企业有所设立。

       产品经理,这个职位在很多企业有所设立,笔者认为它是质保经理的派生,只是它更侧重于软件在产品化之前的质量监控工作,包括软件开发流程、软件测试等技术与管理的各个方面。由于该职位在业内没有明显定义,而根据不同企业的职位定位不同,这里无法统一陈述。

       管理路线的最高发展域是咨询域,与技术路线的专家域类似,在配置管理、质量保证、软件产品化、行业领域达到高深造诣的人才,他们有丰富的从业经验、深厚的管理底蕴,具有对软件工程高瞻远瞩的慧眼和胆识,往往供职在专业的咨询与培训公司,提供IT业管理类咨询与培训的服务,推动着软件行业的前进。国内外很多为软件企业进行CMM咨询和实施的公司里,就是这些人才的大本营之一!

       笔者认为,在“双V模型”的管理路线里,中低级发展域的人才对技术与管理的区分较为明显,而到了高级与更高级发展域,更多的是复合型人才,软件业以技术为主导,没有一定技术积累,还是很难达到高级境界;要在管理路线练出“上乘武功”,还是希望大家在主攻管理与流程类课题的同时,多丰富下自身的技术层面,嘿嘿!

    另外,笔者提倡管理与技术两条路线的平齐,而并非目前社会上认为的技术要比管理低一等,技术是靠吃青春饭,在这些人才到达最高发展域的“咨询”与“专家”层面,二者应该完全具有相同的地位和待遇,只是“称谓”不同罢了!

       “双V模型”是sincky结合当前国内外软件测试行业现状提出的职业发展流程图,仅供测试从业者参考,并非一个“死”的框架,大家不要拘泥于流程图本身;其实目前国内很多上升到高级域或最高域的资深人才,很多都是跳跃式、甚至跨越式的职业发展,因为命运掌握在自己手里,任何人都剥夺不了设计自身人生蓝图的权利;而另外一个角度是,任何人都不该不珍惜为自己规划职业生涯的机会!

       软件测试,一个日出东方的国际型行业,虽然偶尔会弥漫晨雾,甚或有暴雨来袭,但是我们都该坚持!有人说:“什么叫失败?”答曰:“放弃就是失败!”每一次当我们身处逆境时,决不能用软弱的眼泪作为走向明天的见证,更不能用脆弱的感情去拴住生命的航线;是雄鹰就该搏击长空,是蛟龙就该挽起狂澜;沧海横流,方显英雄本色,疆场搏斗,可露壮士肝胆!人生没有豁免权,每位从业者只有怀着不息的斗志,乘千里长风,破万里巨浪,才能支配命运走向辉煌的明天!

      
       后记:sincky,网名叶赫华;在我从事软件测试培训业的1年多里,接触了国内很多除了我们学员以外的软件测试界朋友,其中新手居多。在我们的网站、论坛、我个人的blog、我的qq群乃至其他朋友以我名义建的qq群里,最让大家感冒的话题就是测试人员的职业发展!大家都在做测试工作,可以不知道明天做什么,明年做什么,或者若干年后做什么!“行有行规”,除非不在软件测试这个行业,否则就要遵守这个行业的规律!我觉得,我们的学员有职业发展培训课程,可是面对外界这些热心朋友的提问,长久以来,我一直想集中的写点东西,起码让刚入行的新手对这一行业的职业发展方向有一个直观的感性认知,我也心满意足!但是这个行业还太嫩,并没有章据可循,我搜索了几天的国外网站,可是没有成文的观点可以参考!后来决定自己来写,参照的对象就是国内现状下的测试从业者,于是在和国内各个领域的测试高手朋友们的交流后,我在2006春节前夕用了一白天的时间画出了“双V模型”图,而这篇文章的撰稿,用了我一天一夜的满满时间。在经历几次修改后,这篇文章在今天终于正式发布了,没有别的,只是希望给国内测试界朋友一个参考,欢迎大家批评、讨论,发表自己的观点!(我的msn地址:sinckyzhang@gmail.com)“双V模型”里很多职位名词在国内叫法不一,比如有人把初级测试工程师叫做测试员,我不赞同这种叫法,毕竟不是主流;而我的目的,只是通过这些职位的工作内容来告诉大家在职业定位上需要达到的高度,名字嘛,只是个代号而已!

       我的设想是写三篇文章,叫做《软件测试职业发展三步曲》系列,本文是第二曲,也是三步曲的核心,首先问世,主题是“软件测试职业发展方向”,将来还会陆续推出第一曲“软件测试职业选择”、第三曲“软件测试技能体系”,呵呵,如果大家对本文表示肯定的态度比较多,我会继续写下去,否则我还是回家干我的山贼那份很有前途的职业吧!^-^ (2006年4月10日)

    [ 本帖最后由 songfun 于 2006-12-25 14:58 编辑 ]
  • Web 测试经典案例

    2008-09-01 15:41:04

    1. 概述

    随着web应用的增多,新的模式解决方案中以web为核心的应用也越来越多,很多公司各种应用的架构都以B/S及web应用为主,但是有关WEB测试方面的内容并没有相应的总结,所以我在这里对web的测试方法和采用的测试技术进行总结,便于内部交流。

    测试方法尽量涵盖web程序的各个方面,测试技术方面在继承传统测试技术的技术上结合web应用的特点。

    相关的测试和实现技术也有着很大的关系,由于本公司使用J2EE体系,也许例子中只有JAVA平台可以使用,.NET平台测试技术暂时不涉及,如果你有请与我联系。

     2. 测试方法

    说明:测试方法的选择取决你的测试策略。

    一般的web测试和以往的应用程序的测试的侧重点不完全相同,基本包括以下几个方面。
    当然圆满的完成测试还要有好的团体和流程等的方方面面的支持,你同样应该对这些方面进行注意。
    有些测试方法设计到了流程,哪些应该在你的测试团队建设中建立。

     2.1 界面测试

    现在一般人都有使用浏览器浏览网页的经历,用户虽然不是专业人员但是对界面效果的印象是很重要的。如果你注重这方面的测试,那么验证应用程序是否易于使用就非常重要了。很多人认为这是测试中最不重要的部分,但是恰恰相反界面对不懂技术的客户来说那相当关键,慢慢体会你会明白的。

    方法上可以根据设计文档,如果够专业的话可以专业美工人员,来确定整体风格页面风格,然后根据这个可以页面人员可以生成静态的HTML,CSS等甚至生成几套不用的方案来讨论,或者交给客户评审,最后形成统一的风格的页面/框架。注意不要靠程序员的美术素养形成你的web风格,那样可能会很糟糕。

    主要包括以下几个方面的内容:

    站点地图和导航条位置、是否合理、是否可以导航等内容布局布局是否合理,滚动条等简介说明说明文字是否合理,位置,是否正确
    背景/色调是否正确、美观,是否符合用户需求;
    页面在窗口中的显示是否正确、美观(在调整浏览器窗口大小时,屏幕刷新是否正确)表单样式大小,格式,是否对提交数据进行验证(如果在页面部分进行验证的话)等
    连接连接的形式,位置,是否易于理解等

    web测试的主要页面元素

    页面元素的容错性列表(如输入框、时间列表或日历)
    页面元素清单(为实现功能,是否将所需要的元素全部都列出来了,如按钮、单选框、复选框、列表框、超连接、输入框等等)
    页面元素的容错性是否存在
    页面元素的容错性是否正确
    页面元素基本功能是否实现(如文字特效、动画特效、按钮、超连接)
    页面元素的外形、摆放位置(如按钮、列表框、核选框、输入框、超连接等)
    页面元素是否显示正确(主要针对文字、图形、签章)
    元素是否显示(元素是否存在)
    页面元素清单(为实现功能,是否将所需要的元素全部都列出来了,如按钮、单选框、复选框、列表框、超连接、输入框等等)

    测试技术

    通过页面走查,浏览确定使用的页面是否符合需求。可以结合兼容性测试对不用分辨率下页面显示效果,如果有影响应该交给设计人员提出解决方案。
    可以结合数据定义文档查看表单项的内容,长度等信息。
    对于动态生成的页面最好也能进行浏览查看。如Servelet部分可以结合编码规范,进行代码走查。是否支持中文,如果数据用XML封装要做的工作会多一点等等。

    界面测试要素:
    符合标准和规范,灵活性,正确性,直观性,舒适性,实用性,一致性

    1.直观性:

    用户界面是否洁净,不唐突,不拥挤.界面不应该为用户制造障碍.所需功能或者期待的响应应该明显,并在预期出现的地方.

    界面组织和布局合理吗?是否允许用户轻松地从一个功能转到另一个功能?下一步做什么明显吗?任何时刻都可以决定放弃或者退回,退出吗?输入得到承认了吗?菜单或者窗口是否深藏不露?
    有多余功能吗?软件整体抑或局部是否做得太多?是否有太多特性把工作复杂化了?是否感到信息太庞杂?
    如果其他所有努力失败,帮助系统真能帮忙吗?

    2.一致性

    快速键和菜单选项.在Windows 中按F1键总是得到帮助信息
    术语和命令.整个软件使用同样的术语吗?特性命名一致吗?例如,Find是否一直叫Find,而不是有时叫Search?
    软件是否一直面向同一级别用户?带有花哨用户界面的趣味贺卡程序不应该显示泄露技术机密的错误提示信息.
    按钮位置和等价的按键.大家是否注意到对话框有OK按钮和Cancle按钮时,OK按钮总是在上方或者左方,而Cancle按钮总是在下方或右方?同样原因,Cancle按钮的等价按键通常是Esc,而选中按钮的等价按钮通常是Enter.保持一致.

    3.灵活性

    状态跳转.灵活的软件实现同一任务有多种选择方式.
    状态终止和跳过,具有容错处理能力.
    数据输入和输出.用户希望有多种方法输入数据和查看结果.例如,在写字板插入文字可用键盘输入,粘贴,从6种文件格式读入,作为对象插入,或者用鼠标从其他程序拖动.

    4.舒适性
    恰当.软件外观和感觉应该与所做的工作和使用者相符.
    错误处理.程序应该在用户执行严重错误的操作之前提出警告,并允许用户恢复由于错误操作导致丢失的数据.如大家认为undo /redo是当然的.
    性能.快不见得是好事.要让用户看得清程序在做什么,它是有反应的.

    2.2 功能测试
    对功能测试是测试中的重点
    主要包括一下几个方面的内容
    连接这个连接和界面测试中的连接不同那里注重的是连接方式和位置,如是图像还是文字放置的位置等,还是其他的方式。这里的连接注重功能。如是否有连接,连接的是否是说明的位置等。

    表单提交应当模拟用户提交,验证是否完成功能,如注册信息,要测试这些程序,需要验证服务器能正确保存这些数据,而且后台运行的程序能正确解释和使用这些信息。还有数据正确性验证,异常处理等,最好结合易用性要求等。B/S结构实现的功能可能主要的就在这里,提交数据,处理数据等如果有固定的操作流程可以考虑自动化测试工具的录制功能,编写可重复使用的脚本代码,可以在测试、回归测试时运行以便减轻测试人员工作量。

    Cookies 验证如果系统使用了cookie,测试人员需要对它们进行检测。如果在 cookies 中保存了注册信息,请确认该 cookie能够正常工作而且已对这些信息已经加密。如果使用 cookie 来统计次数,需要验证次数累计正确。关于cookie的使用可以参考浏览器的帮助信息。如果使用B/S结构cookies中存放的信息更多。功能易用性测试完成了功能测试可以对应用性进行了解,最好听听客户的反映,在可以的情况下对程序进行改进是很有必要的,和客户保持互动对系统满意度也是很有帮助的。

    测试技术功能测试的测试技术可是很多的,我们可以结合实际环境选择使用

    白盒测试技术(White Box Testing) 深入到代码一级的测试,使用这种技术发现问题最早,效果也是最好的。该技术主要的特征是测试对象进入了代码内部,根据开发人员对代码和对程序的熟悉程度,对有需要的部分进行在软件编码阶段,开发人员根据自己对代码的理解和接触所进行的软件测试叫做白盒测试。这一阶段测试以软件开发人员为主,在JAVA平台使用Xunit系列工具进行测试,Xunit测试工具是类一级的测试工具对每一个类和该类的方法进行测试。

    黑盒测试技术(Black Box Testing)黑盒测试的内容主要有以下几个方面,但是主要还是功能部分。主要是覆盖全部的功能,可以结合兼容,性能测试等方面进行,根据软件需求,设计文档,模拟客户场景随系统进行实际的测试,这种测试技术是使用最多的测试技术涵盖了测试的方方面面,可以考虑以下方面

    正确性 (Correctness):计算结果,命名等方面?

    可用性 (Usability):是否可以满足软件的需求说明。

    边界条件 (Boundary Condition)输入部分的边界值,就是使用一般书中说的等价类划分,试试最大最小和非法数据等等.

    性能 (Performance) 正常使用的时间内系统完成一个任务需要的时间,多人同时使用的时候响应时间,在可以接受范围内.J2EE技术实现的系统在性能方面更是需要照顾的,一般原则是3秒以下接受,3-5秒可以接受,5秒以上就影响易用性了. 如果在测试过程中发现性能问题,修复起来是非常艰难的,因为这常常意味着程序的算法不好,结构不好,或者设计有问题。因此在产品开发的开始阶段,就要考虑到软件的性能问题。

    压力测试 (Stress) 多用户情况可以考虑使用压力测试工具,建议将压力和性能测试结合起来进行.如果有负载平衡的话还要在服务器端打开监测工具,查看服务器CPU使用率,内存占用情况,如果有必要可以模拟大量数据输入,对硬盘的影响等等信息.如果有必要的话必须进行性能优化(软硬件都可以).这里的压力测试针对的是某几项功能.

    错误恢复 (Error Recovery) 错误处理,页面数据验证,包括突然间断电,输入脏数据等.
    安全性测试(Security)这个领域正在研究中,不过防火墙,补丁包.杀毒软件等的就不必说了,不过可以考虑破坏性测试时任意.看了一些资料后得知,这里面设计到的知识\内容可以写本书了,不是一两句可以说清的,特别是一些商务网站,或者跟钱有关,或者和公司秘密有关的web更是,需要这方面的测试,在外国有一种专门干这一行的人叫安全顾问,可以审核代码,提出安全建议,出现紧急事件是的处理办法等,在国内没有听说哪里有专门搞安全技术测试的内容.

    兼容性 (Compatibility) 不同浏览器,不同应用程序版本在实现功能时的表现,不同的上网方式,如果你测试的是一个公共网站的话.

    兼容性测试内容详述
    硬件平台
    浏览器软件和版本:浏览器插件,浏览器选项,视频分辨率和色深.文字大小,调制解调器速率.
    软件配置 (Configuration) 如IE浏览器的不用选项-安全设定最高,禁用脚本程序,等等,你们的程序在各种不用的设置下表现如何.

    单元测试技术(Unit Test):
    2.2.1 下面是对白盒测试和单元测试的区别的论述:

    单元测试和白盒测试是不同的,虽然单元测试和白盒测试都是关注功能虽然他们都需要代码支持,但是级别不同,白盒测试关注的是类中一个方法的功能是更小的单位,但是完成一个单元测试可能需要N多类,所以说作单元测试需要什么写驱动和稳定桩,比如查询单元是一个查询包包N多的测试类,测试数据,运行他需要提供数据的部分,输入参数和发出命令的驱动等等.是比类大的一个整体进行的.

    另一个明显的区别是白盒测试不会关注类接口,但是单元测试主要的内容就是类接口测试.

    不过很多时候是很少区分的,因为这两种技术实现起来有很多相互关联的部分.不过要看你对质量的关注程度来决定.

    2.2.2 功能测试边界测试\越界测试技术详述
    边界条件
    边界条件是指软件计划的操作界限所在的边缘条件.
    如果软件测试问题包含确定的边界,那么数据类型可能是:
    数值速度字符地址位置尺寸数量
    同时,考虑这些类型的下述特征:
    第一个/最后一个最小值/最大值
    开始/完成超过/在内
    空/满最短/最长
    最慢/最快最早/最迟
    最大/最小最高/最低
    相邻/最远
    越界测试
    通常是简单加1或者很小的数(对于最大值)和减少1或者很小的数(对于最小值),例如:
    第一个减1/最后一个加1
    开始减1/完成加1
    空了再减/满了再加
    慢上加慢/快上加快
    最大数加1/最小数减1
    最小值减1/最大值加1
    刚好超过/刚好在内
    短了再短/长了再长
    早了更早/晚了更晚
    最高加1/最低减1

    另一些该注意的输入:默认,空白,空值,零值和无;非法,错误,不正确和垃圾数据.

    2.2.3 状态测试技术

    软件可能进入的每一种独立状态;
    从一种状态转入另一种状态所需的输入和条件;
    进入或退出某种状态时的设置条件及输入结果.

    具体测试方法可以参考如下:
    每种状态至少访问一次;
    测试看起来最常见最普遍的状态转换;
    测试状态之间最不常用的分支
    测试所有错误状态及其返回值
    测试随机状态转换

    2.2.4 竞争条件测试技术

    竞争条件典型情形参考如下:
    两个不同的程序同时保存或打开同一个文档
    共享同一台打印机,通信端口或者其他外围设备
    当软件处于读取或者修改状态时按键或者单击鼠标
    同时关闭或者启动软件的多个实例
    同时使用不同的程序访问一个共同数据库

    2.3 负载\压力测试(StressTest)

    在这里的负载\压力和功能测试中的不同,他是系统测试的内容,是基本功能已经通过后进行的.可以在集成测试阶段,亦可以在系统测试阶段进行.

    使用负载测试工具进行,虚拟一定数量的用户看一看系统的表现,是否满足定义中的指标.

    负载测试一般使用工具完成,loadrunner,webload,was,ewl,e-test等,主要的内容都是编写出测试脚本,脚本中一般包括用户一般常用的功能,然后运行,得出报告。所以负载测试包括的主要内容就不介绍了。

    负载测试技术在各种极限情况下对产品进行测试 (如很多人同时使用该软件,或者反复运行该软件),以检查产品的长期稳定性。例如,使用压力测试工具对web服务器进行压力测试. 本项测试可以帮助找到一些大型的问题,如死机、崩损、内存泄漏等,因为有些存在内存泄漏问题的程序,在运行一两次时可能不会出现问题,但是如果运行了成千上万次,内存泄漏得越来越多,就会导致系统崩滑。用J2EE实现的系统很少但是并不是没有内存问题.

    无论什么工具基本的技术都是利用线程技术模仿和虚拟用户,在这里主要的难点在与测试脚本的编写,每种工具使用的脚本都不一样,但是大多数工具都提供录制功能就算是不会编码的测试人员同样可以测试。

    对负载工具的延伸使用可以进行系统稳定性测试,系统极限测试,如使用100的Load Size连续使用24小时,微软定义的通过准则是通过72小时测试的程序一般不会出现稳定性的问题。

    2.4 回归测试 (Regression Test)

    过一段时间以后,再回过头来对以前修复过的Bug重新进行测试,看该Bug 是否会重新出现。

    回归测试技术可以在测试的各个阶段出现,无论是单元测试还是集成测试还是系统测试。是对以前问题进行验证的过程。

    回归测试的目的就是保证以前已经修复的Bug不会再出现。实际上,许多Bug都是在回归测试时发现的,在此阶段,我们首先要检查以前找到的Bug 是否已经更正了。值得注意的是,已经更正的Bug 也可能又回来了,有的Bug 经过修改之后可能又产生了新的Bug。所以,回归测试可保证已更正的Bug不再重现,不产生新的Bug。

    2.5 Alpha 和Beta 测试 (Alpha and Beta Test):

    在正式发布产品之前往往要先发布一些测试版,让用户能够反馈出相关信息,或者找到存在的Bug,以便在正式版中得到解决。

    特别是在有客户参加的情况下,对系统进行测试可能会出现一些我们没有考虑的情况,还可以解决一些客户实际关心的问题

     3 不同的测试技术区分

    3.1 覆盖测试技术

    说明:测试覆盖率可以看出测试的完成度,在测试分析报告中可以作为量化指标的依据,测试覆盖率越高效果越好。

    覆盖测试可以是程序代码的执行路径覆盖,亦可以是功能实现的步骤覆盖(可以理解成流程图的路径覆盖)。

    该技术可以用在任何测试阶段,包括单元测坏死、集成测试、系统测试。

    使用该技术时可以使用以上的任何测试方法和测试技术。

    3.2 白盒测试和黑盒测试技术

    白盒测试技术 (White Box Testing)该技术主要的特征是测试对象进入了代码内部,根据开发人员对代码和对程序的熟悉程度,对有需要的部分进行在软件编码阶段,开发人员根据自己对代码的理解和接触所进行的软件测试叫做白盒测试。这一阶段测试以软件开发人员为主,使用Xunit系列工具进行测试,可以包括很多方面如功能性能等。

    黑盒测试 (Black Box Testing)测试的主体部分黑盒测试的内容主要有以下几个方面,但是主要还是功能部分。主要是覆盖全部的功能,可以结合兼容,性能测试等方面进行,包括的不同测试类型请参考以上内容。

    3.3 手工测试和自动化测试

    手工测试(Manual Testing):即依靠人力来查找Bug。方法可以参考上边的测试,也可以根据对实现技术及经验等进行不同的测试。

    自动测试(Automation Testing)使用有针对工具实行。可以作出自动化测试的计划,对可以进行自动化测试的部分编写或者录制相应的脚本,可以加入功能,容错,表单提交等,可以参考MI,Rational或者其他类测试工具说明.

    根据权威的软件测试经验,手工测试还是主要的测试方法,自动测试不够灵活,在这里不再详述。微软的测试过程80%还是手工完成。

    自动测试永远也代替不了手工测试,但是手工测试的工作量很大是不争的事实。

    3.4 根据RUP标准按阶段区分测试

    单元测试在上边有详细的叙述,还有针对单元测试和集成测试的论述,请参考。

    集成测试分为功能集成测试和系统集成测试,相互有调用的功能集成,在系统环境下功能相互调用的影响等,使用方法可以任意选用上面的内容。注重功能方面。

    系统测试在功能实现的基础上,可以加入兼容性,易用性,性能等等

    验收测试可以包括Alpha和Beta测试,在这里就不再详述。

     4. 存在风险及解决方法

    说明:测试不能找出所有的问题,只是尽量将问题在开发阶段解决大多数的问题而已。
    测试风险如下:

    软硬件的测试环境提供上也对测试结果有很大的影响。
    测试团队的水平,经验,合作效果等
    整个开发流程对测试的重视程度,测试的进入时间等
    由于测试环境操作系统,网络环境,带宽等情况可能产生的测试结果可能不同这是就需要经验以及对测试环境的保护等方面下一些功夫。

     5. 软件缺陷的原则

    软件缺陷区别于软件bug,它是在测试过程中出现的对系统有影响的,但是在设计中没有的或者对修改后的bug测试和开发人员有不同意见等
    软件未达到产品说明书标明的功能。
    软件出现了产品说明书指明不会出现的错误。
    软件功能超出产品说明书指明范围。
    软件未达到产品说明书虽未指出但应达到的目标。
    软件测试员认为软件难以理解、不易使用、运行速度缓慢,或者最终用户认为不好。

     6. 文档测试

    产品说明书属性检查清单
    完整.是否有遗漏和丢失?完全吗?单独使用是否包含全部内容?
    准确.既定解决方案正确吗?目标明确吗?有没有错误?
    精确,不含糊,清晰.描述是否一清二楚?还是自说自话?容易看懂和理解吗?
    一致.产品功能能描述是否自相矛盾,与其他功能有没有冲突?
    贴切.描述功能的陈述是否必要?有没有多余信息?功能是否原来的客户要求?
    合理.在特定的预算和进度下,以现有人力,物力和资源能否实现?
    代码无关.是否坚持定义产品,而不是定义其所信赖的软件设计,架构和代码?
    可测试性.特性能否测试?测试员建立验证操作的测试程序是否提供足够的信息?

    产品说明书用语检查清单

    说明对问题的描述通常表现为粉饰没有仔细考虑的功能----可归结于前文所述的属性.从产品说明书上找出这样的用语,仔细审视它们在文中是怎样使用的.产品说明书可能会为其掩饰和开脱,也可能含糊其词----无论是哪一种情况都可视为软件缺陷.

    总是,每一种,所有,没有,从不.如果看到此类绝对或肯定的,切实认定的叙述,软件测试员就可以着手设计针锋相对的案例.

    当然,因此,明显,显然,必然.这些话意图诱使接受假定情况.不要中了圈套.

    某些,有时,常常,通常,惯常,经常,大多,几乎.这些话太过模糊."有时"发生作用的功能无法测试.

    等等,诸如此类,依此类推.以这样的词结束的功能清单无法测试.功能清单要绝对或者解释明确,以免让人迷惑,不知如何推论.

    良好,迅速,廉价,高效,小,稳定.这些是不确定的说法,不可测试.如果在产品说明书中出现,就必须进一步指明含义.

  • 无痛苦的软件维护——被遗忘的需求

    2008-09-01 15:37:59

    无痛苦的软件维护——被遗忘的需求

    先说一个小笑话。有一个生产队队长,他对专家说:“现在我们生产队的地越来越多,牛越来越忙不过来了。我想要这么一种牛,他吃的草和普通牛一样多,但是干的活是普通牛的十倍。”专家说:“这种牛是可以造出来的,现在有基因工程。”队长说:“好吧,你给这造几头这样的牛。”于是专家找到了生物实验室,让生物实验室的人搞一个基因工程,把牛造出来。于是工程浩大,投资无法保证,合作多半是不愉快的收场。

      现实世界里很多人分析需求的过程就类似于这位专家,他们把注意力放在用户提出的功能点上,而对用户的实际需求没有兴趣。有不少软件公司和程序员,其实都在做类似的基因工程。如果这个专家把注意力放在生产队长的业务需求上,而不是太在乎他提出的功能点,他会说:“我认识一个卖拖拉机的,可以带你去看看。”

      软件的维护为什么这么痛苦,一个很重要的原因在于:需求已经被遗忘了。

      需求是对用户具有直接商业价值的活动,而不应该牵涉到任何的功能实现方式。实现同一个需求可以使用多个方案,每个方案有自己的功能方式,在某个方案中至关重要的功能点,也许在另一个方案中根本无关紧要。

      瀑布式的开发过程,首先是由一批懂得用户业务的专家去调查用户的需求,分析出这个系统应该具有哪些功能,形成一个非常重要的文件——《xxx系统需求规格说明书》。客户认可了这个《说明书》,在上面签字盖章,加入合同附件,到时候项目验收就以此为准。这时候,需求就已经分解成了一个个功能点,从这时候开始,需求本身就渐渐被人们遗忘。设计人员围绕着这些功能点进行工作,考虑用什么样的技术手段把功能点制造出来。功能点的制作细节形成了另外一份重要的文件——《xxx项目设计规格说明书》。这个《设计规格说明书》交给程序员去进行编码。

      这样的做法在开发中已经形成了很大的问题。

      首先,面对这样的《需求规格说明书》,设计人员已经无法知道最初的需求是什么。假如这个《需求规格说明书》中的功能点没有出现互相矛盾的情况,而他们串起来却和用户的需求不同,设计人员没办法发现这样的情况,编码人员也无法发现。假如测试也是根据这个《需求规格说明书》来做的,测试人员也发现不了。直到最后客户看见这个程序展现在他们面前。需求的分析需要在随后的过程中不断得到反馈,传统的过程不是没有反馈,而是反馈的时间太长了。

      其次,由于设计人员已经无法知道基本的需求是什么,也就无法对业务进行建模。这样的需求分析是以开发人员的需要为核心的,可是结果恰恰妨碍了开发人员对需求的理解。如果开发人员对用户的业务过程不甚了解,他们只有一种选择:不要试图去了解需求了,直接按照这些功能点做吧。于是,他们建立的对象模型就不是以需求为核心的,而是以功能、界面为核心的。我见到过很多这样的系统,开发者确实有很高的抽象思维水平,程序中设计了非常巧妙的控制器和界面,可以很方便的进行开发和变更。唯独业务层的对象非常简陋,一旦发生实际业务的变更,仍然十分辛苦。

      更大的困难发生在维护程序的时候。

      假设有一个移动通信公司需要制造一个系统,用来解决手机用户入网的问题。这个需求有下面几个要素:

      1:用户付钱,得到一个SIM卡和一个号码,把这个SIM卡装到手机里就可以通话。51Testing软件测试网P E My7Yom+D
      2:营业员收的钱要记录下来,提供给稽核人员,现金和帐目必须是平的。51Testing软件测试网,sV5@o.`#r$N$I0Z
      3:用户付的话费要划入他自己的帐户,可以打印票据。51Testing软件测试网.EC*b`&Yu(A%q6S1|3E*N
      4:用户要在入网合同上签字,然后营业员把合同归档。

     

      这几个要素都是和通信公司的商业利益直接相关的,没有牵涉到任何系统实现方式。如果不考虑通信公司内部的业务规范,实现方案可以有几十种,下面列举两种:

      1:SIM卡发给营业员,用户入网的时候,选择一个号码,然后付钱。营业员把SIM卡号码和电话号码输入系统,在交换网络上进行注册,这个SIM卡就可以通话了。然后各种费用记入各人帐户,合同归档。

      2:SIM卡在下发给营业员之前,先在交换网络上和注册,并且已经预先设置了一定的话费。用户选择了这个号码,付钱之后直接SIM卡拿走就可以打电话了。营业员事后再输入用户的合同资料,费用计入各人帐户,合同归档。

      这两种方案在实现过程上是不同的,因此具有不同的功能点。比如第二种方案中的SIM卡在出售之前是可以进行通话的,所以必须对这样的号码的通话费用进行监控,这个功能在第一种方案中是根本不需要的。并且两种方案在帐目的核对方式上区别也是比较大的。这两种方案是不同的功能点的集合,他们完成的是同一个业务需求。

      系统在开发阶段如果没有保留用户的业务需求情况,而是只留下一个功能点的列表,会给维护人员带来成很大的困难。维护人员无法从这样一堆功能点中发现最初的需求是什么样子。各位可以试试,假设我们忘记上面的四个需求要素,只看下面的某个实现方案,从这个复杂的实现过程中,我们很难知道用户现在的需求到底是什么。一旦需求发生了变化,这些功能点就会出错,或者是功能点的时序发生意料不到的错误,也许帐目核对不上了,也许是用户拿走的SIM卡不能打电话了。

      看不见需求在哪里,不知道手里这段代码会触动需求的哪根神经。维护人员的痛苦大部分来源于此。

      “不要紧,客户记得自己的需求。”但是客户通常不懂技术,即使他们懂技术,他们也不知道系统是如何实现的。如果开发人员依靠客户提出新需求的解决方案,结果就是让软件工程变成“生物工程”。到最后是钱基本花光,人基本累死,甲乙双方感情基本破裂。

      软件开发必须划分成几个过程,但是各个步骤应该有一个统一的核心——业务需求。

      在需求调查阶段要搞清楚用户的业务需求,为了达到这个目的,可以提问回答,可以对用户进行跟踪采访,或者做一个demo给用户看看,最终的目的是为了搞清楚用户在做什么事,遇到了什么问题,程序应该去解决什么问题,这就是这一阶段的工作。

      然后开始进行设计,设计系统的逻辑结构和物理结构,逻辑结构要符合需求的概念,各个对象互相调用要能够实现需求中的业务过程,同时物理结构划分合理,符合实际的分布状况,可以达到要求的的性能,业务过程的物理运行方式合理高效。这一阶段仍然是以业务需求为核心。

      接下来是编码。首先是编写一些基础设施,比如网络通信、数据库、文件的读写、分布式计算,这些基础设施和业务需求没有什么关系,有很多现成的框架,借助这些框架我们可以尽快度过这个黑暗的阶段。然后编写业务对象,这时候业务需求中的一些概念逐步出现在代码中,比如上面说的那个例子,“用户”、“号码”、“合同”、“入网”、“SIM卡资源”这样的业务要素逐渐出现,这些对象所拥有的属性、可以运行的行为也和现实的需求一样。接着这些业务对象串接起来,实现业务过程,现在业务需求又回到了人们的视野当中。业务需求是什么,如何实现,在这里一目了然。最后将这些过程在UI或者接口中调用,将功能提供给用户或者别的系统。

      测试更是要围绕着业务需求来进行,正常的业务流程应该产生正常的结果,如果缺少某个资源,或者输入了不合适的数据,应该出现业务含义明确的异常。并且系统的业务对象是处在一个独立的层次上,与UI和基础设施没有很大的关联,这样可以方便的采用自动化的测试方法。

      这样的系统维护起来一定少很多痛苦。

  • 开发知识对测试人员的重要性

    2008-08-29 17:52:53

    《软件测试技术大全》中的一节来回答开发与测试的关系: 对于测试人员而言,编程技能未必是必不可缺的技能,但是如果能掌握基本的编程技巧,则会对测试有很大的帮助。 大部分的自动化测试工具,需要测试人员具备一定的编码能力和语言知识。对于黑盒测试、手工测试者而言,具备一定的编程能力也会有好处。至少在与开发人员沟通一个Bug的时候,能理解开发人员的话,开发人员也会感觉测试人员是明白和理解其代码的人,而不会被认为是生硬的、不可理喻的、专门挑刺的人。 另外,具备良好的编程知识,可以让测试人员做更多层面的测试,例如单元测试、白盒测试、性能测试。还可以自己动手编写测试小程序或测试工具,帮助自己进行某些特殊的测试。摘自论坛观点:想往性能测试方面发展的话,学开发请注意不要局限于编码能力,软件架构、数据库、中间件、通讯协议等等内容都是你将来可能会用到的。
  • 黑盒测“外”不测“内”

    2008-08-29 17:35:14

    文章出处:赛迪网 作者:不详

    软件测试有许多种方法,其中黑盒测试是广泛使用的两类测试方法之一。

      “黑盒”测的是功能

      黑盒测试也称功能测试或数据驱动测试。它在已知产品应具有的功能的条件下,通过测试来检测每个功能是否都能正常使用。在测试时,把程序看作一个不能打开的黑盒子,在完全不考虑程序内部结构和内部特性的情况下,测试者在程序接口进行测试,它只检查程序功能是否按照需求规格说明书的规定正常使用,程序是否能适当地接收输入数据而产生正确的输出信息,并且保持外部信息(如数据库或文件)的完整性。

      “黑盒”法着眼于程序外部结构、不考虑内部逻辑结构、针对软件界面和软件功能进行测试。“黑盒”法是穷举输入测试,只有把所有可能的输入都作为测试情况使用,才能以这种方法查出程序中所有的错误。实际上测试情况有无穷多个,人们不仅要测试所有合法的输入,而且还要对那些不合法但是可能的输入进行测试。

      “黑盒”的两种基本方法

      黑盒测试有两种基本方法,即通过测试和失败测试。

      在进行通过测试时,实际上是确认软件能做什么,而不会去考验其能力如何。软件测试员只运用最简单,最直观的测试案例。

      在设计和执行测试案例时,总是先要进行通过测试。在进行破坏性试验之前,看一看软件基本功能是否能够实现。这一点很重要,否则在正常使用软件时就会奇怪地发现,为什么会有那么多的软件缺陷出现?

      在确信了软件正确运行之后,就可以采取各种手段通过搞“垮”软件来找出缺陷。纯粹为了破坏软件而设计和执行的测试案例,被称为失败测试或迫使出错测试。

      黑盒测试的设计方法

      黑盒测试是以用户的观点,从输入数据与输出数据的对应关系出发进行测试的,它不涉及到程序的内部结构。很明显,如果外部特性本身有问题或规格说明的规定有误,用黑盒测试方法是发现不了的。黑盒测试法注重于测试软件的功能需求,主要试图发现几类错误:功能不对或遗漏、界面错误、数据结构或外部数据库访问错误、性能错误、初始化和终止错误。

      具体的黑盒测试方法包括等价类划分、因果图、正交实验设计法、边值分析、判定表驱动法、功能测试等。在使用时,自然要针对开发项目的特点对方法加以适当的选择。

      ◆ 等价类划分

      等价类划分是一种典型的黑盒测试方法,用这一方法设计测试用例可以不用考虑程序的内部结构,只以对程序的要求和说明,即需求规格说明书为依据,仔细分析和推敲说明书的各项需求,特别是功能需求,把说明中对输入的要求和输出的要求区别开来并加以分解。

      由于穷举测试的数量太大,以致于无法实际完成,促使我们在大量的可能数据中选取其中的一部分作为测试用例。例如,在不了解等价分配技术的前提下,测试了1+1、1+2、1+3和1+4之后,还有必要测试1+5和1+6吗?能否放心地认为它们正确吗?那么1+999…(可以输入的最大数值)呢?这个测试用例是否与其他用例不同?是否属于另外一种类别?另外一个等价区间?这是软件测试员必须考虑到的问题。

      等价类别或者等价区间是指测试相同目标或者暴露相同软件缺陷的一组测试案例。 1+999…和1+13有什么区别呢?至于1+13,就像一个普通的加法,与1+5或者1+392没有什么两样,而1+999…则属于邻界的极端情况。假如输入最大允许数值,然后加1,就会出现问题——也许就是软件的缺陷。这个极端案例属于一个单独的区间,与常规数字的普通区间不同。

      等价类划分的办法是把程序的输入域划分成若干部分,然后从每个部分中选取少数代表性数据当作测试用例。每一类的代表性数据在测试中的作用等价于这一类中的其他值,也就是说,如果某一类中的一个例子发现了错误,这一等价类中的其他例子也能出现同样的错误。使用这一方法设计测试用例,首先必须在分析需求规格说明的基础上划分等价类,列出等价类表。

      在考虑等价类划分时,先从程序的功能说明中找出每个输入条件,然后为每个输入条件划分两个或更多个等价类。等价类可分两种情况:有效等价类和无效等价类。有效等价类是指对程序的规格说明是有意义的、合理的输人数据所构成的集合;无效等价类是指对程序的规格说明是不合理的或无意义的输人数据所构成的集合。

      ◆ 边界值分析

      软件测试常用的一个方法是把测试工作按同样的形式划分。对数据进行软件测试,就是检查用户输入信息、返回结果以及中间计算结果是否正确。

      即使是最简单的程序,要处理的数据也可能数量极大。还记得在计算器上简单加法的全部可能性吗?再想一想字处理程序、导航系统和证券交易程序。使这些数据得以测试的技巧(如果称得上的话)是,根据下列主要原则进行等价分配,以合理的方式减少测试案列:边界条件、次边界条件、空值和无效数据。

      边界值分析(Boundary Value Analysis,BVA)是一种补充等价划分的测试用例设计技术,它不是选择等价类的任意元素,而是选择等价类边界的测试用例。实践证明,在设计测试用例时,对边界附近的处理必须给予足够的重视,为检验边界附近的处理专门设计测试用例,常常可以取得良好的测试效果。BVA不仅重视输人条件边界,而且也从输出域导出测试用例。

      边界值设计测试遵循的五条原则:

      1、如果输入条件规定了取值范围,应以该范围的边界内及刚刚超范围边界外的值作为测试用例。如以a和b为边界,测试用例应当包含a和b及略大于a和略小于b的值;

      2、若规定了值的个数,分别以最大、最小个数及稍小于最小、稍大于最大个数作为测试用例;

      3、针对每个输出条件使用上述1、2条原则;

      4、如果程序规格说明中提到的输入输出域是个有序的集合(如顺序文件、表格等),就应注意选取有序集的第一个和最后一个元素作为测试用例;

      5、分析规格说明,找出其他的可能边界条件。

  • 软件测试流程

    2008-08-29 17:30:41

    一:软件测试的阶段划分

      可以从三个角度来将软件测试划分为多个阶段:

      1. 面向软件测试操作类型的划分,如调试、集成、确认、验证、组装、验收、操作;

      2. 面向软件测试对象粒度的划分,如语句、结构、单元、部件、配置项、子系统、系统、大系统;

      3. 面向软件测试实施者的划分,如开发者、测试者、验收者、使用者。

      二: 软件测试阶段的步骤

      每个软件测试阶段都要经历以下步骤:测试需求分析、测试过程设计、测试实现、测试实施、测试评价、测试维护。

      2.0   a   测试需求分析

      测试需求是整个测试过程的基础;确定测试对象以及测试工作的范围和作用。用来确定整个测试工作(如安排时间表、测试设计等)并作为测试覆盖的基础。而且被确定的测试需求项必须是可核实的。即,它们必须有一个可观察、可评测的结果。无法核实的需求不是测试需求。所以我现在的理解是测试需求是一个比较大的概念,它是在整个测试计划文档中体现出来的,不是类似的一个用例或者其他 .

      ◆ 测试需求是制订测试计划的基本依据,确定了测试需求能够为测试计划提供客观依据;

      ◆ 测试需求是设计测试用例的指导,确定了要测什么、测哪些方面后才能有针对性的设计测试用例;

      ◆ 测试需求是计算测试覆盖的分母,没有测试需求就无法有效地进行测试覆盖;

      b  测试过程设计:包括测试计划 , 测试策略制定,测试时间安排用,测试用例编写等

      c  测试实现:环境配置好了,新的版本也收到了,人员也都培训好了等等

      d  测试实施:已经按照测试计划进行展开了,比如手工测试,自动化测试

      e  测试评价:对版本测试覆盖率,测试质量,人员测试工作以及前期的一些工作制定情况进行评价,评估

      f  测试维护:对测试用例库,测试脚本, bug 库等进行维护,保证延续性

  • 测试一个月后的工作总结

    2008-08-29 17:09:35Digest 1

    阶段工作总结

    我来到公司已经一个月了,对测试工作也有了初步了解。今天把自己的心得体会记下来以便查缺补漏,在以后的工作过程中来提高自己。

    我很喜欢我的工作,这的工作氛围很融洽,领导从来都不端架子,同事之间都很和睦和开心,开发的也很耐心的与你交流沟通,使我很快的适应了这的环境,使我能全身心的投入到工作中去。

    刚来的时候,我使用的是×××的测试机器,Vista的系统,英文的环境,并且系统上装的软件,我要测的×××系统以及它的需求文档都是英文的,总之我是进入到了一个学习英语的环境当中,起初是稍微紧张了一下,不过还好用惯了软件的人,再加上有一定的英语基础,很快的就适应了。

    听说测试是需要从需求阶段就要开始的,否则需求都搞错了,更别提后续的开发工作了,真想从一个项目的开始就能介入,这样才能真真正正的去理解测试的涵义。可惜这次是不可能了,等待下次的机会吧。

    我现在的测试是常说的功能测试,测试要做的就是验证软件是来工作的,就是在一般情况下能完成其基本功能,这个就要紧扣需求 。看某一个问题是不是BUG,它的最终依据就是需求,这部分内容的测试要求测试人员要研究软件的说明文档,了解了需求才有资格做测试,你提的BUG才能让开发人员心悦诚服地接受并修改。因此前三个星期就是看着需求熟悉×××系统,刚开始工作还是紧绷着一根弦的,生怕自己做不好,因此就要多问,不知道“罗老师”有没有感到厌烦,估计不会吧,他那么好脾气,呵呵。有时候自己还发现了他不知道的东西,然后告诉他,把他说服,心里就别提多高兴了。

    在这过程中,自己也会搜集一些资料,比如下面这几条就是测试人员要追求的根本。

    1.      测试是程序的执行过程,目的在于发现错误;

    2.      一个好的测试用例在于能发现至今未发现的错误;

    3.      一个成功的测试是发现了至今未发现的错误的测试。

    为什么要写这个呢?是因为三个星期下来我马上就要做提交BUG的工作了,我所做的工作终于有有形的东西来记录了,我很高兴。有一些感受我记录了下来:

    1.       开始的时候,感觉自己找到BUG很高兴,就迫不及待的提到了Mantis上,可到后来的时候才发现这样费了不少事,如果只有一个版本还好,提上去就提上去了,可是那是不可能的,往往会有多个版本,因此又对提交的BUG重新改了一遍,加了版本标记,后来又想到在XP上测完还要在Vista上测,那你的BUG是哪个系统上的呢,所以又回来把BUG出现在哪个系统上标记了一下。总之,及时做了更正,也明白了一定的道理。一定要把工作做细,做精,不能马虎了事。

    2.       提交的BUG步骤一定要描述准确,不能有歧义,否则开发人员解决起来就麻烦了,把重现步骤,把期望结果,错误结果都要描述清楚,最好是每一个BUG都有图片,这样看起来既明了又省时间。

    3.        测试工作要有一个相当警惕的头脑,否则有时自己发现的BUG都不知道它是怎么产生的,一般一个人不可能时刻保持警觉,因此养成一个做记录的好习惯,随时做一些记录,以便工作更好进行。

    4.       由于是英文提交BUG,所以在步骤上写起来总是不那么顺手,后来在看ProLine的帮助文档时,发现它上边的步骤描述的非常清晰的,因此在写得有困难的时候就去多看帮助文档,能使自己顺利很多。

      其实还有很多感受,在这就不一一列举了

     

    由于自己没有测试的理论知识,自己在工作过程中也会遇到一些问题,比如怎样才能完全覆盖路径的测试,怎样才算是边界值,等价类,怎样才是完成了一个系统的测试等等好多不知道的知识。我会在以后的工作中不断积累知识,并且希望在以后将要开展的培训中更好的提升自己。

    另外公司的英语培训我很喜欢,已经很长时间不碰英语了,再不练习就会生疏了,英语学习在这个工作环境中还是非常重要的。一定要把学习英语提上日程。

    如果有什么做的不好的地方,还请领导及时纠正。

    谢谢!

    XiaoLiZi

    2008-8-28

  • [论坛] Jira简介

    2008-08-26 15:27:54

     国际化缺陷跟踪管理的专业软件:JIRA,它用于帮助公司和团队跟踪工作中的问题,管理和记录这些问题的处理过程。现在, JIRA已经被分布于94个国家的8100多个组织管理人员、开发人员、分析人员、测试人员和其他人员所广泛使用。

    JIRA的优点
             用它管理项目,跟踪任务、bug,通过JIRA的邮件通知功能进行协作通知,在实际工作中使工作效率提高很多,效果非常不错!安全性、可扩展性方面发挥到了极致!
    JIRA不仅仅是一个缺陷跟踪系统,通过Jira,可以整合客户、开发人员、测试人员,各人各司其职,信息很快得到交流和反馈,让大家感到软件开发在顺利快速的进行,朝意想的目标迈进。IDEA下的J
    视频: http://
    ira插件,主要为开发人员服务,实时将信息反馈给开发人员,开发人员同时迅速地将修复的结果信息反馈到跟踪系统中,最后通过持续集成,软件迅速地完成了更新,这些方便便捷的操作会极大地鼓舞软件开发中的各方人员,甚至包括客户,及时响应。


    JIRA的缺点
            对于测试需求、测试用例等都没有提供直接的方式进行管理。

    功能模块

         1. 问题追踪和管理:用它管理项目,跟踪任务、bug、需求,通过jira的邮件通知功能进行协作通知,在实际工作中使工作效率提高很多
          2. 问题跟进情况的分析报告:可以随时了解问题和项目的进展情况
       项目类别管理功能:可以将相关的项目分组管理
          3. 组件/模块负责人功能:可以将项目的不同组件/模块指派相应的负责人,来处理所负责的组件的Issues
          4. 项目email地址功能:每个项目可以有不同的email(该项目的通知邮件从该地址发出)
          5. 无限制的工作流:可以创建多个工作流为不同的项目使用

Open Toolbar