软工导论知识框架(一)软件工程学概述

本贴为B站大连工业大学老师的网课笔记,教材为张海藩第6版,适用于考研和期末复习。


 导图比较拥挤,看不清可以单独保存或者放大页面。

一.软件:

软件指的是计算机程序、文档运行程序必须的数据、方法与规则。

方法指的是软件开发所用到的方法,规则是开发软件时所遵循的规则。

程序在文档中说明,在规则中实现。

简化定义:程序+数据+文档

二.软件分类:

A.基于功能划分

1.系统软件:

计算机硬件紧密配合使计算机各个部件与相关软件及数据协调、高效工作的软件。 如操作系统、编译程序等。

2.支撑软件:

协助用户开发软件的工具性软件。如各种集成开发环境IDE

3.应用软件:

(1)商业数据处理软件 :商业数据处理软件 管理信息系统(MIS) 企业资源计划(ERP)

(2)工程与科学计算软件 :CAD/CAM(计算机辅助设计/制造) 仿真模拟、天气预报。

(3)智能产品嵌入软件 :驻留在智能产品内存,控制产品工作的 软件。 数码相机、GPS等

  (4) 人工智能软件:利用非数值算法去解决复杂问题的软件。 专家系统、模式识别软件、人工神经网络软件(具有某个领域专家的知识和经验,代替某个领域的专家来解决一系列问题)

  (5) 个人计算机软件:文字处理系统、电子表格、游戏娱乐软件。

B.基于规模划分

 三.软件发展阶段(软件工程本质上是因为软件危机诞生的学科 ):

1.程序设计阶段:软件生产个体化 ,规模小,编写者和使用者同一个人软件是设计者头脑中隐含过程 ,除程序清单外,无文档材料保存。

2.程序系统阶段:产品软件由专门软件开发组织开发——软件作坊,市面上流传诸多质量不高的软件。软件开发组织,沿用早期个体化软件开发方法。

软件危机:软件维护工作耗费大量资源软件工程 ,软件作坊有时甚至没有精力去开发新软件。

1968年,北大西洋公约组织计算机科学家讨论软件危机,提出软件工程。(之所以称为作坊,在于描述其做工不精)

3.软件工程:软件危机得到缓解,打破软件生产个体化特征,工程化的设计原则、方法和标准新的挑战,出现微处理器和个人计算机、分布式处理系统 局域网、广域网、宽带数字通讯(并没有结束软件危机)

4.第四阶段:软件架构发生变化

(1)集中主机环境 :致命弱点在于无法实现数据共享

(2)客户机/服务器(二层) :应用程序放在客户端,数据存储放在服务器端——弱点在于客户端压力大,承担所有应用程序的工作

(3)客户机/服务器(三层) :数据存储仍然在数据库服务器端,而应用程序分为了人机交互和业务处理两大部分人机交互放在客户端,而业务处理则在应用服务器端。该种软件架构方法和我们常说的"前端——后端——数据库"的理解类似,是一种流行的架构方式。(也和常说的C/S架构一致)

