软考 高级 架构师 第十 章软件工程3

1.系统测试

系统测试是为了发现错误而执行程序的过程,成功的测试是发现了至今尚未被发现的错误的测试。
测试原则:
1)应尽早并不断的进行测试
2)测试工作应避免由原开发软件的人或小组承担
3)在 设计测试方案时,不仅要确定输入数据,而且要根据系统功能确定预期的输出结果
输出结果:
1)既包含有效、合理的测试用例,也包含不合理、失效的用例
2)检验程序是否做了不该做的事,且是否做了不该做的事
3)严格按照测试计划进行
4)妥善保存测试计划和测试用例
5)测试用例可以重复使用或追加测试

1.1.静态测试和动态测试

静态测试:被测试的程序不在机器上运行,而采用人工检测和计算机辅助静态分析的手段对程序进行检测,包括对文档的静态测试和对代码的静态测试。对文档的静态测试主要以检查单的形式进行,而对的代码的静态测试,包括桌前检查、代码审查、代码走查的方式。

动态测试:被测程序在机器上运行
动态测试方法:
1)黑盒测试,功能性测试,不了解软件代码结构,根据功能设计用例,测试软件功能。
2)白盒测试,结构性测试,明确代码流程,根据代码逻辑设计用例,进行用例覆盖。
3)灰盒测试,黑盒+白盒

1.2.测试阶段

1)单元测试:模块测试,测试对象是可独立编辑或汇编的程序模块、软件构建、OO软件种的类,测试依据是软件详细设计说明书。
2)集成测试:目的是检查模块之间,以及模块和以集成的软件之间的接口关系,并验证已集成的软件是否符合设计要求。测试依据是软件概要设计文档。
3)确认测试:主要用于验证软件的功能、性能和其他特性是否与用户需求一致。根据用户的参与程度,通常包括以下类型:
a.内部确认测试:主要由软件开发组织内部按照SRS进行测试。
b.Alpha测试:用户在开发环境下进行测试。
c.Beta测试:用户实际环境下进行测试,通过该测试后,产品才能交付用户。
d.验收测试:针对SRS(软件需求规格说明书),在交付之前以用户为主进行的测试。其测试对象为完整的、集成的计算机系统。验收测试的目的是,在真实的用户工作环境下,检验软件系统是否满足开发技术合同或SRS。验收测试的结论是用户确定是否接收该软件的主要依据。除应满足一般测试的准入条件外,在进行验收测试之前,应确认被测软件已通过系统测试。
4)系统测试:测试对象是完整的、集成的计算机系统;测试的目的是在真实系统工作环境下,验证完成的软件配置项和系统正确连接,并满足系统/子系统设计文档和软件开发合规格要求。测试依据是用户需求或开发合同。主要内容包括功能测试、健壮性测试、性能测试、用户界面测试、安全性测试、安装与反安装测试等,其中最重要的工作是进行功能测试与性能测试。功能测试主要采用黑盒测试,性能测试主要指标有响应时间、吞吐量、并发用户数和资料员利用率等。
5)配置项测试:测试对象是软件配置项,测试目的是检验软件配置项SRS的一致性。测试依据是SRS,在此之前,应确认被测软件配置项已通过单元测试和集成测试。
6)回归测试:测试的目的是测试软件变更之后,变更的部分的正确性和对变更需求的符合性,以及软件原有的、正确的功能、性能和其他规定的要求的不损害性。

1.3.测试策略

1)自底向上:从最底层模块开始测试,需要编写测试驱动程序,而后开始逐一合并模块,最终完成整个系统的测试。优点是较早的验证了底层模块。
2)自顶向下:先测试整个系统,需要编写桩程序,而后逐步向下直到最后测试最底层模块。优点是较早的验证了系统的主要控制和判断点。
3)三明治:既有自底向上也有自顶向下的测试方法,二者都包括。兼有二者的优点,缺点是测试工作量大。

1.4.测试用例

1.4.1.黑盒测试用例

