软件测试学习记录

第一章 软件测试概述【软件测试的基本概念】(包括软件测试的原则、分类和工作流程等基本知识)

软件、软件危机和软件工程

软件测试是软件工程中的重要部分,是确保软件质量的重要手段。

一、软件、软件危机和软件工程的基本概念

计算机系统分为硬件系统和软件系统两大部分。

  1. 计算机软件是计算机系统中与硬件相互依存的另一部分,包括程序数据其相关文档的完整集合。软件是计算机系统的逻辑部件。
  • 程序是指按特定的功能和性能要求而设计的能够执行的指令序列;
  • 数据是指程序能正常操纵、处理的信息及其数据结构;
  • 文档是指与程序设计开发、维护和使用有关的图文材料。
  1. 软件危机:落后的软件生产方式无法满足迅速增长的计算机软件需求,从而导致软件开发与维护过程中出现一系列严重问题的现象。是软件开发和维护中存在的具有共性的种种问题的汇总。
  • 软件危机表现在:
    • 1)软件生产不能满足日益增长的软件需求,软件生产率远低于硬件生产率和计算机应用的生产率,社会出现了软件供不应求的局面。
    • 2)软件生产率随软件规模与复杂性提高而下降,治理密集型行业的人力成本不断增加,导致软件成本在计算机系统成本中的构成比例急剧上升。
    • 3)软件开发的极度与成本失控。软件开发陷入成本居高不下、质量无保证、用户不满意、开发单位信誉降低的怪圈中。
    • 4)软件系统实现的功能与实际需求不符。软件开发人员对于用户需求缺乏深入的理解,往往急于编写程序,闭门造车,最后完成的软件与用户需求相距太远。
    • 5)软件难以维护,程序中的错误难以改正,要想使软件适应新的运行环境几乎不可能,软件在使用过程中不能增加用户需要的新功能。
    • 6)软件文档配置没有受到足够的重视。软件文档包括开发过程中各阶段的说明书、数据词典、程序清单、软件使用手册、维护手册、软件测试报告和测试用例等。这些软件文档的不规范、不健全是造成软件开发的进度、成本不可控制和软件的维护、管理困难的重要原因。
  • 软件危机产生原因:
    • 软件的固有特性
      • 软件的不可预见性是软件产品的固有特点之一。软件产品的最终价值是在软件运行过程中体现出来的。软件产品的故障隐蔽性强,可靠性难以度量,对原有故障的修改可能导致新的错误。
      • 软件产品的固有特点之二是软件的规模较大,并且逻辑较复杂,从软件开发管理的角度看,软件生产率常随软件规模和复杂性的增加而下降。
    • 软件专业人员自身的缺陷:
      • 软件产品是人的思维结果,软件生产水平最终在相当程度上取决于软件人员的教育、训练和经验的积累。
      • 对于大型软件往往需要许多人合作开发,甚至要求软件开发人员深入应用领域的问题研究,需要用户与软件人员之间以及软件开发人员之间相互通信,过程中发生理解差异从而导致后续错误的设计或实现,破除这些误解和错误往往需要付出巨大的代价。
      • 由于计算机技术与应用发展迅速,知识更新周期加快,软件开发人员经常处在变化之中,不仅需要适应硬件更新的变化,而且还要涉及日益扩大的应用领域问题研究,每项软件开发几乎都必须调整自身的知识结构以适应新的问题求解的需要。
  1. 软件工程正是从技术和管理两个方面研究更好地开发和维护计算机软件的一门科学,已解决软件危机。软件工程是应用计算机科学、数学以管理科学等原理开发软件的工程。通常来说,软件工程一套实现一个大型程序的原则方法,是将其他工程领域中行之有效的工程学知识运用到软件开发工作中来,即按工程化的原则和方法组织软件开发工作

