软件测试的起源与发展

合集下载

软 件 测 试基础知识

软 件 测 试基础知识

第一章测试基础软件测试的定义:使用人工和自动的手段来运行或测试某个系统的过程。

其目的是检验它是否满足规定的需求或弄清预期结果与实际结果间的差别。

软件测试的目的:证明检测预防证明:1)获取系统在可接受风险范围内可用的信心2)尝试在非正常情况和条件下的功能和特性3)保证一个工作产品是完整的且可用或可被集成的检测:1)发现缺陷,错误和系统不足2)定义系统能力和局限性3)提供组件、工作产品和系统的质量信息预防:1)通过将测试活动提前介入到软件生命周期中,尽早的发现并消除前期研发阶段引入的缺陷,以防止前期缺陷遗留并放大到后续环节2)通过对发现的缺陷进行分析,找出导致这些缺陷产生的流程上的不足,通过改进流程,预防同类缺陷再次产生软件生命周期:计划->需求分析->概要设计->详细设计->编码->测试->运行维护1)计划:SDP (软件研发计划) UTP(单元测试计划)SVVP(软件验证与确认计划) ITP (集成测试计划)STP (系统测试计划)2)需求分析:SRS(软件需求规格说明)根据研发类型,需求来源,则用户针对的具体对象分为两种:针对产品的与针对项目的3)设计:HLD(High Level Design概要设计)LLD(Low Level Design 详细设计)4)编码:写成以某个程序设计语言表示的源程序清单,使用RDBMS(Relational Database Management System 关系型数据库管理系统)工具建立数据库。

5)测试:检验软件是否符合客户需求,达到质量要求。

按测试阶段分单元测试(UT)集成测试(IT )系统测试(ST )——最先介入,最晚结束6) 运行维护:将软件交付用户投入正式使用,以后便进入维护阶段,可能有多种原因需要对其进行修改,如软件错误、系统软件升级、增强软件功能、提高性能等。

软件研发的相关要素:人员 过程 工具1) 人员组成分析人员设计人员 开发人员 测试人员配置管理人员(CMO,SCM ) SQA2) 组架构软件研发流程:常见的软件研发流程:瀑布模型,螺旋模型,RUP 流程,IPD 流程软件缺陷和BUG (包括错误和不足):缺陷的引入是随时的,不确定的。

什么是基于风险的测试(RBT)?

什么是基于风险的测试(RBT)?

什么是基于风险的测试(RBT)?基于风险的测试(Risk-based testing)⽂/杨学明⼀、基于风险的测试起源基于风险的测试起源,在软件测试领域,基于风险测试最早的是测试⼤师Boris Beizer《软件测试技术》提及,测试时需要考虑到风险。

接下来James Bach 在1995年第⼀次介绍了基于风险的测试(RBT),然后⼜在1999年在《启发式基于风险的测试》(“Heuristic Risk-based Testing”)中更详细的描述:⼆、基于风险的测试定义基于风险的测试定义:根据软件产品的风险度通过出错的严重程度和出现的概率来计算,测试可以根据不同的风险度来决定测试的优先级和测试的覆盖率。