1)等价类划分:把所有数据按某种特性进行归类,而后在每类数据里选一个即可。等价类测试的用例设计原则:设计一个新的测试用例,使其尽可能多地覆盖尚未被覆盖的有效等价类,重复这一步,直到所有有效等价类都被覆盖位置。设计一个新的测试用例,使其仅覆盖一个尚未被覆盖的无效等价类,重复这一步,直到所有的无效等价类都被覆盖为止。
2)边界值划分:将每类的边界值作为测试用例,边界值的范围一般为范围两端值以及在此范围之外的与此范围间隔最小的两个值。如年龄范围 在0-150时,边界值由0,150,-1,151
3)错误推测:没有固定方法,凭经验而言,推测可能有问题的地方。
4)因果图:由一个结果来反推原因的方法,具体结果具体分析。

1.4.2.白盒测试用例

1)语句覆盖SC:逻辑代码中所有语句都要执行一遍覆盖级别最低,因为执行了所有的语句,不代表执行了所有的判断条件。
2)判定覆盖DC:逻辑代码中所有判断语句的条件的真假分支都要覆盖一次。
3)条件覆盖CC:针对每个判断条件内的每一个独立条件都要执行一遍真和假。
4)条件判定组合覆盖CDC:同时满足判定覆盖和条件覆盖。
5)路径覆盖:逻辑代码中的所有可行路径都覆盖了,,覆盖级别最高。

1.5.调试

找出错误的代码和原因
方法:蛮力法、回溯发、原因排除法(演绎法、归纳法、二分法)

1.6.软件度量

软件有两种属性:外部属性和内部属性。
外部属性:面向管理者和用户的属性,可直接测量,一般为性能指标。
内部属性:软件产品本身的属性,如可靠性等,只能间接测量。

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

2.系统运行维护

2.1.系统转换

遗留系统是指任何基本上不能进行修改和演化以满足新的变化了的业务需求的信息系统,它通常具有一下特点:
1)系统虽然完成企业中许多重要的业务管理工作,但仍不能完全满足需求。
2)系统性能上已经落后,采用的技术已经过时。
3)通常是大型软件系统,已经融入企业的的业务运作和决策管理机制中,维护工作十分困难。
4)没有使用现代化系统建设方法进行管理和开发,现在基本上已经没有文档,很难理解。

系统转换是指新系统开发完毕,投入运行,取代现有系统的过程。三种转换计划:
1)直接转换:现有系统被新系统直接取代了。节省成本,风险大。
2)并行转换:新系统和老系统并行工作了一段时间。风险小,耗费人力资源、时间资源,难以控制两个系统之间的数据转换。
3)分段转换:分期分批逐步转换。将大型系统分为多个子系统。耗时,需要协调好接口问题。

数据迁移与转换:将数据从就数据库迁移到新数据库。三种方式:
1)系统切换前通过工具迁移
2)系统切换前采用手工录入
3)系统切换后通过新系统生成

2.2.系统维护

可维护性:维护人员理解、改正、改动和改进这个软件的难易程度。评价指标:
1)易分析性:软件产品诊断软件中的缺陷或失效原因或识别待修改部分的能力。
2)易改变性:软件产品使指定修改可以被实现的能力,实现包括编码、设计和文档的更改。
3)稳定性:软件产品避免由于软件修改而改造成意外结果的能力。
4)易测试性:软件产品使已修改软件能被确认的能力。
5)维护性的依从性:软件产品遵循与维护性相关的指标或约定的能力。

系统维护包括:硬件维护、软件维护和数据维护,其中软件维护类型有:
1)正确性维护:发现了bug而进行的修改。
2)适应性维护:由于外部环境发生了改变,别动进行的对软件的修改和适应。
3)完善性维护:基于用户主动对软件提出更多的需求,修改软件,增加更多功能,使其比之前的软件功能更多、性能更高、更加完善。
4)预防性维护:对未来可能发生的bug进行预防性的修改。

2.3.净室软件工程CSE

定义:是一种应用数学与统计学理论以经济的方式生产高质量软件的工程技术。力图通过严格的工程化软件的过程达到开发中的零缺陷或接近零缺陷。净室方法不是先制作一个产品,再去消除缺陷,而是要求在规约和设计中消除错误,然后以净的方式制作,可以降低软件开发中的风险,以合理的成本开发出高质量的软件。

