从开发到部署:软件实现、测试与交付全流程核心技术解析

目录

一、软件实现概述

[1.1 程序设计方法](#1.1 程序设计方法)

[1.2 程序语言的选择](#1.2 程序语言的选择)

[1.3 编码规范、代码生成、代码重用](#1.3 编码规范、代码生成、代码重用)

二、软件测试概述

[2.1 软件测试的概念、基本问题和对象及目的](#2.1 软件测试的概念、基本问题和对象及目的)

[2.2 软件测试的原则](#2.2 软件测试的原则)

三、软件测试方法

[3.1 按照被测程序是否可见分类](#3.1 按照被测程序是否可见分类)

软件度量

[3.3 按照是否需要执行被测程序分类](#3.3 按照是否需要执行被测程序分类)

[3.3 自动化测试](#3.3 自动化测试)

四、软件测试类型

[4.1 按测试对象划分](#4.1 按测试对象划分)

[4.2 按测试阶段划分](#4.2 按测试阶段划分)

[4.3 按被测软件划分](#4.3 按被测软件划分)

[4.4 其他分类](#4.4 其他分类)

五、软件测试的组织

[5.1 测试过程](#5.1 测试过程)

[5.2 测试管理](#5.2 测试管理)

六、软件部署

相关推荐


一、软件实现概述

在信息系统建设中,软件实现的主要任务是进行程序设计,就是把软件设计结果翻译成用某种程序设计语言书写的程序。

1.1 程序设计方法

程序设计方法是软件工程方法学的主要内容之一,主要有结构化程序设计、面向对象程序设计和可视化程序设计。

(1)结构化程序设计采用自顶向下、逐步求精的设计方法和单入口、单出口的控制结构。在设计一个模块的实现算法时,先考虑整体后考虑局部,先抽象后具体,通过逐步细化,最后得到详细的实现算法。

  • 经典的结构化方法:顺序结构、选择结构、DO-WHILE型循环结构。
  • 扩展的结构化方法:经典的3个再加上多分支结构、DO-UNTIL型循环结构。
  • 修正的结构化方法:扩展的5个再加上用LEAVE(或BREAK)结构。

(2)面向对象程序设计(OOP)中,问题域中有哪些值得注意的事物,程序中就有哪些对象;问题域中的事务之间是什么关系,程序中的对象之间就具有什么关系。OOP可以显著提高软件的可靠性、可维护性和可复用性。

(3)可视化程序设计:程序员可以利用程序设计工具所提供的各种控件,像模拟木一样地构造应用程序的各种界面。

1.2 程序语言的选择

程序语言的选择:有理想的模块化机制,以及可读性的控制结构和数据结构;使编译程序能够尽可能多地发现程序中的错误;有良好的独立编译机制。

程序设计风格:

  • 与可理解性相关的良好程序设计风格包括有意义的标识符、详细的注解和程序的视觉组织、清晰规范的数据说明和简单明了的语句构造,以及有效、合理、交互化与可视化的/0设计等。
  • 与可复用性相关的良好程序设计风格包括提高功能的内聚、减少功能的规模、保持功能的一致性、将接口与实现分开、尽量不使用全局变量和利用继承机制等。
  • 与可扩展性相关的良好程序设计风格包括封装实现策略、利用多态性机制、避免使用多分支语句和精心设计公有服务等。
  • 与健壮性相关的良好程序设计风格包括预防用户的错误操作、检查参数的合法性、不要预先确定限制条件和先测试后优化等。

1.3 编码规范、代码生成、代码重用

好的编码规范可以减少软件维护成本、改善软件的可读性、提高团队开发合作效率、让开发人员养成好的编码习惯。

编码规范一般会从命名规范、注释原则、编程风格规则和版本管理规则这四个方面来制定对应的要求。

代码生成的实现步骤:

  1. 准备模板;
  2. 准备数据;
  3. 定义合成机制;
  4. 遍历所有数据文件并加载模板文件;
  5. 模板+数据生成的代码文件。

软件重用可以分为三个层次,代码重用、设计结果重用和分析结果重用。其中,代码重用是对现有(已经写好的)代码进行重用,这些代码来自外部资源或过往项目,并用之开发新软件。

常用的实现代码重用的方法:使用函数、对象、模块、类、利用算法。

二、软件测试概述

2.1 软件测试的概念、基本问题和对象及目的

IEEE对软件测试的定义是:使用人工或自动的手段来运行或测量软件系统的过程,目的是检验软件系统是否满足规定的需求,并找出与预期结果之间的差异。

软件测试的基本问题是验证功能的实现和可用性,检查程序的错误,最终目的是提高用户体验,以较少的人力、物力和时间找出软件中潜在的各种错误和缺陷,通过修正各种错误和缺陷提高软件质量,回避软件发布后由于潜在的软件缺陷和错误造成的隐患所带来的商业风险。

软件测试的对象包括:源程序/目标代码;各开发阶段的文档(需求规格说明、概要设计说明、详细设计说明及其他相关文档)配置数据。

软件测试的目的包括:

  • (1) 从用户角度看目的:通过软件测试发现隐藏的错误和缺陷,考虑是否可以接受该产品。
  • (2) 从开发者角度看目的:表明软件产品不存在错误,验证软件实现了所有用户的要求。
  • (3) 从测试人员角度看目的:发现错误,预测错误,提供软件可靠性错误,对软件做出评价。

2.2 软件测试的原则

软件测试的原则包括以下几个方面:

  • (1)测试用例的一个必要部分是预期输出和结果的定义。
  • (2)程序员应该避免测试他们自己的程序。
  • (3)编写软件的组织不应当测试自己编写的软件。
  • (4)应当具有足够的耐心及细心检查每一个测试结果。
  • (5)测试用例不仅应基于有效和预期的输入,而且还应基于通常不会执行的无效和意外输入。
  • (6)应避免重新设计测试用例。
  • (7)计划测试工作不应默认假定不会发现错误,这是使用了不正确的软件测试定义的一个迹象。
  • (8)测试不要穷举。
  • (9)软件测试要尽早执行。
  • (10)软件测试应追溯到需求。

三、软件测试方法

3.1 按照被测程序是否可见分类

按被测程序是否可见,将测试方法分为黑盒测试、白盒测试、灰盒测试。

(1) 黑盒测试:功能性测试,不了解软件代码结构,从用户角度出发,依据需求文档,着眼于程序外部结构,不考虑内部逻辑结构,主要针对软件界面和软件功能进行测试。为了发现以下错误:

  • 是否有功能错误,是否有功能遗漏。
  • 是否能够正确地接收输入数据并产生正确的输出结果。
  • 是否有数据结构错误或外部信息访问错误。
  • 是否有程序初始化和终止方面的错误。
  • 黑盒测试用例设计方法包括等价类划分法、边界值分析法、错误推测法、因果图法、判定表驱动法、正交试验设计法、功能图法和场景法等。

(2) 白盒测试:结构性测试,明确代码流程,根据代码逻辑设计用例,进行用例覆盖。测试方法有代码检查法、静态结构分析法、静态质量度量法、逻辑覆盖法、基本路径测试法、域测试、符号测试、路径覆盖和程序变异。

白盒测试的覆盖标准有逻辑覆盖、循环覆盖和基本路径测试。其中,逻辑覆盖包括:

  • (1)语句覆盖:每条语句至少执行一次。
  • (2)判定覆盖:每个判定的每个分支至少执行一次。
  • (3)条件覆盖:每个判定的每个条件应取到各种可能的值。
  • (4)判定/条件覆盖:同时满足判定覆盖条件覆盖。
  • (5)条件组合覆盖:每个判定中各条件的每一种组合至少出现一次。
  • (6)修改条件判断覆盖:每一个判断的所有可能结果都出现过,每一个判断中所有条件的所有可能结果都出现过,每一个进入点及结束点都执行过,判断中每一个条件都可以独立影响判断的结果。

白盒测试需要遵循的原则如下:

  1. 一个模块中的所有独立路径至少被测试一次。
  2. 所有逻辑值均需测试true和false两种情况。
  3. 检查程序的内部数据结构,保证其结构的有效性。
  4. 在取值的上、下边界及可操作范围内运行所有循环。

白盒测试"三步法"具体如下:

  • 第1步,根据代码的功能,人工设计测试用例进行基本功能测试。
  • 第2步,统计白盒覆盖率,为未覆盖的白盒单位设计测试用例,实现完整的白盒覆盖,比较理想的覆盖率是实现100%的语句、条件、分支、路径覆盖。
  • 第3步,自动生成大量的测试用例,捕捉"程序员未处理某些特殊输入"形成的错误。

(3)灰盒测试是介于白盒测试与黑盒测试之间的一种测试,灰盒测试多用于集成测试阶段,不仅关注输出、输入的正确性,同时也关注程序内部的情况。灰盒测试不像白盒那样详细、完整,但又比黑盒测试更关注程序的内部逻辑,常常是通过一些表征性的现象、事件、标志来判断内部的运行状态。

软件度量

McCabe度量法:又称为环路复杂度,假设有向图中有向边数为m,节点数为n则此有向图的环路复杂度为m-n+2。

环路复杂度计算公式有三种:

    1. m-n+2,10条边,8个节点 10-8+2 = 4 。
    1. 判定节点+1(推荐),1,3,6=3个节点,3+1 = 4 。
  • 3.封闭区域+1,也是三个封闭区域,3+1= 4 。

3.3 按照是否需要执行被测程序分类

按被测程序是否执行,将测试方法分为静态测试和动态测试。

(1)静态测试是指不运行被测程序本身,仅通过分析或检查源程序的语法、结构、过程、接口等来检查程序的正确性。通过对需求规格说明书、软件设计说明书、源程序做结构分析、流程图分析、符号执行来发现错误。

静态测试包括代码检查、静态结构分析、代码质量度量等。它可以由人工进行,充分发挥人的逻辑思维优势,也可以借助软件工具自动进行。代码检查包括代码走查、桌面检查、代码审查等。

  • 桌面检查:程序员检查自己编写的程序,在程序编译后,单元测试前。
  • 代码审查:由于个程序员和测试人员组成评审小组,通过召开程序评审会来进行审查。
  • 代码走查:也是采用开会来对代码进行审查,但并非简单的检查代码,而是由测试人员提供测试用例,让程序员扮演计算机的角色,手动运行测试用例,检查代码逻辑。

在实际使用中,代码检查比动态测试更有效率,能快速找到缺陷,发现30%-70%的逻辑设计和编码缺陷。

(2)动态测试方法是指通过运行被测程序,检查运行结果与预期结果的差异,并分析运行效率、正确性和健壮性等性能。这种方法由三部分组成:构造测试用例、执行程序、分析程序的输出结果。

3.3 自动化测试

自动化测试指软件测试的自动化,在预设状态下运行应用程序或者系统,预设条件包括正常和异常,最后评估运行结果。常见的自动化测试包括单元自动化测试、接口自动化测试、UI自动化测试等。

四、软件测试类型

4.1 按测试对象划分

1、功能测试根据产品特性、操作描述和用户场景来测试产品的特征和可操作行为,以确定其满足设计需求。又称为数据驱动测试,只需要考虑要测试的各种功能,不需要考虑整个软件的内部结构和代码。

2、性能测试是指测试在不同时间下软件响应的时间,检查系统是否满足需求规格说明书中规定的性能。又包括负载测试、压力测试、并发测试、容量测试、可靠性测试等。

  • (1)负载测试:是在系统性能指标已经有一项或几项达到了瓶颈的情况下,让它继续运行一段时间,测试系统运行过程中各项性能指标。这是一种在已经达到了最大负载(压力)时进行的测试。
  • (2)压力测试:给被测系统不断地加压(负载),测试系统的各项性能指标,直到系统的某些性能指标达到了瓶颈为止,比如CPU的使用率达到100%。
  • (3)并发测试:是一个负载测试和压力测试结合的过程,即逐渐增加负载,直到系统的瓶颈或者不能接受的性能点,通过综合分析交易执行指标和资源监控指标来确定系统并发性能的过程。
  • (4)容量测试:通过测试,预先分析出反映软件系统应用特征的某项指标的极限值(如最大并发用户数、数据库记录数等),系统在其极限值状态下没有出现任何软件故障或还能保持主要功能正常运行。
  • (5)可靠性测试:是指为了满足软件的可靠性要求而进行的一系列设计、分析、测试等工作。

3、安全测试是指有关验证应用程序的安全等级和识别潜在安全性缺陷的过程,主要是测试应用程序层的安全,包括以下两个层面。

  • (1)应用程序本身的安全性。主要是由软件漏洞导致的,这些漏洞可以是设计上的缺陷或是编程上的问题,甚至是企业开发人员预留的后门。
  • (2)应用程序的数据安全。包括数据存储安全和数据传输安全两个方面。

4、兼容性测试。主要是测试软件之间能否很好地运作,会不会相互影响,软件和硬件之间能否协调发挥出很好的效率来工作,会不会相互影响导致系统崩溃。

5、界面测试。主要测试用户界面的功能模块的布局是否合理、整体风格是否一致、各个控件的放置位置是否符合客户使用习惯等。

6、易用性测试。是交互的适应性、功能性和有效性的集中体现,又叫用户体验测试。

7、稳定性测试。是通过长时间运行软件来测试软件是否会出现问题。

4.2 按测试阶段划分

1、单元测试是指对软件中的最小可测试单元进行检查和验证。单元就是人为规定的最小的被测功能模块。单元测试是在软件开发过程中要进行的最低级别的测试活动。以白盒技术为主,黑盒技术为辅。一般由开发人员本身完成,并在开发组长的监督下进行。

  • 测试依据:代码、注释和详细文档。
  • 测试方法:白盒测试。
  • 测试内容:模块接口测试、局部数据测试、路径测试、错误处理测试、边界测试。

2、集成测试是指将软件集成起来后进行测试。又叫子系统测试、组装测试、部件测试等。主要是针对软件高层设计进行测试,一般来说是以模块和子系统为单位进行测试。包含的层次:

  • (1)模块内的集成,主要是测试模块内各个接口间的交互集成关系。
  • (2)子系统内的集成,测试子系统内各个模块间的交互关系。
  • (3)系统集成,测试系统内各个子系统和模块间的集成关系。

集成测试的相关规定如下:

  • 测试依据:单元测试的文档和概要设计文档。
  • 测试方法:黑盒测试、白盒测试以及灰盒测试。
  • 测试内容:模块之间数据传输、模块之间功能冲突、模块组装功能的正确性、全局数据结构、单模块缺陷对系统的影响。

3、系统测试是对整个系统的测试,将硬件、软件、操作人员看作一个整体,检验它是否有不符合系统说明书的地方。其目的是验证最终软件系统是否满足用户规定的需求。包括恢复测试、安全测试、压力测试等。

  • (1)恢复测试:主要关注导致软件运行失败的各种条件,并验证其恢复过程能否正确执行。
  • (2)安全测试:用来验证系统内部的保护机制,以防止非法侵入。
  • (3)压力测试:是指在正常资源下使用异常的访问量、频率或数据量来执行系统。

系统测试方法包括回归测试和冒烟测试。

系统测试的相关规定如下:

  • 测试依据:需求规格说明文档。
  • 测试方法:黑盒测试。
  • 测试内容:功能、界面、可靠性、易用性、性能、兼容性、安全性等。
  • 测试策略:性能测试、负载测试、强度测试、易用性测试、安全测试、配置测试、安装测试、文档测试、故障恢复测试、用户界面测试、恢复测试、分布测试、可用性测试。

4、验收测试是部署软件之前的最后一个测试操作,是技术测试的最后一个阶段,也称为交付测试。目的是确保软件准备就绪,并且可以让最终用户将其用于执行软件的既定功能和任务。

实施验收测试的常用策略有三种:

  • (1) 正式验收测试:通常是系统测试的延续。选择的测试用例应该是系统测试中所执行测试用例的子集。
  • (2) 非正式验收:执行测试过程的限定不像正式验收测试中那样严格。在此测试中,确定并记录要研究的功能和业务任务,但没有可以遵循的特定测试用例。测试内容由各测试员决定,更为主观。
  • (3) Beta测试:是软件的多个用户在实际使用环境下进行的测试。确保软件准备就绪,按照项目合同、任务书、双方约定的验收依据文档,向软件购买者展示该软件系统满足原始需求。

验收测试的相关规定如下:

  • 测试依据:用户需求、验收标准。
  • 测试方法:黑盒测试。
  • 测试内容:同系统测试(功能、各类文档等)。

4.3 按被测软件划分

  • 1.App测试。是指对移动应用进行的测试,包括对移动应用的业务、兼容性、健壮性等一系列需求的验证。主要测试内容包括:逻辑测试、功能/bug测试、界面测试、兼容性测试、漏洞检查、压力测试、中断测试、弱网测试。
  • 2.Web测试。是针对Web应用的一类测试。由于Web具有分布、异构、并发和平台无关的特性,因而它的测试要求由通信程序复杂得多。
  • 3.物联网测试。是一种检查物联网设备的测试。大致围绕安全、分析、设备、网络、处理器、操作系统、平台和标准进行。
  • 4.车联网测试。是以车辆为主体,依靠通信网络互连实现车与车(V2V)、车与人(V2P)、车与网(V2N)、车与基础设施(V2D)的互联互通、信息共享,进而达到保障交通安全、提高驾驶体验、拓展智能服务等目标。
  • 5.大数据测试。是指对采用大数据技术的系统或应用的测试。可以分为两个维度,一个维度是数据测试,另一个维度是大数据系统测试和大数据应用产品测试。主要包括功能、基准、安全和可靠性测试。功能测试主要是对数据的采集和传输、数据的存储和管理、数据计算、数据的查询和分析,以及数据的可视化等方面的测试。基准测试主要用于对比和评估大数据框架组件的性能指标等。
  • 6.AI测试。是对基于AI的应用系统的测试。
  • 7.小程序测试。与App测试的区别包括:
    • ①获取渠道不同,小程序测试一般可以直接从微信端打开,而App测试需要下载安装;
    • ②测试时间长短不一样,小程序测试的开发周期和平台审核周期都比较短,而App测试内容较多,需要的测试时间更长。

4.4 其他分类

1.回归测试。是指修改了旧代码后重新进行测试,以确认修改没有引入新的错误导致其他代码产生错误。自动回归测试将大幅降低系统测试、维护升级等阶段的成本。

选择回归测试策略应该兼顾效率和有效性两个方面。常用的回归测试策略包括以下几种。

  • (1)再测试全部用例。风险最低,成本最高。
  • (2)基于风险选择测试。运行最关键、最可疑的测试。
  • (3)基于操作前选择测试。针对最重要或最频繁使用功能的测试用例。
  • (4)再测试修改的部分。

2.冒烟测试。这一术语源自硬件行业,它是对一个硬件或硬件组件进行更改或修复后,直接给设备加电,如果没有冒烟,则该组件就通过了测试。在软件中,冒烟测试这一术语描述的是在将代码更改嵌入产品的原材之前对这些更改进行验证的过程。冒烟测试设计用于确认代码中的更改会按预期运行,且不会破坏整个版本的稳定性。冒烟测试在软件研发的不同阶段有所不同,大体可以分为三类:

  • (1) 形成集成测试版本以前:验证各个单元能够成功执行,并保证测试版本能够顺利集成。
  • (2) 形成集成测试版本:以保证新的或者更改过的代码不被坏集成版本的完成性和稳定性。
  • (3) 后期预测试验的修正:针对每个缺陷所做的缺陷修正都要先在干净的链接环境中进行冒烟测试,测试通过后才能更新相关软件版本。

五、软件测试的组织

5.1 测试过程

软件测试过程主要包括几个阶段:项目需求分析阶段、制订测试计划阶段、设计测试文档阶段、搭建测试环境阶段、执行测试阶段、缺陷管理。

5.2 测试管理

1、 软件测试配置管理的主要目标是在设定的条件限制下,尽可能发现和找出软件缺陷。测试配置管理是软件配置管理的子集,作用于测试的各个阶段。其管理对象包括软件测试计划、测试方案(用例)、测试版本、测试工具及环境、测试结果等。

2、软件测试的过程管理并不仅限于测试阶段,所有的测试都是基于需求的,在需求分析阶段,测试团队要依据需求文档提取测试点。测试的过程管理的基本内容如下:

  • (1)测试项目启动阶段:组建项目组成员,参加相关会议。
  • (2)测试计划阶段:确定测试范围、测试策略和方法,对风险、日程表、资源等进行分析和估计。
  • (3)测试设计阶段:制定测试的技术方案,设计测试用例,选择测试工具,编写测试脚本等。
  • (4)测试执行阶段:搭建相关的测试环境,准备测试数据,执行测试用例,对发现的软件缺陷进行报告、分析、跟踪等。
  • (5)测试结果的审查和分析阶段:对测试结果进行整体或综合的分析,以确定软件产品质量的当前状态,为产品的改进或者提供数据和依据。

3、缺陷管理:当测试人员发现软件中存在的缺陷之后,需要对这些缺陷进行统一管理,包括:

  • (1)确定缺陷优先级。
  • (2)及时同步缺陷状态。

4、风险管理:在软件的测试活动过程中,通过一系列风险控制活动对不确定因素进行及时识别、有效评估、积极应对,以保证软件测试活动的正常进行,从而达到价值交付。主要内容:风险识别、风险评估、风险应对、风险上报、风险规避、风险转移、风险减轻、风险接受。

六、软件部署

软件部署环节是指将软件项目本身,包括配置文件、用户手册、帮助文档等进行收集、打包、安装、配置、发布的过程。软件部署工作的目标具体如下:

  • (1)保障软件系统的正常运行和功能实现。
  • (2)简化部署的操作过程,提高执行效率。
  • (3)必须满足软件用户在功能和非功能属性方面的个性化需求。
  • (4)最重要的是要支持软件运行,满足用户需求,使得软件系统能够被直接使用。

部署步骤:环境准备、软件安装、数据库和文件配置、测试和验证。

相关推荐

系统设计方法论全解:原则、模型与用户体验核心要义https://shuaici.blog.csdn.net/article/details/156654826软件架构设计的软件架构概述、软件架构建模、软件架构风格https://shuaici.blog.csdn.net/article/details/156272113

相关推荐
阿容12345614 小时前
01 功能测试(移动电源 - 01)
功能测试·智能硬件
废弃的小码农14 小时前
功能测试--Day02--Web项目测试
功能测试·测试工具
llilian_161 天前
相位差测量仪 高精度相位计相位差测量仪的应用 相位计
大数据·人工智能·功能测试·单片机
闲人编程1 天前
文件上传与云存储集成:构建可扩展、安全的文件管理系统
安全·测试用例·云存储·扩展·分片·fs·codecapsule
qq 13740186112 天前
GB/T 4857.13:守护空运与高海拔运输的包装安全gbt4857.13
功能测试·可用性测试·安全性测试
qq 13740186112 天前
GB/T4857.10标准:守护物流运输安全gbt4857.10振动体检
功能测试·可用性测试·安全性测试
汽车仪器仪表相关领域2 天前
AI赋能智能检测,引领灯光检测新高度——NHD-6109智能全自动远近光检测仪项目实战分享
大数据·人工智能·功能测试·机器学习·汽车·可用性测试·安全性测试
测试19982 天前
Web自动化测试入门
自动化测试·软件测试·python·功能测试·selenium·测试工具·测试用例
安全渗透Hacker2 天前
参数未校验导致的DOS(服务拒绝)问题典型场景
java·安全·web安全·网络安全·安全性测试