【中项】系统集成项目管理工程师-第5章 软件工程-5.4软件实现

前言:系统集成项目管理工程师专业,现分享一些教材知识点。觉得文章还不错的喜欢点赞收藏的同时帮忙点点关注。 

       软考同样是国家人社部和工信部组织的国家级考试,全称为“全国计算机与软件专业技术资格(水平)考试”,目前涵盖了计算机软件、计算机网络、计算机应用技术、信息系统、信息服务5大领域,总共27个科目,也是分为初、中、高三个级别。

       通信专业主要需要关注“计算机网络”这个专业类别,可以考的科目有初级资格的“网络管理员”、中级的“网络工程师”。

       还有5个高级资格专业,分别是“信息系统项目管理师“”系统分析师“”系统架构设计师“”网络规划设计师“”系统规划与管理师“。

       软考高级证书在通信行业比较吃香,主要原因有两个: 通信行业与计算机软件是相近专业,评职称满足相近专业的要求; 通信高级不能以考代评,但软考高级可以,很多考生通过考软考高级来评高级职称。
————————————————

                       

5.4软件实现

       软件设计完成后,进入软件开发实现过程,在此过程中,我们需要重点关注软件配置管理、软 件编码、软件测试、部署交付以及软件过程能力成熟度建设等。

5.4.1软件配置管理

       软件配置管理(Software Configuration Management SCM)是一种标识、组织和控制修改的技 术。软件配置管理应用于整个软件工程过程。在软件建立时变更是不可避免的,而变更加剧了项目 中软件开发者之间的混乱。SCM活动的目标就是标识变更、控制变更、确保变更正确实现,并向其他有关人员报告变更。从某种角度讲,SCM是一种标识、组织和控制修改的技术, 目的是使错 误降为最小,并最有效地提高生产效率。

1.版本控制Version Control

       版本控制是指对软件开发过程中各种程序代码、配置文件及说明文档等文件变更的管理,是软 件配置管理的核心思想之一。版本控制最主要的功能就是追踪文件的变更。它将什么时候什么人更 改了文件的什么内容等信息如实地记录下来。每一次文件的改变,文件的版本号、都将增加。除了 记录版本变更外,版本控制的另一个重要功能是并行开发。软件开发往往是多人协同作业,版本控 制可以有效地解决版本的同步以及不同开发者之间的开发通信问题,提高协同开发的效率。并行开 发中最常见的不同版本软件的错误(Bug)修正问题也可以通过版本控制中分支与合并的方法有效 地解决。

2.变更控制Change Control

       变更控制的目的并不是控制变更的发生,而是对变更进行管理,确保变更有序进行。对于软件 开发项目来说,发生变更的环节比较多,因此变更控制显得格外重要。项目中引起变更的因素有两 个:一是来自外部的变更要求,如客户要求修改工作范围和需求等;二是开发过程中内部的变更要 求,如为解决测试中发现的一些错误而修改源码,甚至改变设计。比较而言,最难处理的是来自外 部的需求变更,因为IT项目需求变更的概率大,引发的工作量也大(特别是到项目的后期)。

       软件配置管理与软件质量保证活动密切相关,可以帮助达成软件质量保证目标。软件配置管理 活动包括软件配置管理计划、软件配置标识、软件配置控制、软件配置状态记录、软件配置审计、 软件发布管理与交付等活动。

软件配置管理计划:软件配置管理计划的制订需要了解组织结构环境和组织单元之间的联 系,明确软件配置控制任务;

软件配置标识:识别要控制的配置项,并为这些配置项及其版本建立基线;( 21

软件配置控制:关注的是管理软件生命周期中的变更 22);

软件配置状态记录:标识、收集、维护并报告配置管理的配置状态信息;

软件配置审计:独立评价软件产品和过程是否遵从已有的规则、标准、指南、计划和流程而 进行的活动;

