软件测试理论基础总结(一)

1 什么是软件?程序+文档;  程序=源程序+目标程序;  文档=需求规格说明书+概要设计+详细文档+用户手册+ ; 2 软件测试的产生、意义和概念?2

1.什么是软件?

  程序+文档;
  程序=源程序+目标程序;
  文档=需求规格说明书+概要设计+详细文档+用户手册+...;

2.软件测试的产生、意义和概念?

  2.1.软件测试的产生?

    软件规模越来越大;开发人员和用户之间的矛盾;

  2.2.软件测试的意义?

    克服软件危机;发现程序中的bug;为了程序更好的交付;

  2.3.软件测试的定义?

    为了发现错误而执行程序或系统的过程;
    或:使用人工或自动的手段,来运行或检测系统的过程,其目的在于检验它是否满足规定的需求弄清预期结果和实际结果的差距;   

   2.4.软件测试的目的?

    为了发现错误而执行程序发过程;
    为了证明程序有错,而不是证明程序无错;
     一个好的测试用例在于它发现至今未发现的错误;
    一个成功的测试是发现了至今未发现的错误的测试;   

  2.5.测试与调试的区别?

    --完成的任务不同
    测试是为了发现程序中的缺陷;调试是为了定位并解决程序中的问题;
    --执行的人不同
    测试主要由测试人员和开发人员来执行;黑盒测试主要由测试人员完成;单元/集成测试主要由开发人员完成;
    --执行的周期不同
     测试贯穿整个软件开发生命周期;调试主要在开发阶段;

3.软件测试员必备的素质?

  兴趣、灵感、经验、态度、沟通能力、开发能力;

4.缺陷的识别

  4.1.什么是缺陷?

  不满足用户确定需求;

  4.2.产生缺陷的原因?

    人员(用户、设计、开发、测试、技术支持等)之间的沟通交流不够或有误解或不进行沟通

    文档不完善或没有文档;

    需求不断变化;

    参与人员的过度自信;

    程序设计本身有错误;

    软件复杂度大,缺陷很难避免;

    工期短、任务重、时间压力大;

    软件开发工具与系统软硬件的支持;

  4.3.判断是缺陷的依据(方法)?

    --通过参考文档来确认缺陷;

    需求规格说明书;

    概要设计、详细设计;

    用户手册;

    ...

    --软件行业标准、行业背景、同类典型软件;

    --通过沟通来确认识别软件(开发人员、需求人员、用户);

5.再现与优化缺陷

  再现:优化缺陷的再现步骤;

  思考:为什么要再现与优化缺陷?

  思考:关于软件中”随机“出现的权限如何管理?

  5.1.再现与优化缺陷的方法?

    不要想当然的接受任何假设;

    查找依赖关系和竞争条件的问题;

    与压力和负荷相关的边界条件软件缺陷、内存泄露和数据溢出缺陷的发生有一定的前提条件(清缓存);

    状态缺陷仅在特定软件状态中显露(顺序);

    考虑资源依赖性、内存、网络、硬件共享的相互作用;

    关注硬件的失效问题,硬件可能不按照预定方式工作(硬件坏道);

    关注软件的失效问题,对缺陷的修改可能会引发新的缺陷;

    从阅读缺陷报告入手,提高编写缺陷报告的能力(借鉴别人);

6.再现与优化缺陷

  --保证重现缺陷;

  判断缺陷报告优劣;

  非缺陷报告撰写者(技术人员)可以简单。迅速重现缺陷,表明写的好;

  --分析故障--使用最少步骤重现缺陷;

  减少开发人员重现缺陷的时间;

  --包含所有重现缺陷的必要步骤;

  --方便阅读;

  --一个缺陷一个报告;

  --注意自己的语气;

  --值得注意的经验;

