【系统架构设计师(第2版)】五、软件工程基础知识

news2024/11/13 3:32:53

5.1 软件工程

20世纪60年代,为了解决软件危机,提出了软件工程的概念。
软件危机的具体表现:

  • 软件开发进度难以预测;
  • 软件开发成本难以控制;
  • 软件功能难以满足用户期望;
  • 软件质量无法保证;
  • 软件难以维护;
  • 软件缺少适当的文档资料。

5.1.1 软件工程定义

软件工程师应用计算机科学、数学、逻辑学及管理科学等原理,开发软件的工程。软件工程借鉴传统工程的原则和方法,以提高质量、降低成本和改进算法。其中,计算机科学、数学用于构建模型与算法;工程科学用于制定规范、设计范式、评估成本及确定权衡;管理科学用于计划、资源、质量、成本等管理。

软件工程过程是指获得软件产品,在软件工具的支持下由软件工程师完成的一系列软件工程活动,包括4个方面:

  • Plan:软件规格说明
  • Do:软件开发
  • Check:软件确认
  • Action:软件演进

5.1.2 软件过程模型

软件经历需求设计软件设计软件开发运行维护,直至被淘汰的全过程称为软件的生命周期。
为了使软件生命周期种的各项任务能够有序地按照规程进行,对各项任务给予规程约束的工作模型称为软件过程模型(软件生命周期模型)。

1、瀑布模型

瀑布模型

2、原型化模型

原型化模型

3、螺旋模型

螺旋化模型

5.1.3 敏捷模型

20世纪90年代,软件开发受到两个因素影响:面向对象编程开始取代面向过程编程;互联网泡沫刀纸快速投向市场以及公司的快速发展成为关键商业因素。
快速变化的需求需要短的产品交付周期,从而诞生了敏捷方法的概念。

1、敏捷方法的特点
  • 敏捷型方法是“适应性(adaptive)”而非“预设性(predictive)”的;
  • 敏捷型方法是“面向人的(People-oriented)”而非“面向过程的(Process-oriented)”。
2、敏捷方法的核心思想
  • 敏捷方法是适应型,而非可预测性;
  • 敏捷方法是以人为本,而非以过程为本;
  • 迭代增量式的开发过程。
3、主要敏捷方法简介
  • 极限编程(Extreme Programming,XP)
  • 水晶系列方法
  • Scrum,迭代式增量软件开发过程,侧重于项目管理
  • 特征驱动开发方法(Feature Driven Development,FDD)
    • 6种关键项目角色:项目经理、首席架构设计师、开发经理、主程序员、程序员和领域专家;
    • 5个核心过程:开发整体对象模型、构造特征列表、计划特征开发、特征设计和特征构建。

5.1.4 统一过程模型(RUP)

统一过程模型(Rational Unified Process,RUP)描述了如何利用商业的、可靠的方法开发和部署软件,是一个重量级过程。

1、RUP的生命周期

9个核心工作流:

  • 业务建模
  • 需求
  • 分析与设计
  • 实现
  • 测试
  • 部署
  • 配置与变更管理
  • 项目管理
  • 环境
    多个循环软件开发生命周期中的4个阶段:
  • 初始阶段
  • 细化阶段
  • 构造阶段
  • 移交阶段
2、RUP中的核心概念
  • 角色(Role)
  • 活动(Activity)
  • 制品(Artifact)
  • 工作流(Workflow)
3、RUP的特点
  • 用例驱动
  • 以体系结构为中心
  • 迭代和增量

5.1.5 软件能力成熟度模型

软件能力成熟度模型(Capability Maturity Model for Software, CMM)是一个概念模型,模型框架和表示是刚性的,不能随意改变的,但是模型的解释和实现具有一定弹性。
软件能力成熟度模型集成(Capability Maturity Model Integration for Software, CMMI)是在CMM的基础上发展而来的。
CMMI提供了一个软件能力成熟度的框架,将软件过程改进的步骤组织成了5个成熟度等级,共包括18个关键过程域,52个过程目标,3168种关键时间,它为软件过程不断改进奠定了一个循序渐进的基础。

  • Level 1 初始级
  • Level 2 已管理级
  • Level 3 已定义级
  • Level 4 量化管理级
  • Level 5 优化级
    注:有关软件能力成熟度模型的详细介绍,需参考CMM相关专业书籍。