三、基于风险的测试分析流程1 列出软件的所有功能和特性2 确定每个功能出错的可能性3 如果某个功能出错或⽋缺某个特征,对顾客的影响有多⼤4 计算风险度5 根据可能出错的迹象,来修改风险度6 决定测试的范围,编写测试⽅案四、基于风险的测试实践三步1 如何识别风险(头脑风暴会议,和专家的讨论,以及检查表等2 如何评估识别出的风险(利⽤⼆维可能性与结果模型表述)可能性相关的属性有:使⽤频度使⽤复杂度实现复杂度与风险的结果相关的属性有:⽤户结果业务结果测试的结果如下表是经典的基于测试风险的分析表,仅参考:序号风险特性需求变更频繁架构设计扩展性编码⼈员经验⽋缺。

风险概率⽤户影响业务影响测试策略1特性12特性23特性33 如何确定合理的减轻风险的活动(⽤⼀组适合的测试⽤例来覆盖每⼀个风险项)每⼀个⾼风险必须被正向测试⽤例及负向测试⽤例所覆盖。

另外,⾄少50%与⾼风险相关的测试⽤例应该具有最⾼等级的测试⽤例优先级。

中间等级的风险主要由正向测试⽤例覆盖,并且可以分布于最⾼的三个测试⽤例优先级中等。

软件测试期末复习资料

软件测试期末复习资料

需求分析与系统 设计
系统测试
概要设计
集成测试
详细设计
单元测试
编码
W模型
W模型由Evolutif公司提出,强调测试活动伴随着整个软件开发 周期,而且测试对象不仅仅是程序,需求、设计等活动同样需 要测试,也就是说,测试与开发是同步进行的。
W模型可以说是V模型的自然而然的发展。W模型体现了“及早 的和不断的进行软件测试”原则,能够帮助改进项目的内部质 量,减少总体测试时间,加快项目进度,降低测试和修改成本。
X模型也是对V模型和W
模型的改进。X模型提
出针对单独的程序片段
进行相互分离的编码和
封版 测试,此后通过频繁的
程序片段1 测试设计
X模型是事先计划再进行测试
执行测试 交接,通过集成最终合 成为可执行的程序。
工具配置
测试设计
X模型左边描述的是对
执行测试
工具配置
单独程序片段所进行的
编码完成
集成1~n
分离的编码和测试,此
敏捷开发过程模型 TDD
敏捷开发是一种以人为核心、迭代、循序 渐进的开发方法。在敏捷开发中,软件项 目的构建被切分成多个子项目,各个子项 目的成果都经过测试,具备集成和可运行 的特征。换言之,就是把一个大项目分为 多个相互联系,但也可独立运行的小项目, 并分别完成,在此过程中软件一直处于可 使用状态。
第三方测试也叫做独立测试,是指介于软件开发 者和软件用户之间的测试组织对软件进行的测试。
测试用例
从测试目的的角度来看,为达到最佳的 测试效果或高效的揭露隐藏的错误,而 精心设计并执行的少量测试数据,称之 为测试用例。
测试用例最基本由输入和预期输出组成。
软件开发过程模型

计算机辅助测试要求

计算机辅助测试要求

通过编写脚本或使用测 试工具实现测试过程的 自动化,提高测试效率 。
测试结果可重复,便于 进行回归测试和复现问 题。
计算机能够精确执行测 试步骤,减少人为因素 导致的误差。
测试结果和过程可记录 ,便于跟踪和管理。
计算机辅助测试的重要性
提高测试效率
通过自动化执行测试用例,减少人工操作, 提高测试速度。
计算机辅助测试要求
目录
• 引言 • 计算机辅助测试概述 • 计算机辅助测试的核心技术 • 计算机辅助测试的应用领域
目录
• 计算机辅助测试的流程与方法 • 计算机辅助测试的挑战与解决方案 • 计算机辅助测试的未来发展趋势
01
引言
目的和背景
提高测试效率
适应敏捷开发
通过自动化测试工具,可以快速、准 确地执行测试用例,提高测试效率。
提供轻量级的虚拟化环境,支持快速部署和 扩展测试环境。
微服务架构
将测试服务拆分为多个独立的微服务,提高 系统的可维护性和可扩展性。
5G通信技术
提供高速、低延时的数据传输能力,支持远 程测试和实时数据分析。
区块链技术
确保测试数据的不可篡改性和可追溯性,提 高测试的信任度和安全性。
THANKS
感谢观看
硬件测试
功能测试
对硬件产品的各项功能 进行测试,确保产品功
能正常、性能稳定。
兼容性测试
验证硬件产品在不同环 境、不同配置下的兼容
性和稳定性。
可靠性测试
安全性测试
对硬件产品进行长时间、 高强度的测试,以评估产 品的可靠性和耐用性。
对硬件产品的安全性进 行测试,包括电气安全、
机械安全等方面。
系统测试
在敏捷开发模式下,需要快速响应需 求变化,计算机辅助测试可以灵活调 整测试策略,满足敏捷开发的需求。

《软件工程与软件测试技术》期末复习大纲

《软件工程与软件测试技术》期末复习大纲

《软件工程与软件测试技术》课程复习大纲与练习题备注:1)复习材料包括:复习大纲、教材、授课幻灯片、习题课幻灯片、在线练习题。