二、软件工程的目标及其一般开发过程

  1. 软件工程的目标:
  • 狭义上来说,软件工程的目标是生产出满足预算、按期交付、用户满意的无缺陷的软件,进而当用户需求改变时,所生产的软件必须易于修改。
  • 广义上说,软件工程的目标就是提高软件的质量与生产率,最终实现软件的工业化生产。
  1. 软件工程强调使用生命周期方法学,从时间角度,对软件开发和维护的复杂问题进行分解,把软件生存的漫长周期依次划分为若干个阶段,每个阶段有相对独立地任务,最后逐步完成每个阶段的任务。
  2. 软件生命周期:一个软件产品从形成概念开始,经过开发、测试、使用和维护,直到最后退出使用的全过程。软件工程采用的生命周期方法,对软件产品的质量保证以及组织好软件开发工具具有重要意义。 一般软件生存周期包括问题的定义、软件开发、软件测试、软件使用与维护等几个阶段:
  • 问题的定义:可分为软件系统的可行性研究和需求分析两个阶段,基本任务是确定软件系统的工程需求。
    • 可行性研究的任务
      • 了解用户的要求及实现环境,从技术、经济和社会等几个方面研究并论证软件系统的可行性。
      • 参与软件系统开发的人员应在用户的配合下对用户的要求及系统的实现环境作详细的调查,并在调查研究的基础上撰写调查报告,然后根据调查报告及其他相关资料进行可行性论证
      • 可行性论证一般包括技术可行性、操作可行性和经济可行性3个部分。
      • 在可行性论证的基础上制定初步的项目开发计划,大致确定软件系统开发所用的时间、资金和人力。
    • 需求分析的任务
      • 确定所要开发软件的功能需求、性能需求和运行环境约束,编制软件需求规格说明书、软件系统的确认测试准则
      • 软件的功能需求必须给出软件必须完成的功能。软件的性能需求包括软件的适应性、安全性、可靠性、可维护性、错误处理等,软件系统在运行环境方面的约束是指所开发的软件系统必须满足的运行环境方面的要求。
      • 软件需求不仅是软件开发的依据,也是软件验收的标准。因此,确定软件需求是软件开发的关键和难点,确定软件需求通常需要开发人员与用户多次反复沟通、讨论才能确认,完成需求分析工作是一项十分艰巨的任务。
  • 软件开发
    • 软件开发是按照需求规格说明书的要求由抽象到具体、逐步完成软件开发的过程。软件开发一般由设计和实现等几个阶段组成,其中:
      • 设计可分为概要设计和详细设计,主要是根据软件需求规格说明书建立软件系统的结构、算法、数据结构和各程序模块之间的接口信息,规定设计约束,为编写源代码提供必要的说明。
      • 实现也成为编码,就是将软件设计的结果转换成计算机可运行的程序代码。在程序编码中,开发人员必须要制订统一、符合标准的编写规范,以保证程序的可读性和易维护性,提高程序的运行效率
  • 软件测试
    • 软件需经过严密的测试才能发现软件在整个设计过程中存在的问题并加以纠正,整个测试过程分为单元测试、集成测试、系统测试以及验收测试4个阶段。测试的方法主要是白盒测试和黑盒测试
    • 在测试过程中需要建立详细的测试计划并严格按照测试计划进行测试,以减少测试的随意性。大量统计表明,软件测试的工作量往往占软件开发总工作量的40%以上,有时软件测试的成本甚至可高达软件工程其他步骤成本总和的3~5倍。
  • 软件使用和维护
    • 软件的使用是指软件通过测试后,将软件安装在用户确定的运行环境中移交给用户使用。
    • 软件的维护是指对软件系统进行修改或对软件需求变化作出反映的过程。当发现软件中的潜伏错误,或用户对软件需求进行修改,或软件运行环境发生变化时,都需要对软件进行维护。软件维护的成功与否直接影像软件的应用效果和软件的生存周期。软件的可维护性与软件的设计密切相关,因此在软件开发过程中应该重视软件可维护性的支持。
  • 软件生命周期的最后一个阶段是终止对软件系统的支持,软件停止使用

三、软件过程模型

为了解决软件开发过程中的各种复杂风险因素带来的种种问题,软件开发人员经过多年的摸索,总结除了多种软件工程的实现方式——软件过程模型。如瀑布过程模型、螺旋过程模型、增量过程模型、快速原型过程模型、敏捷过程模型等,这些软件过程模型是软件开发的指导思想和全局性框架,它们的提出和发展反映了人们对软件过程的认识观,体现了人们对软件过程认识的提高和飞跃。软件开发所遵循的软件过程是保证高质量软件开发的一个至关重要的因素。

  1. 瀑布过程模型