软件发布管理与交付:通常需要创建特定的交付版本,完成此任务的关键是软件库。

5.4.2软件编码

       目前,人和计算机通信仍需使用人工设计的语言,也就是程序设计语言。所谓编码,就是把软 件设计的结果翻译成计算机可以“理解和识别 ”的形式——用某种程序设计语言书写的程序。作为 软件工程的一个步骤,编码是设计的自然结果,因此,程序的质量主要取决于软件设计的质量。但 是,程序设计语言的特性和编码途径也会对程序的可靠性、可读性、可测试性和可维护性产生深远 的影响。

1)程序设计语言。编码的目的是实现人和计算机的通信,指挥计算机按人的意志正确工作。 程序设计语言是人和计算机通信的最基本工具,程序设计语言的特性不可避免地会影响人的思维和 解决问题的方式,会影响人和计算机通信的方式和质量,也会影响他人阅读和理解程序的难易程 度。因此,编码之前的一项重要工作就是选择一种恰当的程序设计语言。

2)程序设计风格。在软件生存期内,开发者经常要阅读程序。特别是在软件测试阶段和维护 阶段,编写程序的人员与参与测试、维护的人员要阅读程序。因此,阅读程序是软件开发和维护过 程中的一个重要组成部分,而且读程序的时间比写程序的时间还要多。这就要求编写的程序不仅自 己看得懂,而且也要让别人能看懂。20世纪70年代初,有人提出在编写程序时,应使程序具有良好 的风格。程序设计风格包括4个方面:源程序文档化、数据说明、语句结构和输入/输出方法。应尽 量从编码原则的角度提高程序的可读性,改善程序的质量。

3)程序复杂性度量。经过详细设计后每个模块的内容都已非常具体,因此可以使用软件设计 的基本原理和概念仔细衡量它们的质量。但是,这种衡量毕竟只能是定性的,人们希望能进一步定 量度量软件的性质。定量度量程序复杂程度的方法很有价值,把程序的复杂度乘以适当的常数即可 估算出软件中故障的数量及软件开发时的工作量。定量度量的结构可以用于比较两个不同设计或两 种不同算法的优劣,程序定量的复杂程度可以作为模块规模的精确限度。

4)编码效率。主要包括:

程序效率:程序的效率是指程序的执行速度及程序所需占用的内存空间。一般来说,任何对 效率无重要改善,且对程序的简单性、可读性和正确性不利的程序设计方法都是不可取的。

算法效率:源程序的效率与详细设计阶段确定的算法的效率直接相关。在详细设计翻译转换 成源程序代码后,算法效率反映为程序的执行速度和对存储容量的要求。

存储效率:存储容量对软件设计和编码的制约很大。因此要选择可生成较短目标代码且存储  压缩性能优良的编译程序,有时需要采用汇编程序,通过程序员富有创造性的努力,提高软件的时 间与空间效率。提高存储效率的关键是程序的简单化。

●I/O效率:输入/输出可分为两种类型,一种是面向人(操作员)的输入/输出,另一种是面向 设备的输入/输出。如果操作员能够十分方便、简单地输入数据,或者能够十分直观、一目了然地 了解输出信息,则可以说面向人的输入/输出是高效的。至于面向设备的输入/输出,主要考虑设备 本身的性能特性。