7.软件测试分类

  7.1.按照测试方法分类

    --静态测试;

    不运行代码(程序);

    通过分析程序代码的语法、结构、过程、接口的正确性来找出问题;

    --动态测试;

    输入相应测试数据,检查运行结果与预期结果的差异,判断执行结果是否符合要求,从而检验程序的正确性、可靠性和有效性,并分析系统运行效率和健壮性等性能;

    --黑盒测试(功能测试、数据驱动测试、基于规格说明书的测试);

    注重于测试软件的功能需求;

    --灰盒测试;

    介于黑盒测试与白盒测试之间;

    --白盒测试(结构测试、逻辑驱动测试、基于程序本身的测试);

    --冒烟测试;

    对象是每一个新编译的需要正式测试的软件版本;

    目的是确认软件的基本功能正常,可以进行后续的正式测试工作;

    --回归测试;

    在发生修改之后重新测试先前的测试以保证修改的正确性;

    --功能测试;

    根据产品特征、操作描述和用户方案,测试一个产品的特性和可操作行为以确定他们满足设计需求;

    --性能测试;

    评价一个产品或组件与性能需求是否符合的测试;包括负载测试、强度测试、数据库容量测试、基准测试等类型;

    --压力测试;

    获取系统正确运行的极限,检查系统在瞬间峰值负荷下正确执行的能力;

    --负载测试;

    用于检查系统在使用大量数据的时候正确工作的能力,即检验系统的能力最高能达到什么程度;

    --易用性测试;

    主要从使用的合理性和方便性等角度对软件系统进行检查,发现人为因素或使用上的问题。在保证足够详细的程度下,用户界面要便于使用,对输入的响应时间和响应方式合理,输出有意义、正确,出错信息能够引导用户去解决问题,文档全面、确切等。易用性测试多数情况下没有一个量化的指标,主观性较强。

    --安装测试;

    确保该软件在正常情况和异常情况的不同条件下能够正确安装;

    --界面测试;

    指测试用户界面的风格是否满足客户要求,文字是否正确,页面是否美观,文字,图片组合是否完美,操作是否友好等等;

    --配置测试;

    主要检查计算机系统内各个设备或各种资源之间的相互连接和功能分配中的错误;

    --文档测试;

    主要检查文档的正确性、完备性和可理解性;

    --兼容性测试

    软件是否和系统的其它与之交互的元素之间兼容;

    --安全性测试

    检查系统对非法浸入的防范能力,检查系统中已经存在的系统安全性、保密性措施是否发挥作用,有无漏洞;

    --恢复测试;

    主要检查系统的容错能力;

    --可移植性测试;

    测试软件是否可以被成功移植到指定的硬件或软件平台上;

    --引导测试;

    软件开发中,验证系统在真实硬件和客户基础上处理典型操作的能力;

    --随机测试;

    没有书面测试用例、记录期望结果、检查列表、脚本或指令的测试。主要是根据测试者的经验对软件进行功能和性能抽查;

    --健全测试;

    软件主要功能成分的简单测试以保证它是否能进行基本的测试;

    --手工测试;

    采用手工的方式执行测试;

    --自动化测试;

    使用自动化测试工具来进行测试,这类测试一般不需要人干预,通常在GUI、性能等测试中用得较多;

    --国际化测试;

    测试软件的国际化支持能力,发现软件的国际化的潜在问题,保证软件在世界不同区域中都能正常运行;

    --本地化能力测试;

    本地化能力是指不需要重新设计或修改代码,将程序的用户界面翻译成任何目标语言的能力;

    为了降低本地化能力测试的成本,提高测试效率,本地化能力侧是通常在软件的伪本地化版本上进行;

    --本地化测试;

    对象是软件的本地化版本;

    本地化测试的环境是在本地化的操作系统上安装本地化的软件;

    从测试方法上可以分为基本功能测试,安装/卸载测试,当地区域的软硬件兼容性测试;

    测试的内容主要包括软件本地化后的界面布局和软件翻译的语言质量,包含软件、文档和联机帮助等部分;

    --通过测试;

    是使用满足需求的数据测试系统的过程;

    --失败测试;

    是使用不满足需求的数据测试系统的过程;

    --错误猜测;

    错误猜测试是通过直觉发现程序中的错误和缺陷的能力;

  7.2.按照测试阶段分类

  --单元测试;

    最小模块的测试;

    一般由开发者在系统开发过程中进行执行;

    依据是详细设计;

    对模块内所有重要的控制路径设计测试用例;

  --集成测试;

    被测试系统的所有组件都集成在一起,找出被测试系统组件之间关系和接口中的错误;

    非增式集成;

    增式集成;

      自顶向下增式测试;

      自底向上增式测试(最常使用的方法);

  --确认测试;

    由集成测试进入系统测试之前;

    需要对软件是否可以进入系统测试进行评价;

    工作包括:有效性测试、软件配置审查;

  --系统测试;

    是将通过确认测试的软件,作为整个基于计算机系统的一个元素,与计算机硬件、外设、某些支持软件、数据和人员等其他系统元素结合在一起,在实际运行环境下,对计算机系统进行全面的功能覆盖;

  --验收测试;

    α测试;

      是由一个用户在开发环境下进行的测试,也可以是公司内部的用户在模拟实际操作环境下进行的受控测试;不能由程序员或测试员完成;

    β测试;

      是软件的多个用户在一个或多个用户的实际使用环境下进行的测试;开发者通常不在测试现场;不能由程序员或测试员完成;

声明:本文部分内容可能来源或整理自网络,如有侵权,请联系删除