软件测试

1. 软件开发过程


软件项目成员及其职责:

  • 项目经理:自始至终驱动整个项目,通常负责编写产品说明书、管理进度、进行重大决策。
  • 体系架构师或者系统工程师:产品小组中的技术专家,一般经验丰富,可以胜任设计整个系统的体系架构或软件,他们的工作与程序员关系紧密。
  • 程序员:设计、编写软件并修复软件中的缺陷,他们与项目经理密切合作制作软件,然后与项目经理和测试人员密切合作修复缺陷。
  • 测试员或质量保证(Quality Assurance,QA):负责找出报告软件产品的问题,他们与开发小组全部成员在开发过程中密切合作,进行测试并报告发现的问题。软件测试员的目标是尽可能早地找出软件缺陷,并确保缺陷得以修复。软件质量保证人员主要职责是创建和执行改进软件开发过程并防止软件缺陷发生的标准和方法,或者说主要职责是检查和评价当前软件开发过程,找出改进过程的方法,以达到防止软件缺陷出现的目标。
  • 配置管理员或构建员:负责把程序员编写的代码及技术作者写的全部文档资料组合在一起,合成为一个软件包。
软件开发常见的模式:
  • 大爆炸模式:所有的精力都花在开发软件和编写代码上,计划、进度安排和正规开发过程几乎没有,最终产生的结果可能是优秀的软件产品也可能是废品。这种模式的优点是简单。大多数情况下,这种模式没有测试过程。
  • 边写边改模式:这种方式通常最初只有粗略的想法,接着进行一些简单的设计,然后开始漫长的来回编写、测试和修改过程,等到觉得可以了就发布产品。
  • 瀑布模式:这种方式主要步骤是构思——分析——设计——开发——测试——最终产品,每一个步骤结束时,项目小组都组织审查,决定是否进入下一步。这种模式优点是简洁。该模式有三特点:强调产品的定义、各个步骤都是分立的、无法回溯(一旦进入某个步骤,就要完成之后再进行下一步)。缺点是无法适应快速变化。
  • 螺旋模式:这种模式每一次循环都包含六个步骤:确定目标、可选方案和限制条件;明确并化解风险;评估可选方案;当前阶段的开发和测试;计划下一阶段;确定进入下一阶段的方法。螺旋模式包含了一点瀑布模式(分析、设计、开发和测试)、一点边写边改模式(螺旋模式的每一次循环)、和一点大爆炸模式(从外界观察)。
  • 敏捷软件开发Agile Software Development:又称为快速原型、极限编程或者进化开发等。主要思想是:通过过程和工具理解个人和交流的作用,通过全面的文档理解运行的软件,通过合同和谈判得到客户的协作,在计划的执行中做出对变更的响应。
测试的原则
  1. 完全测试程序是不可能的
    想要找出软件所有的缺陷,确保软件完美无缺,是不可能的,原因主要有:输入量太大、输出结果太多、软件执行路径太多、软件说明书是主观的。
  2. 软件测试是有风险的行为
    软件测试员无法做到完全测试,所有一定会漏掉一些软件缺陷,所以应当针对风险作出明智的抉择,找到最优的测试量,使得测试不多不少。
  3. 测试无法显示潜伏的软件缺陷
    软件测试可以报告软件缺陷的存在,但是不可以报告软件缺陷的不存在。进行测试可以发现并报告软件缺陷,但是任何情况下都不能保证软件缺陷没有。
  4. 找到的软件缺陷越多,就说明软件缺陷越多
    通常,测试员很长时间找不到软件缺陷,找到一个之后会接二连三的找到更多。
  5. 软件测试免疫力
    软件测试的越多,其对测试的免疫力会越来越强,所以应该尝试不同的测试程序,找出更多软件缺陷。
  6. 并非所有软件缺陷都要修复
    根据风险决定哪些缺陷要修复。

2. 测试基础


黑盒测试与白盒测试
  • 黑盒测试:又称为功能性测试或行为测试。测试人员只需知道软件要做什么(无需知道软件如何运行),只要进行一些输入,获得输出。
  • 白盒测试:有时称为透明盒测试。测试人员可以访问程序员的代码,并通过检查代码的线索来协助测试。
