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

news2024/11/24 2:02:04

本贴为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版本
  • 发布阶段 确认产品质量符合发布标准后,发布产品及相关消息

 

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

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

 

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

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

相关文章

SpringCloud-Alibaba之Sentinel熔断与限流

一、下载安装运行 http://localhost:8080进行访问 登录账号和密码均为sentinel 二、创建工程,并注册到nacos服务中心 依赖spring-cloud-starter-alibaba-nacos-discovery,spring-cloud-starter-alibaba-sentinel sentine-datasource-nacos (持久化)配置文件 se…

LAXCUS分布式操作系统:人工智能最后一公里

随着人工智能技术的飞速发展,越来越多的应用场景开始涌现。然而,在实际应用中,人工智能技术仍然面临着许多挑战,其中最大的挑战之一就是如何实现人工智能的“最后一公里”。这一问题主要体现在以下几个方面: 计算资源…

【UniApp开发小程序】”我的“界面实现+“信息修改“界面实现+登出账号实现+图片上传组件【基于若依管理系统开发】

文章目录 界面实现界面效果我的修改信息 “我的”界面实现api页面退出账号让自我介绍只显示一行,结尾多余的字使用...代替跳转到信息修改页面 信息修改界面实现api页面动态给对象设置属性名和值修改密码图片上传组件 部分后端代码Controller 界面实现 界面效果 我…

CTF PWN-攻防世界CGfsb格式化字符串漏洞

文章目录 前言格式化字符串漏洞格式化字符串漏洞基本原理简单典型案例 漏洞的危害与利用拒绝服务攻击内存数据读取内存数据覆盖 攻防世界:CGfsg题目思路简析任意地址覆写 总结 前言 距离 2021 年年底短暂接触学习 CTF PWN 相关知识(CTF PWN-攻防世界XCT…

Matlab对FS32K144编程--CAN通讯

1、系统运行时间周期-10ms 2、配置CAN通讯初始化---波特率:500k,测试用CAN0 3、设置初始化配置优先级最高 4、清除CAN接受中断标志位初始化--仅运行一次,把要接受的CAN地址都要配置一下,如ID:0X245 5、建立全局变量--从单片机向外…

Android Studio安装和设置SDK、Gradle(国内源)、AVD下载目录详细教程

本机环境:win11家庭版 Android Studio版本:android-studio-2022.2.1.20-windows 文章目录 安装Android Studio官网下载安装Android Studio设置Android Studio的gradle使用的JDK版本设置Android Studio的SDK下载目录设置虚拟设备内存 设置Android Studio…

MySQL主从复制原理及实验

原理 1.环境搭建 1.需要两台服务器,如我的分别是: 1. -》 192.168.197.146---主库 2. -》 192.168.197.147---从库 2.分别关闭防火墙或者放行mysql端口号3306 如: systemctl stop firewalld systemctl disable firewalld 2.配置主库…

iOS pod EaseIMKit库如何放在本地使用

在使用环信EaseIMKit库的时候,发现有些开发者需要改动库中的一些逻辑,或者有UI上的一些调整,如果直接去改pods里面的库,在之后的库版本升级会把之前修改过的代码覆盖掉,这个时候我们就需要pod指向本地的库,…

vue父组件和子组件数据传递

vue --父组件向子组件传递数据 父组件&#xff1a; <template><div class"parent"><p>父组件&#xff1a;{{ msg }}</p><Child message"Hello, I am parent!"></Child></div> </template><script>…

NetSuite财务报表General Ledger Report的缺陷及改造案例

本周有用户提到一个特殊的业务场景&#xff0c;比较有代表性&#xff0c;在此分享。 问题 “如果在一张JE中&#xff0c;某个科目既有借又有贷&#xff0c;金额相同。那么在General Ledger Report中此JE的借贷都显示为0。这与事实不符&#xff0c;所以是不对的。” JE 155&a…

【JavaEE】Spring中注解的方式去存储Bean对象

Spring的开发要点总结 文章目录 【JavaEE】Spring的开发要点总结&#xff08;2&#xff09;1. 通过类注解的方式存储Bean对象1.1 五大 类注解1.1.1 Controller 控制器存储1.1.2 Service 服务存储1.1.3 Repository 仓库存储1.1.4 Component 组件存储1.1.5 Configuration 配置存储…

对比CahtGPT Bard Claude2对中文的理解

对比CahtGPT Bard Claude2对中文的理解 今天简单测试了一下目前这三个很火的模型对中文的理解能力 简单问题 鲁迅和周树人的关系 Bard CahtGPT Claude 介绍一下平凡的世界这本书 Bard CahtGPT

ES6 (js)

学习了很多vue的视频&#xff0c;还有nuxt的&#xff0c;还是不会。 还是要学ES6 本文的大部分出自小马老师的资料&#xff0c;还有曾大佬的文章 变量&#xff08;Let 和 const&#xff09; 在es6中&#xff0c;多用let 和const 来声明变量类型。因为var 会提前声明&#xff0…

【JDBC系列】- 核心API之preparedstatement用法

核心API之preparedstatement用法 &#x1f604;生命不息&#xff0c;写作不止 &#x1f525; 继续踏上学习之路&#xff0c;学之分享笔记 &#x1f44a; 总有一天我也能像各位大佬一样 &#x1f3c6; 博客首页 怒放吧德德 To记录领地 &#x1f31d;分享学习心得&#xff0c;…

docker学习笔记——狂神说视频学习笔记

Ubuntu上docker安装 UBUNTU 20.04 LTS 安装DOCKER看高博主的博文&#xff0c;一键复制命令安装即可。 docker命令 docker version查看你docker版本信息 docker info显示docker系统级别的信息 docker --helpdocker命令查询 docker docs的referrence介绍了docker的详细命令 …

chrome查看浏览器内核日志

由于经常在网页上调试播放音视频&#xff0c;但是总遇到一些未知原因&#xff0c;导致无法正常播放&#xff0c;亟需查看浏览器内核日志&#xff0c;分析原因&#xff0c;做一下笔记。 (1) 查看浏览器快捷键属性 &#xff08;2&#xff09;在快捷键启动位置补充参数 --enable-…

[ 容器 ] Docker 的数据管理

目录 一、Docker 的数据管理1.1 数据卷2. 数据卷容器 二、 端口映射三、容器互联&#xff08;使用centos镜像&#xff09;四、Docker 镜像的创建1&#xff0e;基于现有镜像创建2&#xff0e;基于本地模板创建3&#xff0e;基于Dockerfile 创建3.1 联合文件系统&#xff08;Unio…

vue3前端分页,全选翻页状态保持

直接贴代码&#xff0c;代码中有注释 <template><div class"viewer-container" id"viewer-container"><!-- 表格 --><el-table:row-key"getRowKeys":data"data.tableDataCopy"style"width: 100%"ref&…

Go语言开发小技巧易错点100例(八)

往期回顾&#xff1a; Go语言开发小技巧&易错点100例&#xff08;一&#xff09;Go语言开发小技巧&易错点100例&#xff08;二&#xff09;Go语言开发小技巧&易错点100例&#xff08;三&#xff09;Go语言开发小技巧&易错点100例&#xff08;四&#xff09;Go…

Linux网络--UDP套接字

文章目录 预备知识socket套接字UDP网络编程 一、预备知识 1.源IP地址和目的IP地址 IP地址&#xff1a;标识计算机在网络中的唯一性。 在IP数据包头部中, 有两个IP地址, 分别叫做源IP地址, 和目的IP地址。 源IP地址 &#xff1a; 网络通信的发起者。 目的IP地址 &#xff1a; …