5.2 需求工程

需求工程是指应用已证实有效的原理、方法,通过合适的工具和记号,系统地描述待开发系统及其行为特征和相关约束。
需求工程的目标简单命令:确定客户需求,定义设想中系统的所有外部特征。
需求工程的活动主要被划分为以下几个阶段:

  • 需求获取
  • 需求分析
  • 形成需求规格(需求文档化)
  • 需求确认与验证
  • 需求管理

5.2.1 需求获取

1、需求获取的基本步骤
  • 开发高层的业务模型
  • 定义项目范围和高层需求
  • 识别用户角色和用户代表
  • 获取具体的需求
  • 确定目标系统的业务工作流
  • 需求整理与总结
2、需求获取方法
  • 用户面谈
  • 需求专题讨论会
  • 问卷调查
  • 现场观察
  • 原型化方法
  • 头脑风暴

5.2.2 需求变更

1、变更控制过程

需求变更管理过程

2、变更控制委员会

变更控制委员会(Change Control Board,CCB)是项目所有者权益代表,负责裁定接受哪些变更。CCB是决策机构,通常通过评审手段来决定项目是否能变更,但是不提出变更方案。

5.2.3 需求追踪

需求追踪提供了由需求到产品实现整个过程范围的明确查阅能力。需求跟踪可以建立与维护“需求-设计-编程-测试”之间的一致性,确保所有的工作成果符合用户需求。需求跟踪有两种方式:

  • 正向跟踪:检查每个需求能否在后续工作成功中找到对应点;
  • 反向跟踪:检查设计文档、代码、测试用例等工作能否在需求中找到出处。

5.3 系统分析和设计

系统分析阶段是应用系统思想和方法,把复杂的对象分解为简单的组成部分,找出这些部分的基本属性和彼此之间的关系的过程。其基本任务是系统分析师和用户在充分了解用户需求的基础上,把双方对新系统的理解表达为系统需求规格说明书。
系统设计的目标是根据系统分析的结果,完成系统的构建过程。其主要目的是绘制系统的蓝图,权衡和比较各种技术和实施方法的利弊,合理分配各种资源,构建新系统的详细设计方案和相关模型,指导系统实施工作的顺利开展。系统设计的主要内容包括概要设计和详细设计。

5.3.1 结构化方法

结构化(Structured Analysis and Structured Design,SASD)方法,也可称为面向功能的软件开发方法或面向数据流的软件开发方法。
结构化开发方法提出了一组提高软件结构合理性的准则,如分解和抽象、模块独立性、信息隐蔽等。针对软件生存周期各个不同阶段,它有结构化分析(Structured Analysis,SA)、结构化设计(Structred Design,SD)和结构化编程(Structured Programing,SP)等方法。

1、结构化分析

一般利用图形表达用户需求,使用的手段主要有:

  • 数据流图(Data Flow Diagram,DFD):从应用系统的数据流着手以图形方式刻画和表示一个具体业务系统中的数据处理过程和数据流;
  • 数据字典(Data Dictionary):数据字典是描述数据的信息集合,是对系统中使用的所有数据元素定义的集合。数据字典的作用是给数据流图上每个元素加以定义和说明;
  • 结构化语言
  • 判定表
  • 判定树
2、结构化设计

以结构化分析阶段所产生的数据流图和数据字典等文档为基础,是一个自顶向下、逐步求精和模块化的过程。结构化设计的基本思想是将软件设计成由相对独立且具有单一功能的模块组成的结构,分为概要设计和详细设计两个阶段。

  • 模块结构:信息隐藏和抽象、模块化、松耦合、高内聚
  • 系统结构图(模块结构图):模块的实现算法、所需的局部数据结构
3、结构化编程

