您好, 访客   登录/注册

浅谈软件测试

来源:用户上传      作者:

  【摘要】本文的主要结果详略恰当地给出了软件测试技术的定义、原则、分类与就业前景分析。进行一次完整的软件测试论述,并完成测试过程的一些方法。
  【关键词】SQA,软件开发,“80-20原则”,黑盒,白盒,BUG,内存泄漏,Linux、Oracle,压力测试,静态测试,动态测试,单元测试
  软件测试定义
  软件测试就是利用测试工具按照测试方案和流程对产品进行功能和性能测试,甚至根据需要编写不同的测试工具,设计和维护测试系统,对测试方案可能出现的问题进行分析和评估。执行测试用例后,需要跟踪故障,以确保开发的产品适合需求。它是帮助识别开发完成(中间或最终的版本)的计算机软件(整体或部分)的正确度(correctness) 、完全度(completeness)和质量(quality)的软件过程;是SQA(software quality assurance)的重要子域。
  测试原则
  1.软件开发人员即程序员应当避免测试自己的程序不管是程序员还是开发小组都应当避免测试自己的程序或者本组开发的功能模块。若条件允许,应当由独立于开发组和客户的第三方测试组或测试机构来进行软件测试。但这并不是说程序员不能测试自己的程序,而且更加鼓励程序员进行调试,因为测试由别人来进行会更加有效、客观,并且容易成功,而允许程序员自己调试也会更加有效和针对性。
  2. 应尽早地和不断地进行软件测试,应当把软件测试贯穿到整个软件开发的过程中,而不应该把软件测试看作是其过程中的一个独立阶段。因为在软件开发的每一环节都有可能产生意想不到的问题,其影响因素有很多,比如软件本身的抽象性和复杂性、软件所涉及问题的复杂性、软件开发各个阶段工作的多样性,以及各层次工作人员的配合关系等。所以要坚持软件开发各阶段的技术评审,把错误克服在早期,从而减少成本,提高软件质量。
  3.对测试用例要有正确的态度:第一,测试用例应当由测试输入数据和预期输出结果这两部分组成;第二,在设计测试用例时,不仅要考虑合理的输入条件,更要注意不合理的输入条件。因为软件投入实际运行中,往往不遵守正常的使用方法,却进行了一些甚至大量的意外输入导致软件一时半时不能做出适当的反应,就很容易产生一系列的问题,轻则输出错误的结果,重则瘫痪失效!因此常用一些不合理的输入条件来发现更多的鲜为人知的软件缺陷。
  4.人以群分,物以类聚,软件测试也不例外,一定要充分注意软件测试中的群集现象,也可以认为是“80-20原则”。不要以为发现几个错误并且解决这些问题之后,就不需要测试了。反而这里是错误群集的地方,对这段程序要重点测试,以提高测试投资的效益。
  5.严格执行测试计划,排除测试的随意性,以避免发生疏漏或者重复无效的工作。应当对每一个测试结果进行全面检查。一定要全面地、仔细地检查测试结果。
  测试目的
  目的是尽可能发现并改正被测试软件中的错误,提高软件的可靠性。它是软件生命周期中一项非常重要且非常复杂的工作,对软件可靠性保证具有极其重要的意义。在目前形式化方法和程序正确性证明技术还无望成为实用性方法的情况下,软件测试在将来相当一段时间内仍然是软件可靠性保证的有效方法。软件工程的目标是充分利用有限的人力和物力资源,高效率、高质量地完成软件开发项目。不足的测试势必使软件带着一些未揭露的隐藏错误投入运行,这将意味着更大的危险让用户承担。过度测试则会浪费许多宝贵的资源。E.W.Dijkstra的一句名言说明了这一道理:“程序测试只能表明错误的存在,而不能表明错误不存在。”可见,测试是为了使软件中蕴涵的缺陷低于某一特定值,使产出、投入比达到最大。
  测试分类
  1、黑盒测试:
  指把被测软件看作是一个黑盒子,我们不去关心盒子里面的结构是什么样子的,只关心软件的输入数据和输出结果。
  2、白盒测试:
  指把盒打开,去研究里面的源代码和程序结构。
  3、静态测试:
  指不实际运行被测软件,而只是静态地检查程序代码、界面或文档中可能存在错误的过程。对于代码测试,主要测试代码是否符合相应的标准和规范。对于界面测试,主要测试软件的实际界面与需求中的说明是否相符。对于文档测试,主要测试用户手册和需求说明是否真正符合用户的实际需求。
  4、动态测试:
  指实际运行被测程序,输入相应的测试数据,检查实际输出结果和预期结果是否相符的过程。所以我们判断一个测试属于动态测试还是静态测试,唯一的标准就是看是否运行程序。
  5、单元测试:
  指对软件中最小可测试单元进行检查和验证。例如:C语言中,单元一般指1个函数;在Java里,单元一般指1个类在图形化的软件中,单元也可以指1个窗口,1个菜单等。总结起来,单元就是人为规定的最小的被测功能模块。
  6、压力测试:
  压力测试用来评估在超越最大负载的情况下系统将如何运行。压力测试的目标就是发现在高负载的条件下应用程序的缺陷(BUG)。包括:内存泄漏。压力测试能让您识别程序的弱点和在极限负载下程序将如何运行。
  就业前景
  它是软件生产过程中的质量管理者,其不但要对软件产品最后的功能、性能负责,而且从软件的“需求分析”、“结构设计”阶段以及文档规范等诸多方面就开始对软件的质量加以保障,让用户用上高质量的软件。随着我国加入WTO及国内软件企业的日益成熟和壮大,软件测试在业界的地位已经变得越来越重要。
  软件测试是目前较新的一个IT领域,同级别软件测试的人员不会比开发者薪水低,甚至更高。软件日益复杂,质量问题日益凸显,软件测试是降低软件项目风险、提高企业竞争力的最佳手段。企业一方面对软件测试工程师需求量大增,另一方面,则“万金”难求一优秀的测试工程师。具备开发能力的软件测试工程师、掌握扎实的Linux、Oracle基础知识的测试工程师、掌握自动化测试技术的测试工程师、具备测试设计能力的测试工程师更是少之又少。看看iPhone的受欢迎程度,正是软件测试的实力体现。高层次的软件测试专业人员竞争要少得多。
转载注明来源:https://www.xzbu.com/1/view-11777582.htm