「软件测试基础」理论篇之软件测试概论

1. 软件

软件是一系列按照特定顺序组织的计算机数据和指令的集合。一般认为,软件包括以下内容:
(1)运行时,能够提供所要求功能和性能的指令计算机程序集合
(2)程序更够妥善地处理信息的数据结构。
(3)描述程序功能需求以及程序如何操作和使用的文档

我们可以简单理解为,软件=程序+文档

1.1 软件发展史

软件的发展可以分为如下四个阶段:

  • 第一个阶段(20世纪50年代初期至60年代中期),被称为程序设计阶段。此时软件规模小、功能单一,而且只有程序,没有文档
  • 第二个阶段(20世纪60年代中期至70年代末期),被称为程序系统阶段。这个阶段已经出现了多道程序设计技术、多用户系统、人机交互技术等,软件广泛应用,但软件技术和管理水平相对落后,导致出现“软件危机”
  • 第三个阶段(20世纪70年代末期至80年代中期),被称为软件工程阶段。这个阶段以软件产品化、序列化、工程化和标准化为特征的软件产业发展起来,软件开发有了可以遵循的软件工程化的设计准则、方法和标准。
  • 第四个阶段(20世纪80年代中期至今),这个阶段C/S体系结构,特别是Web技术和网络分布式对象技术法飞速发展,导致软件体系结构向更灵活的多层分布式结构演变,CORBA,EJB,COM/DCOM等三大分布式的对象模型技术相继出现。

软件工程研究的主要内容是:如何应用科学的理论和工程上的技术来指导软件开发,进而达到以较少的投资获得高质量软件的最终目标。
(看到这句话,让我有了一丝丝领悟:程序员也不能埋头编码,还是要懂点产品思维的好

1.2 软件生命周期

软件生命周期具有如下六个阶段:
(1)问题的定义和规划
(2)需求分析
(3)软件设计
(4)程序编码
(5)软件测试
(6)运行维护

其中,软件维护是软件生命周期中持续时间最长的阶段。

1.3 软件缺陷

软件缺陷是指软件系统或系统部件中那些导致系统或部件不能实现其功能的问题或差错。通常认为,符合下面4个规则之一的就是软件缺陷:

  1. 软件未达到软件规格说明书中规定的功能;
  2. 软件出现了产品说明书中指明不会出现的错误;
  3. 软件功能超出了产品说明书中指明的范围;
  4. 软件测试人员认为软件难以理解,不易使用,运行速度慢,或者最终用户认为软件的使用效果不好。

1.4 三种纠错技术

纠错之前需要先查明错误,而查错工作量通常占整个纠错的90%以上,下面三种是常用的查错手段:

  1. 插入打印语句
    通过这种手段,我们可以查看到程序运行中过程量的值,以此来定位错误原因。这是我们写一开始学编程时最常用的手段。
  2. 设置断点
    断点可以使运行的程序在断点处暂停下来,我们就可以通过观察变量的值来分析程序运行的情况,进而快速找到错误所在
  3. 掩蔽部分程序
    一般是把代码注释掉,留下有可能出错的地方,进而缩小错误的范围;也或者把有可能出错的部分取出来单独运行

2. 软件过程

2.1 RUP

RUP(Rational Unified Process)译为Rational统一过程,以统一建模语言(UML)描述软件开发过程。

2.1.1 RUP各个阶段

RUP中的软件生命周在时间上被分解为4个顺序的阶段,分别是初始阶段细化阶段构建阶段交付阶段

1

2.1.2 RUP核心工作流

RUP共有9个核心工作流,分别为6个核心过程工作流和3个核心支持工作流。
1)商业建模
2)需求
3)分析设计
4)实施
5)测试
6)部署
7)配置和变更管理
8)项目管理
9)环境

PS:前6个为核心过程工作流,后3个为核心支持工作流。

2.2 敏捷开发

由于传统的开发方法使程序员花费大量的时间在开发文档的撰写上,真正写代码的时间很少,而且过于依赖过程控制,导致开发过程管理复杂且低效。于是,敏捷过程就应运而生(时间在2001年)。

2.2.1 敏捷开发简介

《敏捷宣言》的内容如下:

“通过开发软件和帮助别人开发软件,我们找到了一些更好的开发软件的方式。通过这一工作,我们得出了这些价值:

  • 个体和交互 胜过 过程和工具
  • 可以工作的软件 胜过 面面俱到的文档
  • 客户合作 胜过 合同谈判
  • 相应变化 胜过 遵循计划

也就是说,尽管右边的项也很有价值,但我们认为左边的项更有价值”

在这种价值观的指导下,诞生了包括XP(极限编程)、FDD(功能驱动开发)等在内的开发过程。

2.2.2 敏捷开发的特征

敏捷开发主要有两个主要特征:
(1)开发采用适应性方法,开发过程以代码为核心,经过多次小型迭代逐步逼近实际需求,而文档则作为交流工具的作用被弱化,作为管理监督的功能被取消。

(2)以人为本。程序员变成了开发的主体,所有的主要涉及策略的指定、开发方法的选择、需求的确定都由层序员决定。

3. 软件质量

3.1 概论

ANSI/IEEE Std 729——1983给的定义:“与软件产品满足规定的和隐含的需求的能力有关的特征或特征的全体”。

CMM对质量的定义:“①一个系统、组件或者过程符合特定需求的程度;②一个系统、组件或者过程符合客户或用户的要求或期望的程度。”

M.J.Fisher给的定义:“所有描述计算机软件优秀程度的特性的组合。”

软件质量框架是由“质量特性—质量子特性—度量因子”构成的 3 层模型。由于度量因子由使用单位自行决定,下图就写了质量特性和质量子特性:
2

3.2 CMM/CMMI

3.2.1 CMM

CMM是软件过程改良和评估模型,由卡耐基—梅隆大学软件工程研究院指定,也称为SEI-CMM。

CMM为软件企业的过程能力提供的阶梯式进化框架如下表所示:
3
(CMM评估方法已经被停止,但模型还是存在的。)

3.2.2 CMMI

CMMI是SEI于2000年发布的CMM的新版本,它将各种能力成熟模型整合到同一框架中。其基本思想如下:
(1)解决软件项目过程改进难度增大问题。
(2)实现软件工程的并行多学科组合
(3)实现过程改进的最佳效益。

CMMI具有如下两个功能:

  • 软件采购方法的改革;
  • 从集成产品与过程的角度出发,包含健全的系统开发原则的过程改进。

4 测试与开发的关系

放三张图来供自己参悟一下测试与开发的关系:

  • 软件测试与开发过程的关系
    1

  • 软件测试与软件开发的并行性
    2

  • 完整的软件开发流程3

从上面,我们可以知道,软件测试不仅仅是测试我们编写的程序,还要测试软件过程中所编写的文档。同时,测试过程和开发过程是同步进行的,测试过程是对开发过程中阶段性成果和最终产品进行验证的过程,它们是相互依赖的关系。


本文为课堂以及自己看课本的笔记,里面的内容基本都摘自周元哲所著的「软件测试基础」,只为方便复习和分享,不作任何商业用途

(为什么要那么麻烦?那要从一只蝙蝠说起……)

已标记关键词 清除标记
©️2020 CSDN 皮肤主题: 猿与汪的秘密 设计师:上身试试 返回首页