程序 = 算法 + 数据结构,自顶向下,逐步细化;清晰第一,效率第二;书写规范,缩进格式;基本结构,组合而成。

4、数据库设计

数据库设计的内容包括:

  • 概念结构设计:通常采用实体-联系图(Entity Relationship Diagram,E-R图)来表示。
  • 逻辑结构设计
  • 物理结构设计
  • 数据库的实施
  • 数据库的运行和维护

5.3.2 面向对象的方法

面向对象开发方法将面向对象的思想应用于软件开发过程中,指导开发活动,是建立在“对象”概念基础上的方法学。
面向对象开发方法是以用例驱动的、以体系结构为中心的、迭代的和渐增式的开发过程,主要包括:需求分析、系统分析、系统设计、系统实现。

1、面向对象分析(OOA)
  • 面向对象分析的基本原则:抽象、封装、继承、分类、聚合、关联、消息通信、粒度控制、行为分析;
  • 面向对象分析的基本步骤:确认对象和类、确定结构、确定主题、确定属性、确定方法。
2、面向对象设计(OOD)

类封装了信息和行为,是面向对象的重要组成部分,它是具有相同属性、方法和关系的对象集合的总称。在面向对象设计中,类可以分为3种类型:实体类、控制类和边界类。

  • 实体类:映射需要中的每个实体,在系统的整个生存期中通常都是永久性的,一般类名以名词命名;
  • 控制类:用于控制用例工作的类,将用例的特有行为进行封装,一般由动宾结构的短语(“动词+名词”或“名词+动词”)转化来的名词;
  • 边界类:用于封装在用例内、外流动的信息和数据流。边界类用于系统接口与系统外部进行交互,将系统与外部环境的变更分隔开,通常情况下边界类可以既有属性也有方法。
3、面向对象编程(OOP)

面向对象编程达到了软件工程的3个主要目标:重用性、灵活性和扩展性。
面向对象编程 = 对象 + 类 + 继承 + 多态 + 消息,其中核心概念是类和对象
面向对象编程的基本特点:封装、继承和多态。

4、数据持久化和数据库

在面向对象开发方法中,对象只能存在于内存中,如果要永久保存对象的状态,需要进行对象的持久化(Persistence):将内存中的对象保存到数据库或可永久保存的存储设备中。

5.4 软件测试

软件测试是使用人工或自动的手段来运行和测定某个软件系统的过程,其主要目的就是确保软件的质量、确保软件以正确的方式做了用户所期望的事情;同时还要给开发人员提供信息,以方便其为风险评估做相应的准备。

5.4.1 测试方法

以测试过程中程序执行状态可依据分为:

  • 静态测试(Static Testing,ST)
  • 动态测试(Dynamic Testing,DT)
    以具体实现算法细节和系统内部结构的相关情况可分为:
  • 黑盒测试
  • 白盒测试
  • 灰盒测试
    从程序执行方式可分为:
  • 人工测试(Manual Testing)
  • 自动化测试(Automatic Testing)

5.4.2 测试阶段

从阶段上划分,软件测试可以分为:

  • 单元测试(Unit Testing,UT)
  • 集成测试(Integration Testing,IT)
  • 系统测试(System Testing,ST)
    系统测试中又细分为多种不用的测试种类,如:
  • 功能测试
  • 性能测试
  • 验收测试
  • 压力测试

5.5 净室软件工程

净室软件工程(Cleanroom Software Engineering,CSE)是一种应用数据与统计学理论以经济的方式生产高质量软件的工程技术,力图通过严格的工程化的软件过程达到开发中的零缺陷或接近零缺陷。
净室软件工程师一种在软件开发过程中强调在软件中建立正确性的需要的方法,针对高质量软件的生产,降低风险及成本,满足用户需求,提供竞争优势。
净室软件工程是软件开发的一种形式化方法,它可以生成质量非常高的软件,强调将正确性验证(而不是测试)作为发现和消除错误的主要机制。