2)如学员使用其他版本教材,请参考相关知识点第一章软件工程和软件测试概述•基本概念:软件、软件危机、软件工程、软件生命周期、软件过程模型•重点的知识点:–软件工程方法学的要素–软件生命周期都包括哪些阶段,每个阶段的任务–主要的软件过程模型有哪些,每个软件过程模型的特点、优点、缺点、适用场合•需了解的知识点–软件测试的起源–软件测试工程师应具备的素质第二章软件测试基础•基本概念:–软件测试,软件缺陷,软件质量保证,单元测试,集成测试,系统测试,确认测试,验收测试,黑盒测试,白盒测试,灰盒测试,开发方测试(alpha测试),用户测试(Beta测试),第三方测试,V模型,W模型,H模型,X模型,前置测试模型•重点的知识点:–软件测试的目的–软件测试的原则–软件测试的类型–软件测试模型–软件质量保证的工作内容•需了解的知识点–软件质量保证的工作过程–软件质量保证的目标–软件质量保证与软件测试的区别第三章白盒测试技术•基本概念:–白盒测试,静态测试,动态测试,桌面检查,代码审查,走查,静态结构分析,基本路径测试法,LCSAJ•重点的知识点–逻辑覆盖法(掌握各种逻辑覆盖的定义和条件)–基本路径测试法–最小测试用例数的计算–白盒测试的综合测试策略–ESTCA覆盖准则–LCSAJ覆盖准则•需了解的知识点–词法分析与语法分析–静态程序分析–程序插桩技术–静态质量度量法第四章黑盒测试技术•基本概念–黑盒测试,有效等价类、无效等价类,等价类划分法、边界值分析法、场景法、因果图法、正交实验法、判定表法,错误推测法、随机测试、功能分解法等•重点的知识点–功能测试用例设计方法(等价类划分法、边界值分析法、场景法、因果图法、正交实验法、判定表法,错误推测法、随机测试、功能分解法等)–测试方法综合使用策略•需了解的知识点–黑盒测试用例的编写和组织–QTP自动测试工具。

软件工程发展史及发展趋势

软件工程发展史及发展趋势

软件工程发展史及发展趋势软件工程作为一门指导软件开发和维护的学科,自诞生以来经历了漫长而丰富的发展历程,并持续展现出强大的生命力和广阔的发展前景。

软件工程的起源可以追溯到上世纪中期。

在那个时候,计算机刚刚崭露头角,软件开发主要由少数专业人员凭借个人经验和技巧完成。

程序设计往往是为了解决特定的问题,缺乏系统性和规范性。

随着计算机应用的不断拓展,软件规模逐渐增大,复杂度也急剧上升,传统的开发方式难以应对,软件开发中的各种问题开始凸显。

20 世纪 60 年代,“软件危机”一词被提出,它指的是在软件开发过程中遇到的一系列问题,如预算超支、进度延误、质量低下等。

为了解决这些问题,软件工程的概念应运而生。

人们开始意识到,软件开发不能仅仅依靠个人的聪明才智和经验,而需要一套科学的方法和工程化的原则来指导。

在软件工程的早期发展阶段,结构化编程方法占据了主导地位。

这种方法强调程序的逻辑结构清晰,易于理解和维护。

通过使用顺序、选择和循环等基本控制结构,开发者能够更有效地组织代码,提高程序的可读性和可维护性。

同时,软件开发过程也开始被划分为不同的阶段,如需求分析、设计、编码、测试和维护等,每个阶段都有明确的目标和任务。

到了 20 世纪 80 年代,面向对象编程技术逐渐兴起。

它将数据和对数据的操作封装在一起,形成对象,通过对象之间的交互来实现系统的功能。

面向对象编程具有更好的可扩展性、可重用性和可维护性,大大提高了软件开发的效率和质量。

与此同时,软件开发方法也在不断演进,出现了如快速原型法、敏捷开发等新的方法。

快速原型法通过快速构建一个原型系统,帮助开发者更好地理解用户需求,减少需求变更带来的风险。

敏捷开发则强调团队的协作、快速响应变化和持续交付有价值的软件。

进入 21 世纪,软件工程迎来了新的挑战和机遇。

随着互联网的普及和移动设备的广泛应用,软件的规模和复杂度进一步增加,对软件的安全性、可靠性和用户体验提出了更高的要求。

软件工程起源

软件工程起源软件工程是现代科技领域的重要分支,它涵盖了软件开发、维护和管理的全部过程。

作为一门学科,软件工程的起源可以追溯到二十世纪六十年代,当时软件开发面临了许多挑战和问题,引发了对一种更系统化、可靠的开发方法的需求。

本文将探讨软件工程的起源,以及与之相关的重要里程碑事件。

1. 需求与复杂性的挑战软件工程的起源可以追溯到二十世纪六十年代,当时软件开发正处于起步阶段。