哲理:通过在第一次正确地书写代码增量,并在测试前验证它们的正确性,来避免对成本很高对的错误消除过程的依赖。它的过程模型是在代码增量积聚到系统的过程的同时,进行代码增量的统计质量验证。它甚至提倡开发者不需要进行单元测试,而是进行正确性验证和统计质量控制。它甚至提倡开发者不需要进行单元测试,而是进行正确行验证和统计质量控制。

理论基础:函数理论和抽样理论。

应用技术手段:
1)统计过程控制下的增量式开发
2)基于函数的规范和设计
3)正确性验证-CSE的核心
4)统计测试和软件认证

缺点:
1)太理论化,需要更多的数学知识。其正确性验证的步骤比较困难且比较耗时
2)CSE开发小组不进行传统的模块测试,不现实
3)本身也会带有传统软件工程的弊端。

2.4.基于构建的软件工程CBSE

2.4.1.CBSE

基于分布对象技术,强调通过可复用构件设计与构造软件系统的软件复用途径。CBSE体现了“购买而不是重新构造”的哲学,将软件开发的重点从程序编写转移到了基于已有构建的组装。用于CBSE的构件应具备一下特征:
1)可组装性,对于可组装的构件,所有外部交互必须通过公开定义的接口进行。同时它还必须对自身信息的外部访问。
2)可部署性,软件必须是自包含的,必须能作为一个独立实体在提供其构建模型实现的构建平台上运行。构件是二进制形式,无须在部署前编译。
3)文档化,构件必须是完全文档化的,用户根据文档来判断构件是否满足需求。
4)独立化,构件应该是独立的,应该可以在无其他特殊构件的情况下进行组装和部署,如确实需要其他构件提供的服务,则应显示声明。
5)标准化,构件标准化意味着在CBSE过程中使用的构件必须符合某种标准化的模型。

构件模型定义了构件实现、文档化以及开发的标准,其包含的模型要素为:
1)接口,构件通过构件接口来定义,构件模型规定应如何定义构件接口以及在接口定义中应该包含的要素,如操作名、参数以及异常等。
2)使用信息,为使构件的远程分布和访问,必须给构件一个特定的、全局唯一的名字或句柄。构件元数据是构件本身相关的数据,比如构件的接口和属性信息。
3)部署,构件模型包括一个规格说明,指出应该如何打包构件使其部署成一个独立的可执行实体。部署信息中包含有关包中内容的信息和它的二进制构成的信息。

构件模型提供了一组被构件使用的通用服务,包括以下两种:
1)平台服务,允许构件在分布式环境下通信和互操作
2)支持服务,这是很多构件需要的共性服务。例如,构件都需要的身份认证服务。中间件实现共性的构建服务,并提供这些服务的接口。

CBSE的六个主要活动:
系统需求概览、识别候选构件、根据发现的构件修改需求、体系结构设计、构件定制与适配、组装构件创建系统。

CBSE过程与传统软件开发过程的不同点:
1)CBSE早期需要完整的要求,以便尽可能多地识别出可复用的构件。
2)在过程早期阶段可利用的构件来细化和修改需求。如果可利用的构件不能满足用户需求,就应该考虑由复用构件支持的相关需求。
3)在系统体系结构设计完成后,会有一个进一步的对构件搜索及设计精化的活动。可能需要为某些构件寻找备用构件,或者修改构件以适应功能和架构的要求。
4)开发就是将已经找到的构件集成在一起的组装过程。

2.4.2.构件组装

是指构件相互直接集成或是用专门编写的胶水代码将它们整合在一起来创造一个系统或另一个构件的过程。常见的组装构件有以下三种方式:
1)顺序组装,通过按顺序调用已存在的构件,可以用两个已经存在的构件来创造一个新的构件。上一个构件的输出为下一个构件的输入。
2)层次组装,一个构件直接调用自另一个构件所提供的服务。被调用的构件为调用的构件提供所需的服务。两者之间接口匹配兼容。
3)叠加组装,这种情况发生在两个或两个以上构件放在一起来创建一个新构件的时候。这个新构建合并了元构建的功能,从而对外提供了新的接口。外部应用可以通过新接口来调用原有构件的接口,而原有构件不互相依赖,也不互相调用。这种组装类型适合于构件是程序单元或构件是服务的情况。