5.5.1 理论基础

  • 函数理论:一个函数定义了定义域到值域的映射,一个好程序的规范就是一个函数的规范,应具有:完备性,一致性和正确性;
  • 抽样理论:把软件的所有可能的使用情况看作总体,通过统计学手段对其进行抽样,并对样本进行测试,根据测试结果分析软件的性能和可靠性。

5.5.2 技术手段

  • 统计过程控制下的增量式开发:控制迭代
  • 基于函数的规范与设计
  • 正确性验证
  • 统计测试和软件认证

5.6 基于构件的软件工程

基于构件的软件工程(Compoment-Based Software Engineering,CBSE)是一种基于分布对象技术、强调通过可复用构建设计与构造软件系统的软件复用途径。
基于构件的软件工程(CBSE)体现了“购买而不是重新构造”的哲学,将软件开发的重点从程序编写转移到了基于已有构件的组装,以更快地构造系统,减轻用来支持和升级大型系统所需要的维护负担,从而降低软件开发费用。

5.6.1 构件和构件模型

基于构件的软件工程(CBSE)构件的特征:

  • 可组装性
  • 可部署性
  • 文档化
  • 独立性
  • 标准化
    构件模型定义了构件实现、文档化以及开发的标准,构件模型包含了一些模型要是,这些要素信息定义了构件接口、在程序中使用构件需要知道的消息,以及构件应该如何部署。

5.6.2 CBSE过程

CBSE过程中的主要活动包括:

  • 系统需求概述
  • 识别候选构件
  • 根据发现的构件修改需求
  • 体系结构设计
  • 构件定制与适配
  • 组装构件,创建系统

5.6.3 构架组装

  • 顺序组装:上一个构件的输出,与下一个构件的输入相兼容;
  • 层次组装:被调用构件为调用构件提供所需的服务;
  • 叠加组装:两个或两个以上构架放在一起创建一个新构件。

5.7 软件项目管理

5.7.1 项目管理概述

软件项目管理的对象是软件工程项目,它所涉及的范围覆盖了整个软件工程过程。
软件项目管理是为了使软件项目能够按照预定的成本、进度、质量顺利完成,而对人员(People)、产品(Product)、过程(Process)和项目(Project)进行分析和管理的活动。

5.7.2 软件进度管理

所谓进度,指的是对执行活动和里程碑所制定的工作计算,而进度管理指的是为了确保项目按期完成所需要的管理过程。在软件进度管理过程中,一般包括:活动定义、活动排序、活动资源估计、活动历时估计、制定进度计划和进度控制。

1、工作分解结构(Work Breakdown Structure,WPS)

当软件项目比较大而复杂时,往往需要进行层层分解,将大的任务分解成一个个的单一小任务进行处理。

2、任务活动图

活动定义时指确定完成项目的各个交付成果所必须进行的各项活动,需要明确每个活动的前驱、持续时间、必须完成日期、里程碑或交付成果。
在项目管理中,任务活动图是项目进度管理、项目成本管理等一系列项目管理活动的基础,通常采用甘特图的方式来展示和管理项目活动。

5.7.3 软件配置管理

软件配置管理(Software Configuration Manaagement,SCM)是一种标识、组织和控制修改的技术。
软件配置管理的核心内容包括版本控制和变更配置:

  • 版本控制(Version Control):对软件开发过程中的各种程序代码、配置文件及说明文档等文件变更管理;
  • 变更控制(Change Control):对变更进行管理,确保变更更有序进行。

5.7.4 软件质量管理

软件质量就是软件与明确地和隐含地定义的需求相一致的程度。(软件质量是软件符合明确地叙述的功能和性能需求、文档中明确地描述的开发标准以及所有专业开发的软件都应具有的隐含特征的程序。)
从管理角度出发,可以将影响软件质量的因素划分为3组:产品运行、产品修改、产品转移。
影响软件质量的三个主要因素关系图

1、软件质量保证

软件质量保证(Software Quality Assurance,SQA)是建立一套有计划,有系统的方法,来向管理层保证拟定出来的标准、步骤、实践和方法能够正确地被所有项目所采用。
软件质量保证的主要任务有三个方面:

  • SQA审计和评审
  • SQA报告
  • 处理不符合问题