瀑布过程模型反映了早期人们对软件工程的认识水平,是人们所熟悉的一种线性思维的体现。

  • 瀑布过程模型强调阶段的划分及其顺序性、各阶段工作及其文档的完备性,是一种严格线性的、按阶段顺序的、逐步细化的开发模式。如下图所示:
    图1 瀑布开发过程
  • 瀑布过程模型主要由顺序的活动(或者阶段)组成,其开发阶段包括计划、需求分析、设计、编码、测试和运行维护等,各个阶段的主要工作内容如下:
    • 计划阶段的工作主要是确定软件开发的总目标,给出软件的功能、性能、可靠性、接口等方面的设想;研究完成该项软件的可行性,探讨问题解决的方案;对可供开发使用的资源(如计算机硬、软件、人力等)、成本、可取得的效益和开发的进度作出估计;制定完成开发任务的实施计划。
    • 需求分析是指收集产品的需求,对开发的软件进行 详细的定义 ,由软件人员和用户共同讨论决定哪些需求是可以满足的,并且给予确切的描述;写出软件需求规格说明书等文档,提交管理机构审查。
    • 设计是软件过程的技术核心。在设计阶段应把已确定的各项需求,转换成相应的体系结构,在结构中每一组成部门都是功能明确的模块,每个模块都能体现相应的需求,这一步骤成为总体设计,对每个模块要完成的工作进行具体的描述,以便为程序编写打下基础。
    • 编码阶段的工作是编写各种层次的代码,包括高级可视化开发系统生成的代码和用第四代程序设计语言编写的代码等。
    • 软件测试主要是为了发现程序中的错误。
    • 运行维护主要是对软件进行修复和改动,使它能够持续发挥作用。
在实际软件开发过程中,并不是严格按照图1所示的各阶段顺序执行的,因此过程中的各部分之间都有某种程度的重叠。造成这种重叠的原因是上述的任一阶段都不可能在下一阶段开始之前完全结束。

软件开发人员很少像图1所示的那样使用淡出的瀑布过程模型,除非是很小的项目或开发的产品与软件开发人员以前做过的项目类似,这主要是因为绝大多数软件都是复杂的、非线性的

  1. 螺旋过程模型

螺旋过程模型需要经历多次需求分析、设计、实现、测试这组顺序活动。这样做的有多种原因,其中,最重要的原因是规避风险;另一个原因是在早期构造软件的局部版本时即交给客户以获得反馈;还有一个原因是为了避免像瀑布过程模型一样一次集成大量的代码。

螺旋过程模型的基本思路是依据前一个版本的结果构造新的版本,这个不断重复迭代的过程形成了一个螺旋上升的路径,如图2所示:
图2 螺旋开发过程

  • 螺旋过程模型的额外的有点是能够在每次迭代都收集到过程中产生的各种度量数据
例如:在第一次迭代时记录下小组进行设计和实现所耗费的时间,依此既可以改进后续设计和实现所耗费时间的估计方法,这对于没有任何历史数据的开发组织尤其具有价值。
  • 螺旋过程模型符合典型软件项目的发展特点,但是跟简单的瀑布过程模型相比,它需要投入更多的精力来更细致地管理其过程。

这主要是由于每次迭代完成之后都必须保持文档的一致性,特别是代码应该实现文档中描述的设计并且满足文档中记录的需求。此外,为了提高开发小组的生产效率,往往会在前一个迭代结束之前就开始一次新的迭代,这位协调文档的一致性增加了一定难度。

螺旋开发过程需要多少次迭代?这取决于具体的情况。

例如,由3人组成的开发小组、耗时4个月的项目大概需要2次或者3次迭代,而项目若采用5次迭代,则所需要的管理费用通常会超过新增迭代所创造的价值。
  1. 增量过程模型

迭代的速度加快,每次迭代只是在前一次的基础上增加少量功能的时候,这种迭代过程就是增量开发过程

增量过程模型是用一种几乎连续的过程小幅度地推进项目,如图3所示。增量过程模型在项目的后期尤其适用。

例如,当项目处于维护阶段,或者立项的产品与原先开发出来的产品结构极为相似。

图3 增量开发过程
4. 快速原型过程模型

在快速原型过程模型中,首先是快速进行系统分析,在设计人员和用户的紧密配合下,快速确定软件系统的基本要求,尽快实现一个可运行的、功能简单的原型系统,然后对原型系统逐步求精、不断扩充完善得到最终的软件系统。

所谓“原型系统”就是应用系统的模型,用户在开发者的指导下试用原型,在使用的过程中考核评价原型的特性分析其运行结果是否满足规格说明的要求,以及规格说明的描述是否满足用户的期望

  • 开发人员根据用户的反馈一件纠正过去交互中的误解和分析中的错误,增补新的要求,并针对因环境变化或用户的新设想而引起系统需求的变动提出全面的修改一件。
    大多数原型系统中不合适的部分可以修正,修正后就成为新模型的基础,开发者和用户在迭代过程中不断将原型系统完善,直到软件的性能达到用户需求为止,因而快速原型过程模型能帮助开发人员快速完成所需要的目标系统
  • 快速原型过程模型的主要优点在于它是一种支持用户的方法,它使用户系统生存周期的设计阶段起到积极的作用,并能减少系统开发的风险,特别是在大型项目的开发中,由于对项目的需求分析难以一次完成,应用快速原型过程模型效果更为明显。
  1. 敏捷过程模型
    敏捷过程模型是一种逐渐引起广泛关注的一种新型软件开发方法,由于其具有动态性且很容易适应环境