在那个时代,计算机应用的快速发展带来了对更复杂软件的需求。

然而,由于缺乏有效的开发方法和管理策略,软件项目往往延期、超出预算,并无法满足用户的需求。

这种情况引发了对软件开发过程的探索和研究,从而催生出软件工程学科。

2. 结构化编程的发展在软件工程的早期阶段,结构化编程被引入作为一种改进软件开发的方法。

结构化编程强调使用顺序、选择和循环等基本程序结构来构建更可靠和易于理解的程序。

这一思想的核心是将复杂问题分解为较小的、可管理的模块,并用模块化的方式进行开发。

结构化编程的提出为软件工程的理论和实践奠定了基础。

3. 第一届“软件工程”会议1968年,北美IBM大型计算机用户协会(NCC)举办了第一届“软件工程”会议,形成了软件工程学科的初步定义和讨论。

会议的一个重要成果是首次提出了“软件工程”这一术语,并提倡将工程方法应用于软件开发中。

这一会议为软件工程的进一步发展和研究奠定了基础。

4. 软件危机的觉醒软件危机指的是在软件开发过程中所面临的挑战和问题,包括开发工作量的估计不准确、项目进度延误、质量不可控等。

软件危机的觉醒促使了对软件开发过程的深入研究,以寻求解决方案和提升软件开发质量的方法。

在这一背景下,许多软件工程方法论和技术开始出现,如面向对象编程、迭代开发和敏捷开发等。

5. 第一本软件工程教科书的出版1979年,由巴里·波姆编写的《软件工程导论》成为了第一本被广泛采用的软件工程教科书。

它系统地介绍了软件工程的基本原则、技术和方法,为软件工程学科的教学和研究起到了里程碑的作用。

软件简介介绍

易用性
软件界面简洁明了,操作简单易懂,方便用 户快速上手。
稳定性
软件经过多次测试和优化,运行稳定可靠, 不易出现崩溃或错误。
安全性
软件具备完善的安全机制,保障用户文件的 安全性,防止数据泄露或被篡改。
兼容性
软件支持多种操作系统和设备,方便用户在 不同平台上使用。
与其他软件的比较
1 2
与Word相比
企业内部应用
人力资源管理
软件在人力资源管理领域的应用,如员工招聘、绩效管理、培训等。
财务管理
软件在财务管理领域的应用,如账务处理、报表生成、预算管理等。
供应链管理
软件在供应链管理领域的应用,如采购管理、库存管理、物流管理等。
客户关系管理
软件在客户关系管理领域的应用,如客户信息管理、销售管理、售后服务管理等。
图片处理
软件具备图片处理功能,可以 对图片进行编辑、裁剪、滤镜 等操作。
文字处理
软件具备强大的文字处理功能 ,支持文档编辑、排版、打印 等操作。
幻灯片制作
软件支持幻灯片制作,用户可 轻松创建演示文稿并进行演示 。
格式转换
软件支持多种文件格式之间的 转换,如Word转PDF、PPT转 PDF等。
特性分析
金融行业
软件在金融领域的应用非常广 泛,如股票交易、风险管理、
投资分析等。
医疗行业
软件在医疗领域的应用包括电 子病历管理、医学影像分析、 远程诊疗等。
物流行业
软件在物流领域的应用包括智 能调度、仓储管理、运输跟踪 等。
制造业
软件在制造业的应用包括生产 计划管理、质量控制、设备监
控等。
日常生活应用
社交媒体
该软件在功能上与Word类似,但更加轻量级, 易于操作,适合日常办公和学习使用。

测试技术的工程应用课件