(4)浏览器/服务器:与前者同理,只不过不需要安装客户端软件。(即为通常说的B/S架构模式

(5)新技术 :专家系统、人工智能、神经网络、并行计算 网格技术、高信度计算、云计算

注意:软件工程在软件发展的第二个阶段产生

 四.软件危机:

(1)开发成本和进度估计不准、延迟交付、取消项目

(2)用户对已交付软件不满意,开发人员对用户信息交流不充分,产品不符合用户需求

(一个典型错误理解:开发语言不符合或者功能无法实现等错误,并不是软件危机,这只是个体所出现的一系列问题,并非整个行业面对的困难

(3)软件产品质量靠不住 软件产品保证技术(审查、复审、测试)未坚持不懈应用软件开发全过程——维护花费大量精力,无法继续开发软件

(4)软件可维护性差,开发时未考虑,很多错误难以改正

(5)软件没有适当文档资料,文档资料应在软件开发过程中产生,保证最新

五.软件工程:

定义:把系统化、规范化、可度量的途径应用于软件开发、运行和维护过程中,研究其实现途径。

1.软件工程技术:软件开发方法学 软件开发过程 软件工具和软件工程环境

2.软件工程管理:软件管理学 软件经济学 软件心理学

六.软件生存周期:

1.定义:软件从产生、发展到成熟、直至衰亡为止

2.泛类划分:软件定义,软件开发 ,软件维护。

3.国标《计算机软件开发规范》:

  • 可行性研究与计划
  • 需求分析
  • 总体设计
  • 详细设计
  • 实现(编码和单元测试)
  • 集成测试
  • 确认测试
  • 使用和维护

4.可行性研究与计划

关键任务: 解决问题是什么?有行得通解决方法?粗略计划

问题定义报告: 问题性质、工程目标、工程规模。

可行性研究报告: 经济、技术、社会(操作)可行性。

项目开发计划: 粗略

(两个文档:问题定义报告,可行性研究报告

5.需求分析(What):

关键任务:目标系统必须作什么?

可行性研究的需求分析是粗略、不准确;需求分析是完整、准确、清晰、具体。 (具体描述用户的全部需求)

需求规格说明书:目标系统需求。(最核心的文档,记载了以后软件需要实现什么样的功能)

6.总体设计(How):

关键任务: 怎样实现目标系统? 根据需求设计方案;分析推荐最佳方案;设计软件结构等。

总体设计说明书: 记录总体设计结果

7.详细设计:

关键任务: 该怎样具体实现系统? 设计每个模块的算法和数据结构。

详细设计说明书: 用适当表达工具表达算法和数据结构。

8.实现(编码和单元测试):

关键任务: 选择语言、工具翻译详细设计结果、测试模块。 (单元测试往往就是模块测试

实现阶段文档: 程序清单、单元测试报告。

9.集成测试:

关键任务: 将经过单元测试模块组装起来进行测试, 通过测试使软件达到预定要求。

单元测试有时测不出来的问题,会在集成测试中暴露,比如某些接口

测试报告: 测试计划、测试方案、测试结果。

10.确认测试(验收测试):

关键任务: 由用户按需求规格说明书规定进行测试。

测试报告: 测试计划、测试方案、测试结果。

11.使用与维护

关键任务: 通过必要维护活动使系统持久满足用户要求。

维护类型:

  • 改正性维护:软件运行过程中发现错误,进行维护。
  • 适应性维护:软件运行软硬件环境变化,进行的维护。
  • 完善性维护:用户要求改进或扩充软件,进行的维护。
  • 预防性维护:为将来的维护作准备。

实际从事软件开发工作时,软件规模、类型、开发环境及技术方法等因素会影响到阶段划分,及各阶段的执行顺序,形成不同生存周期模型,又称过程模型。(各种阶段可以改变)

七.软件过程模型(又称为软件生存周期模型)

1.瀑布模型:使用最早应用最广,在之前软件开发模型处于比较混乱的状态

  • 阶段具有顺序性和依赖性:前一阶段结束后一阶段开始,前一个阶段输出文档,后一个阶段输入文档。
  • 推迟实现观点:瀑布模型在编码前设置系统分析、系统设计,推迟程序物理实现,保证前期工作扎实。(尽量让编码的过程靠后)
  • 质量保证观点:瀑布模型每阶段坚持两个重要做法: 一是每阶段都必须完成完整、准确的文档。软件开发时人员间通信、运行时期维护的重要依据。 二是每阶段结束前对文档评审。

瀑布模型是非常重视文档书写的一种模型,每个阶段必须有非常准确的文档。

而弱点在于,发现上一个阶段又问题时,无法回溯修改错误——因此,常见的瀑布模型均带有反馈环

优点在于,提高软件质量,降低维护成本,缓解软件危机。

缺点在于,模型缺乏灵活性,无法解决需求不明确问题。用户不经过实践提出完整准确需求不切实际。此外,用户也无法以很快的速度想出全部的需求 

2.快速原型模型:快速建立反映用户主要需求的原型系统,反复由用户评价修正需求,开发出最终产品。(雏形法,用尽量少的时间)

优点: 确定需求上优于瀑布模型(通过原型与用户交互)——适用于需求并不明确的软件模型; 提供学习手段,通过开发原型和演示原型对开发者和使用者了解系统都有积极作用; 有的软件原型可以成为最终产品的一部分。

缺点: 快速建立的系统结构加连续修改可能导致产品质量低下;原型系统的内部结构可能不好

 3.增量模型(并行开发) :开发软件时将软件产品作一系列增量构件设计、编码、集成和测试——不同于前两者,而是分批向用户提交产品

优点: 较短时间向用户提交可完成有用工作产品; 用户有充裕时间学习适应产品;软件结构必须开放,方便向现有产品加入新构件(缺点在于难以实现开放)。 

4.风险更大的增量模型(更大程度上提高并行度):

前述增量模型在实现构件前完成总体的需求分析、规格说明和概要设计,相对来说风险较小。而风险更大增量模型是,确定用户需求后,各构件集并行构建。(需求分析结束后即开始并行)

虽然大幅提高了软件开发的效率,但是最后的集成难度将增大——仅适合工期非常着急的情况

5.螺旋模型:加入风险分析,常指导大型软件项目

风险:超期、超预算、行业竞争等

笛卡尔坐标四象限表达四方面活动:

制定计划:确定目标、选定方案、设定约束条件。

风险分析:评估方案,识别和消除风险。

实施工程:软件开发

客户评估:评价开发工作,计划下一阶段工作。

沿螺线自内向外每旋转一圈开发出更完善新版本。

 

(从内到外,逐渐扩大螺线圈)

直到无法通过风险分析这一过程,才把现有的软件产品发布出去。

优点: 大型软件开发项目有较好的风险控制

缺点: 需要风险评估的经验——否则后果非常严重;契约开发通常需要事先指定过程模型和发布产品;普及不如前述模型,周期很长

6.喷泉模型: 面向对象生命周期模型,体现迭代和无缝特性。

迭代: 求精,系统某部分常被重复工作多次,相关功能在每次迭代中逐渐加入演进系统。

无缝: 分析、设计、编码各阶段间不存在明显边界。 (不像结构化的方法~)

圆环代表无边界,向下的箭头代表求精。

优点: 无缝,可同步开发,提高开发效率,节省开发时间, 适应面向对象软件

缺点: 可能随时加各种信息、需求与资料,需严格管理文档,审核的难度加大。

 7.Rational统一过程: 由Rational软件公司推出的一种软件过程,该过程强调以迭代和渐增方式开发软件。 Rational统一过程是一个二维生命周期模型。(比较热门)

四个阶段周而复始,从而构建出一个较为完善的软件系统来~(每个阶段逐渐细化

Rational统一过程有9个核心工作流,包括6个核心过程工作流(前6个)3个核心支持工作流(后3个)

Rational统一过程有4个连续阶段,每个阶段有明确目标,通过一次或多次迭代完成。

Rational统一过程优点: 不断的版本发布成为一种团队日常工作的真正驱动力; 将发现问题、制定方案和解决过程集成到下一次迭代; 迭代开发,降低风险; 更好地安排产品开发的辅助过程。(该公司推出了UML过程语言)

 8.微软过程——生产实践中诞生:

微软过程的特点就是在每个阶段设置各自的里程碑

类似于螺旋模型~:

  • 规划阶段 开展市场调查研究,结合公司战略形成产品的远景目标。
  • 设计阶段 根据产品远景目标,完成软件功能规格说明和总体设计, 确定产品开发的主要进度。
  • 开发阶段 完成产品中所有构件的开发工作。
  • 稳定阶段 实行全面的内部和外部测试,最终形成可发布的RTM版本
  • 发布阶段 确认产品质量符合发布标准后,发布产品及相关消息

 

递进式的开发策略:解决问题的及时性、不确定和变更因素可控性、缩短产品上市周期,好处在于可以及时解决问题。

占领市场方面,该过程有助于先开发出小产品,再进一步推进,不断完善功能。

 

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Java之集合的排序方式(Comparable和Comparator的基本使用以及区别)

文章目录 一、Comparable接口:1. 代码示例:2. 运行结果:3. 案例分析: 二、Comparator接口:1. 代码示例:2. 运行结果:3. 案例分析: 三、Comparable和Comparator对比:1. 接…

文心一言 VS 讯飞星火 VS chatgpt (64)-- 算法导论6.5 3题

文心一言 VS 讯飞星火 VS chatgpt (64)-- 算法导论6.5 3题 三、要求用最小堆实现最小优先队列,请写出 HEAP-MINIMUM、HEAP-EXTRACT-MIN、HEAP DECREASE-KEY 和 MIN-HEAP-INSERT 的伪代码。 文心一言: 以下是使用最小堆实现最小…

UE5 AI移动无动作问题

文章目录 问题背景解决方法问题背景 在使用行为树让角色移动时,出现角色行走不播放动作的情况: 解决方法 其实有2个问题导致出现这种情况 1、角色动画蓝图的问题 角色动画蓝图可能存在4个问题: ① 无播放行走动画 ② 速度的值未正常传递 ③ 播放移动动作逻辑的值判断错…

qt与opencv学习记录

qtopencv开发入门:4步搞定环境配置-1_哔哩哔哩_bilibili qtopencv开发入门:4步搞定opencv环境配置2_哔哩哔哩_bilibili 文章内容来自上面两个视频,感谢创作者。 ps:配置环境的过程中,遇到了很多问题,我…

90道渗透测试面试题(附答案)

2023年已经快过去一半了,不知道小伙伴们有没有找到自己心仪的工作呀。最近后台收到不少小伙伴说要我整理一些渗透测试的面试题,今天它来了!觉得对你有帮助的话记得点个赞再走哦~ 1、什么是渗透测试? 渗透测试是一种评估计算机系统…

C—数据的储存(下)

文章目录 前言🌟一、练习一下🌏1.例一🌏2.例二🌏3.例三🌏4.例四 🌟二、浮点型在内存中的储存🌏1.浮点数🌏2.浮点数存储💫(1).二进制浮点数&#x…

Meshlab查看三维点云时 ,换背景颜色

Meshlab,一般默认背景颜色是深色, tools->options-> 就可以调meshlab的背景颜色了 双击 图中 标号①, 接着弹出当前颜色框,双击标号②,出现对话框三,可以选择颜色 这里 更换白色背景, …

TSDB - VictoriaMetrics 技术原理浅析

一、前言 在监控领域,通常需要指标存储组件TSDB,目前开源的TSDB组件比较多,各个组件性能、高可用性、维护成本等等各有差异。本文不分析选型问题,重点讲解VictoriaMetrics(后面简称为vm)。 有兴趣的朋友建议…

第一百一十二天学习记录:数据结构与算法基础:循环链表和双向链表以及线性表应用(王卓教学视频)

循环链表 带尾指针循环链表的合并 双向链表 单链表、循环链表和双向链表的时间效率比较 顺序表和链表的比较 链式存储结构的优点 1、结点空间可以动态申请和释放; 2、数据元素的逻辑次序靠结点的指针来指示,插入和删除时不需要移动数据元素。 链式存储…

去括号问题(C++处理)

继http://t.csdn.cn/kIcUT后的文章 题目描述 当老师不容易,尤其是当小学的老师更难:现在的小朋友做作业喜欢滥用括号。 虽然不影响计算结果,但不够美观,容易出错,而且可读性差。但又不能一棒子打死,也许他们就是将来的…

多目标灰狼算法(MOGWO)的Matlab代码详细注释及难点解释

目录 一、外部种群Archive机制 二、领导者选择机制 三、多目标灰狼算法运行步骤 四、MOGWO的Matlab部分代码详细注释 五、MOGWO算法难点解释 5.1 网格与膨胀因子 5.2 轮盘赌方法选择每个超立方体概率 为了将灰狼算法应用于多目标优化问题,在灰狼算法中引入外部种群Archi…

extern “C“的作用效果

代码 1.cpp #include <string.h>struct s {char data1;short data2;int data3;long data4; };// 定义C函数&#xff0c;汇编符号标头由g编译器按规则生成 void fun(void) {struct s src;src.data1 A;src.data2 2;src.data3 3;src.data4 4;struct s res;memcpy(&…

深度学习——过拟合和Dropout

基本概念 什么是过拟合&#xff1f; 过拟合&#xff08;Overfitting&#xff09;是机器学习和深度学习中常见的问题之一&#xff0c;它指的是模型在训练数据上表现得很好&#xff0c;但在未见过的新数据上表现较差的现象。 当一个模型过度地学习了训练数据的细节和噪声&#…

web地理信息系统开发开源架构设计

Web端地理信息软件系统研发一般包括前端展示、后端服务、地图服务、数据库等几大部分。为了节约项目经费&#xff0c;实现地理信息软件项目研发&#xff0c;采用了开源技术路线&#xff0c;通过对比&#xff0c;采用如下开发架构&#xff1a; 1、前端展示 前端展示采用angular…

FTP与HTTP: 哪种协议更适合大文件传输?

随着互联网技术的发展&#xff0c;网络传输已成为了现代社会中不可或缺的一部分。无论是文本、图像、音频、视频等各种类型的数据&#xff0c;相应的传输协议也在不断地发展和更新。FTP&#xff08;File Transfer Protocol&#xff09;和HTTP&#xff08;Hyper Text Transfer P…

java电子病历系统源码

电子病历系统采取结构化与自由式录入的新模式&#xff0c;自由书写&#xff0c;轻松录入。化实现病人医疗记录&#xff08;包含有首页、病程记录、检查检验结果、医嘱、手术记录、护理记录等等。&#xff09;的保存、管理、传输和重现&#xff0c;取代手写纸张病历。不仅实现了…

EGE-UNet, 轻量化U-Net

随着transform 的出现&#xff0c;现在语义分割网路结构越来越复杂&#xff0c;轻量化网路也较少了&#xff0c;有些轻量化也只是名义上的轻量化。今天我看到一篇很好的论文&#xff0c;上海交大发表在 MICCAI 2023 的最新研究工作&#xff0c;一个称为Efficient Group Enhance…

信息与通信工程学科面试准备——通信原理|信息与通信工程方向保研面试题集|BUAA

注意&#xff1a; 以下内容&#xff0c;基本上都是二系通信方向保研复试被提问过的内容。如果是专硕&#xff0c;那么电路分析、电磁场、DSP等方面的问题会更多&#xff0c;这里主要针对通信学硕。以下内容不能保证全覆盖&#xff1a;有的同学被问到什么是范德蒙行列式&#x…

html a标签换行显示

文章目录 用css display属性不用css&#xff0c;可以用<br>标签换行示例 用css display属性 可以使用CSS的display属性来实现多个a标签每行显示一个。 HTML代码&#xff1a; <div class"link-container"><a href"#">Link 1</a>…

前端工程化第一章:webpack5基础(上)

文章目录 1. 什么是webpack&#xff1f;2. webpack使用2.2. 前置知识2.1. 创建一个项目 3. webpack打包3.1. 创建一个webpack.config.js文件3.2. 入口&#xff08;entry&#xff09;3.2.1. webpack.config.js3.2.2. src/index.js3.2.3. package.json 3.3. 输出&#xff08;outp…