2、软件质量认证

质量认证用来检验整个企业的质量水平,注重软件企业的整体资质,全面考察软件企业的整体质量体系,检验该企业是否具有设计、开发和生产符合质量要求的软件的能力。
目前国内软件企业主要采用的是ISO 9000和能力成熟度模型(Capability Maturity Model,CMM)。

5.7.5 软件风险管理

软件项目风险管理是软件项目管理的重要内容,风险管理的主要目标是预防风险。
软件项目风险是指软件开发过程中遇到的预算和进度等方面的问题,以及这些问题对软件项目交付的影响。

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

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

相关文章

C++builder中的人工智能(17):神经网络中的自我规则非单调(Mish)激活函数

在这篇文章中,我们将探讨自我规则非单调激活函数——Mish在神经网络中的应用。了解Mish函数的工作原理,将有助于您在使用C IDE构建C应用程序时更加得心应手。 目录 神经网络中的激活函数是什么?能在C中创建激活函数吗?自我规则非…

华为eNSP实验:IP Source Guard

一:IP Source Guard: IP Source Guard(简称IPSG)是一种基于二层接口的源IP地址过滤技术,用于防止恶意主机伪造合法主机的IP地址进行网络攻击。以下是对IP Source Guard的详细解析: 基本概念: IP Source Gu…

Git进阶(十八):git rebase详解

文章目录 一、前言二、rebase 图解三、应用示例四、重建提交历史五、rebase VS merge六、拓展阅读 一、前言 rebase 使用方法 git rebase [基节点] git rebase [基节点] [待变基节点]rebase后面的参数可以是两个,也可以是一个,当rebase为一个参数的时…

【笔记】扩散模型(九):Imagen 理论与实现

论文链接:Photorealistic Text-to-Image Diffusion Models with Deep Language Understanding 非官方实现:lucidrains/imagen-pytorch Imagen 是 Google Research 的文生图工作,这个工作并没有沿用 Stable Diffusion 的架构,而是级…

华夏风物 3.2.0 | 中国风物志,记录各地特产、美食、风景,旅游吃货必备

华夏风物是一款记录中国各地风物的App,类似于一本中国“风物志”。它记录了各地的特产、美食、风景,为用户提供了一个了解和探索中国文化的窗口。该应用的社区氛围非常真实,用户可以发现许多家乡的特色小吃和传统手艺。许多帖子由当地人发布&…

BIST(Built-in Self-Test,内建自测试)学习笔记

参考资料: 内建自测试(Built-in Self-Test,简称BIST)详解_built in self test-CSDN博客 芯片测试术语 ,片内测试(BIST),ATE测试-CSDN博客 可能是DFT最全面的介绍--BIST - 知乎 (zhihu.com) 汽车功能安全--TC3xx LB…

【Ubuntu24.04】从双系统到虚拟机再到单系统的故事

故事 在大学前期,我使用Ubuntu系统都是为了学习一些命令或者其它Linux的东西,对性能的要求不高,所以选择了虚拟机,后来为了做毕设,选择安装了Ubuntu20.04双系统,因为虚拟机实在带不动,那时我的主…

AntFlow一款开源免费且自主可控的仿钉钉工作流引擎

在现代企业管理中,流程审批的高效性直接影响到工作的流畅度与生产力。最近,我发现了一个非常有趣的项目——AntFlow。这个项目不仅提供了一个灵活且可定制的工作流平台,还能让用户以可视化的方式创建和管理审批流程。 如果你寻找一个快速集成…

科学计算服务器:如何计算算力?如何提升科学研究效率?

在现代科学研究的舞台上,科学计算服务器犹如一位强大的幕后英雄,为复杂科学计算任务的攻克提供着坚实支撑。准确计算其算力并充分发挥优势,对提升科学研究效率意义非凡。 服务器的中央处理器(CPU)计算力。在科学计算服…

Java String字符串

Java字符串通常被视为一种数据类型,但由于它们按顺序存储字符类型的元素,类似于数组,因此也常被视为数据结构。在本文中,我们将通过以下大纲简明地了解有关Java字符串的所有内容。 什么是Java字符串?如何创建Java字符…