构件组装的三种不兼容问题(通过编写适配器解决):
1)参数不兼容,接口每一侧的操作有相同的名字,但是参数的类型和参数的个数不一样
2)操作不兼容,提供接口和请求接口的操作名不同
3)操作不完备,一个构件的提供接口是另一个构件请求接口的一个子集,或相反。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/501979.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

9.系统学习-卷积神经网络

9.系统学习-卷积神经网络 简介输入层卷积层感受野池化层全连接层代码实现 简介 卷积神经网络是一种用来处理局部和整体相关性的计算网络结构,被应用在图像识别、自然语言处理甚至是语音识别领域,因为图像数据具有显著的局部与整体关系,其在图…

ESP32-C3环境搭建

参考第二讲 ubuntu下的ESP-IDF开发环境搭建_哔哩哔哩_bilibili 宸芯IOT中的资料搭建 因为我买的板子是ESP32C3,所以没有完全按照教程去设置环境,但是也成功。 一、下载ubuntu系统以及esp-idf https://cn.ubuntu.com/download/server/step1 在以上链接…

解决npm报错:sill idealTree buildDeps

版权声明 本文原创作者:谷哥的小弟作者博客地址:http://blog.csdn.net/lfdfhl 报错信息 使用 npm 安装依赖时报错:sill idealTree buildDeps 解决方案 请按照以下步骤进行相关操作: 1、删除 C:\Users{账户}\ 文件夹中的 .npm…

【NX入门篇】

NX入门篇 一、UG NX 由来二、软件如何启动(UG NX 12.0)三、使用步骤四、常用命令 一、UG NX 由来 UG NX由来: 1969 年:UG 的开发始于美国麦道航空公司,基于 C 语言开发实现;1976 年:UG问世&am…

如何在 VSCode 中配置 C++ 开发环境:详细教程

如何在 VSCode 中配置 C 开发环境:详细教程 在软件开发的过程中,选择一个合适的开发环境是非常重要的。Visual Studio Code(VSCode)作为一款轻量级的代码编辑器,凭借其强大的扩展性和灵活性,受到许多开发者…

超越YOLO11!DEIM:先进的实时DETR目标检测

DEIM: DETR with Improved Matching for Fast Convergence arXiv: https://arxiv.org/abs/2412.04234 Project webpage:https://www.shihuahuang.cn/DEIM/ GitHub:https://github.com/ShihuaHuang95/DEIM 1 背景:DETR目标检测框架 目标检…

《GICv3_Software_Overview_Official_Release_B》学习笔记

1.不同版本的 GIC 架构及其主要功能如下图所示: 2.GICv2m(Generic Interrupt Controller Virtualization Model)是针对ARM架构的GIC(通用中断控制器)的一种扩展, GICv2m扩展为虚拟化环境中的中断管理提供了…

PADS Logic原理图中有很多页原理图,如何(怎样)删除其中一页或者多页

我们在进行PADS Logic进行原理图设计的时候,有时候可能遇到一次性设计了很多页的原理图,比如说十几页的原理图。那么我们在进行PADS Layout的时候,可能将这些原理图绘制两块板或者多块PCB板,那么这时候我们需要将其中的一张原理图…

网络安全的学习与实践经验(附资料合集)

学习资源 在线学习平台: Hack This Site:提供从初学者到高级难度的挑战任务,适合练习各种网络安全技术。XCTF_OJ:由XCTF组委会开发的免费在线网络安全网站,提供丰富的培训材料和资源。SecurityTube:提供丰…

问题清除指南|关于num_classes与 BCELoss、BCEWithLogitsLoss 和 CrossEntropyLoss 的关系

前言:关于「 num_classes 1 」引发的探究。 2024年尾声,学弟问到一个问题:在研究工作 CNNDetection 的github开源代码 networks/trainer.py 文件的 line 27 self.model resnet50(num_classes1) 中,变量 num_classes 的值为1&…

