软件概述
软件生命周期
软件生命周期是指软件产品从提出、实现、使用、维护到停止使用、退役的过程。
软件生命周期分为多个阶段,每个阶段有明确的任务,这样可以使得结构复杂、管理复杂的软件开发变得容易控制和管理。通常,可将软件生命周期分为7个阶段:
- 问题定义:确定好要解决的问题是什么(what),通过对客户的访问调查,系统分析员扼要的写出关于问题性质、工程目标和工程规模的书面报告,经过讨论和必要的修改之后这份报告应该得到客户的确认。
- 可行性研究:确定该问题是否存在一个可以解决的方案。这个阶段的任务不是具体解决问题,而是研究问题的范围,套索这个问题是否值得去解决,是否有可行的解决办法。可行性研究的结果是客户做出是否继续进行这项工程的决定的重要依据,一般来说,只有投资可能取得较大的效益的那些工程项目才值得继续进行下去。
- 需求分析:深入具体的了解用户的需求,在所开发的系统要做什么这个问题上和用户想法完全一致。明确目标系统必须做什么,确定目标系统必须具备哪些功能。通常用数据流图、数据字典和简要的算法表示系统的逻辑模型。用《规格说明书》记录对目标系统的需求。
- 软件设计:在需求分析结果的基础上,对整个软件系统进行设计,如系统框架设计、数据库设计等
- 软件开发:编码阶段,在此阶段进行开发,进行任务分配并按照需求说明书进行编码实现,随后着手进行单元测试和集成测试。
- 软件测试:测试阶段,在这个阶段,团队要进行系统测试,包括功能测试、性能测试、安全性测试、兼容性测试等等,并且要通过自动化测试手段来保证测试手动重现以及质量稳定。
- 软件维护:通过各种必要的维护活动使系统持久的满足用户的需求。主要分为 改正性维护、适应性维护、完善性维护、预防性维护。
软件开发模型
测试人员需要充分了解软件开发模型,以便找准自己在其中的定位与任务。
瀑布模型
瀑布模型作为最早出现的软件开发模型,遵循从上至下一次性完成整个软件产品的开发方式,提供了软件开发的基本框架,为后续出现的开发模型奠定了基础。从1970年被温斯顿·罗伊斯(Winston Royce)提出后,直到80年代早期,一直是被广泛采用。
这种模式有明确的阶段活动,分为6个阶段:计划→需求分析→软件设计→编码→测试→运行维护。阶段顺序固定,自上而下、相互衔接,形如瀑布流水逐级下落。这也是瀑布模型名称的由来。
在瀑布模型中,软件开发的各项活动严格按照这条线进行,只有当一个阶段任务完成之后才能开始下一个阶段。软件开发的每一个阶段都要有结果产出,结果经过审核验证通过之后才可以进行下一阶段,否则需要返回修改。
优点
为整个项目明确划分了检查点,当一个阶段完成之后,只需要把全部精力放在后面的开发上即可,有利于大型软件开发人员的组织管理及工具的使用与研究,可以提高开发效率。
缺点
1.由于开发模型是线性的,单一流程,不可逆,用户只有等到整个过程的末期才能见到开发成果,从而增加了开发风险。
2.测试只是其中一个阶段,缺乏全过程测试思想。早期的错误可能要等到开发后期的测试阶段才能发现,发现问题越晚造成代价越高。
3.各个阶段的划分完全固定,阶段之间产生大量的文档,极大地增加了工作量。
4.对于现代软件而言,软件开发阶段之间的关系大部分不会是线性的,很难使用瀑布开发模型进行开发。
V模型
V模型是一种软件开发过程模型,它强调软件开发过程中测试和验证的重要性,由于其模型构图形似字母V,所以称为软件测试的V模型。这个模型将软件开发过程分为两个主要阶段:需求分析和设计阶段,以及实现和测试阶段。在V模型中,每个阶段的输出都与一个相应的测试阶段相对应,这种强调测试和验证的方法有助于确保软件的质量和可靠性。V模型大体可以划分为以下几个不同的阶段步骤:客户需求分析、软件需求分析、概要设计、详细设计、软件编码、单元测试、集成测试、系统测试、验收测试。
优点
1.V模型提供了明确的开发过程,使团队能够更好地掌握整个开发过程,并能够更好地管理和控制。
2.V模型强调测试和验证的重要性,确保软件质量和可靠性。通过测试和验证,团队可以更早地发现和解决问题,从而降低风险。
3.V模型非常注重前期规划,包括需求分析和设计阶段。这些阶段的输出都是测试阶段的输入,因此它们的质量和准确性对整个开发过程至关重要。
4.V模型强调可追溯性,每个开发阶段都应该与相应的测试阶段相对应,并能够追溯到需求和设计文档。这有助于团队更好地掌握整个开发过程,并能够更好地管理和控制。
5.V模型通过强调测试和验证、前期规划、风险管理、明确的开发和测试步骤以及可追溯性,提高软件质量和可靠性。
6.通过测试和验证,团队可以更早地发现和解决问题,从而减少重新开发和修复的成本。
缺点
1.V模型的开发过程比较刚性,不够灵活。如果项目需要进行变更,可能需要重新回到前期规划阶段,这会增加开发时间和成本。
2.对于大型和复杂的项目,V模型可能不够适用。这些项目可能需要更多的迭代和交互,以便更好地满足客户需求。
3.V模型需要大量的文档和工作量,包括需求文档、设计文档、测试计划和测试报告等。这些文档和工作量可能会增加开发时间和成本。
4.V模型中的测试阶段非常重要,需要测试人员具备良好的技能和经验。如果测试人员的技能和经验不足,可能会影响测试结果和软件质量。
5.V模型的开发过程比较刚性,不够适用于敏捷开发。敏捷开发强调迭代和交互,而V模型则需要在每个阶段完成一系列的工作和文档。
迭代模型
迭代模型又称为增量模型或演化模型,它将一个完整的软件拆分成不同的组件,然后逐个组件地开发测试,每完成一个组件就展现给客户,让客户确认这一部件功能和性能是否达到客户需求,最终确定无误,将组件集成到软件体系结构中。整个开发工作被组织为一系列短期、简单的小项目,称为一系列迭代,每一个迭代都需要经过需求分析→软件设计→编码→测试的过程,其开发过程如图1-3所示。
在迭代模型中,第一个迭代(即第一个组件)往往是软件基本需求的核心部分,第一个组件完成之后,经过客户审核评价形成下一个组件的开发计划,包括对核心产品的修改和新功能的发布,这样重复迭代步骤直到实现最终完善的产品。
迭代模型可以很好地适应客户需求变更,它逐个组件地交付产品,客户可以经常看到产品,如果某个组件没有满足客户需求,则只需要更改这一个组件,降低了软件开发的成本与风险。但是选代模型需要将开发完成的组件集成到软件体系结构中,这样会有集成失败的风险,因此要求软件必须有开放式的体系结构。此外,迭代模型逐个组件地开发修改,很容易退化为“边做边改”的开发形式,从而失去对软件开发过程的整体控制。
优点
1.第一个可交付版本的软件所需的成本与时间较小
2.能够适应客户的需求变更,当需求变化时,只需要修改某一个组件即可。
缺点
1.如果对用户需求的变更没有整体的规划,可能会变化为”边做边开发”的模式。
2.最终集成各个组件时,可能会出现集成失败的风险。
敏捷开发模型
在现代社会的开发中,由于业务会经常快速的变化,因此会导致在软件开发之前经常是无法得到详细完整的开发需求,没有完整的开发需求,传统的软件开发模型也就无法适用。敏捷开发模型的提出就是为了解决该问题。该模型以客户的需求为核心,采用迭代,循序渐进的方法进行开发。
软件项目在构建初期会被拆分为多个相互联系而又独立运行的子项目,然后迭代完成各个子项目。当客户有需求变更时,敏捷模型能够迅速地对某个子项目做出修改以满足客户的需求。在这个过程中,软件一直处于可使用状态。
优点
敏捷确实是项目进入实质开发迭代阶段,用户很快可以看到一个基线架构版的产品。敏捷注重市场快速反应能力,也即具体应对能力,客户前期满意度高。
缺点
敏捷注重人员的沟通,忽略文档的重要性,若项目人员流动大太,又给维护带来不少难度,特别项目存在新手比较多时,老员工比较累。需要项目中存在经验较强的人,要不大项目中容易遇到瓶颈问题。
软件质量概述
软件质量基本概念
软件质量是指软件产品满足用户需求(基本需求和隐式需求)、能够可靠运行并具备良好可维护性的特性。
软件质量模型
软件质量模型是一种评价软件质量的通用模型,包括3个层次:
1、质量特性
2、质量子特性
3、度量指标
软件质量模型所包含的6大特性具体含义如下。
- 功能性:在指定条件下,软件具备满足用户明确需求和隐式需求的能力。
- 可靠性:在指定条件下使用时,软件产品维持规定的性能级别的能力。
- 可使用性:在指定条件下,软件产品被使用、理解、学习的能力。
- 效率:在指定条件下,相对于所有资源的数量软件产品可提供适当性能的能力。
- 可维护性:指软件产品被修改的能力。修改包括修正、优化和功能规格变更的说明。
- 可移植性:指软件产品从一个环境迁移到另一个环境的能力。
软件测试简介
什么是软件测试
- (1973,Bill Hetzel)软件测试就是为了程序能够按预期设想运行而建立足够的信心。
- (1979 Glenford J.Myers)测试是为了发现错误而执行一个程序或者系统的过程。
- (1983,IEEE)使用人工或自动手段来运行或测定某个系统的过程,其目的在于检验它是否满足规定的需求或是弄清预期结果与实际结果之间的差异。
- (1983 Bill Hetzel)测试是以评价一个程序或者系统的特性或能力为目标的一种活动。
- (2014 IEEE)软件测试是动态验证程序针对有限的测试用例集是否可产生期望的结果。
软件测试的目的
最终目的:保证软件质量
具体目标:
- 保证软件或系统符合相关的法律法规、技术标准和应用需求,降低软件的产品风险及应用风险。
- 通过测试发现和排除软件中的缺陷,从而保证软件的质量。
软件测试分类
软件测试流程
如何开展软件的测试工作?
①需求评审 :确保各部门需求理解一致
②编写测试计划:测什么、谁来测、怎么测
③用例设计:验证项目是否符合需求的操作文档
④用例执行:项目模块开发完成开始执行用例文档实施测试
⑤缺陷管理:对缺陷进行管理的过程
⑥测试报告:实施测试结果文档