zoukankan      html  css  js  c++  java
  • 软件测试概述

    国内软件测试现状

    近期国家对软件行业也给出了很多鼓励政策,软件及相关行业在中国得到了很大的发展,我们也看到了一大批软件企业在国际中也占据了很重要的地位。不过我们发现很多软件公司在重视代码开发的同时,却没有把代码质量跟上去,忽略了测试在整个项目工程的重要性。

    可是测试真的是不重要,只是开发的附属品吗?我们列举一个例子说明:美国微软,该公司的开发人员和测试人员的比例是1:1,也就是说每个开发人员会配备一名测试人员,而且这名测试人员都是具有和开发人员一样的开发能力的,可以进行大规模自动化测试。微软重视测试的原因也很简单,因为在宽带普及以前,很多更新都是靠邮寄光盘完成的,更新的成本非常高,一定要在出厂前严把质量关。对于一个纯软件公司是如此,那么我们的一些有硬件产品的公司,如果产品是因为软件上面出现了重大缺陷,大规模硬件召回的成本是不是会更高呢?目前在国内,很多的企业也认识到了测试的重要性,可是只是停留在认识阶段,只是做做简单的黑盒测试,功能性测试等。有的负责人也许会谈到,我们的产品是基于互联网产品,软件大部分都是在服务器端,更新的成本大幅降低。那么我们就更应该做好产品,让广大的客户端用户对产品有更好的用户体验,给网友们更好的服务,而不是一味的借助于网络更新,在使用中发现错误后去弥补。最近一次的暴风影音的“召回门”就是一个很好的说明。

    对于一些正在成长中的中小企业,由于人力资源有限,目前还没有比较正规的测试,我们还可以理解。可是一些已经形成规模,有一定研发力量的大型企业,是很有必要建立一整套完整的测试流程来完善公司的产品。但是在和大公司负责人沟通得知和我们的期望值还是有一定差距的。他们可能花了大量的人力,物力来通过 CMM,ISO认证,却不能踏实的做好测试。在他们眼里,认证才是一个公司的硬实力体现,测试则是一个可有可无的过程。这一点让人有点黯然,在中国的快餐市场上,我们该如何推动我们软件测试,不是靠你和我,而是靠全民总动员,大家要培养这个意识,把这个意识和行动穿叉在我们研发的全部过程中,难道我们还做不出好的产品吗?

    这让我马上我想到了已经和联通签约马上进入中国的IPhone,可以说这一款手机改变了整个世界对手机的使用习惯。IPhone的成功,个人观点,软件质量的稳定性可靠性是最为关键的一票。

    在我们和客户聊到测试的时候,他们说也是有心无力,只能通过人为的做一些简单的测试来应付。于是我们会给他们介绍一些自动化的测试工具的时候来协助测试,这些企业普遍表现了对这次测试工具的兴趣。不过,这些工具的价格立即扼杀了他们抓测试的信心,他们无法接受一张光盘的叫价超过一辆汽车,他们更喜欢实物。可是他们忘了,软件的价值不是体现在一张光盘上面,而且体现在这个软件能给企业,给人们生活带来的益处。

    诚然,价格,技术和企业愿望是目前测试在中国走的很艰难的原因。目前一些测试培训机构也是在积极培养专门的测试人才。我们也希望有国内的企业能做出我们自己比较好的测试工具来打破测试工具昂贵的价格坚冰。我相信有那么一天中国的软件质量一定会在世界上有属于自己的一席之地。

    测试工具简评

    在这里,也结合我个人的经验,按照开发V模型来分别讲讲几个对应的自动化测试工具。

    在软件开发初级阶段,对应于代码做静态分析。目前很多的企业都没有做静态分析,甚至还有企业不太明确静态分析。在这里给大家推荐的工具是QAC和PC-lint。

    PC-lint在国内的用户基础比较好,这个工具出来的比较早,由一个大学教授编写,而且价格也不贵,只有命令行模式是它的局限性,检查的代码规则不多。目前有部分企业用这个工具做代码静态分析。

    QAC这个工具进入国内也有一段时间,不过推广力度不是很大,目前这个工具在外资企业的研发部门的推广的比较好,国内的一些大企业和一些测试评测中心也在使用该工具,该工具使用起来比较方便,界面形式,也支持命令行模式,还有是MISR的标准制定者之一,所以比较有权威性,专业性很强,在国内也有很好的技术支持。价格相对来说就比较贵了。

    然后动态单元测试这块,可以看看parasoft旗下的几款产品,有分别针对java语言的,C++语言的版本。该工具使用起来还比较方便,是基于Eclipse框架开发的,界面友好,功能也比较强大,在上海有office.当然就是价格不太让人接受。

    当然如果只是要做内存泄露这块,可以了解一下parasoft旗下的一个工具insure++。这个工具可以实施监控内存的一个使用情况。

    如果是做嵌入式这块单元/集成测试,用户与也可以使用IPL的Cantata++和IBM的RTRT,这两个工具在针对嵌入式这块的单元/集成测试比较强大,特别是Cantata++还支持自动的打桩,封装,这个也是该工具的一个亮点。

    上篇中提到要对这几个概念做说明的,这这里作个补充:就CANTATA++举例:

    1)打桩是对被测函数外部调用的替代,是用来对没有开发的或用户开发的模块进行模拟。对系统函数,由于Cantata++已经作了移植,都可直接使用,不用也不能打桩。不能打桩时,接口数据无法验证。

    2)使用封装的before功能,可检测对外部调用的参数数据、全局数据是否满足测试时的要求;并且可以修改参数、全局数据的值,使得外部函数按照测试的要求运行。例如嵌入式应用中经常将一个数据转换为指针,然后使用指针操作相关的内存数据,但在主机环境测试时,由于内存保护,指针指向的地址为空,程序就飞了。在这种情况下就可以使用before功能定义变量,将变量的地址传送给被调用的函数,从而完整地验证功能和覆盖率。

    3)使用封装的after功能迫使外部调用返回很难实现或无法达到的条件,从而使被测模块的功能和分支都得到验证。如在主机环境下对malloc函数封装,在一般情况下是无法实现返回空指针的结果。利用Cantata++封装的after功能修改返malloc函数返回值为NULL指针,这样被测函数的错误处理功能得到验证。

    如果需要对代码做一个质量度量,推荐使用一个质量度量工具McCabe,这个工具不需要执行代码就可以完成代码走查,对代码有一个深层次的代码度量,提供多达几十种度量。操作起来很方便,只是要熟悉这个产品,需要对产品有一定的理解,对项目管理有很大的帮助。

    版本管理工具,CVS,VSS在这里就不做太多的介绍。

    北美软件测试行业现状

        一、软件测试介绍:

        软件测试的必要性已经完全为业内决策人士所接收。这是因为软件工业已经发展到了与其他主要工业相当的规模。经过十几年的发展,少数天才们手工作坊的世界已经转化为大工业生产的天下。由于JAVA的流行,我们更看到了组装生产线的模式。

        在工业生产的传统行业里,测试是生产的有机组成环节,各道工序的测试、组装测试、出厂测试及致破坏性试验是生产目的实现的重要保证。

        软件测试和硬件测试在实现上没有真正意义上的区别,在虚拟空间上的实现也不是软件测试独有的特征。

        软件测试过程的主要部分在于模拟用户对软件产品的使用过程:1、模拟最终用户通过WEB、GUI对软件的使用。(具体软件会有很多功能。另外测试还要模拟用户的误操作,好的软件系统应该能够应付误操作。)

        2、模拟用户方操作系统,数据库、网络管理专家对软件进行安装、设置、移植(Installation, Configuration and Migration)。

        3、模拟用户方软件程序员应用编程界面调用各种功能。(目前相当多的出厂软件产品不是可执行程序,而是API。)

        4、模拟用户对软件使用说明的使用。

        软件测试的另一个方面是针对用户在正常使用软件可能遇到的麻烦进行测试、分析(High Avaiablility Test、Performance Test)。

        贯穿始终的测试活动则包括软件设计文档评估、测试规划、测试结果报告。

        软件测试是软件质量控制(QC,QA)的具体实现环节。把软件测试有效地组织进软件的生产流程,是软件质量控制规划的主要内容。

        质量控制是控制的一种;符合控制系统的一般规律。多重小闭环反馈控制是一种控制精度高并且对控制系统各模块品质要求低的一种控制方案。这种控制模式应用到软件生产上,就形成了对软件生产的分阶段测试。它最大限度的减少了开发者个人因素对软件生产的影响。这正是以北美为基地的大多数主要成规模软件生产商所引用的RUP (Rational Unified Process)。

        目前市场上流行大量的测试软件,较为有效的主要应用在Unit Test, Intergration Test, Regression Test 和 Performance Test 等几个方面。

        在Unit Test and Intergration Test 方面, 在网络上有免费的“软件测试工具包”可以帮助测试人员结构测试框架, 用于测试JAVA API.使用者要求具备WebLogic,Websphere, TomCat或其它WEB 服务器平台软件的知识。

        在Regression Test 方面, 市场上有众多的capture-playback 类型的测试软件如Win Runner, Rational Robot, Rational JRobot, etc. 这类工具易学易用。要想使用这类工具实现测试目的,使用者依然需要对被测软件本身有深入的了解。

        在 Performance Test 方面, 市场上有模拟多用户类形的测试工具如LoadRunner,Side Tester.还有分析memery leak形的JProbe. 在网络上也有免费的“软件测试工具包”可以帮助测试人员结构测试框架,但主要是针对以Java实现的应用软件。

        二、北美软件测试的用人市场现状:

        软件的大工业生产决定了软件测试是生产的必不可少的环节。对於人员配置,一直以来流行一种五比一的标准说法。 从公司内部看任何时候都是远高于这一比例。从近一个时期看,开发与测试工作量的比重甚至达到了二比一。同类型成熟产品之间的竞争最容易取胜的方法是提高质量。

        软件的大工业化并不是在消灭个体户和小作坊,只是减少了他们直接与最终用户打交道的机会和必要。如今他们生产和包装软件的目的在於等待大公司的收购。为此,在最后阶段需要进行“最终用户测试”。

        三、软件测试对从业人员的技术要求

        相对于其他软件工程人员, 软件测试工程师的知识面应该非常宽广,但最重要的品质应该是能够在第一时间内接受新技术。

  • 相关阅读:
    # 牛客挑战赛46_C题排列(前缀优化DP)
    # 牛客挑战赛46 B最小的指数
    Educational Codeforces Round 99 (Rated for Div. 2)
    Wireless Password HDU
    Codeforces Round #686 (Div. 3)
    网络流之最小费最大流
    网络流之最大流
    next()和nextLine()的区别
    初识HTML
    jQuery笔记
  • 原文地址:https://www.cnblogs.com/blockcipher/p/2912991.html
Copyright © 2011-2022 走看看