静态测试与动态测试
  • 静态测试:只测试不运行的部分——只检查和审核。
  • 动态测试:通常意义上的测试——使用和运行软件。
等价类划分

选择测试用例是测试人员最重要的任务,选择测试用例的方法是等价类划分,有时称为等价分类。等价类划分指分步骤地把海量的测试用例集减得很小,但过程同样有效。在寻找等价划分时,考虑把软件具有相似输入、相似输出、相似操作的分在一个组,这些组就是等价划分。
等价类划分的目标是把可能的测试用例集缩减到可控制且仍然足以测试软件的小范围内。

测试边界

提出边界条件时,一定要测试临近边界的有效数据,测试最后一个可能有效的数据,同时测试刚超过边界的无效数据。
在软件的每一个部分不断寻找边界是极为重要的,寻找做的越多,边界就会发现的越多,可能找出的软件缺陷就越多。

通过性测试和失败状态测试
  • 通过性测试:包括审查软件、描绘状态、尝试各种合法可能性、确认状态以及转换正常。
  • 失败状态测试:多任务测试和竞争条件测试、重复测试(不断执行同样的操作)、压迫测试(尽可能地限制软件的必要条件,将支持降到最低)、重负测试(尽可能提供条件让软件自行发挥,最大程度挖掘软件能力)
正式审查
  • 同事审查:常常在编写代码或者设计体系结构的程序员之间展开,审查代码,寻找问题和失误。
  • 走查:比同事审查更正规化,编写代码的程序员逐行或者逐个功能的通读代码,解释代码为什么且如何工作。审查人员聆听叙述,提出有异议的问题。审查结束之后,表述者编写报告说明发现的问题以及如何解决软件缺陷。审查人员之中至少有一位资深程序员。
  • 检验:最正式的审查类型。与走查不同之处是——表述者不是原来的程序员。其余参与者(检查员)是从不同角度(用户、测试或者产品支持)审查代码。
编码标准和规范
  • 可靠性
  • 可读性/维护性:符合设备标准和规范的代码易于阅读、理解和维护。
  • 移植性:代码经常需要在不同硬件中运行,或者使用不同编译器编译。
分段测试

在底层进行的测试称为单元测试或者模块测试,找出底层软件缺陷并修复,之后集成在一起,对模块组合进行集成测试,不断增加测试过程,加入越来越多的软件片段,直至整个产品或者产品的主要部分进行测试,称为系统测试

代码覆盖

为了全面的覆盖测试,还必须测试程序的状态以及程序流程,必须设法进入和退出每一个模块,执行每一行代码,进入软件每一条逻辑和决策分支,这种类型叫做代码覆盖测试
代码覆盖最直接的形式称为语句覆盖代码行覆盖,代码覆盖测试是一种动态白盒测试。

测试基础
  • 静态黑盒测试:检查产品说明书,并在软件编写之前找出问题。
  • 动态黑盒测试:在不了解软件如何工作的前提下进行测试。
  • 静态白盒测试:通过正式审查和检验检查代码的细节。
  • 动态白盒测试:看到软件的工作方式时,根据获得的信息对软件进行测试。

3. 测试技术


  • 配置测试:硬件配置测试,以及如何保证软件在其设计运行和连接得硬件上正常运行。指的是在各种硬件和软件平台类型以及其不同的设置情况下检查软件运行的过程。
  • 兼容性测试:检查软件之间是否能够正确的交互和共享信息,检查软件和其他软件一起运行的过程。兼容性的定义根据产品特性来进行,如果测试对象是操作系统,那么要求对文字处理程序和图形程序进行测试;如果测试对象是应用程序,那么就需要在多个不同的品台上进行兼容性测试。
  • 易用性测试:从人体工学角度,使得最终用户认为产品是好用的。
  • 安全性测试:任何软件都有一个安全问题——缓冲区溢出,应该尽可能早地发现问题并解决。使用安全字符串函数,定期研究黑客攻击手段,做好防范。
  • 自动化测试:使用测试软件自动化的对软件进行测试。

单靠软件测试无法保证产品质量,软件QA团队如何保证产品具有高质量

对项目进行近似完全的控制,建立标准和方法论,有条理地仔细监视和评估软件开发过程,对发现的过程问题反馈解决建议,执行测试,拥有决定产品何时准备发布的授权。

你可能感兴趣的:(软件测试)