论文题目:软件开发生命周期与测试生命周期
内容摘要
软件设计思路和方法的一般过程,包括设计软件的功能和实现的算法和方法、软件的 总体结构设计和模块设计、编程和调试、程序联调和测试以及编写、提交程序。从软件 产业的发展初期到LI前的大型软件开发过程,软件测试已成为其中一个不可分割的部分。 随着软件规模的日益增大,软件测试问题也日益突出,现代社会对软件的依赖越来越强, 高可信软件测试有着广泛的需求,基于缺陷模式的软件测试技术作为高可信软件的重要保 证,可以大大降低软件的缺陷密度,提高软件的可信性。本文从测试的基本概念入手,深入 剖析软件测试相关理论。
[关键词]软件设计软件测试程序联调缺陷密度
Abstract
The 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.2 13 14
”生命周期法“的起源 ................................................... 1 生命周期划分的原则 ..................................................... 2 生命周期的划分 ......................................................... 2 生命周期法的特点 ....................................................... 2
2软件开发生命周期概述 .......................................................... 2
2.1
可行性分析 ............................................................. 2
2.2需求分析与说明 ........................................................... 2 2.3程序编码 ................................................................. 3 2.4 软件测试 ................................................................. 3 2. 5 运行维护 ................................................................. 4 3
软件测试概述 ................................................................ 5
4软件测试生命周期概述 .......................................................... 5
4.1 4.1.1 4.1.2 4.1.3
软件测试过程 ........................................................... 5 动态测试 ............................................................. 6 软件可靠性测试定义 ................................................... 9 软件可靠性测过程 ..................................................... 9
结论 ........................................................................... 11 注释 ........................................................................... 12 参考文献 ....................................................................... 13 致谢 ........................................................................... 13
有很多种不同的生命周期模型用于软件的开发。软件开发的生命周期是以对软件的需 求定义为起点,以对软件的正式验收作为终点。它并不是存在的,而是一个完整产品 生命周期实实在在的一部分。在产品生命周期之中,软件的开发会不断改正其自身的错误 并且时常针对软件的需求而进行调整。软件产品最简单的形式只不过是一个程序软件,但 实际上确没有那么简单,由于软件产品是由开发出的不同软件部分所构成的一个完整的系 统,这将会使产品变的非常复杂.有许多不同的软件开发生命周期模型,但是它们都有一 个共同的特点,那就是在生命周期中的某一时刻,软件都会被测试。这篇文章概述了一些 常用的软件生命周期模型,并重点强调了在各个模型中的测试工作.
每一个软件的发布都会经过验收测试以证明软件的各个部分所构成的整体确实实现 了需求。但是每个阶段的测试和集成将会耗费大量的时间和精力。山于过多的开发周期会 增加成本,耗费时间,所以应该经过认真估算,尽早地规划好到底应该使用多少个周期来 进行软件的开发。在早期开发出来的产品没有任何的实用价值,只是作为下一步开发的 一个原型。这些原型仅仅是用来满足、核对用户关键需求所走的一个捷径。可是如果其中 缩减了文档的书写和对软件的测试,那么就有必要将这些将这个原型抛弃并从下一个阶段 开始重新设计。因为一个缺乏质量的原形不可能给下一步的开发打下一个好基础。
1软件开发生命周期思想概述
软件工程是指导计算机软件开发和维护的工程学科,采用工程的概念、原理、技术和 方法来开发与维护软件,把经过时间考验证明正确的原理技术和当前能够得到的最好的技 术方法结合起来,以经济地开发出高质量的软件并有效地维护它。
软件工程借助工程的理论来指导软件开发,大量软件开发实例证明了采用软件工程方 法进行开发,可以消除或缓解软件危机,提高软件开发的成功率和生产率。m
1.1\"生命周期法”的起源
人类解决复朵问题时普遍采用的一个策略是\"各个击破\",也就是对问题进行分解,然后 再分别解决各个子问题的策略•软件工程釆用的\"主命周期法\",就是从时间角度对软件开 发和维护的复朵问题进行分解,把软件生存的漫长周期依次划分为若干个阶段,每个阶段 有相对的任务,然后再逐步完成每个阶段的任务.
1.2生命周期划分的原则
各阶段的任务彼此间尽可能相对,同一个阶段各项任务的性质尽可能相同,从而 降低每个阶段任务的复朵性,简化不同阶段之间的联系,有利于软件开发过程的组织管理.
1.3生命周期的划分
软件生命周期一般分为:软件定义(问题定义,可行性研究,需求分析),软件开发(总 体设计,详细设计,编码和单元测试,综合测试),软件使用与维护等三个时期•旧
1.4生命周期法的特点 1. 阶段具有顺序性和依赖性 2. 推迟实现的观点 3. 质量保证的观点
4. 每个阶段都必须完成规定的文档
5. 每个阶段结束前都要对所完成的文档进行评审,以便尽早发现问题,改正错误。
2软件开发生命周期概述
2.1可行性分析
根据输入数据与期望输出分析项口需求,输入值输出转换处理,成本效益分析以及 项目的安排。可行性分析还包括根据可使用的软件工程、硬件和软件技术人员,分析项 EI技术的可行性。在这个项目结束时将创建整个项目的可行性报告。
2. 2需求分析与说明
主要集中于描述系统目的。需求提出和分析仅仅集中在使用者对系统的观点上。开发人员和用户确 泄一个问题领域,并泄义一个描述该问题的系统°这样的泄义称作系统规格说明,并且它在用户和开发 人员之间充当合同。
在问题分析阶段分析人员的主要任务是:对用户的需求进行鉴别、综合和建模,淸除用户需求的模 糊性、歧义性和不一致性,分析系统的数据要求,为原始问题及目标软件建立逻辑模型。分析人员要将 对原始问题的理解与软件开发经验结合尼来,以便发现哪些要求是由于用户的片而性或短期行为所导致 的不合理要求,哪些是用户尚未提出但具有真正价值的潜在需求。®
在需求评审阶段,分析人员要在用户和软件设讣人员的配合下对自己生成的需求规格说明和初步的 用户手册进行复核,以确保软件需求的完整、准确、淸晰、具体,并使用户和软件设计人员对需求规格 说明和初步的用户手册的理解达成一致。一旦发现遗漏或模糊点,必须尽快更正,再行检査。
软件需求分析所要做的工作是深入描述软件的功能和性能,确定软件设讣的和软 件同
2
其它系统元素的接口细节,定义软件的其它有效性需求。
进行需求分析时,应注意一切信息与需求都是站在用户的角度上。尽量避免分析员的 主观想象,并尽量将分析进度提交给用户。在不进行直接指导的前提下,让用户进行检查 与评价。从而达到需求分析的准确性。
分析员通过需求分析,逐步细化对软件的要求,描述软件要处理的数据域,并给软件 开发提供一种可转化为数据设计、结构设计和过程设计的数据和功能表示。在软件完成后, 制定的软件规格说明还要为评价软件质量提供依据。⑷ 软件设计
1. 设计应该展现层次结构使得软件各部分之间的控制更明智。
2. 设计应当模块化;这就是说,软件应在逻辑上分割为实现特定的功能和子功能的 部
分。
3. 设计应当山清晰且可分离的数据和过程表达来构成。 4. 设计应使得模块展现的功能特性。
5. 设计应使得界面能降低模块之间及其与外部环境的连接复杂性。
6. 设计应源自于软件需求分析期间获得的信息所定之可重复方法的使用。要拥有良 好的
设计特征不是鼎碰运气,而在设计过程中通过综合运用基础设计原理、系统方、 彻底的评定回顾可以有助于良好的设计。软件设计方法每天都在进化,作为已经经过测试 和细化的方法,良好的设计应具有以下的四种特性,并在所有这些特性之间保持一致。㈤
2. 3 程序编码
程序编码是将上一阶段的详细设计得到的处理过程的描述转换为基于某种计•算机语 言的程丿了;,即源程序代码。包括将涉及文档中确定的设计,实现成为可执行的编程语言 代码。编码阶段将输出软件的源代码,用作测试与维护简短的输入。
2. 4 软件测试
工程师理解产品的功能要求,并对其进行测试,检查软件有没有错误,决定软件是 否具有稳定性,写出相应的测试规范和测试用例的专门工作人员。简而言之,软件测试 工程师在一家软件企业中担当的是“质量管理”角色,及时纠错及时更正,确保产品的 正常运作。
据介绍,按其级别和职位的不同,软件测试工程师可分为初级软件测试工程师、中级 软件测试工程师、高级软件测试工程师三类。初级软件测试工程师通常都是按照软件测 试方案和流程对产品进行功能测验,检察产品是否有缺陷;中级软件测试工程师则编写软 件测试方案、测试文档,与 项口组一起制定软件测试阶段的工作计划,能够在项U运行 中合理利用测试工具完成测试任务;而高级软件测试工程师则要熟练掌握软件测试与开发 技术,且对所测 试软件对口行业非常了解,能够对可能出现的问题进行分析评佔。据了 解,软件测试人员必须具有创新性和综合分析能力,必须具备判断准确、追求完美、执着 认真、善于合作的品质,以及具有丰富的编程经验与查检故障的能力。
使用人工或者自动手段来运行或测试某个系统的过程,其□的在于检验它是否满足规 定的需求或弄清预期结果与实际结果之间的差别。
1. 测试应该尽早进行,最好在需求阶段就开始介入,因为最严重的错误不外乎是系 统不
能满足用户的需求。
2. 程序员应该避免检查自己的程序,软件测试应该由第三方来负责。
3
3. 设汁测试用例时应考虑到合法的输入和不合法的输入以及各种边界条件,特殊情 况下
不要制造极端状态和意外状态。
4. 应该充分注意测试中的群集现象。⑷
5. 对策就错误结果进行地一个确认过程。一般由A测试出来的错误,一定要由B来 确
认。严重的错误可以召开评审会议进行讨论和分析,对测试结果要进行严格的确认,是 否真的存在这个问题以及严重程度等。
6. 制定严格的测试计划。一定要制定测试计划,并且要有指导性。测试时间安排尽 量宽
松,不要希望在极短的时间内完成也有一个高水平的测试。
7. 妥善保存测试计划、测试用例、出错统计和最终分析报告,为维护提供方便。
软件测试主要工作内容是验证和确认,下面分别给出其概念:
验证是保证软件正确地实现了一些特定功能的一系列活动,即保证软件以正确的方 式来做了这个事件.
1•确定软件生命周期中的一个给定阶段的产品是否达到前阶段确立的需求的过程 2. 程序正确性的形式证明,即采用形式理论证明程序符合设计规约规定的过程
3. 评市、审查、测试、检查、审计等各类活动,或对某些项处理、服务或文件等是否 和规
定的需求相一致进行判断和提出报告。
确认是一系列的活动和过程,U的是想证实在一个给定的外部环境中软件的逻辑正确 性。即保证软件做了你所期望的事情。
1. 静态确认,不在计算机上实际执行程序,通过人工或程序分析来证明软件的正确性 2. 动态确认,通过执行程序做分析,测试程序的动态行为,以证实软件是否存在问题。 软
件测试的对象不仅仅是程序测试,软件测试应该包括整个软件开发期间各个阶段所 产生的文档,如需求规格说明、概要设计文档、详细设计文档,当然软件测试的主要对象 还是源程序。曰
2. 5运行维护
对软件的研制(分析、设计、编码和测试)工作并交付使用以后,对软件产品所进行 的一些软件工程的活动。即根据软件运行的情况,对软件进行适当修改,以适应新的要求, 以及纠正运行中发现的错误。编写软件问题报告、软件修改报告。
一个中等规模的软件,如果研制阶段需要一年至二年的时间,在它投入使用以后,其 运行或工作时间可能持续五年至十年。那么它的维护阶段也是运行的这五年至十年期间。 在这段时间,人们儿乎需要着手解决研制阶段所遇到的各种问题,同时还要解决某些维护 工作本身特有的问题。做好软件维护工作,不仅能排除障碍,使软件能正常工作,而且 还可以使它扩展功能,提高性能,为用户带来明显的经济效益。然而遗憾的是,对软件维 护工作的重视往往远不如对软件研制工作的重视。而事实上,和软件研制工作相比,软件 维护的工作量和成本都要大得多。
4
在实际开发过程中,软件开发并不是从第一步进行到最后一步,而是在任何阶段,在 进入下一阶段前一般都有一步或儿步的回溯。在测试过程中的问题可能要求修改设计,用 户可能会提出一些需要来修改需求说明书等。⑹
3软件测试概述
软件测试的发展历史:20世纪60年代(软件工程建立前),为表明程序正确而进行测 试。.1972年在北卡罗来纳大学举行了首届软件测试正式会议。.1975年John Good Enough 和
Susan Gerhart在IEEE上发表了《测试数据选择的原理》的文章,软件测试被确定为 一种研究方向。.1979年,Glenford Myers的《软件测试艺术》,对测试做了定义:测试 是为发现错
误而执行的一个程序或者系统的过程。
软件测试使用人工或者自动手段来运行或测试某个系统的过程,其□的在于检验它是 否满足规定的需求或弄清预期结果与实际结果之间的差别。它是帮助识别开发完成的讣算 机软件的正确度,完全度,和质量的软件过程
软件开发过程、开发技术水平、软件测试等多方面进行保障。而软件测试乂是保障软 件质量的最重要的手段之一。软件可靠性测试是软件开发过程中的一个环节,软件可靠性 测试的LI的是对软件的可靠性进行验证。是软件生命周期的一个重要阶段和关键步骤。通 过排除软件测试中发现的错误和缺陷。
随着软件规模的不断扩大,软件功能的不断增加,软件测试的难度进一步提高,软件 产品的可鼎性也更加难以度量。山于U前在软件可靠性方面还没有建立起权威性的管理体 系和规范,建立的许多软件可幕性模型在一定程度上描述了软件可幕性,但均存在局限性, 至今尚无哪一个模型能够适合广泛的应用。因此从事软件可靠性测试与评估研究是一个具 有理论价值和实际意义的工作。⑹
4软件测试生命周期概述
4.1软件测试过程
软件测试指为了发现错误而执行程序的过程。它是根据软件开发各阶段的规格说明和 程序的内部结构精心设讣一批测试用例,用这些测试用例去执行程序,以发现程序错误的 过程。软件测试追求的是通过系统的测试方法,发现软件中的错误。软件测试是软件开发 过程中一个非常重要的阶段。其LI标是在精心控制的环境下执行程丿了;,以发现程序中的错 误,给出程序可靠性的鉴定。 静态分析
静态分析的基本特征是在对软件进行分析、审查和测试时不实际运行被测程序。而是 采用其它手段达到检测的LI的。山专用的软件测试工具评审软件文档或程序,度量程序静 态复朵度,检查软件是否符合编程标准,借以发现编写的程序的不足之处,减少错误出现
5
的概率。静态分析是对被测程序进行特性分析的一些方法的总称。这些方法本身各有自己 的LI标和步骤。比如,有的是要收集一些程序信息,以利于查找程序中的各种欠缺和可疑 的程序构造:有的只是从程序中提出语义的或结构要点,供进一步分析。静态分析只是对 代码进行扫描分析,检测它的语法规则等是否规范,以发现程序的不足之处。它主要是为 软件的质量保证提供依据,以提高软件的可靠性和易维护性。⑶
静态分析包含对软件开发过程中的软件需求、设计和编码所生成的文档的检验。
1. 需求分析阶段
检验需求分析文档与用户要求是否一致:检验所有参加项U人员对需求分析文档和用 户要求的理解是否正确。
2. 设计阶段
检验设汁(概要设计和详细设计)是否与需求分析文档一致;设计的结构化程序及每个 模块是否合理;检验每个模块是否符合系统规范要求;检验模块与系统间的组合,特别重 要的输入及边界条件下的组合。
3. 编码阶段
逐行地阅读、校验书面程序是否正确,以便发现代码中的错误,及对计算机环境规范 方面的差错。
4.1.1动态测试
“动态测试”也就是要经过程序运行测试用例而进行的测试,所以动态测试常称“程 序测试”。程序测试通常有“黑盒测试”和“白盒测试”之分。如果软件产品具备的功能 已经知道,测试软件产品的每一个功能是否达到了预期的要求,这种测试称为黑盒测试; 如果知道软件程序的内部活动方式,测试程序内部活动是否符合设计要求,这种测试称为 “白盒测试”。
黑盒测试(Black-Box Testing) 乂称功能测试,数据驱动测试或基于规格说明的测试。 在进行黑盒测试时,仅把软件当作一个黑盒,只需知道程序输出和输入之间的关系或者程 序的功能。因此,黑盒测试是从用户的观点出发的测试。它是从软件需求出发,根据软件 需求规格说明设讣测试用例,并根据测试用例的要求运行被测程序的测试方法。它较少关 心程序内部的实现过程,侧重于程序的执行结果,将被测程序看成是不可见的黑盒子,因 此被称为黑盒测试。黑盒测试着重于验证软件功能和性能的正确性,其典型测试项U包括 功能测试、性能测试、边界测试、强度测试等。
白盒测试(White-Box Testing) 乂称结构测试,逻辑驱动测试或基于程序的测试。采 用这一测试方法,测试者必须看到被测的源程序,分析程序的内部结构,并根据其内部构 造设讣测试用例。口盒测试是一种按照程序内部的逻辑结构和编码结构设计并执行测试用 例的测试方法。采用这种测试方法,测试者需要掌握被测程序的内部结构。口盒测试通常 根据覆盖准则设计测试用例,使程序中的每个语句、每个条件分支、每个控制路径都在程 序测试中受到检验。白盒测试需要运行程序,并能在运行过程中跟踪程序的执行路径。
黑盒测试是以用户的角度来看待软件的质量,从输入数据与输出数据的对应关系,也 就是根据程序外部表现特性进行的测试,而不考虑程序内部的逻辑结构和工作状况。黑盒 测试技术
6
依赖软件的规格说明书,假设软件的规格说明书是正确的,通过划分程序的输入 和输出域来确定测试用例。如果软件规格说明的规定有误,用黑盒测试方法是发现不了的。 反之,口盒测试只根据程序的内部结构进行测试,测试用例的设计要保证测试时程序的所 有语句至少执行一次,而且要检查所有的逻辑条件。如果程序结构本身有问题,比如说程 序逻辑有错误,或是有遗漏,那就无法发现。黑盒测试和口盒测试各自有各自得优缺点, 相互之间构成互补关系,在规划测试时需要把黑盒测试与口盒测试结合起来。3 软件测试过程
软件测试过程,可分为五个步骤:单元测试、子系统测试、系统测试、验收测试和平 行运行。
单元测试:在设计好的软件系统中,每个模块完成一个清晰定义的子功能,而且每个 模块乂是相对的。因此,每个模块可以作为一个单独的测试单元,而且也比较容易设 计测试用例。单元测试的目的,是保证每个模块作为一个单元能正确运行。在这个测试中 所发现的错误,往往是编码和详细设计的错误。
集成测试:把软件单元逐步组装成一个计算机软件配置项的过程叫“软件集成〃。把软 件逐步组装,同时一并进行测试,直到整个系统成为一体的有序进行的测试叫“集成测试”, 也叫“计算机软件部件测试”、“组装测试”或“综合测试”。
确认测试:集成测试完成后,软件接口缺陷已经发现并纠正,这时可以对软件进行确 认测试。确认测试是通过黑盒测试来验证软件功能及性能与要求规范是否一致。当发现与 需求规范有差别,要列出一个缺陷表。
系统测试:将已经集成好的软件系统,作为整个基于计算机系统的一个元素,与计算 机硬件、外设、某些支持软件、数据和人员等其他系统元素结合在一起,在实际运行(使 用)环境下,对讣算机系统进行一系列的组装测试和确认测试。系统测试的LI的在于通过 与系统的需求定义做比较,发现软件与系统定义不符合或与之矛盾的地方,以验证软件系 统的功能和性能等满足其规约所指定的要求。系统测试的测试用例应根据需求分析说明书 来设计,并在实际使用环境下来进行。问
1. 验证是保证软件正确地实现了一些特定功能的一系列活动,即保证软件做了你所期 望
的事情。
2. 确定软件生存周期中的一个给定阶段的产品是否达到前阶段确立的需求的过程; 3. 程序正确性的形式证明,即釆用形式理论证明程序符号设计规约规定的过程; 4. 评市、审查、测试、检查、审计等各类活动,或对某些项处理、服务或文件等是否 和规
定的需求相一致进行判断和提出报告。
确认是一系列的活动和过程,U的是想证实在一个给定的外部环境中软件的逻辑正确 性。即保证软件以正确的方式来做了这个事件。
1. 静态确认,不在计算机上实际执行程序,通过人工或程序分析来证明软件的正确 性; 2. 动态确认,通过执行程序做分析,测试程序的动态行为,以证实软件是否存在问 题。
软件测试的对象不仅仅是程序测试,软件测试应该包括整个软件开发期问各个阶段所 产生的文档,如需求规格说明、概要设讣文档、详细设计文档,当然软件测试的主要对象 还是源程
7
序。
4. 2软件可靠性测试 4. 2.1软件可靠性定义
软件可靠性是软件质量因素中最基本、最重要的因素。1983年,IEEE计算机学会对“软 件可鼎性”这一术语作了专门的定义:在规定的条件下,在规定的时间内,软件不引起系 统失效的概率,该概率是系统输入和输出的函数,也是软件中存在的缺陷的函数;系统输 入将确定是否会遇到已存在的错误(如果错误存在的话):在规定的时间周期内,在规定的 条件下程序执行所要求的功能的能力。根据定义,软件可靠性包含了以下3个要素:规定 的时间、规定的条件、所要求的功能。
规定的时间:软件可靠性只是体现在其运行阶段,所以将“运行时间”作为“规定时 间\"的度量。“运行时间”包括软件系统运行后工作与挂起(开启但空闲)的累汁时间。山 于软件运行的环境与程序路径选取的随机性,软件的失效为随机事件,所以运行时间属于 随机变量。
规定的条件:条件指软件的运行环境。它涉及软件系统运行时所需的各种支持要素, 如支持硬件、操作系统、其他支持软件、输入数据格式和范围以及操作规程等。不同的环 境条件下软件的可鼎性是不同的。具体地说,规定的环境条件主要是描述软件系统运行时 计算机的配置情况以及对输入数据的要求,并假定其他一切因素都是理想的。有了明确规 定的环境条件,还可以有效判断软件失效的责任在用户方还是研制方。
所要求的功能:软件可黑性还与规定的任务和功能有关。由于要完成的任务不同,软 件的运行剖面会有所区别,则调用的子模块就不同(即程序路径选择不同),其可靠性也就 可能不同。所以要准确度量软件系统的可鼎性必须首先明确它的任务和功能。⑶ 软件可靠性度量
软件可鼎性度量是指对软件产品具有可靠性程度的定量评价。软件可靠性度量参数是 描述软件可靠性的依据,确定其指标要求是评估软件可靠性的必要步骤,一般的软件可靠 性参数有:
可鼎度:是指软件在规定的条件下、规定的时间段内完成预定的功能的概率。或者说 是软件在规定时间内无失效发生的概率。该参数是关于软件失效行为的概率描述,是软件 可靠性的基本定义。
失效概率:失效概率是失效时间少于或等于t的概率。 失效强度:失效强度是失效概率的密度函数。
失效率:失效率是指在t时刻尚未发生失效的条件下,在t时刻后单位时间内发主失效 的概率。失效率是失效概率F(t)的条件概率密度,乂称条件失效强度。
平均失效时间:平均失效时间次失效时间的均值。
平均失效间隔时间:平均失效间隔时间是指2次相邻失效时间间隔的均值。
4.1.2软件可靠性测试定义
软件可靠性测试是指在预期的使用环境中,为检出软件缺陷,验证和评估是否达到用 户对软件可靠性需求而组织实施的一种软件测试。软件可黑性测试是面向故障的测试,每 一次
8
测试均代表用户将要完成的一组操作,使得测试成为最终软件产品运行的预演。软件 可鼎性测试包括可靠性增长测试和可靠性验证测试。
可靠性增长测试和可靠性验证测试从不同的角度理解、分析和处理故障数据。在可靠 性增长测试中,测试以迭代方式进行,根据测试过程中所检出和跟踪到的故障,使用基于 软件可靠性增长模型和统计推理的可靠性评佔方法进行故障强度估计和测试进展跟踪。可 鼎性验证测试是软件产品发放前•进行的最后测试,它是最终检验而不是调试。可靠性验证 测试的目标是确定一个软件产品在风险限度之内的可接收程度。
软件可鼎性测试是在预期的使用环境中或仿真环境下,按照运行剖面组织实施的测 试。在使用中发生概率高的缺陷通常最先得以暴露,而实际高发生概率的缺陷即是影响软 件可靠性的主要缺陷,排除这些缺陷可以有效地实现可靠性增长,提高软件可靠性。软件 可靠性测试过程中,可以根据用户给定的可靠性要求确定测试方案,生成测试用例,进行 可靠性验证测试。软件可靠性测试及其失效数据分析,不仅可以验证软件可靠性是否满足 给定需求,跟踪软件可靠性的增长情况,指导软件测试和交付,而且可以预测未来可能达 到的可靠性水平,从而为软件开发及其管理提供决策依据。
软件可靠性测试是指为了保证和验证软件的可靠性要求而对软件进行的测试。其釆用 的是按照软件运行剖面(对软件实际使用情况的统讣规律的描述)对软件进行随机测试的 测试方法。通过软件可靠性测试可以达到以下目的:
1. 有效地发现程序中影响软件可鼎性的缺陷,从而实现可靠性增长:软件可靠性是指 “在
规定的时间内,规定的条件下,软件不引起系统失效的能力,其概率度量称为软件可 鼎度。软件的“规定的条件”主要包括相对不变的条件和相对变化的条件,相对不变的条 件如讣算机及其操作系统:相对变化的条件是指输入的分布,用软件的运行剖面来描述。 按照软件的运行剖面对软件进行测试一般先暴露在使用中发生概率高的缺陷,然后是发生 概率低的缺陷。而高发生概率的缺陷是影响产品可黑性的主要缺陷,通过排除这些缺陷可 以有效地实现软件可靠性的增长。
2. 验证软件可鼎性满足一定的要求:通过对软件可靠性测试中观测到的失效情况进行 分
析,可以验证软件可為性的定量要求是否得到满足。
3. 估计、预计•软件可幕性水平:通过对软件可黑性测试中观测到的失效数据进行分析, 可
以评佔当前软件可靠性的水平,预测未来可能达到的水平,从而为开发管理提供决策依 据。软件可靠性测试中暴露的缺陷既可以是影响功能需求的缺陷也可以是影响性能需求的 缺陷。软件可靠性测试方法从概念上讲是一种黑盒测试方法,因为它是面向需求、面向使 用的测试,它不需要了解程序的结构以及如何实现等问题。⑼
4.1.3软件可靠性测过程
软件可靠性测试活动包括:测试数据、测试环境的准备、测试运行、可幕性数据收集、 可靠性数据分析和失效纠正。
1•构造运行剖面:软件的运行剖面“是指对系统使用条件的定义。即系统的输入值用 其按
时间的分布或按它们在可能输入范圉内的出现概率的分布来定义”。粗略地说,运行 剖面是用来描述软件的实际使用情况的。运行剖面是否能代表、刻画软件的实际使用取决 于可靠性工程人员对软件的系统模式、功能、任务需求及相应的输入激励的分析,取决于 他们对用户使用这
9
些系统模式、功能、任务的概率的了解。运行剖面构造的质量将对测试、 分析的结果是否可信产生最直接的影响。
2. 选取测试用例:软件可黑性测试采用的是按照运行剖面对软件进行可黑性测试的方 法。
因此,可靠性测试所用的测试用例是根据运行剖面随机选取得到的。
3. 测试环境的准备:为了得到尽可能真实的可靠性测试结果,可靠性测试应尽量在真 实的
环境下进行,但是在许多情况下,在真实的环境下进行软件的可靠性测试很不实际, 因此需要开发软件可靠性仿真测试环境。比如,对于多数嵌入式软件,由于与之交联的环 境的开发常常与软件的开发是同步甚至是滞后的,因此无法及时进行软件可靠性测试:有 些系统中,山于交联的环境非常昂贵而无法用于需要进行大量运行的可靠性测试。
4. 可鼎性测试运行:即在真实的测试环境中或可靠性仿真测试环境中,用按照运行剖 面生
成的测试用例对软件进行测试。
5. 数据收集:收集的数据包括软件的输入数据、输出结果,以便进行失效分析和进行 回归
测试:软件运行时间数据,可以是CPU执行时间、日历时间、时钟时间等:可靠性失 效数据包括每次失效发生的时间或一段时间内发生的失效数,失效数据可以实时分析得 到,也可以事后分析得到。数据收集的质量对于最终的可靠性分析结果有着很大的影响, 应尽可能采用自动化手段进行数据的收集,以提高效率、准确性和完整性。
6. 数据分析:主要包括失效分析和可靠性分析。失效分析是根据运行结果判断软件是 否失
效,以及失效的后果、原因等:而可靠性分析主要是指根据失效数据,估计软件的可 靠性水平,预计可能达到的水平,评价产品是否已经达到要求的可靠性水平。为管理决策 提供依据。
7. 失效纠正:如果软件的运行结果与需求不一致,则称软件发生失效。通过失效分析, 找
到并纠正引起失效的程序中的缺陷,从而实现软件可鼎性的增长。软件可靠性增长测试 是为了满足用户对软件的可靠性要求、提高软件可靠性水平而对软件进行的测试。是为了 满足软件的可靠性指标要求,对软件进行测试一可靠性分析一修改一再测试一再分析一再 修改的循环过程。⑶
软件开发是一项系统工程,需要各类人员的积极参与合作。用户、系统分析员、程序 员、开发管理人员在整个软件开发过程中都起到举足轻重的作用。因此,软件工程原理在 软件开发中的运用是必须的,也是必然的。我们要在软件开发中引进软件工程的一些思想, 并结合软件自身的特点,以此提高软件开发效率,保证软件质量。
从软件测试和软件可靠性理论入手,对现有的软件可靠性技术进行了系统的研究。总 结出现有可靠性模型的特点并分析出现有可靠性模型所存在的局限性与不足。在对已有的 软件可鼎性模型分析中,发现当前的可黑性评估技术,更多地关注于系统整体,都没有考 虑子系统对整个系统的影响。结合系统运行特点,将模型考虑到系统实际运行时,各子系 统实际运行特点,以子系统为基本的评估单位,将各子系统的运行时间比例、重要度等因 素综合计算每个子系统的可靠性,进而得到系统的可靠性。这种基于模块任务的思想,建 立起更符合系统在实际运行时的情形。从而得到更加精确的可幕性数据。结合实际情况实 现新的计算机软件可靠性测试模型需要综合多方面因素,并且也是一个逐步完善与改进的 过程。
10
注释
[1] 张克东《软件工程与软件测试自动化教程》人民邮电出版社2005年版第69页。 [2] 同上第90页[3]同上第110页[4]同上第130页。
[5] 周慧.《论软件项目管理,现代电子技术》重庆出版社2003年版第59页。 [6] 同上第118页。
[7] 张海藩《软件工程》北京人民邮电岀版社2005年版 第99页。
[8] 温雅丽《面向对象技术在多媒体数拯库的应用》人民出版社2002年版第100页。 [9] 张克东《软件工程与软件测试自动化教程》人民邮电岀版社2005年版第36页。 [10] 同上第103页。
[11] Dustin,E.《软件自动化测试:引入、管理与实施》电子工业岀版社2003年版。
第69页。 [12]
同上第112页。
[13] Zadrozny《J2EE性能测试》电子工业出版社2003年版 第113页。
[14] James A. Whittaker《实用软件测试指南》电子工业出版社2002年版第119页。 [15] Edward Kit《软件测试过程改进》机械工业出版社2006年版 第88页。
11
参考文献
张克东《软件工程与软件测试自动化教程》人民邮电出版社2005年版第30-60 112-130 160-201页。 Dustin, E.《软件自动化测试:引入、管理与实施》电子工业出版社2003年版第45- James A. Whittaker《实用软件测试指南》电子工业岀版社2002年版第67-
Zadrozny《J2EE性能测试》电子工业出版社2003年版 第44-78 110-118 194-216页。 Jones, C.《软件评估、基准测试与最佳实践》机械工业出版社2004年版第20-40 -123页。 Edward Kit《软件测试过程改进》机械工业出版社2006年版第23-67 110-165页。
Rakitin.S.K.《软件验证与确认的最佳管理办法》电子工业岀版社2006年版第54-112 130-1页。 张海藩《软件工程》北京人民邮电出版社2005年版第1-50 90-130页。
温雅丽《面向对象技术在多媒体数据库的应用》人民出版社2002年版第15- 96-115 130-1页。 周慧.《论软件项目管理,现代电子技术》重庆出版社2003年版第12-56 78-112 130-178页。
112-140页。 110-170页。
致谢
非常感谢老师在我大学的最后学习阶段给自己的指导,从最初的定题,到资料收集, 到写作、修改,到论文定稿,她们给了我耐心的指导和无私的帮助。为了指导我们的毕业 论文,她们放弃了自己的休息时间,她们的这种无私奉献的敬业精神令人钦佩,在此我向 她们表示我诚挚的谢意。同时,感谢所有任课老师和所有同学在这四年来给自己的指导和 帮助,是他们教会了我专业知识,教会了我如何学习,教会了我如何做人。正是由于他们, 我才能在各方面取得显著的进步,在此向他们表示我山衷的谢意,并祝所有的老师培养出 越来越多的优秀人才,桃李满天下!
12
因篇幅问题不能全部显示,请点此查看更多更全内容