5.4.3软件测试

       软件测试是在将软件交付给客户之前所必须完成的重要步骤。软件测试是使用人工或自动的手 段来运行或测定某个软件系统的过程,其目的在于检验它是否满足规定的需求或弄清预期结果与实 际结果之间的差别。

       软件测试的目的就是确保软件的质量,确认软件以正确的方法是检查软件是否做了用户所期望 的事情,所以软件测试工作主要是发现软件的错误 20有效定义和实现软件成分由低层到 层的组装过程,验证软件是否满足任务书和系统定义文档所规定的技术要求,为软件质量模型的建 立提供依据。软件测试不仅要确保软件的质量,还要给开发人员提供信息, 以方便其为风险评估做 相应的准备,重要的是软件测试要贯穿在整个软件开发过程中,保证整个软件开发的过程是高质量 的。 目前,软件的正确性证明尚未得到根本的解决,软件测试仍是发现软件错误(缺陷)的主要手 段。根据国家标准《计算机软件测试规范》(GB/T15532),软件测试的目的是验证软件是否满足 软件开发合同或项目开发计划、系统/子系统设计文档SRS 、软件设计说明和软件产品说明等规定 的软件质量要求。通过测试,发现软件缺陷,为软件产品的质量测量和评价提供依据。

1.测试方法

       软件测试方法可分为静态测试和动态测试。

1 )静态测试

       静态测试是指被测试程序不在机器上运行,只依靠分析或检查源程序的语句、结构、过程等来 检查程序是否有错误,即通过对软件的需求规格说明书、设计说明书以及源程序做结构分析和流程 图分析,从而找出错误。静态测试包括对文档的静态测试和对代码的静态测试。对文档的静态测试 主要以检查单的形式进行,而对代码的静态测试一般采用桌前检查(Desk Checking)、代码走查   和代码审查的方式 18)。经验表明,使用这种方法能够有效地发现30%70%的逻辑设计和编码错误。

2 )动态测试 19

       动态测试是指在计算机上实际运行程序进行软件测试,对得到的运行结果与预期的结果进行比 较分析,同时分析运行效率和健壮性能等。一般采用白盒测试和黑盒测试方法

       白盒测试也称为结构测试,主要用于软件单元测试中。它的主要思想是,将程序看作一个透明 的白盒,测试人员完全清楚程序的结构和处理算法,按照程序内部逻辑结构设计测试用例,检测程 序中的主要执行通路是否都能按设计规格说明书的设定进行。 白盒测试方法是从程序结构方面出发 对测试用例进行设计,主要用于检查各个逻辑结构是否合理,对应的模块独立路径是否正常, 以及 内部结构是否有效,包括控制流测试、数据流测试和程序变异测试等。另外使用静态测试的方法 也可以实现白盒测试。例如,使用人工检查代码的方法来检查代码的逻辑问题,也属于白盒测试的 范畴。 白盒测试方法中,最常用的技术是逻辑覆盖,即使用测试数据运行被测程序,考查对程序逻 辑的覆盖程度,主要的覆盖标准有语句覆盖、判定覆盖、条件覆盖、条件/判定覆盖、条件组合覆  盖、修正的条件/判定覆盖和路径覆盖等。

       ​​​​​​​黑盒测试也称为功能测试,它是通过测试来检测每个功能能否正常使用( 高21下、19下)。黑 盒测试将程序看作一个不透明的黑盒,完全不考虑(或不了解)程序的内部结构和处理算法,根据 需求规格说明书设计测试实例,并检查程序的功能是否能够按照规范说明准确无误地运行。对于黑 盒测试行为必须加以量化才能够有效地保证软件的质量。黑盒测试根据SRS所规定的功能来设计测 试用例,一般包括等价类划分、边界值分析、判定表、因果图、状态图、随机测试、猜错法和正交 试验法等。

2.测试类型

       根据国家标准《计算机软件测试规范》(GB/T15532),软件测试可分为单元测试、集成测 试、确认测试、系统测试、配置项测试和回归测试等类别,如表5-6所示。

5-6:测试类型说明

测试类型

说明

单元测试

单元测试主要是对软件的模块进行测试,测试的对象是可独立编译或汇编的  程序模块软件构件或OO软件中的类(统称为模块),其目的是检查每个模块能否正 确地实现设计说明中的功能、性能、接口和其他设计约束等条件,发现模块内可能  存在的各种差错 22上)。单元测试的技术依据是软件详细设计说明书,着重从  模块接口、局部数据结构、重要的执行通路、出错处理通路和边界条件等方面对模

