从事测试六年,专注loadrunner性能测试,期待oracle dba学习有新突破!

发布新日志

  • 转:JDK自带VM分析工具jps,jstat,jmap,jconsole

    2009-11-22 12:45:04

    JDK自带VM分析工具jps,jstat,jmap,jconsole


    2009-09-22 12:18:50
    一、概述  
        SUN 的JDK中的几个工具,非常好用。秉承着有免费,不用商用的原则。以下简单介绍一下这几种工具。(注:本文章下的所有工具都存在JDK5.0以上版本的工具集里,同javac一样,不须特意安装)  。
         
        我一共找到以下四个工具:重点看看jconsole和jmap
    1.jps                
    .:与unix上的ps类似,用来显示本地的java进程,可以查看本地运行着几个java程序,并显示他们的进程号。                    

    2.jstat                
    .:一个极强的监视VM内存工具。可以用来监视VM内存内的各种堆和非堆的大小及其内存使用量。                    
                
    3.jmap                
    .:打印出某个java进程(使用pid)内存内的,所有‘对象’的情况(如:产生那些对象,及其数量)。                    
    4.jconsole                
    .:一个java GUI监视工具,可以以图表化的形式显示各种数据。并可通过远程连接监视远程的服务器VM。    
     
    二、 使用介绍: 
         
        1、jps :我想很多人都是用过unix系统里的ps命令,这个命令主要是用来显示当前系统的进程情况,有哪些进程,及其 id。 jps 也是一样,它的作用是显示当前系统的java进程情况,及其id号。我们可以通过它来查看我们到底启动了几个java进程(因为每一个java程序都会独 占一个java虚拟机实例),和他们的进程号(为下面几个程序做准备),并可通过opt来查看这些进程的详细启动参数。 
        使用方法:在当前命令行下打 jps(需要JAVA_HOME,没有的话,到改程序的目录下打) 。
    可惜没有linux下的ps好用,名称不好用。但是在第四个工具jconsole的界面里面会有具体JAR包的名称。
    /data/jdk1.6.0_06/bin/jps    
    6360 Resin
    6322 WatchdogManager
    2466 Jps

          
        2、jstat :对VM内存使用量进行监控。 
        jstat工具特别强大,有众多的可选项,详细查看堆内各个部分的使用量,以及加载类的数量。使用时,需加上查看进程的进程id,和所选参数。以下详细介绍各个参数的意义。 
        jstat -class pid:显示加载class的数量,及所占空间等信息。 
        jstat -compiler pid:显示VM实时编译的数量等信息。 
        jstat -gc pid:可以显示gc的信息,查看gc的次数,及时间。其中最后五项,分别是young gc的次数,young gc的时间,full gc的次数,full gc的时间,gc的总时间。 
        jstat -gccapacity:可以显示,VM内存中三代(young,old,perm)对象的使用和占用大小,如:PGCMN显示的是最小perm的内存使 用量,PGCMX显示的是perm的内存最大使用量,PGC是当前新生成的perm内存占用量,PC是但前perm内存占用量。其他的可以根据这个类推, OC是old内纯的占用量。 
        jstat -gcnew pid:new对象的信息。 
        jstat -gcnewcapacity pid:new对象的信息及其占用量。 
        jstat -gcold pid:old对象的信息。 
        jstat -gcoldcapacity pid:old对象的信息及其占用量。 
        jstat -gcpermcapacity pid: perm对象的信息及其占用量。 
        jstat -util pid:统计gc信息统计。 
        jstat -printcompilation pid:当前VM执行的信息。 
        除了以上一个参数外,还可以同时加上 两个数字,如:jstat -printcompilation 3024 250 6是每250毫秒打印一次,一共打印6次,还可以加上-h3每三行显示一下标题。 
         
       3、jmap 是一个可以输出所有内存中对象的工具,甚至可以将VM 中的heap,以二进制输出成文本。使用方法 jmap -histo pid。如果连用 SHELL jmap -histo pid>a.log可以将其保存到文本中去(windows下也可以使用),在一段时间后,使用文本对比工具,可以对比出GC回收了哪些对象。jmap -dump:format=b,file=f1 3024可以将3024进程的内存heap输出出来到f1文件里。 
         
        4、jconsole 是一个用java写的GUI程序,用来监控VM,并可监控远程的VM,非常易用,而且功能非常强。由于是GUI程序,这里就不详细介绍了,不会的地方可以参考SUN的官方文档。 
        使用方法:命令行里打 jconsole,选则进程就可以了。 
         
        友好提示:windows查看进程号,由于任务管理器默认的情况下是不显示进程id号的,所以可以通过如下方法加上。ctrl+alt+del打开任务管 理器,选择‘进程’选项卡,点‘查看’->''选择列''->加上''PID'',就可以了。当然还有其他很好的选项。
     
    实例:
    jmap -histo:live $pid
    jmap -histo $pid
    jstack -l $pid
     
    三、参考资料:
        article:http://elf8848.javaeye.com/blog/442806

        jps:http://java.sun.com/j2se/1.5.0/docs/tooldocs/share/jps.html 

        jstat:http://java.sun.com/j2se/1.5.0/docs/tooldocs/share/jstat.html 

        jmap:http://java.sun.com/j2se/1.5.0/docs/tooldocs/share/jmap.html 

        jconsole:http://java.sun.com/j2se/1.5.0/docs/guide/management/jconsole.html       
  • 转帖:java jmap查看内存分配

    2009-11-22 12:37:13

    关键字: jmap eclipse mat 排查内存泄漏的好工具
            当服务器应用占用了过多内存的时候,如何快速定位问题呢?现在,Eclipse MAT的出现使这个问题变得非常简单。

            要定位问题,首先你需要把服务器的内存镜像dump成文件。jdk自带的jmap命令可以完成这个工作:
    $JAVA_HOME/bin/jmap -heap:format=b <进程号>
    然后你可以祈祷命令能够执行成功吧!以我的经验,成功率不是太高......
    如果成功执行了jmap,会在当前目录生成一个heap.bin文件,就是当前进程内存的完整影像,把它打包下载下来就可以用Eclipse MAT来分析了。

           Eclipse MAT是SAP公司贡献的一个工具,可以在Eclipse网站下载到它,完全免费的。它可比Sun提供的内存镜像分析工具jhat要强太多了。用它打开先前生成的heap.bin文件,就可以看到占用内存的到底是什么东西了。
  • 转:顾客期望管理

    2008-10-28 11:08:24

    樱桃树与顾客期望管理


    blueski推荐 [2006-5-6]
    出处:来自网上
    作者:朱会广
     

    您熟悉下列的场景吗?
    场景一:
    建设单位领导: 你们是怎么监理的,总包说上周就施工完,而现在还没开始!
    监理工程师: 我们一直在催他们呀!
    建设单位领导:再催,进度完不成,你们监理要负责任。
    监理工程师:???!!!

    场景二:
    领导:王工,这次质检站检查出你们工地混凝土的问题,你为什么没及时发现?
    王工: 发现了呀,我们天天追者他们让他们改,但他们不改。
    领导:你有文字纪录证明你说过吗?
    王工: 有啊。比如……

    很困惑,是吗!

    面对诸如上述种种问题,我们往往很困惑,我们已经很尽力了,为什么业主仍不满意?对存在的问题我们的确是先发现了呀,我们给他们提出了是他们不改。难道要我们去亲自动手不成?报告甲方吗?甲方说我们聘请你们监理就是把质量关的吗!报告政府吗?似乎还没到那么严重程度,况且……!监理到底应该怎么做?难道真的应验了哪句话吗:监理是个筐,什么都可以往里装?

    樱桃树的故事

    看到这里,还是听我给大家讲个故事吧:房屋推销员带夫妻两个看一处旧房。刚进院门女主人就发现院中有一棵美丽的樱桃树。这棵樱桃树根深叶貌,硕果累累。红色的樱桃在晚霞的映照下闪着诱人的光芒。女主人于是手舞足蹈,乐不可支:“多么漂亮的樱桃树啊,我从小就希望院子里能有一棵樱桃树。”推销员不动声色的将他们领进房内,先到客厅。女主人开始发牢骚,“这客厅太差了,墙皮掉了,门窗关不上,地板也坏了。要想搞好,要花很多钱才行。”推销员:“客厅的确是需要重新装修,但您有没有发现,站在这里可以看到院中哪棵美丽的樱桃树!”女主人向外看去,果然不假,于是满意的点点头。在看其他房间时,女主人无一不在数落房子的毛病,但推销员每次都在提示她在这里可以欣赏到哪棵美丽的樱桃树。最后,女主人花大价钱买下了这套房,圆了自己童年的梦。

    客户在想什么?

    其实,每个人心中都有自己哪棵樱桃树。我们要作的工作就是要找到客户心中哪一棵,并予以满足。
    对不同的建设单位,聘请监理单位的目的存在着很大的不同。这和项目的性质,领导者的个人情况(如年龄、从事的行业、教育背景、原来和监理单位的合作结果、性格特征等)、社会舆论、法制环境等密切相关。他们选择监理单位前,一般情况下对监理都有某种期望和要求。这些要求有些是明确的,这些明确的要求存在于意识层面并写在合同中。而有些要求并不明确,就连他们自己都不能准确描述。这些要求深藏于潜意识之中。当不能满足这些要求时,会明显的感到不满意。但究竟不满意在何处,他们自己也说不清楚。“总感觉那里有些不对劲”。

    监理工程师如何考虑问题?

    而对于监理工程师来讲,我们考虑问题的角度和业主不同。监理工程师大多来自于设计单位和施工单位,进入监理行业之前基本上从事技术工作,很多人没有接受过相关管理培训。受思维定势的影响考虑问题时不自觉的采用处理技术问题的方式处理日常管理问题。
    比如,很多人都在探讨如何有效的处理房屋漏水的问题,这个问题已经成为深圳房屋建筑领域内的一个较为突出的顽疾。大家试图寻找到一个可靠的措施,用来修补房屋已经存在的漏水现象。其实,与其说这是一个技术问题,到不如说这是一个管理问题。在笔者监理过的项目中,漏水现象远远没有那么严重。我们的做法主要是从质量计划入手,施工过程中确保质量保证措施落到实处,严格质量控制,认真的作好每一步的工作。先是审查设计,然后是材料、配比、施工方法、技术保证、质量控制措施等。这是一个系统工程,需要调动每一个相关人员的主动性,大家的工作质量都应达到相关要求,从而达到预先设定的质量标准。头痛医头、脚痛医脚的方式与事无补。
    类似的观念无处不体现在我们的工作中:考核一个监理工程师的工作能力时,往往看他能处理什么技术问题,考察监理工作成果时看他们处理过什么技术难题,就连监理投标答辩时所提出的问题也明显偏重于考察对技术问题的处理能力。
    另一方面,法规赋予监理工程师在质量、进度、投资、安全多方面的法定责任和义务。因此,监理工程师必须首先要满足法定要求。监理认为,不管对什么项目,监理必须完成上述工作。从而忽略了业主心中哪棵樱桃树。

    结果如何?

    对业主来说,他们对监理的期望和监理的法定责任存在着差异,他们只关心自己认为最重要的部分。对监理完成的期望值以外的工作,他们往往不能发现,有时甚至视而不见,而不满足其特定期望时就会产生失望和不满。监理工程师整天忙忙碌碌却不明业主的期望。于是,产生矛盾,双方都不满。
    解决这些问题的最关键的是要在尽到自己法定责任的同时,一定要密切关注业主心中那棵“樱桃树”。

    樱桃树在那里?

    顺利找到“樱桃树”的方法是进行一组类似于剥洋葱的活动。从业主最关心的的某个具体要求(A)开始,寻找这个要求的原因(B),再寻找产生(B)的原因(C)……。一层层剥下去。一直到某一个原因是出于他心底的某个观念,而不是某个现象或行为为止。这个观念就是那棵“樱桃树”
    在这个过程开始时,我们面对的可能是一堆要求,或指令,处于和(A)并列状态。这些要求可能是相互矛盾的,在别人看来也可能认为是错误的。无论如何,我们都不能丢掉任何来自于业主的信息。决不能因为自以为不正确就弃之不理,因为业主的任何看法都是他内心观念的反映。
    只有满足了对“樱桃树”可渴望,才能得到业主的真正认可。然而,很多时候我们采取的是:“头痛医头,脚痛医脚”的工作方式,做了一个任劳任怨的“消防队员”。纠其原因,是因为我们没有进行上述分析。在处理问题的时候,以为消除了造成此问题的原因就万事大吉了,而忽略了原因后边还有原因,最终的原因是人的观念。

    樱桃树是找到了,但是?……

    当我们尝试做上述工作并找到那棵樱桃树的时候,却发现支持其行为的观念是不正确的,有时和法规冲突,有时和合作伙伴利益冲突,甚至有时真可谓“损人不利己”。
    比如,几年前在笔者监理过的一个项目上挡土墙倒塌的问题:该项目和北邻居以挡土墙相隔,该挡土墙高5米,顶部宽1米,总长40米。我们进场时就发现该挡土墙已经出现裂缝(看上去,该墙至少有10年的历史),在注意观察的同时,建议甲方寻找相关资料,并对该挡土墙进行必要的鉴定。甲方经过多方寻找,没有找到相关的任何资料,也未做任何鉴定。当我们向他们报告可能会坍塌时,他们坚持认为不会倒,没有理会我们的建议。有一天,我们发现前一天贴在墙体裂缝上的纸条(用以观察裂缝的发展)已经被拉开约5mm。我们当即疏散了在挡土墙下施工的8名工人,并拉起红色丝带,禁止任何人进入该范围。在工人撤出后不足1小时,挡土墙整体倒塌。
    事后,甲方负责人自言自语:这么大的挡土墙,怎么说倒就倒了呢?

    他们为什么不相信我们的话呢?

    原来当人收到外界信号时,潜意识首先寻找在潜意识中和这一信号最近似的内容。然后根据搜寻到的内容解释这一信号,得出他对这个信号的评价。当您的观点和对方潜意识之中的某个观念一致时,他便同意您的观点。否则,将不同意。在本例中,存在于对方潜意识中的观念是“这么大的挡土墙是不会倒的”。因为他们从来没有见过这么大的挡土墙倒塌。

    我们应该怎么办呢?

    通常情况下,我们在试图说服别人的时候,会列举出若干“论据”来证实自己的正确性,或许也会举例说明对方的错误。但我们经常会发现,这样的方式并没有说服对方,反而引起了对方的对立。为什么呢?
    原来,我们的所谓的论据只是符合了我们自己潜意识之中观念,并不能肯定符合对方的观念。由于每个人不同的经历造成了人们之间观念的差异。
    常言道:一朝被蛇咬,十年怕井绳。被蛇咬过的人,在其观念中将和与蛇类似的形体统统的与痛苦联系在一起。而其他人看到井绳以后可能会引起非常愉快的感觉。因为他想起了童年的跳绳。如果后者对前者大谈井绳是如何的可爱,结果怎样?

    管理业主期望是关键

    当我们发现业主存在不合理的期望时,如果试图通过我们的感受说服对方,无异于这个井绳的故事。换个角度考虑可能会有所帮助。我们能不能对业主的期望进行必要的管理?期望来自于观念。当我们想改变其期望时,改变影响期望的观念是问题的本质。既然我们很难直接改变其观念,那么,试一试采取如下两个方法是否可达到目的:
    1、 让他自己意识到自己观念的错误。
    某医院项目刚开始时,施工许可证还没办下来,医院领导就指示要先行开工。我们当时就提醒说:没有施工许可证就开工不符合法律规定。如果擅自开工可能会面临相应的处罚。但院领导意见是我们已经具备了开工的其他条件,施工许可证正在办理,一边办证一边施工没有什么不妥。在一次会议上,我们说:“施工许可证就像小孩的准生证,如果没有准生证,将来可能会给孩子带来非常的大麻烦。”次话一出口,院长当即表态,既然这样,那么,一定要办完施工许可证后再开工。
    2、 找到对方潜意识之中的其他与我们的意见相一致的观念。
    本人几年前曾监理河北少儿出版社宿舍楼项目。出版社的社长非常关心工程的进展,经常到工地巡查。每次巡查都要求进行一些修改。但遗憾的是,这些要求大部分是不可行或没必要的。开始,我们大家都对他说:这样做不符合设计规范要求,不符合施工验收规范要求…… 如果要修改的话,一定要征得设计同意,出具设计变更通知单。社长对我们的说法不以为然。有一次社长终于发火了,“我出钱盖房,我愿意怎么改就怎么改,为什么还要经过别人同意?不要欺负我不懂,拿什么规范来吓唬我。”。
    他的观念是:我盖房就的听我的。如果不听我的,就是对我权威的挑战。因为我们当时只是根据我们对事情的理解去试图说服他,结果不仅没有解决问题,反而造成矛盾激化。
    有趣的是,这件事最后得到了戏剧性的解决:在一次讨论修改中,一个工人对他说:“这样修改好是好,就是不结实”。没想到社长马上说:“不结实可不行,你们都是专家,一定要把我的房子盖结实”。后来,每当他提出不可行修改时,我们都说:这样做不结实。他也就不再坚持。
    “我盖房要听我的”和“我的房一定要结实”是并存于社长潜意识中的两个观念,开始的矛盾是因为我们的意见和他的前一个观念发生冲突,而问题得到解决是因为我们的意见和他的后一个观念吻合。而后一个观念显然要强于第一个观念。

    就象种植其他树木一样,人们心中的那棵“樱桃树”也需要“栽培”。

  • 转贴:测试DBA

    2008-03-06 21:19:19

      【IT专家网独家】在DBA的世界中,根据专注的领域不同,可以分为两种DBA:开发DBA和产品DBA。关于这两类DBA的职责问题,可以参考这篇文章(http://database.ctocio.com.cn/analysis/231/7831231.shtml)

      然而,我觉得我们有必要发展另外一种DBA,测试DBA,我把他定义如下:

      测试DBA专注于为目标系统设计测试项,用设计好的测试框架来诊断复杂的问题,最后,但不局限于,测试新的或者开源的数据库工具。

      从细节上讲,我给测试DBA列举了如下的主要任务:

      1.硬件/系统的预测试:测试DBA需要编写测试项,测试新服务器的性能底线。例如,不同的配置给服务器性能带来的影响(我最近的经历告诉我,不能理所当然的认为某件事情是对的,例如,我们一般会认为,理论上RAID10会比RAID5要好,但实际上,在我自己的环境中,同一个服务器,相同的硬盘,RAID5不论在读操作还是写操作上,其性能都远超RAID10,系统管理员一直在查找出现这种情况的原因);测试DBA还需要检查:在可预见的将来,现在的硬件是否还能满足业务的需求。

      2.硬件/系统评估:当我们需要更换当前的产品服务器或者其他硬件,比如SAN磁盘的时候,我们必须从众多的产品中找到性价比最优的产品。测试DBA需要提供有效的数据来支持这项决策。

      3.应用数据库组件测试:在一个复杂的环境中,从DBA的角度测试那些关键的存储过程/视图/查询是很有必要的,而且要不断的变更各种参数、索引、服务器的配置参数,也有必要从多个角度对临时表和表的变量做多视角的测试。测试DBA需要能够读懂查询计划和I/O统计,对变化做出相应的反应,为开发团队提供适当的建议。

      4.新出品或者开源数据库管理工具实验和测试:这能够帮助管理/产品DBA获得更适合的工具来监视和管理产品环境。

      5.构建测试用例库:测试用例库是一个公司积累起来的非常珍贵的资产。例如,当应用测序修改后,之前的测试用例仍然可以用来测试代码的性能,之前的测试用例也可以拿来测试新的硬件环境。一个好的测试用例库可以极大的提高整个产品团队的效率。

    •   测试DBA需要的技能
    •   测试DBA需要掌握各种各样的测试工具,例如SQLIO、SQLIOSim、 IOMeter、SQL BPA等。
    •   测试DBA需要对SQL Server变量有一个深刻的认识,包括索引,隔离级别,服务器配置选项,DMVs等,这样才能设计好的测试用例,构建好的测试环境。
    •   测试DBA最好能够掌握一些报告工具,因为他们需要将它们发现的情况展现给别人。我任务,SQL Server报告服务对于DBA来说是一项很有用的技能。

      为什么我会提出“测试DBA”

      在最近的两天,我被邀请去对RAID 10型的SAN盒子做一个强化测试,环境是一台新的服务器,它将在几个月后被用作产品服务器。我在不同的配置下使用SQLIOSIM做了很多的测试,有趣的现象是,一开始,这台服务器上就有RAID 5,我偶然测试了RAID 5,然后我对RAID 10重新进行了配置(内存也从RAID 5时的8GB升到16GB),在我强化测试完RAID 10后,我将两者的测试结果做了一个比较,惊奇的发现RAID 5几乎在所有方面都超过了RAID 10,例如IO响应时间,驱动层的读写时间等。由于SQLIOSIM文档信息的缺乏,做所有的测试然后去分析这些结果是一项很痛苦的事情。一开始我甚至想到了在强化测试的时候启动性能计数器,然后将性能计数器和众多测试项的测试结果进行比较。由于时间的关系,我最终放弃了这个想法(忘记告诉大家了,我是一个产品DBA,需要对任何ASAP请求作出响应)。这个事情让我想到了我们需要这样一个DBA:他能够专注于测试工作,然后将测试用例,测试情况,测试环境,测试结果等做成文档,为将来构建一个测试用例库。

      当然,这与其它众多类型的DBA有交集,但我相信,现在DBA的工作范围是非常广阔的,因此,在DBA相关的各个部门,都需要有专门专注于某一领域的人才。

  • 转贴:学会虚伪才算成功

    2008-03-05 23:03:27

    面试的时候不要慌张

    很多人都是这样,开始的时候雄心万丈,认为自己什么都能做很勇敢,可是一进面试场地就变得非常紧张,手脚都不知道放在什么地方,更厉害的有些人会变得非常敏感,经常有所听闻某某女生哭着离开考场的。这里,老师我相信你们这班所有人都是信念坚定的,当你紧张的时候,首先深深地吸一口气,然后在脑海里过一遍这样的场景:父母的期盼、3年的艰辛学习、辛苦的上课等等等等,你就会变得非常勇敢,相对于这么长时间的磨练,一个1-2个小时的面试算什么呢?
    所以,不要紧张,相信自己吧!



    确定昨天晚上回顾了所有我们学习过的东西

    温故而知新,确定自己已经对软件测试的基本技能,例如:测试计划、测试用例书写、用例格式、运作方式、测试需求的整理(想想你们的试验)等等,一直确认到你认为自己已经在测试方面准备得非常充足了,那么就接收挑战吧。如果在面试过程中你连测试的知识都过不了,怎么对得起这么长时间的学习?

    放弃单纯的思维,因为你在社会

    这次去面试,请充分放弃如下思维和语言:我在学校里、我的作品等等,记住从面试开始,你们的身份已经是成熟的测试工程师了,你们可以这么说:我做了测试,大部分手工测试为主,比较认真地,在某某时候如何发现了一个比较隐秘的BUG!同志们,现在就开始伪装和狂吹自己把,有本事,哪怕把别人的经验都算成你自己的,你要知道这个世界就是虚伪的,没人会在乎你的过去,所有人都会在乎你的将来。你,FP的学生,牛一定要吹的,我们的口号:学的踏实,吹得踏实,活得踏实。

    让自己变得聪明

    很多人都以为聪明是天生的,不,同志们,聪明这种东西来自于残酷的环境。去看看你们身边的环境把,本科多如狗、研究生到处有,博士也许还能抖一抖!你们很聪明,在这么长时间的课程里面你们应该学会了聪明。社会的考场不是学校的考场,也许这次没有通过还能补考,社会没有这个,因为社会不是GAME,没有SAVE和LOAD!
    那么如何锻炼?仔细的听考官的每句话,在很快的时间里揣摸考官的意思,用自己所掌握的知识进行快速判断。例如:考官说:你在公司里主要做什么?你要很快的说:我在公司里主要从事手工测试,做了一年多点,接触过几个项目云云。等等,为什么要说几个?按照经验你说4个,也许考官真的会让你说出这四个,模糊也是为了保全自己!

    为什么我们要这样?

    为了生存,别无他法。
  • 转贴:测试工程师成长

    2008-02-29 11:38:49

    这篇是2002年底《程序员》杂志上的一篇文章,虽然时间早了点,但值得一看。
    ------------
    前言:软件测试一门非常崭新的学科,目前研究的内容还很不深入,仍然处于婴儿阶段。软件测试需要什么样的专业基础还没有定论,而且目前还没有一种很好的标准来衡量测试人员。但无可置疑,软件测试越来越受到软件公司的重视,软件测试工程师的作用也逐渐被人们所认可。这一点已经在像微软这样的国外大型软件企业中所证实,在微软,一个开发人员相对应着一至两个测试人员。现在,就让我们走近软件测试工程师,关注他们的成长之路。

    从程序员到软件测试工程师

    特别策划/本刊编辑部 撰文/闫辉

    国内软件公司对软件测试的态度令人担忧。软件测试工程师不足,开发测试人员比例不合理。据调查,最好的企业中测试人员和开发人员的比例是1:8,有的是1:20,甚至没有专职的测试工程师。

    曾经参与微软Windows95、Exchange Server4.0和4.5、Internet Explorer 4.0和5.0、SQL Server 2000开发与测试工作陈宏刚博士尽管已经升任微软亚洲研究院商务及高校关系高级经理,但仍然对国内软件测试水平的落后深有感触。

    国内很多企业还处在探索阶段,小企业的运作方式造成其主要精力是要尽快完成初始资本积累。有些企业也了解软件测试的重要性,很努力、很认真的在学,但因为很多原因而学不到精髓,不知道如何去做。于是只能局限于书本上学来的简单的黑箱、白箱测试而已。很多人知道有压力测试和性能测试,但针对产品具体如何去做就不清楚了。

    陈宏刚表示,重视测试首先需要有开放性的软件文化,而在很多公司中,测试工程师只是绝对服从的听命角色,没有开发他们的积极性和创造性。一些管理人员对软件开发的流程管理经验不足,仍然用传统企业的方法进行管理,再加上对软件质量的控制理解不对,认为编完程序经过简单的程序员自己测试就可以使用了,而没有认识到软件测试是控制质量最好的方法。

    不过,国内还是有一些大型公司和专业公司已经在软件测试方面走上正规。1994年开始接包IBM软件测试项目,1999年软件测试成为公司主体软件外包业务之一的和腾软件就是其中之一。因为客户就是IBM这样的大型软件公司,腾软件高级副总裁刘忠表示,它们在软件测试管理上,经同国外的公司相差不大,同时也研究和应用了多种软件测试技术。

    软件测试工程师

    一提到软件测试工程师,很多人就会想到那些反复使用软件,试图在频繁操作中寻找到错误发生的低层次人员或者软件用户。其实这是一种错误的概念,软件测试早已超越了用户使用来发现Bug的基本测试阶段。

    陈宏刚介绍说,微软的软件测试工程师分为三种:测试执行者(Basic Software Tester)、测试工具软件开发工程师(Software Development Engineer in Test)和高级软件测试工程师(Ad_hoc Tester)

    测试执行者负责理解产品的功能要求,然后根据测试规范和测试案例对其进行测试,检查软件有没有错误,决定软件是否具有稳定性,属于最低级的执行角色。

    测试工具软件开发工程师负责写测试工具代码,并利用测试工具对软件进行测试;或者开发测试工具为软件测试工程师服务。产品开发后的性能测试、提交测试等过程,都有可能要用到开发的测试工具。对技术要求最强的是这些人,因为它们要具备写程序的技术。“因为不同产品的特性不一样,对测试工具要求也是不同的,就像Windows的测试工具不能用于Office,office的也不能用于SQLserver,微软很多测试工程师就是负责专门为某个产品写测试程序的。”

    而Ad_hoc Testet属于比较有经验,自己会找方向并做的很好的测试工程师,这要求具有很强的创造性。刚进入微软时,老板也是只给陈宏刚一个操作流程,每天就按照这个规程去做,几天下来,一个Bug都没有发现。陈宏刚也很沮丧,觉得这样挺对不起公司,后来自己问自己:为什么非要这样做!于是换了其他的方法试试,令他吃惊的是,一下就找到很多严重的Bug,当时也不敢声张。有一天,他找到10多个非常严重的Bug,开发经理一下就惊呆了,怒冲冲的跑到陈宏刚面前问:“你是不是改变了测试方式和测试步骤?”陈宏刚有些吓住,说道:“可能改变了一点。”对方说:“我非常生气,但我不是生你的气,而是因为以前测试人员水平太差,或者以前的测试方面有问题,软件中有些Bug存在了半年甚至一年,但直到现在才发现,现在修补这些错误要困难很多!”后来陈宏刚得到了老板的赞许,可以按照自己的想法去做测试。对此,陈宏刚感受颇深:“一方面我体会到了微软非常鼓励创造的文化,同时也感到只遵守教条不是好的测试人员,就和用户一样了。做软件测试工程师同样需要开拓和创造性。”

    在开发管理上,测试不应该归属于项目管理,也不应该归属开发人员。这三个部门应该是并驾齐驱,相互协作,测试工程师最终决定产品是否能够发布。

    软件测试工程师的素质

    因为软件测试仍然处在发展阶段,还没有上升到理论层次。对人员的评测,包括微软在内,都还没有一个统一标准,因此评定软件测试工程师只能根据工作实践进行自然淘汰。

    软件测试对逻辑思维、学习能力、反应要求很高,是否有严密的思维和逆向思维也非常重要。陈宏刚介绍说,在五六个人的测试小组时,一半以上的Bug都是他找到的。他认为这同自己数学专业的背景关系密切,数学中有逻辑思维的培训,要善于找出来各方面的因素。比如要证明一个定理,各个方面都考虑到,一个条件不满足就无法证明;但如果证明其不成立,最常用的就是找到一个反例,只要有一点证明不成立就可以了,软件测试也是找这一点。

    做测试还要考虑到所有出错的可能性,还要做一些不是按常规做的、非常奇怪的事。除了漏洞检测,测试还应该考虑性能问题,也就是要保证软件运行得很好,没有内存泄漏,不会出现运行越来越慢的情况;在不同的使用环境下,考虑软件的兼容性同样重要。软件测试同产品的规模也有很大的关系,因为软件的bug往往出在大型软件的连接处。

    做软件测试工程师需要对软件抱有怀疑态度。这是因为开发人员喜欢想当然,总是找一些有利于自己程序执行的数据,有些开发人员甚至认为不利于程序执行的数据是对代码的玷污和亵渎。而软件测试却要策略性的准备各种数据,从每个细节上设计不同的应用场景,不去想当然的假定任何一个数据是可行的。

    在职业素质和交际方面方面,并不是测试工程师爱挑别人毛病才好,反而这个工作要求很强的沟通能力。经常的和开发人员进行沟通,说话办事要很得当,不能指责别人,否则会事倍功半。性格随和才能和开发人员顺畅的沟通,对人和对事是完全不同的两个问题。

    如何培养优秀的软件测试工程师

    朗川软件测试工程师张建阳从北大力学系毕业之后,曾开发流体力学分析软件,软件缺少测试而产生的问题给她留下了很深的印象。后来去大唐电信做UIM(统一消息管理系统),她发现尽管公司为了鼓励员工找bug采取了很多奖励方法,但还是很少人愿意去做系统测试。而张建阳却从那时查阅翻译了很多国内外的资料,对软件测试产生了浓厚的兴趣。

    像张建阳这样在工作中自己定位在软件测试领域的开发人员并不多见,因为程序员更愿意去做开发而不是测试,从大环境上,测试人员收入水平低也是原因之一。而在微软,测试人员和开发人员的工资水平是相同的。

    如何改变这种现状呢?有人说可以可以派人去先进的国外软件企业学习,但这种方式因为牵涉到商业秘密,可操作性不大。陈宏刚博士认为更好的方法是引进人才,把在国外大型软件公司工作过、有经验的人才引进来,甚至要高薪聘请。他表示,这不仅仅是一个人的问题,关键是能够把整个软件测试的水准提高一个层次。

    引进人才只是开始,更重要的是培养一批软件测试人才。软件开发的教育培训都是比较正规的,各个学校也都设有专业,但软件测试还没有正规的专业毕业生,而且没有评判的标准。陈宏刚博士给很多软件学院建议,开设四方面的软件测试专业基础课:软件测试基础、软件测试开发、高级软件测试案例和行业软件特色测试方法。国内现在已经有了一些软件测试基础的教材,但其他的教材还没有。高级软件测试案例主要是大型软件测试案例,大型软件出现的问题具有很强的代表性。而行业特色软件测试的课程可以开阔学生的视野。陈博士介绍说,在国外,也是极少的高等院校开设测试专业,但可以借鉴民间的培训机构课程。在有一批专业的测试人才出现之后,人们会认识到他们的重要性。

    如果你已经开始从事软件测试工作,千万不要认为软件测试没有什么发展的潜力和前途。刘忠从1995年接下IBM的OS2汉化版本的测试开始到现在,他一直工作在软件测试领域,并升到了公司高级副总裁的位置。和腾软件也培养了一批测试工程师,它们从对测试职业将信将疑到明确自己的测试方面的职业目标。刘忠介绍说:“很多人开始做测试执行工作时会说很麻烦、很枯燥,只是一味的埋怨,而不是主动的去学习,他没有看到软件测试背后所隐藏的知识。因为学习可以做这些工作,不学习也可以做这些工作,但质量是不同的。有些人自学和请教了很多测试技术和管理方面的知识,公司自然就会在下个项目中去培养他。”

    因此对于一个新手,要在各方面培养自己的能力。首先是要理解各种测试流程,并在理解的基础上转化为自己的知识,以后遇到相似的问题能自己去解决。在测试技能上,要知道测试有那些手段,比如压力测试有哪些方法,哪些工具可以辅助做测试。从专业技能上,面向不同的技术方向,像操作系统、网络、通信等都要从专业上深入了解。这三方面要同步去成长。

    软件测试工程师未来的发展

    从事软件测试有没有前途,未来的职业发展方向怎样呢?

    陈宏刚博士表示,软件测试工程师在微软的发展有几种途径:一种走技术路线,成长为高级软件测试工程师,这时他能够独立测试很多软件,再向上可以成为软件测试架构设计师。第二种就是向管理方向发展,从测试工程师到组长(Lead),再到项目经理(Manager),到更高的职位。第三种可以换职业,做项目管理,做开发人员都可以,很多测试工具软件开发工程师在写测试软件的过程中,因为开发方面积累了经验,同时对软件产品本身产生了自己的看法,很容易转去做产品编程。

    陈宏刚博士现在还带着一个测试小组,两个清华软件学院的学生,一个南开的专门做软件测试的博士生,一个北邮的学生,他们负责总部一个产品的测试。陈博士表示,在自己简单的讲讲思路,共同探讨之后,他们一星期就找出了70多个Bug,也感觉学了很多知识,并表示以后专注于软件测试专业,因为他们感觉软件测试真的是一门很深的学科,有很多可以研究的课题。其实微软的测试人员很多也都是硕士、博士,他们同样在做创造性的工作,保证着程序质量,推动着软件的进步。

    软件测试是正在快速发展,充满挑战的领域。尽管现在单机版桌面软件的测试已经成熟了很多,但对于网络时代的到临,包括微软在内的公司对基于网络的测试也没有一套完整的体系,也是处于探索中,网络中被攻击的可能性太大,这就是为什么黑客在网络上能兴风作浪的原因。网络测试是一个新环境,而且是很大的挑战。

    软件测试未来的发展空间很大,软件测试工程师的职业之路同样充满希望。

    李维谈软件测试

    记者:台湾的软件测试工程师的地位如何?

    李维:就我知道的几个案例来说, 地位很低。许多公司不是没有专职的测试机制,就是老板认为不重要。许多老板还认为直接让客户测试即可,实在不可思议。

    记者:测试工程师的人员比例也很小吗?

    李维:是的, 大概6-8位工程师配一个测试人员,不过有的是以产品线来分的。

    记者:台湾有专业的测试培训教育吗?

    李维:据我所知, 沒有。

    记者:依您的看法,软件公司如何才能重视软件测试呢?

    李维:台湾国际级的软件公司如友立、趋势才重视测试。如果是短视的软件公司,由于许多老板不是资讯出身,所以不了解软件工程的重要。要重视软件测试,负责研发的头头必须有明确的认识。许多软件人员知道使用OO或者SD的方式设计软件,却不知对于测试也同样的需要事先设计并规划测试计划,这实在好玩。

    记者:borland公司测试人员情况如何?

    李维:Borland有不同的测试人員, 针对不同的产品。专职的测试人员大约有50-60人,测试人员占研发人数的30-40%。Borland的测试人员都会规划测试计划,同时有系统和回归测试。
  • 女人嫁谁不后悔?

    2007-06-01 09:25:57

       嫁给有钱的男人

        食有鱼,出有车,豪华别墅,锦衣丽服,珠围翠绕,暗香弥漫,这种日子应该很不错的吧?可是,男人挣钱需要时间和精力,有钱的男人不是锱铢必 较的商人,就是忙于应酬的权贵。商人的脑子里充满利益,每天算计投入和产出,缺乏温馨。许多年前的那个江州司马早已看透了这种男人的本质——重利轻别离。

        嫁给权贵的男人

        权贵男人的脑子里充满关系,每天衡量着该和谁近,该和谁远,缺乏柔情.有钱的男人往往没时间,会将女人冷落一边。嫁给这种男人的女人,等于嫁给电视机,嫁给美容院,要忍受长久的精神上的空虚,空有一份表面上的华丽,内心的苦涩有谁知道?

        嫁给帅哥

         显然是自取灭亡。帅哥就算有心一生只爱你一人,也顶不住别的女人不管不顾的爱心奉献。帅哥长的帅,艳遇来的快,快的叫你斩不尽杀不绝,春风吹又生,然后你的婚姻就成了一场你方唱罢我登场的闹剧。


        嫁给有闲的男人

         每天都有人陪伴,他事情很少,记性好,你的生日,你们的结婚纪念日,甚至你的生日,他都会记得一清二楚。他每天按时回家,还做得一手好菜,愿意陪你逛商场,很会教育孩子。你每天生活在他的包围之中,应该了无遗憾了吧?不,这种男人往往能力有限,没有很多的钱,你必须千辛万苦和他一起打拼,才能获得一份温饱生活。看到别的女人养尊处优,年过四十依然面容姣美,十指纤纤,而你年纪轻轻,已经皮肤粗糙,玉手变形,就会不甘心——别人怎么能嫁个“钻石男人”,自己怎么嫁了个破铜烂铁?

        嫁给会说甜言蜜语的男人

         你的心情会格外舒畅,这种男人聪明心细,善于发现女人的美。你换了一个发型,换了一件衣服,甚至换了一种牌子的口红,他都会及时发现,并马上赞美。他会别出心裁地夸奖你透明的耳垂,夸奖你浑圆的脚踝,你会在这种被人欣赏的感觉中陶醉——因为有些美你自己都未发现。可是,你应该清醒一下,这种男人也很善于发现除了你之外的其他女人的美。他会把甜言蜜语说给很多女人听,你甚至都不知道你是第几个听到他甜言蜜语的人。这种男人很危险,一不小心就会在外面竖起几面“彩旗”,在情感上与别人“分一杯羹”,你会内心充满痛苦和耻辱的。

       嫁给朴实拙讷的男人

        你尽管可以放心,他对你忠心耿耿,毫无二心,对身边擦肩而过的美女绝对可以目不斜视。可是,这种男人往往迟钝得可怕,你换了一双新款的鞋子一周了,他都没有发现;你问他涂粉色指甲油好还是浅紫色指甲油好,他通常会一脸茫然。嫁给这种缺乏情趣的男人,你会觉得自己的女性之美形同虚设。

        嫁给才子

        这事怎么说呢?先把才子分为出人头地怀才不遇两种。前者的各种翘楚有徐志摩、郁达夫,他们的爱情婚姻都轰动一时,可是结果不甚美妙。才子佳人的组合太旖旎,就会折福。怀才不遇的才子最好别嫁,嫁了也是陪他一起谴责上苍无眼、小人当道、时运不济。怀才不遇者都有股怨气,怨的久了、深了,人也就阴暗了。别叫我找实例,因为他们都已被残酷的生活所埋没。

        嫁给专业人士

        好象不错,比如律师医生,婚后遇到什么事情都有人护航。这类人较有素质,一般不会发生秀才遇见兵有理说不清的悲剧。可他们通常都很忙,半夜要出诊,假期不见人,而且可能不浪漫,有一种严谨的职业病,把你一个人困在婚姻里哀嚎。

        嫁给教师

        他们很难有升迁机会,不大会给你惊喜。其工作方式就是从低年级向高年级爬,然后直线下跌,周而复始,乐此不疲。他们的优点是每年会有三个月可以做家庭妇男,并且免费为子女做家庭教师。

        [后记]:你也许会说,嫁给既有钱又有闲,既有情趣又有忠贞不渝的男人,肯定不会后悔。是这样的,但是,世间没有这么完美的男人。即使有,我们也配不上---因为我们自身不够完美。因此,嫁给谁都后悔,我们只能守着一份凡俗的婚姻,谁都不能幸免——因为我们都是有缺点的人。这很无奈,但这就是生活。也许谁都不嫁不后悔。但前提是你受得了形影相吊。
  • 转;应当要做的几件事情

    2007-05-11 15:24:14

    一、买个闹钟,以便按时叫醒你。贪睡和不守时,都将成为你工作和事业上的绊脚石,任何时候都一样。不仅要学会准时,更要学会提前。就如你坐车去某地,沿途的风景很美,你忍不住下车看一看,后来虽然你还是赶到了某地,却不是准时到达。“闹钟”只是一种简单的标志和提示,真正灵活、实用的时间,掌握在每个人的心中。
      二、如果你不喜欢现在的工作,要么辞职不干,要么就闭嘴不言。初出茅庐,往往眼高手低,心高气傲,大事做不了,小事不愿做。不要养成挑三拣四的习惯。不要雨天烦打伞,不带伞又怕淋雨,处处表现出不满的情绪。记住,不做则已,要做就要做好。
      三、每个人都有孤独的时候。要学会忍受孤独,这样才会成熟起来。年轻人嘻嘻哈哈、打打闹闹惯了,到了一个陌生的环境,面对形形色色的人和事,一下子不知所措起来,有时连一个可以倾心说话的地方也没有。这时,千万别浮躁,学会静心,学会忍受孤独。在孤独中思考,在思考中成熟,在成熟中升华。不要因为寂寞而乱了方寸,而去做无聊无益的事情,白白浪费了宝贵的时间。
      四、走运时要做好倒霉的准备。有一天,一只狐狸走到一个葡萄园外,看见里面水灵灵的葡萄垂涎欲滴。可是外面有栅栏挡着,无法进去。于是它一狠心绝食三日,减肥之后,终于钻进葡萄园内饱餐一顿。
      当它心满意足地想离开葡萄园时,发觉自己吃得太饱,怎么也钻不出栅栏了。相信任何人都不愿做这样的狐狸。退路同样重要。饱带干粮,晴带雨伞,点滴积累,水到渠成。有的东西今天似乎一文不值,但有朝一日也许就会身价百倍。
      五、不要像玻璃那样脆弱。有的人眼睛总盯着自己,所以长不高看不远;总是喜欢怨天尤人,也使别人无比厌烦。没有苦中苦,哪来甜中甜?不要像玻璃那样脆弱,而应像水晶一样透明,太阳一样辉煌,腊梅一样坚强。既然睁开眼睛享受风的清凉,就不要埋怨风中细小的沙粒。
      六、管住自己的嘴巴。不要谈论自己,更不要议论别人。谈论自己往往会自大虚伪,在名不副实中失去自己。议论别人往往陷入鸡毛蒜皮的是非口舌中纠缠不清。每天下班后和你的那些同事朋友喝酒聊天可不是件好事,因为,这中间往往会把议论同事、朋友当做话题。背后议论人总是不好的,尤其是议论别人的短处,这些会降低你的人格。
      七、机会从不会“失掉”,你失掉了,自有别人会得到。不要凡事在天,守株待兔,更不要寄希望于“机会”。机会只不过是相对于充分准备而又善于创造机会的人而言的。也许,你正为失去一个机会而懊悔、埋怨的时候,机会正被你对面那个同样的“倒霉鬼”给抓住了。没有机会,就要创造机会,有了机会,就要巧妙地抓砖
      八、若电话老是不响,你该打出去。很多时候,电话会给你带来意想不到的收获,它不是花瓶,仅仅成为一种摆设。交了新朋友,别忘了老朋友,朋友多了路好走。交际的一大诀窍就是主动。好的人缘好的口碑,往往助你的事业更上一个台阶.
      九、千万不要因为自己已经到了结婚年龄而草率结婚。想结婚,就要找一个能和你心心相萤相辅相携的伴侣。不要因为放纵和游戏而恋爱,不要因为恋爱而影响工作和事业,更不要因一桩草率而失败的婚姻而使人生受阻。感情用事往往会因小失大。
      十、写出你一生要做的事情,把单子放在皮夹里,经常拿出来看。人生要有目标,要有计划,要有提醒,要有紧迫感。一个又一个小目标串起来,就成了你一生的大目标。生活富足了,环境改善了,不要忘了皮夹里那张看似薄薄的单子
  • LR 测试NTLM(windows集成身份论证)问题

    2007-04-26 14:12:28

    LR 测试NTLM(windows集成身份论证)问题

    前些天应部门安排,对一个系统在生产环境进行性能测试,该系统由于采用NTLM身份验证机制,使用平时的录制脚本,修改脚本的对应地址
     web_set_user("domain\\000001", "xxxxx", "test.oa2.xxxx.com:80");

    根据LR函数帮助,需要把“000001”参数化,但是实际中,出现修改後,回放登录不通过,出现的错误为无权登录,怎么修改都不行

    后来使用把用户同域名一起作为参数後,测试通过

    “domian\000001”

    发现LR的脚本中的域名加用户格式为:"domain\\username"

    而windows的验证中,域名加用户格式为:"domain\username"

    故验证方式不能通过

    总结,在以后的测试中,一定要注意这些小的方面的差别,不能迷信LR帮助

  • 做软件测试至少要有四种能力

    2007-01-08 17:17:08


      曾经在方正研究院担任测试工程师的肖先生分析说,能胜任软件测试工程师的人,至少需要以下几个能力。

      一、缜密的逻辑思维能力。为应对软件使用者千差万别的使用习惯和软件在使用过程中出现的各种现象,软件测试工程师应具有逆向思维能力,能够以用户角度出发,捕获一切可能性,对细节有不同寻常的关注能力。

      二、出色的沟通能力。优秀的软件测试工程师,应具备出色的沟通和表达能力。既能和技术开发人员沟通,又能简洁明了地向客户、管理者等这些非技术人员阐述系统在哪方面有缺失。当发现软件有问题时,不仅需要跟开发人员沟通,找到问题出在哪儿,阐述自己挑错的理由,有时候甚至要提出解决方案,直接参与前期需求和代码的修改。

      三、全面的技术能力。作为软件测试工程师,虽然无须精通各种语言各类技术,但必须全面理解被测软件系统,明白该使用何种工具进行测试。

      四、耐得住性子。软件测试工作是枯燥的,甚至是重复性的,有时需要花费惊人的时间去分离、识别和分派一个错误,因此需要测试人员能静得下心、耐得住性子,心浮气躁是做不好的。
  • SQL语句中为什么要用自连接,最形象的描述

    2006-12-17 13:19:23

    今天在一个网站看到了一个SQL语句自连接最形象的描述,让自己有点感受

    深入浅出SQL教程之SELECT的自连接

    到目前为止,我们连接的都是两张不同的表,那么能不能对一张表进行自我连接呢?答案是肯定的。  有没有必要对一张表进行自我连接呢?答案也是肯定的。
      表的别名:
      一张表可以自我连接。进行自连接时我们需要一个机制来区分一个表的两个实例。
      在FROM clause(子句)中我们可以给这个表取不同的别名, 然后在语句的其它需要使用到该别名的地方用dot(点)来连接该别名和字段名。
      我们在这里同样给出两个表来对自连接进行解释。
      爱丁堡公交线路,
      车站表:
    stops(id, name)
      公交线路表:
    route(num, company, pos, stop)
      一、对公交线路表route进行自连接。
    SELECT * FROM route R1, route R2 WHERE R1.num=R2.num AND R1.company=R2.company
      我们route表用字段(num, company)来进行自连接. 结果是什么意思呢?
      你可以知道每条公交线路的任意两个可联通的车站。
      二、用stop字段来对route(公交线路表)进行自连接。
    SELECT * FROM route R1, route R2 WHERE R1.stop=R2.stop;
      查询的结果就是共用同一车站的所有公交线。这个结果对换乘是不是很有意义呢。
      从这两个例子我们可以看出,自连接的语法结构很简单,但语意结果往往不是那么容易理解。就我们这里所列出的两个表,如果运用得当,能解决很多实际问题,例如,任意两个站点之间如何换乘。

    SELECT R1.company, R1.num FROM route R1, route R2, stops S1, stops S2
    WHERE R1.num=R2.num AND R1.company=R2.company AND R1.stop=S1.id AND R2.stop=S2.id
    AND S1.name='Craiglockhart' AND S2.name='Tollcross'

     

        软件的开发或者是公司的管理,其内涵同生活中的事情都是想通的,只要你去想去摸索,你就很简单的理解了技术当中很多让自己不是那么明白的事情!

        我们应当不局限句书本,而要从生活中来,去生活中摸索!

Open Toolbar