leetcode25:k个一组链表反转

给你链表的头节点 head ,每 k 个节点一组进行翻转,请你返回修改后的链表。 k 是一个正整数,它的值小于或等于链表的长度。如果节点总数不是 k 的整数倍,那么请将最后剩余的节点保持原有顺序。 你不能只是单纯的改变节点内部的值…

《⼆叉搜索树》

《⼆叉搜索树》 1. ⼆叉搜索树的概念2. ⼆叉搜索树的性能分析3 二叉树的功能说明及实现3.1 ⼆叉搜索树的插⼊3.2 ⼆叉搜索树的查找3.3 ⼆叉搜索树的删除 4二叉搜索树的实现代码5 ⼆叉搜索树key和key/value使⽤场景5.1 key搜索场景:5.2 key/value搜索场景&#xff1a…

势不可挡 创新引领 | 生信科技SOLIDWORKS 2025新品发布会·苏州站精彩回顾

2024年11月01日,由生信科技举办的SOLIDWORKS 2025新产品发布会在江苏苏州圆满落幕。现场邀请到制造业的专家学者们一同感受SOLIDWORKS 2025最新功能,探索制造业数字化转型之路。 在苏州站活动开场,达索系统专业客户事业部华东区渠道经理马腾飞…

Spark 程序开发与提交:本地与集群模式全解析

Spark 的介绍与搭建:从理论到实践-CSDN博客 Spark 的Standalone集群环境安装与测试-CSDN博客 PySpark 本地开发环境搭建与实践-CSDN博客 目录 一、本地开发与远程提交测试 (一)问题背景 (二)解决方案 集群环境准…

童装类目电商代运营公司——品融电商

童装类目电商代运营公司——品融电商 随着电商行业的快速发展,童装类目已成为市场中极具潜力的细分领域之一。消费者对童装的需求不仅限于基本穿着功能,更倾向于选购具有设计感、安全性和舒适度的产品。童装类目涵盖婴儿服、儿童套装、家居服、户外服饰等…

利用pythonstudio写的PDF、图片批量水印生成器,可同时为不同读者生成多组水印

现在很多场合需要将PDF或图片加水印,本程序利用pythonstudio编写。 第一步 界面 其中: LstMask:列表框 PopupMenu:PmnMark LstFiles:列表框 PopupMenu:PmnFiles OdFiles:文件选择器 Filter:PDF文件(.PDF)|.PDF|图像文件(.JPG)|.JPG|图像文件(.png…

PDF模板制作与填充(Java)

1.PDF模板制作 准备原始模板 准备一个原始PDF模板,可以编辑好Word,预留出要填充的部分,再转换成PDF格式。 设置表单域 用任意PDF编辑器打开PDF模板文件,设置表单域,下面以WPS为例: 拖动文本域到需要填充的…

kafka中节点如何服役和退役

服役新节点 1)新节点准备 (1)关闭 bigdata03,进行一个快照,并右键执行克隆操作。 (2)开启 bigdata04,并修改 IP 地址。 vi /etc/sysconfig/network-scripts/ifcfg-ens33修改完记…

笔记本怎么开启TPM2.0_笔记本开启TPM2.0教程(不同笔记本开启tpm2.0方法)

在win11最低要求是提示,电脑必须满足 TPM 2.0,并开需要开启TPM 才能正常安装windows11系统,有很多笔记本的用户问我,笔记本怎么开启tpm功能呢?下面小编就给大家详细介绍一下笔记本开启tpm功能的方法。 如何确认你笔记本…

【PyTorch项目实战】图像分割 —— U-Net:Semantic segmentation with PyTorch

文章目录 一、项目介绍二、项目实战2.1、搭建环境2.1.1、下载源码2.1.2、下载预训练模型2.1.3、下载训练集 2.2、环境配置2.3、模型预测 U-Net是一种用于生物医学图像分割的卷积神经网络架构,最初由Olaf Ronneberger等人于2015年提出。 论文: U-Net: Con…