块进行测试

集成测试

集成测试一般要对已经严格按照程序设计要求和标准组装起来的模块同时进行 测试 明确该程序结构组装的正确性,发现和接口有关的问题。在这一阶段,一般 采用白盒测试和黑盒测试结合的方法进行测试,验证这一阶段设计的合理性以及需 求功能的实现性。集成测试的技术依据是软件概要设计文档。除应满足一般的测试 准入条件外,在进行集成测试前还应确认待测试的模块均已通过单元测试

确认测试

确认测试主要用于验证软件的功能、性能和其他特性是否与用户需求一致( 18 

系统测试

系统测试的对象是完整的、集成的计算机系统 目的是在真实系统工作环境 下,检测完整的软件配置项能否和系统正确连接,并满足系统/子系统设计文档和软 件开发合同规定的要求。主要测试内容包括功能测试、性能测试、健壮性测试、安 装或反安装测试、用户界面测试、压力测试、可靠性及安全性测试等。其中,最重 要的工作是进行功能测试与性能测试。功能测试主要采用黑盒测试方法;性能测试 主要验证软件系统在承担一定负载的情况下所表现出来的特性是否符合客户的需 要。系统测试过程较为复杂, 由于在系统测试阶段不断变更需求造成功能的删除或 增加,从而使程序不断出现相应的更改,而程序在更改后可能会出现新的问题,或 者原本没有问题的功能由于更改导致出现问题。所以,测试人员必须进行多轮回归 测试。系统测试的结束标志是测试工作已满足测试目标所规定的需求覆盖率,并且 测试所发现的缺陷已全部归零。

配置项测试

配置项测试的对象是软件配置项,配置项测试的目的是检验软件配置项与SRS 的一致性。

配置项测试的技术依据是SRS(含接口需求规格说明)。除应满足一般测试的 准入条件外,在进行配置项测试之前,还应确认被测软件配置项已通过单元测试和 集成测试

回归测试

回归测试的目的是测试软件变更之后,变更部分的正确性和对变更需求的符合 性, 以及软件原有的、正确的功能、性能和其他规定的要求的不损害性。( 22

下、高21下)

3.面向对象的测试

       OO系统的测试目标与传统信息系统的测试目标是一致的,但OO系统的测试策略与传统的结构 化系统的测试策略有很大的不同,这种不同主要体现在两个方面,分别是测试的焦点从模块移向了 类,以及测试的视角扩大到了分析和设计模型。与传统的结构化系统相比,OO系统具有3个明显特 征,即封装性、继承性与多态性 18下、中22。正是由于这3个特征,给OO系统的测试带来 了一系列的困难。封装性决定了OO系统的测试必项目建议书须考虑到信息隐蔽原则对测试的影 响, 以及对象状态与类的测试序列;继承性决定了OO系统的测试必须考虑到继承对测试充分性的 影响, 以及误用引起的错误;多态性决定了OO系统的测试必须考虑到动态绑定对测试充分性的影 响,抽象类的测试及误用对测试的影响。

4.软件调试

       软件调试(排错)与成功的测试形影相随。测试成功的标志是发现了错误根据错误迹象确定 错误的原因和准确位置,并加以改正,主要依靠软件调试技术。常用的软件调试策略可以分为蛮力 法、回溯法和原因排除法

1 #include "stdio.h"
2 void main()
3 {
4     int time;
5     for (time=1;time<=10;time++)
6     printf("%d、喜欢的帮忙点赞收藏加关注哦!\n",time);
7 }

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

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

相关文章

51单片机嵌入式开发:14、STC89C52RC 之HX1838红外解码NEC+数码管+串口打印+LED显示

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 STC89C52RC 之HX1838红外解码NEC数码管串口打印LED显示 STC89C52RC 之HX1838红外解码NEC数码管串口打印LED显示1 概述2 硬件电路2.1 遥控器2.2 红外接收器电路2.3 STC89C52单…

【JAVA开发笔记】Reids下载、安装、配置-Windows篇(超详细,含Redis可视化管理工具!!!)

目录 1. Redis 简介 2. 下载 Redis 安装包 3. 开启 Redis 服务 4. 配置环境变量 5. Redis 服务注册为系统服务 6. Redis 服务测试和简单使用 7. 下载安装 Redis 管理工具 8. 管理工具连接 Redis 服务器 1. Redis 简介 Redis&#xff08;Remote Dictionary Server&…

Pytorch transforms 的研究

绝对路径与相对路径差别 transforms的使用 from torchvision import transforms from PIL import Imageimg_path "dataset/train/bees/16838648_415acd9e3f.jpg" img Image.open(img_path) tensor_trans transforms.ToTensor() tensor_img tensor_trans(img) prin…

PostgreSQL 中如何实现数据的批量插入和更新?

&#x1f345;关注博主&#x1f397;️ 带你畅游技术世界&#xff0c;不错过每一次成长机会&#xff01;&#x1f4da;领书&#xff1a;PostgreSQL 入门到精通.pdf 文章目录 PostgreSQL 中如何实现数据的批量插入和更新&#xff1f;一、批量插入数据1. 使用 INSERT INTO 语句结…

redis的持久化机制以及集群模式

1.redis的持久化机制 内存数据库具有高速读写的优势&#xff0c;但由于数据存储在内存中&#xff0c;一旦服务器停止或崩溃&#xff0c;所有数据将会丢失。持久化机制的引入旨在将内存中的数据持久化到磁盘上&#xff0c;从而在服务器重启后能够恢复数据&#xff0c;提供更好的…

初阶数据结构——二叉树大汇总

这篇博客将会讲到二叉树的部分内容及堆的相关知识~ 这里将会涉及到大量的递归&#xff08;头大&#xff09; 目录 1.树 1.1树的概念 1.2树的相关概念 1.3树的表示 1.4树的实际应用 2.二叉树 2.1二叉树的概念 2.2特殊的二叉树 2.2.1 满二叉树 2.2.2 完全二叉树 2.2…

如何用python在大麦网抢票?新手也能学会!

使用Python如何在大麦网抢票 背景介绍 大麦网是一个知名的演出票务平台&#xff0c;很多演唱会、体育赛事等热门活动的门票都可以在这里购买。由于热门场次的门票往往会在开售时秒光&#xff0c;因此抢票成为了很多人的一项技术活。本文将介绍如何使用Python编写程序来自动在大…

基于STM32的逻辑分析仪

文章目录 一、逻辑分析仪体验1、使用示例1.1 逻辑分析仪1.2 开源软件PulseView 2、核心技术2.1 技术方案2.2 信号采集与存储2.3 数据上传 3、使用逻辑分析仪4、 SourceInsight 使用技巧4.1新建工程4.2 设置工程名及工程数据目录4.3 指定源码目录4.4 添加源码4.5 同步文件4.6 操…

在windows上使用Docker部署一个简易的web程序

使用Docker部署一个python的web服务&#x1f680; 由于是从事算法相关工作&#xff0c;之前在项目中&#xff0c;需要将写完的代码服务&#xff0c;部署在docker上&#xff0c;以此是开始接触了Docker这个工具&#xff0c;由于之前也没系统学习过&#xff0c;之后应该可能还会用…

视频压缩大小怎么压缩?几种简单视频压缩方法教给你

现如今&#xff0c;视频已成为我们生活和工作中不可或缺的一部分。然而&#xff0c;高清视频往往伴随着庞大的文件体积&#xff0c;这给存储和传输带来了不小的挑战。这时候我们就需要对视频进行压缩处理&#xff0c;方便储存和发送&#xff0c;那么怎么有效压缩视频呢&#xf…

java之回合制游戏以及如何优化

public class Role {private String name;private int blood;//空参public Role() {}//包含全部参数的构造public Role(String name, int blood) {this.name name;this.blood blood;}public String getName() {return name;}public void setName(String name) {this.name na…

提交高通量测序原始数据到 SRA --- 操作流程

❝ 写在前面 由于最近在提交课题数据到 NCBI 数据库&#xff0c;整理了相关笔记。本着自己学习、分享他人的态度&#xff0c;分享学习笔记&#xff0c;希望能对大家有所帮助。推荐先按顺序阅读往期内容&#xff1a; 1. 提交高通量测序数据到 GEO --- 说明书 目录 1 注册 NCBI 账…

【C++】关联容器探秘:Map与Multimap详解

目录 1.映射类 map 0. 引入 pair&#xff1a; 1.定义 2.插入 3. 遍历 4.❗operator[]的实现 5. 插入 运用 2.Multimap 类 0. 引入&#xff1a;不去重的 Multi 1. Multimap 不支持 Operator[] 2. Multimap 的删除 1.映射类 map 0. 引入 pair&#xff1a; 在C中&…

1 go语言环境的搭建

本专栏将从基础开始&#xff0c;循序渐进&#xff0c;由浅入深讲解Go语言&#xff0c;希望大家都能够从中有所收获&#xff0c;也请大家多多支持。 查看相关资料与知识库 专栏地址:Go专栏 如果文章知识点有错误的地方&#xff0c;请指正&#xff01;大家一起学习&#xff0c;…

软件测试---测试需求分析

课程目标 什么是软件测试需求 软件测试需求的必要性 如何对软件测试需求进行分析&#xff08;重点&#xff09; 课程补充 灰度测试&#xff08;基于功能&#xff09;&#xff1a;先发布部分功能&#xff0c;然后看用户的反馈&#xff0c;再去发布另外一部分的功能更新。 A/B测…

运筹学笔记

计算的时间问题&#xff01;计算机解决了计算量的问题&#xff01; 计算机的发展对运筹学研究起到了极大的促进作用。 运筹学的一个特征之一是它常常会考虑寻求问题模型的最佳解决方案&#xff08;称为最优解&#xff09;。 没有人能成为运筹学所有方面的专家。 分析学越来越流…

C++学习笔记04-补充知识点(问题-解答自查版)

前言 以下问题以Q&A形式记录&#xff0c;基本上都是笔者在初学一轮后&#xff0c;掌握不牢或者频繁忘记的点 Q&A的形式有助于学习过程中时刻关注自己的输入与输出关系&#xff0c;也适合做查漏补缺和复盘。 本文对读者可以用作自查&#xff0c;答案在后面&#xff0…

国内微短剧系统平台抖音微信付费小程序app开发源代码交付

微短剧作为当下热门的内容&#xff0c;结合抖音平台的广泛用户基础&#xff0c;开发微短剧付费小程序APP具有显著的市场潜力&#xff0c;用户对于短剧内容的需求旺盛&#xff0c;特别是在言情、总裁、赘婿等热门题材方面&#xff0c;接下来给大家普及一下微短剧小程序系统。 顺…

rce漏洞-ctfshow(50-70)

Web51 if(!preg_match("/\;|cat|flag| |[0-9]|\\$|\*|more|less|head|sort|tail|sed|cut|tac|awk|strings|od|curl|\|\%|\x09|\x26/i", $c)){ system($c." >/dev/null 2>&1"); } Nl&#xff0c;绕过tac&#xff0c;cat&#xff0c;绕…

Pytest进阶之fixture的使用(超详细)

目录 Fixture定义 Fixture使用方式 作为参数使用 Fixture间相互调用(作为参数调用) 作为conftest.py文件传入 Fixture作用范围Scope function class module session Fixture中params和ids Fixture中autouse Fixture中Name 总结 pytest fixture 是一种用来管理测试…