基于微波测试技术的雷达目标检测应用
总结词
微波测试技术是利用微波的反射、折射等特性检测物体 特性的技术。在雷达目标检测中,微波测试技术可用于 检测雷达目标的反射信号,帮助确定目标的位置和速度 。
详细描述
微波测试技术的基本原理是利用微波在物体表面反射和 折射时发生散射、干涉等特性。在雷达目标检测中,微 波测试技术可用于检测雷达目标的反射信号,通过对反 射信号的分析和处理,可以确定目标的位置和速度。此 外,微波测试技术还具有高精度、高分辨率和高抗干扰 能力等优点,适用于各种复杂环境下的雷达目标检测。
超声波测试技术及应用
总结词
超声波测试技术利用超声波在结构中的传播特性,实现对结构的无损检测和评 估,具有检测速度快、检测范围广、灵敏度高等优点。
详细描述
超声波测试技术可用于检测结构内部缺陷、评估结构损伤程度等。应用中需注 意选择合适的超声波传感器、掌握超声波传播原理、以及进行准确的信号处理 和解析。
按应用领域分类
测试技术可分为工程测试、医学测试、环境测试、食品测试等,根 据不同的应用领域,有不同的测试要求和特点。
按自动化程度分类
测试技术可分为手动测试、半自动测试和自动测试,随着自动化程 度的提高,测试效率和质量也不断提高。
02
CATALOGUE
测试技术基础知识
信号与系统基础知识
01
信号的分类与描述
灵敏度与分辨率
测试系统的灵敏度和分辨率是衡 量其性能的重要指标。灵敏度指 系统能够检测到的最小输入信号 ,分辨率则是指系统区分相近输 入信号的能力。
测试信号的采集与分析
测试信号的采集
测试信号的采集是测试系统的基本功能之一。采集过程中需要注意信号的稳定性、准确性和实时性。对于不稳定或难 以采集的信号,需要进行预处理或采用特殊的采集方法。

软件开发生命周期与测试生命周期

毕业论文论文题目:软件开发生命周期与测试生命周期内容摘要软件设计思路和方法的一般过程,包括设计软件的功能和实现的算法和方法、软件的总体结构设计和模块设计、编程和调试、程序联调和测试以及编写、提交程序。

从软件产业的发展初期到LI前的大型软件开发过程,软件测试已成为其中一个不可分割的部分。

随着软件规模的日益增大,软件测试问题也日益突出,现代社会对软件的依赖越来越强,高可信软件测试有着广泛的需求,基于缺陷模式的软件测试技术作为高可信软件的重要保证,可以大大降低软件的缺陷密度,提高软件的可信性。

本文从测试的基本概念入手,深入剖析软件测试相关理论。

[关键词]软件设计软件测试程序联调缺陷密度AbstractThe general process of design idea and method of the software, including software design, software functions and the implementation of the algor ithm and the met hod, architecture design and module design, programming and debugging, program debugging and testing, and submit written procedures .From the early development of the software industry to the current large-scale soft ware development process, software testing has become an inseparable part of. With the increasing scale of soft ware, software testing is becoming increasingly prominent, the modern society is more and more dependent on software, software testing has a wide range of needs, based on the software testing technology of defect modes as an important guarantee for high assurance software, defect density can greatly reduce the software, improve software reliability・This paper starts from the basic concept of test, analyze the theory of software testing・Key words: software design software testing program debugging defect density引言 (1)1软件开发生命周期思想概述 (1)1.1”生命周期法“的起源 (1)1.2生命周期划分的原则 (2)13生命周期的划分 (2)14生命周期法的特点 (2)2软件开发生命周期概述 (2)2.1可行性分析 (2)2.2需求分析与说明 (2)2.3程序编码 (3)2.4 软件测试 (3)2. 5 运行维护 (4)3 软件测试概述 (5)4软件测试生命周期概述 (5)4.1软件测试过程 (5)4.1.1动态测试 (6)4.1.2软件可靠性测试定义 (9)4.1.3软件可靠性测过程 (9)结论 (11)注释 (12)参考文献 (13)致谢 (13)有很多种不同的生命周期模型用于软件的开发。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

软件测试的起源与发展 软件测试的概念与定义 软件测试是伴随着软件的产生而产生的。早期的软件开发过程中,那时软件规模都很小、复杂程度低,软件开发的过程混乱无序、相当随意,测试的含义比较狭窄,开发人员将测试等同于“调试”,目的是纠正软件中已经知道的故障,常常由开发人员自己完成这部分的工作。对测试的投入极少,测试介入也晚,常常是等到形成代码,产品已经基本完成时才进行测试。

直到1957年,软件测试才开始与调试区别开来,作为一种发现软件缺陷的活动。由于一直存在着“为了让我们看到产品在工作,就得将测试工作往后推一点”的思想,潜意识里对测试的目的就理解为“使自己确信产品能工作”。测试活动始终后于开发的活动,测试通常被做为软件生命周期中最后一项活动而进行。当时也缺乏有效的测试方法,主要依靠“错误推测 Error Guessing”来寻找软件中的缺陷。因此,大量软件交付后,仍存在很多问题,软件产品的质量无法保证。

