bnv

发布新日志

  • 什么是兼容性测试?

    2010-08-03 18:37:11

    什么是兼容性测试?

    一  什么是兼容性测试?
         兼容性测试是将验证软件与其所依赖的环境的依赖程度,包括对硬件的依赖程度,对平台软件,其它软件的依赖程度,来检查程序能正常的运行的测试。

    二  兼容性测试有哪些?
        兼容性测试分为两大类:硬件兼容性测试和软件兼容性测试
        “硬件兼容性测试”又分为:与整机兼容性测试,与板卡及配件兼容性测试,与打印机的兼容性测试,其它部件的兼容性(鼠标、键盘、扫描仪、视频软件,刻录软件的兼容性等).
         “软件兼容性测试”又分为:与操作系统的兼容性测试,与数据库的兼容性测试,与中间件的兼容性测试,与浏览器的兼容性测试,与其它软件的兼容性测试(主要考查与支持软件(PDF软件可以导出格式为Word的文件),与其它同类软件(如杀毒软件,瑞星,金山),与其它非同类软件的兼容性;
         “数据兼容性测试”:则是指不同数据格式的兼容性(确认软件之间能否正确地交互和共享信息,不同格式的信息是否兼容;包括系统与其他系统复制粘贴文字是否正确;旧版本信息在新版本是否能打开;新版本文件在旧系统中是否能打开;同类软件是否可以进行数据交换);
        “平台化软件兼容性测试“:用来构建与支撑应用软件的独立软件系统;基本要素包括支撑环境(应用系统开发与运行的基本条件)和开发体系(开发与维护管理应用软件的工具与方法);分类包括技术支撑型平台和应用实现平台;
         “新旧系统迁移兼容性测试”: 新旧系统进行切换时,将历史数据进行清理、转换,并导入到新系统的过程;

    三  兼容性测试与配置测试区别是什么?




    四 兼容性测试实例
        1举例Windows操作系统;
        2游戏,如:“传奇世界”;
    五  待续~~~~

    ~~~列个提纲,后续补上!
     
  • 构建高性能的Web站点

    2010-08-03 18:29:44

    构建高性能的Web站点

    一  Web站点高性能主要体现在:

         高可用,低成本,高性能,可扩展,易维护;

    二  构建高性能的Web站点措施:

        1 浏览器端优化;

           缓存1:浏览器缓存 

         2 Web负载均衡

           缓存2:反向代理缓存;

         3 Web组件分离

           缓存3: 动态内容缓存

           缓存4: 分布式缓存

           缓存5: 数据库缓存及性能优化

         4 共享文件系统/分布式文件系统

         5  其它重要环节

            合理部署服务器(互联互通)

            考虑可扩展性

            考虑高可用性

            不断测试与优化 找到瓶颈在哪里

            服务器的并发处理能力(cpu,内存,i/o等)

            服务监控与报警

    以上是公司内部培训,简单列下提纲,梳理下思路,供参考^_^

  • 华为居首中兴第二

    2010-06-03 16:03:38

    2010软件业收入百强出炉:华为居首中兴第二

    字体:        | 上一篇 下一篇 | 打印  | 我要投稿  | 每周一问,答贴有奖

      5月31日消息,第9届中国软件业务收入前百家企业名单,28日在沈阳发布,华为技术有限公司以725.7亿元人民币位居榜首,已经连续9届位居第一。

      在百强软件企业中,华为技术有限公司、中兴通讯股份有限公司、神州数码(中国)有限公司前三家企业的软件业务收入均超过100亿元;软件收入超过10亿元的企业有43家,比上届增加10家;前10家企业的总量比上届有较大幅度增长,增长率为20%。

      本届百强软件企业共实现软件业务收入2448.7亿元,比上届增加409.2亿元,占2009年我国软件产业总收入的24.6%。

      本届百家企业入围门槛为3.96亿元,比上届增加8545万元。百家企业共实现软件业务收入2448.7亿元,占2009年全国软件产业总收入的24.6%,其中超过10亿元的企业有43家,超过50亿元的有6家。

      百家企业出口超过110亿美元

      由于软件产业竞争激烈,百家企业的调整更新较快。据悉,第一届的前30名企业,只有19家在最新一届的百家名单中,6家企业因转产、软件业务收入下降或出现亏损退出百家企业,有2家被市场淘汰,1家重组后重新入选。规模相对较小的企业调整更快,第一届百家企业的最后20家,只有3家仍在最新一届名单中。

      国际化步伐加快、服务外包能力增强是中国软件百强企业明显发展趋势。本届百家企业出口超过110亿美元,占全行业出口的半数以上,其中外包出口超过10亿美元。

      由通信业转向金融、交通、能源、工控等多个领域

      本届百强软件企业的收入构成中,产品类收入逐步降低,服务类收入不断提升,软件服务化趋势明显。 同时,软件应用行业由最初的以通信行业为主,向金融、交通、能源、工业控制等多个领域并重转化;系统集成由通用型计算机网络集成向行业解决方案转化,软件附加值日益提高;信息技术增值服务迅速兴起。

      由工信部2002年起每年进行的软件业务收入前百家企业发布活动,迄今已开展9届,收入过10亿元的由最初的12家增加至43家,华为技术有限公司连续9届保持了百家企业首位,其软件业务收入9年间扩大了12倍。

      附:2010中国软件业务收入前百家企业名单

    序号

    企业名称

    软件业务收入(单位:万元)

    1

    华为技术有限公司

    7256789

    2

    中兴通讯股份有限公司

    2706625

    3

    神州数码(中国)有限公司

    1303956

    4

    海尔集团公司

    817972

    5

    北京北大方正集团公司

    624371

    6

    熊猫电子集团有限公司

    608666

    7

    浙大网新科技股份有限公司

    490603

    8

    浪潮集团有限公司

    478952

    9

    东软集团股份有限公司

    416606

    10

    同方股份有限公司

    407066

    11

    南京联创科技集团股份有限公司

    360777

    12

    南京南瑞集团公司(含国电南瑞科技股份有限公司)

    344962

    13

    沈阳先锋计算机工程有限公司

    310300

    14

    中冶赛迪工程技术股份有限公司

    281384

    15

    航天信息股份有限公司

    266208

    16

    中国银联股份有限公司

    249133

    17

    中国软件与技术服务股份有限公司

    241311

    18

    上海贝尔阿尔卡特软件有限公司

    228486

    19

    用友软件股份有限公司

    227586

    20

    杭州恒生电子集团有限公司

    203600

    21

    福州福大自动化科技有限公司

    201203

    22

    上海宝信软件股份有限公司

    201128

    23

    中国民航信息网络股份有限公司

    180780

    24

    株洲南车时代电气股份有限公司

    179395

    25

    山东中创软件工程股份有限公司

    169245

    26

    杭州海康威视数字技术股份有限公司

    165463

    27

    北京华胜天成科技股份有限公司

    160898

    28

    东华软件股份公司

    152117

    29

    太极计算机股份有限公司

    137190

    30

    上海华讯网络系统股份有限公司

    134899

    31

    烽火通信科技股份有限公司

    133741

    32

    启明信息技术股份有限公司

    131583

    33

    烟台东方电子信息集团有限公司

    130890

    34

    北京全路通信信号研究设计院

    130839

    35

    海信集团有限公司

    130487

    36

    深圳市金证科技股份有限公司

    121647

    37

    青鸟软件股份有限公司

    117973

    38

    中控科技集团有限公司

    116709

    39

    中国华大集成电路设计集团有限公司

    110092

    40

    珠海金山软件股份有限公司

    101343

    41

    福建星网锐捷通讯股份有限公司

    100297

    42

    金蝶软件(中国)有限公司

    97475

    43

    南京南瑞继保电气有限公司

    96835

    44

    沈阳东大自动化有限公司

    94072

    45

    亿阳信通股份有限公司

    92843

    46

    信雅达系统工程股份有限公司

    91636

    47

    大连华信计算机技术股份有限公司

    87444

    48

    广州广电运通金融电子股份有限公司

    86184

    49

    大唐电信科技股份有限公司

    86155

    50

    福建新大陆电脑股份有限公司

    85500

    51

    中科软科技股份有限公司

    83402

    52

    长城计算机软件与系统有限公司

    83234

    53

    浙江大华技术股份有限公司

    81756

    54

    石化盈科信息技术有限责任公司

    78886

    55

    三维通信股份有限公司

    78719

    56

    云南南天电子信息产业股份有限公司

    78383

    57

    软通动力信息技术(集团)有限公司

    77669

    58

    深圳市同洲电子股份有限公司

    76029

    59

    北京神州泰岳软件股份有限公司

    73999

    60

    北京联信永益信息技术有限公司

    70285

    61

    北京四方继保自动化股份有限公司

    68332

    62

    辽宁天久信息科技产业有限公司

    67235

    63

    国脉科技股份有限公司

    65570

    64

    上海华虹集成电路有限责任公司

    65221

    65

    杭州和利时自动化有限公司

    63445

    66

    北京首钢自动化信息技术有限公司

    61577

    67

    航天恒星科技股份有限公司

    60986

    68

    深圳市紫金支点技术股份有限公司

    59452

    69

    中程科技有限公司

    59172

    70

    先锋软件股份有限公司

    59131

    71

    杭州士兰微电子股份有限公司

    58984

    72

    北京联想软件有限公司

    58427

    73

    威海北洋电气集团股份有限公司

    57024

    74

    东信和平智能卡股份有限公司

    55566

    75

    文思创新软件技术有限公司

    54919

    76

    查看(564) 评论(0) 收藏 分享 管理

  • 转载 测试杂感:最好的代码覆盖率工具

    2010-04-28 14:47:32

    代码覆盖率(Code Coverage)是指测试执行覆盖代码的程度。在工业界,常用的代码覆盖率度量包括类覆盖、函数覆盖、语句块覆盖、分支覆盖等。通常,开发者需要使用某种测试工具去收集测试的代码覆盖率。例如,.NET开发者可以使用Visual Studio 2008去收集C#代码的函数覆盖和语句块覆盖。本文将介绍我心目中最好的代码覆盖率工具。

    在2008年初,我接到一个测试任务,去测试一个Web服务。这个Web服务用C#实现,它接受Web服务调用,根据输入更新后台的数据库中的数据。这是一个小项目,核心逻辑大约在千行上下。我接手的时候,代码已经写完。开发者有简单的测试,他提供了5条端到端(end-to-end)测试用例供我参考。

    当时,我最头痛的是完全不知道该Web服务的业务逻辑和实现逻辑。在仔细地阅读了规格说明和几封很长的讨论邮件之后,大致知晓了项目背景,但是仍旧不了解实现逻辑,也不知道什么行为是可以接受的、什么行为是错误的。由于开发者与我有16个小时的时差,不能随时和他联系,很多问题得不到及时的解答,测试很难展开。

    为了有所突破,我只能阅读实现代码。我的方法是,在Visual Studio中单步执行开发者的测试用例,观察程序中变量值的变化和数据库中数据的改变。有了初步的认知,我开始增加测试用例。大部分测试用例都是一个模式:

    1. 恢复被测试Web服务的后台数据库到已知的初始状态。
    2. 调用Web服务。Web服务是无状态的,但是它会改变数据库中的数据。
    3. 对数据库中的数据进行一致性检查。我花了许多时间编写并增强检查代码,整个测试开发过程是渐进的。
    4. 执行当前测试所特有的检查。

    设计完一个测试用例,我就在Visual Studio中单步执行它,从而更深入地了解实现逻辑。在阅读、执行代码的过程中,会发现潜在的问题。这时,我会增加一个测试用例去“证明”这个问题可以导致产品的失败。随着测试用例越来越多,我对代码的理解也越深,发现的缺陷也越多。后来,缺陷不那么好找了,我就仔细地读代码,特别是那些没有被测试覆盖过的代码。然后,便增加测试用例去尽可能地提高测用例的覆盖率。一方面,测试用例要尽可能地覆盖所有的代码块;另一方面,测试用例要覆盖所有主要的数据状态和我觉得有风险的数据变更。

    在项目结束的时候,我对测试的代码覆盖率很有自信。只有三个在catch语句中的代码块没有被覆盖,它们在产品环境中被执行的概率非常低。我仔细阅读过代码,它们即便被执行也不会导致危险。实际上,我比较担心的是测试没有覆盖一些复杂的数据转换。虽然我在不停地补充此类测试用例,但是这个项目的测试周期较短,测试用例能够覆盖的程序状态空间还是偏少。庆幸的是,产品上线后运行良好,没有发现问题。

    回顾这个项目,我觉得有两点经验可以吸取。

    第一,人的大脑才是最好的代码覆盖率工具。代码覆盖率工具能提供大量的信息。只有在充分理解代码与测试的前提下,这些信息才能得到有效的利用。这个项目的代码规模较少,因此我没有使用代码覆盖率工具。通过反复阅读代码、调试代码,我收集了代码覆盖率信息,并利用这些信息改进了测试。可以说,代码覆盖率是随着对代码不断的探索而自然提高的。对于大型项目,合理的利用代码覆盖率工具自然是大有裨益的。在这一过程中,阅读、理解、探索代码仍旧是指导测试的核心活动。

    第二,代码覆盖率只提供了程序结构被覆盖的信息,测试者还需要关注程序状态是否被有效地覆盖。在本项目中,程序的状态可以视为数据库中数据值。Web服务能否完成很多时候取决于取决初始数据值是否有效、目标数据值是否可以接受。不同的数据对于相同的执行路径会产生完全不同的结果。如果仅仅关注程序结构,很可能会漏掉一些由状态引发的问题

  • 记号

    2010-03-09 14:47:19

  • 淘宝的

    2009-12-30 16:15:59

  • 2个月后的回归

    2009-05-30 09:25:15

    离开网络已经整整两个月的时间,在这段时间内自己的收获很多。希望这次的选择是对的。
  • 回首2008

    2009-01-20 17:38:00

    看了测试同仁都在博文中写自己的年底总结,自己也心中不免痒痒。

    一。从技术角度来讲:

      1.通过几个项目的性能测试,已经可以熟练使用loadrunner,至少这在老大口中已经得到认可。曾经听一位新来的同事告诉老大夸我  loadrunner用的好,不知道是真的还是假的,自己先高兴以下,嘻嘻。

      2.对C++程序有了一定的了解,这也是我明年要学习的一个目标,争取明年将C++的白盒测试拿下

      3.对于.net的项目的测试已经可以轻车熟路的测试。

    二。个人能力提高

       1.自己平时说话的语言组织能力有待加强,尤其是说话不能太直白了,温柔一些再温柔一些

       2.遇事要沉着冷静

       3.××××××大事讲原则,小事看风格××××

       4.对于已经发生的问题要勇于承担,总比欲盖弥彰的好

    三。管理能力

        1.如何让手下的人为自己心甘情愿的干事,那才是真的管理

        2.如何做到控制别人,包括别人的情绪和行为

        3.将压力向下传达,将问题向上反应

        4.对于别人最高的蔑视和拒绝就是无视和沉默

        

        

       

     

     

  • 转载频繁的版本变更

    2008-11-10 13:44:11

    我答“测试过程中如何应对频繁的版本变更?”

    2008-03-04 17:54:13

    51testing本周的问题:测试过程中如何应对频繁的版本变更?

    http://bbs.51testing.com/thread-107290-1-1.html

    在软件开发过程不规范的项目组中,这种情况是非常常见的。2001年,我接触过的一个公司,它刚刚成立软件测试部,当时的测试部遇到的情况和上面讲的几乎如出一辙,搞得测试员叫苦不迭,开发部的程序员也天天抱怨头疼。

    具体到当前这个项目遇到的情况,从上面的问题分析,我认为主要原因是:开发部提供的测试版本太过随意,导致质量太差。要解决它,我认为有以下几个关键点:

    ×在项目开始时,最好能先开发一个原型出来,原型基本上要确定整体界面的风格、统一的操作习惯等,以后的开发要以原型为基础进行;

    ×开发部使用版本控制工具,比如CVS、VSS等,并且要保证每天定时Check-in和Check-out,避免积累大量代码,同时要强调在Check-out和Check-in的时候要注明缘由,是为了修改某个bug还是增加新功能等;

    ×每日构建(Daily Build):每日构建要形成制度,构建过程最好能自动进行,如果因为是第一次这样做,没有经验,遇到技术问题,在这种情况下,建议由测试部指派一名测试员加入到开发部,协助开发部进行人工构建,每日能集成一个能运行起来的完整的软件系统;

    ×强化冒烟测试(Smoke testing):加入开发部的测试员在构建后,集成了一个完整的软件系统,要及时对每一个build进行验证(Build Verification Test ),也可以称之为“冒烟测试”,对软件的基本功能点进行验证;

    ×强化测试的准入条件:软件测试启动是有条件的,并不是说开发部拿个软件过来,开发部就要测试,比如要启动测试活动,必须要有需求规格说明书、设计书、单元测试报告、冒烟测试报告等,这是前提。满足不了这个前提条件,测试活动不会启动。当然这个制度需要公司管理高层的认可,在项目启动时要和项目经理协调好的;

    ×强化BUG管理:测试组要使用BUG管理工具,例如bugzilla、JiRA等,要保证 bug、版本、以及人员的对应关系,同时分析在不同的版本、不同的时间段、不同的模块中BUG的走势,确定“危险模块”为重点测试对象,预测未来的BUG走势和工作量等。

    ×积极的态度:无论是开发部还是测试部,在这个困难的过程中都要有积极的态度,遇到问题要及时沟通,以最高效的方式解决问题。

    要从根本上根治这种矛盾,需要一套完整的、规范的开发过程。以上的措施只是一部分,只能在最短的时间内缓解矛盾。

  • lr学习总结

    2008-10-16 17:28:36

    这两天收获颇丰,上次七月份弄完的性能测试时至今日已经有三个月了。

    以前学习经常是上网找资料,这次经高人指点,好好研究了帮助文档。收获很大。发现好多问题在帮助文档里都有说明。以后决定了,遇到问题首先是找帮助文档,以前经常是在网上海搜。

    另外就是对于输入类似提交数据,我设置的参数是中文的汉字。但是执行完成后发现生成的数据都是问号。郁闷了半天经过一个好心人提醒,将参数的txt文档存成utf-8模式即可。

    今天下午又录制了一个脚本,参数呢我打算使用上面方法生成的文档。可惜设置检查点后,发现每次检查到的条数只有一条,最后自己灵机一动,是不是还是参数的格式问题,我又把他还原成第一格式。^_^通过。

    另外就是对于web-reg-find("text=123",last;)使用时候要将该函数放在查询之前,否则它是不会检查到东西(对于查询结果的检查)的。哈哈

     

  • ip欺骗

    2008-10-15 09:55:13

    转载http://www.51testing.com/?75241/action_viewspace_itemid_94850.html 

    设置IP欺骗的原因

    1、 当某个IP的访问过于频繁,或者访问量过大是,服务器会拒绝访问请求,这时候通过IP欺骗可以增加访问频率和访问量,以达到压力测试的效果。

    2、 某些服务器配置了负载均衡,使用同一个IP不能测出系统的实际性能。LR中的IP欺骗通过调用不同的IP,可很大程度上的模拟实际使用中多IP访问和并测试服务器均衡处理的能力。

    IP地址的设置

           IP地址的设置较为简单,可直接在本地连接中增加IP,或者通过LR自带的工具“IP wizard”设置,当然也可以使用其它软件设置。唯一需要注意的就是注意设置的IP的有效性。

     

    “选项”中的
    IP设置

    使用“选项”对话框中的“常规”选项卡,可以选择IP地址模式。只有在专家模式下操作 Controller 时,才显示该选项卡。

    要设置常规专家模式设置,请执行下列操作:

    1.     选择“工具”>“选项”。将显示“选项”对话框。选择“常规”选项卡。

    2.     选择多个 IP 地址模式。

    需要注意的是,这里的IP地址模式和运行时设置中的常规设置的不同,会导致IP欺骗失效。具体该怎么设置,这里就不讲了,很简单的东西。

    启用IP欺骗

     从 Controller 启用多个 IP 地址

    定义多个 IP 地址后,您就可以设置一个选项,让 Controller 使用该功能。

    要从 Controller 启用多个 IP 地址,请执行下列操作:

    在 Controller“设计”视图中,选择“场景”>“启用 IP 欺骗器”。

    注意:必须在连接到负载生成器之前选择该选项。

    IP欺骗功能验证

           IP欺骗已经设置了,但是是不是有效呢?通常会有这样的疑问。下面我们通过一个简单的试验,来验证是否有效。

           在脚本的Action()部分增加如下代码:

           char * ip=lr_get_vuser_ip();

           if(ip)

                  lr_vuser_status_message("The ip address is %s",ip);

           else

                  lr_vuser_status_message("IP spoofing disabled");

    然后通过控制器设置并运行场景.

    对于这段代码我始终是看不到他在那输出,所以我用了一个极端的方法,就是将lr_vuser_status_message”函数改为“lr_error_message”这样我就可以很容易看到是不是虚拟ip是否有效。  哈哈,这片文章就这一句话是原创。

     

    易错点

     

        1、和Generator搞混。以为添加多个IP后,需要添加多个IP对应的Generator才可以使用。(同一个Generator只需要以其某一个IP添加到Generator列表中即可以使用其它的IP。)

        2、在上一个错误基础上,对于同一个脚本,创建多个Vuser执行组,然后以不同IP选择同一个物理Generator来执行。( 实际上,在场景中除非需要在这个Generator上运行多个不同脚本,否则没有必要多次以不同IP选择。)

        其实只要记住两个要素即可使用这个功能:

         1、 用IP wizard 添加多个IP;

         2、在Controller中通过Enable IP Spoofing。

        而在使用IP欺骗功能上应该注意三点:

         1、虚拟IP是同一个Generator上的多个IP,这种分配过程由Controller自动来进行;

         2、对于同一个Generator,你模拟的用户数量多于IP数量时,将会发生IP重复的现象,否则将随机分配不同的IP。

         3、对于同一个Generator,以其某一个IP添加到Generator中即可,不需要用不同的IP添加多次。

     

     

     

     

  • 如何发现更深次的bug

    2008-10-14 15:31:59

    转自http://www.51testing.com/?2730

    在我们日常的测试活动中,单纯的功能界面测试(黑盒测试)发现的缺陷质量不高,即使发现了,也很少能从根本上去定位,这样的bug提交上去,给我们的研发同事修复带来了困难,同时也不利于提高我们自身的能力。这里我介绍一下个人的经验。

    1、按照需求说明编写用例,然后严格执行,这个方法最常见。

    2、在发现问题后,不要立刻就想着提交bug,应该做下记录,然后自己尝试着去分析这个问题产生的原因,比如看一下源代码,有些问题测试人员是可以自己定位的,只要自己确认了,提交上去的bug质量会更高。比如,执行搜索的时候,输入某个字段值,没有搜出来,查看代码后,发现sql语句并未执行,这时,我们再提交bug,描述里可以具体到那个页面文件,那个源代码,研发同事定位也方便,同事也对我们的技术能力认识上有改变。

    3、如果测试环境带有控制平台,比如tomcat,jboss,weblogic等等,都有控制平台,那么我们测试的时候,不仅仅需要关注前台的页面表现,还要看监控平台上的信息日志。有些系统对错误页面做了处理,我们在发现这类问题的时候,顶多将处理过的错误页面写到bug中,根本的原因可能无法得知,其实我们可以利用控制平台获取真正的错误原因,写到bug中。

    4、结合数据库进行测试,一般流程性的测试,最重要的就是数据在数据库中的状态变化。比如移动的项目,很多是异步的,光从页面是看不到效果的,所以我们可以结合数据库进行测试,弄清楚数据在数据库中的流转流程,这样才能发现更深层的bug,当然需要我们掌握数据库的使用,尤为重要要的是sql语句。举个例子,进行添加操作的时候,添加完成后没有反应,可能有两种情况,第一,添加根本未成功,第二,添加成功了,没回显出来,那么我们可以通过sql查一下添加的数据,如果数据库中有了,就说明回显出了问题,如果没有,就说明insert 出了问题。

    5、可以查看系统的日志检查测试过程中的问题。一切异常都需要关注

    不错,尤其是第四个总结自己以前也发现过这样的问题,只是自己却不知道总结

  • 转载《从外行到专业的软件测试工程师的经历》

    2008-09-24 10:14:30

    其实转行并没有什么特别的,如果你想听到一些传奇经历,恐怕要让你失望了。

      我2001年大学毕业,大学期间对计算机有兴趣、有热情,就利用业余时间买了大学计算机专业的教材自学了一遍,毕业前考了一个计算机三级B 的证书。毕业后混进了一家软件公司做HIS系统,做了几个大项目后转到测试——当时的优势是有资深的行业背景,又有开发经验,了解系统的实现——之后就在 测试行业一直混迹到现在。

      几年来换过几家公司,所做的系统主要都是HIS系统,电信BOSS 系统以及其它运营商级系统。自己所从事的工作包括开发工程师,测试工程师,Team leader,在前两家公司也零零碎碎的做过一些售前和需求工作。目前又转回技术职位,在一家外企做 Senior Test Engineer,所关注的方向是软件测试过程改进,性能测试和软件测试自动化。

      对于转行来说,如果能够充分利用之前专业所积累下的知识和经验,将会对转行有很大的帮助。我的第一份工作并不是因为我的开发能力强,而是因为当时公司所有人对医院内部的各种业务的熟悉程度都不如我。很多软件企业都是作企业应用的,为某一个行业提供服务,那么相对来说,行业知识比计算机专业知识更重要,也更难学的精通,因为作为技术人员很难有机会沉浸到那个环境中去。

      对于测试工程师来说,有开发经验和没有开发经验的确是有差别。但是这并不是关键,关键在于如何认清自己的优势并加以利用,找到合适的定位而不是去和别人的长处一争高低。

      另外,无论做哪个行业,作什么工作,兴趣都是最重要的。有了兴趣,你就不会怕吃苦,不会怕跨行业时的阵痛,可以从不断超越自己的过程中收获很多乐趣和经验。

      其实你问到这个问题让我突然想起了一件事情。在之前几年的工作中,虽然我从来没有刻意要安排自己的发展之路,但是也倒是一路走的很顺利,我一直都认为是幸运女神的眷顾,不过今天想一想,其实在几年的工作生涯中有些东西是不知不觉帮助了我的发展的,这个过程中有些东西是可以总结出来作为经验的,只是一直都被我忽视了。举个例子,在跨行业和换工作是,要尽可能避免太大的变动,要保证新工作的压力不会大到超过自己所能承受的最大限度。在我自己的工作经历中:

      1. 第一个行业,优势是对于医院内部各部门以及跨部门业务的精通。所以别人看来头痛无比的东西对我来说轻车熟路,并且乐于同我交流,我用行业知识交换来了很多计算机知识和开发经验。另外,HIS系统其实是一个很庞大繁杂的系统,除了业务类型众多,流程复杂外,还有各种复杂的业务逻辑和算法,甚至包括了完整的财务系统和进销存系统。这使我对“大系统”有了一种宏观上的感受,也见识到了大系统的开发和部署过程中的各种问题;

      2.第二个行业是电信行业,优势是对软件测试技术以及开发过程、开发技术的熟悉,所以可以很快的上手本职工作,有足够多的时间学习了各种通信领域的知识,熟悉了各种电信行业的系统和业务;

      3. 第三个行业是IPTV和DVB行业,优势是对软件测试技术/过程以及开发过程的精通,和对电信系统行业系统和业务的熟悉——在我学习和测试IPTV以及 DVB行业系统时,可以借鉴到很多电信行业系统的经验——包括技术方面和业务方面。而新近获得提升的是外企工作经验和行业经验,以及英文水平。

      我的看法是现在的软件行业分工越来越细,越来越明确,但是工作领域的交叉也越来越多,例如我们公司有些开发人员对于测试的理解恐怕比很多专职测试工程师还要 深入,而在我们实际的测试工作中,也要求测试工程师在计算机网络、数据库操作系统以及程序设计语言方面有较多的经验。一个测试工程师所要面对的就是面前全是路,自己该选哪一条的问题。不过我的感受是,并不需要刻意成为全能选手,但是要积极的对待自己手边的每一份工作,从工作本身出发,培养自己快速反应的能力和快速学习的能力,不断想着如何更好、更快的完成自己的工作,并以此为出发点去带着问题学习,多多跟同事、同行交流。这样要好过去学习一些开起来漂亮、热门,但是总是用不到的技术好的多。

      另外,如果你有了足够多的工作经验,就会发现每件工作都有很多种做法,自己拥有超强的技术并不是最重要的,也未必是最有效的。这也是为什么外企更加看重 soft skill 的缘故。

     

     

     

  • 转载面试题

    2008-09-12 11:44:04

    虽然还是不够全面,但是还是可以用来对付一些基本笔试面试的。

    一.基本数据类型(WINDOWS32位机下)

    Char 1个字节
    Short 2
    Int   4
    Long 4
    Float 4
    Double 8
    Long double 10
    指针: 32位机. 4个字节.
    浮点数双精度的比较;
       Float f;
       判断F是否为0
          If( f>=-0.00001&&f<=0.00001){ =0} else {!=0};
    ------------------------------------------------------------------------------
    -----------------------------------
    二.修饰保留字.
    Const:
    Const char*p//p 指向的内容不能被修改
    Char const *p; // p指针不能修改
    Const type fun(); // 返回值类型为一个const type类型,不能修改
    Fun( const char *p); fun( const A &a) //保护指针,引用传递的值不被修改.
    类成员函数:中 fun() const; //表明FUN不能修改成员变量,不调用非const 成员函数.


    Volatile:

    修饰变量时,确保变修改后保存在内存中,每次取数从内存中取.

    Static:

    静态变量: 保存于数据段中., 只初始化一次.
    全局变量(外部变量)的说明之前再冠以static 就构成了静态的全局变量。全局变量本身就
    是静态存储方式, 静态全局变量当然也是静态存储方式。 这两者在存储方式上并无不同
    。这两者的区别虽在于非静态全局变量的作用域是整个源程序, 当一个源程序由多个源文
    件组成时,非静态的全局变量在各个源文件中都是有效的。 而静态全局变量则限制了其作
    用域, 即只在定义该
    变量的源文件内有效, 在同一源程序的其它源文件中不能使用它。由于静态全局变量的作
    用域局限于一个源文件内,只能为该源文件内的函数公用, 因此可以避免在其它源文件中
    引起错误。
      从以上分析可以看出, 把局部变量改变为静态变量后是改变了它的存储方式即改变了
    它的生存期。把全局变量改变为静态变量后是改变了它的作用域, 限制了它的使用范围。

      static函数与普通函数作用域不同,仅在本文件。只在当前源文件中使用的函数应该
    说明为内部函数(static),内部函数应该在当前源文件中说明和定义。对于可在当前源文
    件以外使用的函数,应该在一个头文件中说明,要使用这些函数的源文件要包含这个头文
    件。

    static全局变量与普通的全局变量有什么区别:static全局变量只初使化一次,防止在其
    他文件单元中被引用;作用域限于本文件!

      static局部变量和普通局部变量有什么区别:static局部变量只被初始化一次,下一
    次调用函数时依据上一次结果值进行改变;
    如: fun()
    {
    Static int m=0;
    M++;
    Cout<<m<<endl;
    }
         调用:
    Fun();
    Fun();
    输出: 1
           2

      static函数与普通函数有什么区别:static函数在内存中只有一份,普通函数在每个
    被调用中维持一份拷贝。作用域限于本文件

    ------------------------------------------------------------------------------
    ---------------------------------------
    三.内存使用:

    程序的局部变量存在于(堆栈)中,全局变量存在于(静态区 即数据段)中,动态申请数
    据存在于( 堆)中。
       分配方式有三种,请记住:
    -1- 静态存储区,是在程序编译时就已经分配好的,在整个运行期间都存在,如全局
    变量、常量,静态变量.
    -2- 栈上分配,函数内的局部变量就是从这分配的,但分配的内存容易有限。
    -3- 堆上分配,也称动态分配,如我们用new,malloc分配内存,用delete,free来释放的
    内存。

    --------动态申请内存:---------------

    Malloc/free 与 new/delete 的区别;

    前者: 是C的库函数. 在C++中创建对像时,不会调用构造函数,FREE时也不会调用析构函数
    .
    后者: 是C++中运算符, 创建析构对象都会调用构造函数,与析构函数.

    注意:
          Free(p)或delete p后, P成为野指针, 并非为空, (P所指地址不变,只是所指内存已
    释放)
          两次释放P会出错.
          最好,释放后加个P=NULL. 空指针多次释放不会出错.
    ------------------------------------------------------------------------------
    ---------------------------------------
    四.运算符:
    ++,--操作:
          A++ :   A加一后, 表达式返回A加一前的附本,(非左值)
          ++A:    A加一后,表达式返回加一后的A.(左值)

    位运算.
         使用异或交换数据: 交换A与B的值
                           A^=B;        即: A=A^B;
                           B^=A;           B=B^A;
                           A^=B;           A=A^B;
    ------------------------------------------------------------------------------
    ---------------------------------------
    五.语句:
           For(A;B;C)   C语句是在每次循环后才执行.
           如: y=10;
    for( i=0;i<10;y=++i)
    {
       Cout<<y<<endl;// 第一次输出是10.
    }
         循环语句设计:

                 尽量小循环放外面,大循环放里面.-----原因减少循环之间的切换.

    ------------------------------------------------------------------------------
    ---------------------------------------
    六.函数设计:
    参数传递选择--------
       作为输入参数的,应该用CONST作保护 如:strcpy(char*str1,const char*str2)
          要修改函数外面的变量时可用 :
                  1, 指针传递: 即把变量地址传入函数; 如: FUN( int**m);
                      调用时: int m=0;
                               FUN(&m);
                  2. 引用传递: FUN(int &m),调用时:int m=0; fun(m);
                  3. 如果只要修改一个外面的变量,也可以用返回值解决,但是多个的话就要
    用上面两种方法中的一种.
    内部变量:
           Static 变量;(注意);
            FUN()
             {
                Static int m=0;
                   ……..
             }
         其中M 只初始化一次. 每次调用FUN()后,都会在前一次调用的基础上进行修改M 值

    函数指针:
         如: void (*pFun)(int); 则pFun 为一个函数指,函数参数必须为一个INT参数.


                         调用:
                                pFun=FUN;
                                pFun(b); 或 (*pFun)(b); //一定要加个括号;
                  (主要用于回调函数设计)

                  另一种定义:
                     Typedef void (*pFun)(int a);
                     则pFun成为一个函数参数为一个INT的函数指针类型.
                     定义: pFun p=FUN;
       函数返回:
               不要返回栈内存指针;
                如: char* fun()
                      {
                           Char a[]=”kdkdk”;///栈中的一块内存
                           Return a;///返回栈中内存地址。
                      }
    (面向对象的函数设在后面);
    ------------------------------------------------------------------------------
    ----------------------------------------
    七.指针与数组;
         指针++,--;
                Int *p;
                 如果p++后,则P的值应该是增加4
                 指针的累加与它自己的类型有关.
         Char str[]=”akakak”;
    Strlen(str) 是求串的长度, 所以一定要小心那个’\0’结束符;
    Strcpy(str1,str2);, ///一定要小心’\0’

    ------------------------------------------------------------------------------
    ----------------------------------------
                         面向对象:
    一. 类
    默认四个函数: 无参数构造函数, 拷贝构造函数(浅拷贝), 赋值函数(浅), 析构函数.

    重写赋值函数时,注意要避免自赋值.(参考高质量C++,string类的编写)
    --------------------------------------------------------------------------
    函数重载: 同一区域内,函数名相同,参数列表不同.(略)---实现编译时多态

    函数覆盖: 在子类与父类之间. 由虚函数产生.--------------运行时多态
                Class A
                {
                   Virtual void fun(){}
                 };
                 Class B: public A
                 {
                      Void fun(){}
                 }
              则子类中的fun()覆盖了父类中的fun();

    函数隐藏: 在子类与父类之间, 不是虚函数,但是函数名相同,参数列表不一定相同.
               子类函数会隐藏父类的同名函数.
              Class A
              {
                   Void Fun 1();
                   Void Fun2();
               }
               Class b : pubic A
               {
                   Void Fun1();
                   Void Fun2(int);
               }
               则fun1,fun2都隐藏了父类的同名函数.

    基类指针与子类指针的使用:
           假设A为父类,B为子类;
    定义: B b;
           A*pA=&b;/// pA只能调用A类中的函数,和B中继承了A中的虚函数.
                    /// 但是不能调用,A中被覆盖的函数与B类中的其它函数.


           B*pB=&b;//// pB只能调用B类中的所有可访问函数,和A中继承下来的所有
    /////// 公有函数. 但是不能调用A中被B隐藏或覆盖的函数.
    --------------------------------------------------------
    带virtual 的析构函数:
          Class A
          {
               Virtual ~A(){   cout<<”in A”<<endl; }
          }
          Class B: public A
          {
               Virtual ~B(){ cout<<”in B”<<endl;}
          }
    定义:
         A*Pa=new B;
         Delete pa;
       输出:in A
             In B
    但是如果,A中的析构函数没有virtual, 则结果只是:in A
    原因: 不明!

    类中回调函数设计:
            使用友元函数,或 static 函数。
            原因:两者不存在this指针。
            如果要修改对象成员,则可以把对象指针或引用传入函数。
            如: static void fun(A*Pa),,,or   static void fun(A&a);
    面向对象函数设计:
          Void fun(A a) -----------------//出现临时对象
           {
               -----------其它代码;
               A aa;
               Return (aa);--------------//出现临时对象;
           }
    优化后:
          Void fun(A&a)
          {
               ---------其它代码
               RETURN (A());
          }

    类大小计算:
    空类,大小不为0;
    static成员变量,当sizeof()求类对象大小时,static变量不会计入其中。
    其它参考sizeof()专题
    解决头文件重复包含:
    1.#pragma once.
    2. ifndef/define/endif

    ------------------------------------------------------------------------------
    ----------------------------------------
    二.运算符重载。
           赋值: A& ōperator=(A&other) //返回引用。
                  {
                      避免自赋值;
                       ---------其它代码---------
                      Return *this;
                   }
            前++:A& operator++()///////自加后返回本身。返回值为引用。
                  {
                     This->value+=1;
                     Return *this;
                   }
             后++:A operator++(int)/////int 用于区另前加加,还是后加加。//值返回

                   {
                      A temp(*this);          /////自加后,返回一个自加前的附本。

                      *this->value+=1;
                      Return temp;
                    }
    非类成员函数++,定义(友元)
           A& operator++(A&a)//前加加
           A operator++(A&a,int)//后加加。
           函数实现同上。
    (其中减减的与++类似)

    多继承有待补充;?/???????


    模板


    ------------------------------------------------------------------------------
    ----------------------------------------
                                     数据结构与算法
    (最好这里能做到于老师的标准:看到题目就能写出算法)
    ---------------------------------------------------------------------
    链表操作:(不带头结点,书上的都是带头结点的)
    主要是不带头结点的操作,记住可能要修改头指针,所以注意函数参数与返回值设计。(
    细心);(华为面试)
    静态链表
    栈队列的使用:
              二叉树遍历,图遍历,非递归实现。(华为,三G门户面试);
    串操作:
              KMP算法(模式匹配) (深信服笔试);
    二叉树:
              三种遍历—递归与非递归。(华为面试);
              计算叶子数,计算结点数。(华为笔试,迅雷笔试);
              哈夫曼树--------(不知什么公司的面试题了);
    图:
           十字链表结构
           两种遍历---深度(非递归与递归),广度-----队列。
    查找:
           二分查找-----递归与非递归。(普信笔试)
            二叉排序树
           红黑树(了解,深信服面试)set ,map内部使用。
           B-,B+树,了解。
           键树-----用二叉对表示,键的匹配。
           哈希表------哈希函数编写,解决冲突的方法4个(深信服面试);
    内部排序:
            插入排序
            快排
            堆排序,堆操作。
            归并排序------------各种形式的归并(QQ笔试);
            基数排序。
            (记住各种排序的复杂度,最好会自己计算.)


    其它算法:
           Strcpy, strcmp, strcat, memcpy, string类的编写。

    最大公约数,最小公倍数,素数,PI计算。

           链表环判断,链表交点判断。找链表中间结点,链表反序。(华为面试)
           八皇后------深信服笔试,(一个朋友的QQ面试)

    STL:
          Vertor List set map, 使用与内部实现。
    ------------------------------------------------------------------------------
    ----------------------------------------

    --------------------系统编程(windows or unix)------------------------------

    (可以在windows 与UNIX中选择一个,如果两个都行就更好)

    多进程
    多线程
    进程/线程间同步与通信.-------这个也很重要.
           CriticalSection, mutex, event, semaphore.区别与使用
           Unix下不懂.
    网络编程-------select()与setsockopt(),多播,广播.问得最多.
             最好能写出所有常的SOCKET函数,和基本流程.

    TCP/IP协议, TCP, IP ,UDP 头的组成.各个控制位的作用.
    地址分类,子网,子网掩码,多播地址,广播地址,网络号,主机号.
    MFC下的 SendMessage()与PostMessage()区别.
    -----------------------------------------------------------------
    数据库
            多个关系表设计,
            基本SQL语句的编写,嵌套查询,多表查询
    操作系统
            P---V操作。生产者与消费者。用代码实现。(华为面试);
             (A一天生产3个饼,B一天生产4个饼,C一天吃10个,现有100个饼,用PV操作

                 编程,问多少天可以吃完)

        ------------------------项目----------------------------

    如果你没有项目,那你就把自己的课程设计也搬出来,不要怕别人笑你.千万不要说大话,什
    么东西我很牛B,面试官几句话可以试出你来.自己有料的地方一定要突出给他看.

    项目分析:
    系统功能-》整体架构-》自己负责的模块-》遇到的困难-》有待改进的地方-》存在的瓶颈
    ,与解决方案。
         (个人认为按上面的顺序分析项目,面试前一定要先自己对自己介绍下项目)


    ------------------------------面试细节-----------------------------------
    1---面试进门后,一定要向面试官问好,等面试官示意坐下时才坐下. 面试完后, 要道谢,
    如果对方和你握手,一定要站起来
       握手要有力,表达自己的诚意.(可以说:希望我有机会为公司效力…等等之类的话);

    2---当问及工资问题时,(书面形式写期望工资) 一定要说按公司薪水制度.
        原因: 刚从学校出对公司没有贡献,工资应该和贡献成正比,按公司的薪水制度比较合
    理.

    3-----描术自己的强项??弱点???职业目标??,性格??自我介绍??为什么要选择做这个职位
    /公司?? 用英语描术学校,家乡(华为面试)
       (最好中英文都会表达,一定要作好这些准备)
    4---你有什么问题要问吗????不要关涉工资和培训.,要表明自己加入公司的决心.
    (中大一学生的回答:是否进入公司就可以接手项目,个人觉得不错)

    6---越简单的题目越是考你的细心.所以要注意细节,小心再小心.

    7---说话要表现自我,千万不能说自己什么很了不起….绝不可说大话,错了就是错了,要承认.
       不会的,也要直接说不会(也可请教),会的就直接说出来.,不要吞吞吐吐,不要不懂装懂
    .
       如果面试官说自己错了,但自己发现不了,可以请教下面试官(能不能指点下我哪里错了
    ,我真看不出来),虑心学习,并改正.即使BS了,也要抵住压力,不要就起身走人,要请教面试
    官,错在哪,应该怎么做.??要顺着面试官的意思,不要与其争执.一定要抗压力,抵住.
    8—成绩问题:
           主要是针对和我一样成绩很差的同学。当面试官问到怎么你的成绩那么差。你一定
    要想到好的解围方法。他不是看不起你而是给你施加压力,看你在压力面前怎么样解决问
    题,能不能抵住压力。
    9---自信,一定要自信,但不是自认清高。
       

  • bug bush

    2008-09-09 09:23:46

    今天看到一个博人写的博客很有意思,bug bush (bug大扫除).bug bush 一般发生在beta版上市之前,由市场人员,开发人员,产品人员一起参与,进行bug大扫荡.这里是这位博人写的链接.以供自己有时间效仿一下.

    http://www.51testing.com/?115619/action_viewspace_itemid_75493.html

  • 小心日子混了你。

    2008-09-06 10:32:23

    这两天项目不太紧张,有些空闲时间,一不小心自己就开始学会了混!刚才看一下自己的博客,突然的想到一句话:别混日子,小心日子把你给混了.

     

     

  • SQL学习(链接)

    2008-09-03 10:38:43

    sql中相关的一些链接:SQL之左连接、右连接和全连接

    举个例子:首先有两个表:

    class(num,name,leader)

    student(name,class,sex)

    例如当某个学生被开除后,则其不属于任何班级,即左表中有记录由表中没有记录匹配这种情况
    select class.name,student.name from  student join class on student.class=class.num.

    用左连接则可以防止漏掉的被开除的学生.

    select class.name,student.name from student left join class on student.class=class.num.

    右链接则可以防止漏掉没有学生的班级

    select class.name,student.name from student right join class on student.class=class.num.

  • 一点感悟

    2008-08-25 09:26:35

    以前喜欢逛论坛,最近喜欢上逛博客.看看测试同行们的感悟.自己今天就深受感触.

    一位高人说到,他非常害怕的就是测试被开发说服,当然测试被说服有一个重要原因是能力上不足的一个体现,但关键是不要轻易被说服,在遇上这类问题时,一定要多沟通,多方面验证,不要轻易的就放弃!

     

  • sql学习

    2008-08-19 15:02:18

    好长时间没有静下心来学习SQL了,这两天突然的中间件测试,发现好多的语句都忘了.

    定义基本表:

    create table <表名> 例子:create table Student(Sname char(100) Not Null unique,

                                                 Sno int,Sage char(15))

    列级约束条件包括:1.Not Null或者Null(取值不许为空)  2.unique(取值唯一) 3. default

    4.check constraint (是否为主键)

  • lR知识(转)

    2008-08-18 09:15:56

    问题1:LoadRunner响应时间是什么?   
    :响应时间就是客户端发送请求,服务器返回最后(或者第)一个字节的时间。LoadRunner的事务函数功能是  度量客户端和服务器之间交互时间的。事务函数最后在分析图表里有,比如你在前边开发脚本的时候你在登陆功能中添加了事务函数,那么controller中运行1000个用户之后,在分析 图表中你就会看到1000个用户登录功能所消耗的时间(平均,其中1000个用户用的最多的时间,10000个用户用的最少的时间)。


    问题2:页面点击数与页面浏览数什么概念,页面点击数过高会对系统的性能产生什么影响?
    :页面点击数:又名“hits”,它包括了点击了某个网页后,浏览器为了显示此网页而附带来的所有图片等支持文件的数量。点击数往往被用来衡量网站服务器的工作负载,也是衡量网站服务器性能的标准之一。文件数量的增多,会增加网络流量。
    页面浏览量(页面量):又名“PageView”,它是指实际被点击的网页数量。页面浏览量往往被用来衡量网站内容的受欢迎程度和被访问情况。


     
    问题3:LoadRunner中有个Anget,这个Anget具体起什么作用啊?在讲Robot的架构的时候好像也提到过,但是没有讲Anget具体作用,是不是LRRobotAnget作用一样的呢?
    :Agent 的作用是提供一个宿主环境提供虚拟用户运行,在LoadRunner中叫做Load Generator

     

    问题4:这个章节中讲到了响应时间页面点击数吞吐量这几个概念,我想问一下,响应时间越快是不是就越好?页面点击数越少是不是就越好?吞吐量越大是不是就越好?
    
    :性能是寻找执行效率与功能之间的平衡。这些不过是性能分析所关注的。不是越大越好。

     

    问题5:loadrunner如何选择协议?
     
    :首先要熟悉应用程序的架构,采用什么协议进行通讯的.因为LoadRunner主要是通过捕获客户端与服务器之间的数据通讯包,根据这些数据包来生成脚本的.所以,如果协议选择不正确的话,LoadRunner就无法捕获客户端与服务器之间的数据通讯包。

     

    问题6:在脚本的录制过程中,怎么样去增强脚本,在这里我说一下,为什么要添加事务、集合点、参数化数据?
    添加事务是为了知道一个具体操作比如:登陆一个系统,服务器的响应时间。
    集合点:主要是为了模拟真实用户使用的并发情况的一种操作。
    参数化:主要是模拟真实用户的使用,输入提供不同的输入数据。

     

    问题7:指定代理设置,通过端口映射来限制特定端口发送的消息,不知道这样的设置起什么作用?为什么要指定协议的映射?
    答:这是因为具体的系统开发的问题,有些系统就是特定端口处理,你需要针对指定的端口进行处理,否则程序没办法处理

     

    问题8:什么是监控器?
    :  监控器就是在Controller中的一些图表。

     

    问题9:计数器与监控器的区别?
    答:监控器包含计数器,计数器就是一个一个分析的具体指标

     

    问题10:分析CPU瓶颈需要添加哪些计数器?51Testing软件测试网"Y \4H(x2jDl
    :Processor \ Interrupts/sec
    Processor\ %Processor Time
    处理器处理事务的时间51Testing软件测试网5^KJ P.z2Vq
    Process(process)\ %Processor Time
    在进程中处理器处理事务的时间  
    System\ Processor Queue Length
    系统中,处理器队列长度

     

    问题11:Processor \ Interrupts/sec 这个值不明白能有什么作用?
    答:指处理器每秒钟接收并维护的硬件中断的平均值。它不包括 DPCDPC 将单独计算。这个值是产生中断的设备(如:系统时钟、鼠标、磁盘驱动器、数据交流线路、网络街面卡和其它附件设备)的活动的间接指示器,这些设备通常在完 成了一项任务或需要注意时中断处理器。正常的线程操作在中断时悬停。大多数的系统时钟每隔 10 毫秒中断处理器一次,形成了间隔活动的后台。这个计数值显示用上两个实例中观察到的值之间的差除于实例间隔的持续时间所得的值。

     

    问题12:请问这些计数器有一个什么样的值来度量他们?
     
    答:具体的计数器指标,window平台的可以查msdn

     

    问题13:Analysis作用?
     
    :生成各种表格,同过这些表格中的数据来分析系统存在的瓶颈,并且可以把每次产生的Analysis的结果作对比。

     

    问题14: Analysis输出报表的类型?51Testing软件测试网jBYl2f
    :Analysis输出报表的类型有两种:1HTML2Word

     

    问题15:在生成的报表中,每个值都有一个百分比的缩小比例值,如果我要求出一个具体的值:比如一个用户操作登陆功能,所需的时间,是要经过自己的计算才能得出来是吗?51Testing软件测试网:G O,w0YR9b;r T
    答:这个看事务响应时间就好了。

  • 581/3123>