敏捷软件过程模型是一种迭代式增量软件开发过程敏捷开发方法是一种迭代式增量软件开发过程
敏捷开发方法是一种以人为核心、迭代、循序渐进的开发方法。在敏捷开发中,软件项目的构建被切分成多个子项目,各个子项目的成果都经过
测试*,具备集成和可运行的特征。换言之,就是一个大项目分为多个相互联系,但也可独立运行的小项目,并分别完成,在此过程中软件一直处于可使用状态

  • 敏捷软件开发是一个用来替代以文件驱动开发的瀑布开发模式。瀑布模型式是最典型的预见性方法,严格遵循预先计划的需求、分析、设计、编码、测试的步骤顺序进行。步骤成果作为衡量进度的方法。
例如,需求规格,设计文档,测试计划和代码审阅等。
瀑布式的主要问题是它的严格分级导致的自由度降低,项目早期即作出的分析导致对后期需求的变化难以调整,代价高昂。

瀑布式方法在需求不明并且在项目进行过程中可能变化的情况下基本是不可行的。

相对来说,敏捷方法则在几周或者几个月的时间内完成相对较小的功能,强调的是能尽早将尽量小的可用的功能交付使用,并在整个项目周期持续改善和增强。
  • 敏捷方法适用于小块工作,这些工作位于每次迭代以及迭代结尾发布的工作软件当中,敏捷方法的主要优势在于,它能完全适应用户环境,而且对产品进行持续迭代,它更注重交付能工作的软件,而不是实现需求规范中定义的需求。

以上5中模型只是众多软件过程模型中较为典型的,除此之外还有喷泉模型、统一软件开发过程模型等。
介绍软件过程模型的目的是为了突出软件工程中软件过程模型的重要地位,从某种意义上说,不了解软件过程模型,就不了解软件工程。

形成一套完整而成熟的软件开发过程不是一蹴而就的,它需要一个从无序到有序、从特殊到一般、从定性到定量、最后再从静态到动态的历程,或者说软件开发组织在形成成熟的软件过程之前必须经历一系列的探索阶段。

因此,有必要建立一个软件成熟度模型来对过程作出一个客观、公正的评价,以促进软件开发组织改进软件开发过程,这就是所谓的 软件能力成熟度模型 (CMM) 要做的事。

资料参考:
《软件测试(第2版)》佟伟光 主编 | 微信读书

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
软件测试接口测试学习软件测试中的一个重要方面。在软件测试中,接口测试被认为是企业应用最广、价值最高的测试实践之一。它旨在测试软件系统的各个组件之间的接口,以验证它们的功能和性能是否符合预期。 接口测试的学习可以从以下几个方面考虑: 1.了解接口测试的基本概念和原理:接口测试是通过模拟不同组件之间的交互来验证接口的正确性和稳定性。了解接口测试的基本概念和原理是学习接口测试的第一步。 2.学习测试用例的编写:测试用例是软件测试的核心和指导,设计和生成有效的测试用例是非常重要的。了解如何编写测试用例,包括考虑各种情况和边界条件,是学习接口测试的关键。 3.熟悉前后端交互测试:前后端交互测试是接口测试的一种常见形式。它涉及验证前端与后端之间的数据传输和交互是否正常,例如验证API接口的请求和响应是否符合规范。 4.掌握相关工具和技术:在学习接口测试的过程中,掌握一些相关的工具和技术是非常有帮助的。例如,使用Postman等工具进行接口测试,使用断言和日志记录等技术来验证接口的正确性和稳定性。 总之,软件测试接口测试学习需要掌握接口测试的基本概念和原理,学习测试用例的编写,熟悉前后端交互测试,以及掌握相关的工具和技术。通过不断学习和实践,可以提升接口测试的能力和水平。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [软件测试(功能、接口、性能、自动化)【吸薪大法】,等你来拿](https://blog.csdn.net/zjtdy/article/details/117078598)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *3* [软件测试系列:如何全面进行接口测试](https://blog.csdn.net/weixin_50271247/article/details/130691788)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值