到了20世纪70年代,这个阶段开发的软件仍然不复杂,但人们已开始思考软件开发流程的问题,尽管对“软件测试”的真正含义还缺乏共识,但这一词条已经频繁出现,一些软件测试的探索者们建议在软件生命周期的开始阶段就根据需求制订测试计划,这时也涌现出一批软件测试的宗师,Bill Hetzel 博士就是其中的领导者。1972年,软件测试领域的先驱Bill Hetzel博士(代表论著《The Complete Guide to Software Testing》),在美国的北卡罗来纳大学组织了历史上第一次正式的关于软件测试的会议。在1973年,他首先给软件测试一个这样的定义:“就是建立一种信心,认为程序能够按预期的设想运行。Establish confidence that a program does what it is supposed to do. ”后来在1983年他又将定义修订为:“评价一个程序和系统的特性或能力,并确定它是否达到预期的结果。软件测试就是以此为目的的任何行为。Any activities aimed at evaluating an attribute or capability of a program or system. ”在他的定义中的“设想”和“预期的结果”其实就是我们现在所说的用户需求或功能设计。他还把软件的质量定义为“符合要求”。他的思想的核心观点是:测试方法是试图验证软件是“工作的”,所谓“工作的”就是指软件的功能是按照预先的设计执行的,以正向思维,针对软件系统的所有功能点,逐个验证其正确性。软件测试业界把这种方法看作是的软件测试的第一类方法。

尽管如此,这一方法还是受到很多业界权威的质疑和挑战。代表人物是Glenford J. Myers(代表论著《The Art of Software Testing》)。他认为测试不应该着眼于验证软件是工作的,相反应该首先认定软件是有错误的,然后用逆向思维去发现尽可能多的错误。他还从人的心理学的角度论证,如果将 “验证软件是工作的”作为测试的目的,非常不利于测试人员发现软件的错误。于是他于1979年提出了他对软件测试的定义:“测试是为发现错误而执行的一个程序或者系统的过程。The process of executing a program or system with the intent of finding errors.”这个定义,也被业界所认可,经常被引用。除此之外, Myers还给出了与测试相关的三个重要观点,那就是: 1、 测试是为了证明程序有错,而不是证明程序无错误; 2、 一个好的测试用例是在于它能发现至今未发现的错误; 3、 一个成功的测试是发现了至今未发现的错误的测试; 这就是软件测试的第二类方法,简单地说就是验证软件是“不工作的”,或者说是有错误的。Myers认为,一个成功的测试必须是发现Bug的测试,不然就没有价值。这就如同一个病人(假定此人确有病),到医院做一项医疗检查,结果各项指标都正常,那说明该项医疗检查对于诊断该病人的病情是没有价值的,是失败的。Myers提出的“测试的目的是证伪”这一概念,推翻了过去“为表明软件正确而进行测试”的错误认识,为软件测试的发展指出了方向,软件测试的理论、方法在之后得到了长足的发展。第二类软件测试方法在业界也很流行,受到很多学术界专家的支持。

然而,对Glenford Myers先生“测试的目的是证伪”这一概念的理解也不能太过于片面。在很多软件工程学、软件测试方面的书籍中都提到一个概念:“测试的目的是寻找错误,并且是尽最大可能找出最多的错误”。这很容易让人们认为测试人员就是“挑毛病”的,而由此带来诸多问题。大家熟悉的Ron Patton在《软件测试》(中文版由机械工业出版社出版,此书是目前国内测试新手入门的经典教材)一书的第10页,有一个明确而简洁的定义:“软件测试人员的目标是找到软件缺陷,尽可能早一些,并确保其得以修复。”这样的定义具有一定的片面性,带来的结果是: 1、 若测试人员以发现缺陷为唯一目标,而很少去关注系统对需求的实现,测试活动往往会存在一定的随意性和盲目性; 2、 若有些软件企业接受了这样的方法,以Bug数量来做为考核测试人员业绩的唯一指标,也不太科学。

总的来说,第一类测试可以简单抽象地描述为这样的过程:在设计规定的环境下运行软件的功能,将其结果与用户需求或设计结果相比较,如果相符则测试通过,如果不相符则视为Bug。这一过程的终极目标是将软件的所有功能在所有设计规定的环境全部运行,并通过。在软件行业中一般把第一类方法奉为主流和行业标准。第一类测试方法以需求和设计为本,因此有利于界定测试工作的范畴,更便于部署测试的侧重点,加强针对性。这一点对于大型软件的测试,尤其是在有限的时间和人力资源情况下显得格外重要。