CSS——1.优缺点

<!DOCTYPE html> <html><head><meta charset"UTF-8"><title></title><link rel"stylesheet" type"text/css" href"1-02.css"/></head><body><!--css&#xff1a;层叠样式表…

ETCD渗透利用指南

目录 未指定使用put操作报错 未指定操作版本使用get报错 首先etcd分为两个版本v2和v3&#xff0c;不同的API结果无论是访问URL还是使用etcdctl进行通信&#xff0c;都会导致问题&#xff0c;例如使用etcdctl和v3进行通信&#xff0c;如果没有实名ETCDCTL_API3指定API版本会直接…

开源数据集成平台白皮书重磅发布《Apache SeaTunnel 2024用户案例合集》!

2025年新年临近&#xff0c;Apache SeaTunnel 社区用户案例精选&#x1f4d8;也跟大家见面啦&#xff01;在过去的时间里&#xff0c;SeaTunnel 社区持续成长&#xff0c;吸引了众多开发者的关注与支持。 为了致谢一路同行的伙伴&#xff0c;也为了激励更多人加入技术共创&…

【RTD MCAL 篇3】 K312 MCU时钟系统配置

【RTD MCAL 篇3】 K312 MCU时钟系统配置 一&#xff0c;文档简介二&#xff0c; 时钟系统理论与配置2.1 K312 时钟系统2.1.1 PLL2.1.2 MUX_0系统2.1.3 MUX_6 时钟输出2.1.4 option B推荐方案 2.2 EB 配置2.2.1 General 配置2.2.2 McuClockSettingConfig配置2.2.2.1 McuFIRC配置…

vite-plugin-imagemin安装问题

vite-plugin-imagemin 是一款图片资源压缩插件,能够在打包的时候显著的降低图片资源占用。不过,在安装过程中我们遇到了如下的问题。 对于上面的问题,有以下几种常见的解决方案: 1,使用 yarn 在 package.json 内配置(推荐) 打开 package.json 配置文件,然后添加如下脚本…

c-动态内存管理 (动态内存管理比较深入的分析和理解博客总结)

本节博客主要是堆C语言动态内存管理进行一定深度的谈论, 主要谈论主题请见目录~ 目录 1. 复习 与 铺垫(动态内存管理基本知识)1.1 什么是动态内存管理(基本代码)?1.2 为什么要有动态内存管理?1.3 什么是野指针? 2. C程序地址空间分布2.1 两者的空间是如上图所示的吗? 我们验…

【JVM】总结篇-运行时内存篇

文章目录 JVM内存模型&#xff08;内存结构&#xff09;程序计数器 pc虚拟机栈本地方法栈 native堆堆空间堆中一些JVM参数堆中垃圾回收过程MinorGC MajorGC FullGC年轻代GC(Minor GC)触发机制&#xff1a;老年代GC&#xff08;Major GC/Full GC&#xff09;触发机制&#xff1a…

Tableau数据可视化与仪表盘搭建-安装教程

下载 tableau.com/zh-cn/support/releases 滚动到最下方的下载 在下载的同时 我们点击登录&#xff0c;去注册一个tableau的账号 下面点击我们下载好的tableau安装程序 不要自定义安装&#xff0c;会有路径问题 点击试用14天 点击激活 激活学生 tableau.com/zh-cn/academic…

GitHub的简单操作

引言 今天开始就要开始做项目了&#xff0c;上午是要把git搭好。搭的过程中遇到好多好多的问题。下面就说一下git的简单操作流程。我们是使用的GitHub,下面也就以这个为例了 一、GitHub账号的登录注册 https://github.com/ 通过这个网址可以来到GitHub首页 点击中间绿色的S…

【2025最新计算机毕业设计】基于Spring Boot+Vue影院购票系统(高质量源码,提供文档,免费部署到本地)

作者简介&#xff1a;✌CSDN新星计划导师、Java领域优质创作者、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和学生毕业项目实战,高校老师/讲师/同行前辈交流。✌ 主要内容&#xff1a;&#x1f31f;Java项目、Python项目、前端项目、PHP、ASP.NET、人工智能…