而第二类测试方法与需求和设计没有必然的关联,更强调测试人员发挥主观能动性,用逆向思维方式,不断思考开发人员理解的误区、不良的习惯、程序代码的边界、无效数据的输入以及系统各种的弱点,试图破坏系统、摧毁系统,目标就是发现系统中各种各样的问题。这种方法往往能够发现系统中存在的更多缺陷。

到了上世纪80年代初期,软件和IT行业进入了大发展,软件趋向大型化、高复杂度,软件的质量越来越重要。这个时候,一些软件测试的基础理论和实用技术开始形成,并且人们开始为软件开发设计了各种流程和管理方法,软件开发的方式也逐渐由混乱无序的开发过程过渡到结构化的开发过程,以结构化分析与设计、结构化评审、结构化程序设计以及结构化测试为特征。人们还将“质量”的概念融入其中,软件测试定义发生了改变,测试不单纯是一个发现错误的过程,而且将测试作为软件质量保证(SQA)的主要职能,包含软件质量评价的内容,Bill Hetzel在《软件测试完全指南》(Complete Guide of Software Testing)一书中指出:“测试是以评价一个程序或者系统属性为目标的任何一种活动。测试是对软件质量的度量。”这个定义至今仍被引用。软件开发人员和测试人员开始坐在一起探讨软件工程和测试问题。软件测试已有了行业标准(IEEE/ANSI ),1983年IEEE提出的软件工程术语中给软件测试下的定义是:“使用人工或自动的手段来运行或测定某个软件系统的过程,其目的在于检验它是否满足规定的需求或弄清预期结果与实际结果之间的差别”。这个定义明确指出:软件测试的目的是为了检验软件系统是否满足需求。它再也不是一个一次性的,而且只是开发后期的活动,而是与整个开发流程融合成一体。软件测试已成为一个专业,需要运用专门的方法和手段,需要专门人才和专家来承担。

软件测试成熟度 随着软件产业界对软件过程的不断研究,美国工业界和政府部门开始认识到,软件过程能力的不断改进才是增进软件开发组织的开发能力和提高软件质量的第一要素。在这种背景下,由美国卡内基-梅隆大学软件工程研究所(SEI)研制并推出了软件能力成熟度模型SW-CMM,CMM逐渐成为了评估软件开发过程的管理以及工程能力的标准。从80年代中期开始,软件生产开始进入以个体软件过程PSP(Personal Software Process)、过程成熟度模型CMM和群组软件过程TSP(Team Software Process)为标志的、以过程为中心的第二阶段。

但是令人遗憾的是,CMM 没有充分的定义软件测试,没有提及测试成熟度的概念,没有对测试过程改进进行充分说明,在 KPA 中没有定义测试问题,与质量相关的测试问题如可测性,充分测试标准,测试计划等方面也没有满意的阐述。仅在第三级的软件产品工程(SPE)KPA中提及软件测试职能,但对于如何有效提高机构的测试能力和水平没有提供相应指导,无疑是一种不足。为此,许多研究机构和测试服务机构从不同角度出发提出有关软件测试方面的能力成熟度模型,作为SEI-CMM的有效补充,比较有代表性的包括:美国国防部提出一个CMM软件评估和测试KPA建议;Gelper博士提出一个测试支持模型(TSM)评估测试小组所处环境对于他们的支持程度;Burgess/Drabick I.T.I.公司提出的测试能力成熟度模型(Testing Capability Maturity Model)则提供了与CMM完全一样的5级模型。Burnstein博士提出了测试成熟度模型(TMM),依据CMM的框架提出测试的5个不同级别,关注于测试的成熟度模型。它描述了测试过程,是项目测试部分得到良好计划和控制的基础。 TMM 测试成熟度分解为 5 级别,关注于 5 个成熟度级别递增: Phase 0 :测试和调试没有区别,初了支持调试外,测试没有其他目的

Phase 1 :测试的目的是为了表明软件能够工作 Phase 2 :测试的目的是为了表明软件不能够能够正常工作 Phase 3 :测试的目的不是要证明什么,而是为了把软件不能正常工作的预知风险降低到能够接受的程度 Phase 4 : 测试不是行为,而是一种自觉的约束 (mental discipline) ,不用太多的测试投入产生低风险的软件上的 。

软件测试模型的演变

相关文档
最新文档