首页 > 其他分享 >软件工程

软件工程

时间:2023-03-16 20:34:11浏览次数:39  
标签:状态 模型 系统 软件工程 模块 数据流 软件

1.软件

什么是软件

程序以及开发使用维护程序所需的所有文档

软件=程序+数据+文档

2.软件危机

什么是软件危机

软件危机是指在计算机软件的开发和维护过程中所遇到的一系列严重问题。

软件危机的主要表现

① 软件产品质量低劣,甚至开发过程就夭折。

② 软件生产率低,不能满足需要。

为什么会产生软件危机

① 对软件开发的成本和进度的估计常常很不正确。

② 对“已完成的”软件系统不满意的现象经常发生。

③ 软件产品的质量常常靠不住。

④ 软件常常是不可维护的。

⑤ 软件通常没有适当的文档资料。

⑥ 软件成本在计算机系统总成本中所占比例逐年上升。

3.软件工程

什么是软件工程

​ 采用工程的概念、原理、技术和方法来开发与维护软件,把经过时间考验而证明正确的管理技术和当前能够得到的最好的技术方法结合起来,以经济地开发出高质量的软件并有效地维护它,这就是软件工程。

软件工程发展的四个重要阶段

传统软件工程、 对象工程 、过程工程、构件工程

什么是软件工程方法学

软件从定义、开发到维护等全过程中使用的一整套技术方法的集合,可分为传统方法学和面向对象方法学等。

软件工程方法学的三要素

① 过程:开发步骤

② 方法:技术方法

③ 工具:支撑环境

传统方法学

① 采用结构化技术来完成软件开发的各项任务,并使用适当的软件工具或软件工程环境来支持结构化技术的运用

② 往往采用“瀑布模型”开发,将数据和操作分离。

③ 强调自顶向下、逐层分解、顺序开发

④ 软件成功率和质量较高

面向对象方法学

① 面向对象方法是一种以数据为主线,把数据和对数据的操作紧密地结合起来(对象)的方法。

② 强调主动地多次反复迭代地开发

③ 基本特征:类、继承、封装、多态

④ 便于复用和维护

软件生存周期

使用生命周期模型简洁地描述软件过程

ChOT.png

重要的软件过程模型

瀑布模型

① 依靠文档驱动,每个阶段都需要生成文档

② 阶段间具有顺序性和依赖性

③ 缺乏对于需求变更和项目变化的适应性,适用于用户需求明确、完整、无重大变化的软件项目开发。

Cc5z.png

快速原型模型

① 快速原型模型弥补了瀑布模型不适用于需求动态变更的缺点,其本质是“快速”。

② 开发费用低、开发周期短且对用户更友好

③ 适用场景:对所开发的领域比较熟悉而且有快速的原型开发工具、产品移植和升级

Cpn4.png

增量模型

① 把软件产品作为多个增量构件来设计、编码、集成、测试,开发人员一个构件接一个构件地向用户提交产品。

② 每个增量构件的开发采用瀑布模型。

③ 能在较短时间内向用户提交可完成部分工作的产品

④ 适用场景

​ a.进行已有产品升级或新版本开发;

​ b.对完成期限严格要求的产品;

​ c.对所开发的领域比较熟悉而且已有原型系统。

C0Fv.png C4zC.png

螺旋模型

① 对于大型软件,只开发一个原型往往达不到要求。螺旋模型将瀑布模型和增量模型结合起来,并加入了风险分析

② 由风险驱动

③ 螺旋模型主要适用于内部开发的大规模软件项目

CdAh.png CDUy.png

喷泉模型

① 面向对象的软件过程模型

② 由对象驱动

③ 其特点如下:

​ 1、开发过程有分析、系统设计、软件设计和实现4个阶段。

​ 2、各阶段相互重叠,它反映了软件过程并行性的特点。

​ 3、以分析为基础,资源消耗成塔型。

​ 4、反映了软件过程迭代性的自然特性,从高层返回低层无资源消耗。

​ 5、强调增量开发,整个过程是一个迭代的逐步提炼的过程。

CGfQ.png CVcR.png

4.问题定义

问题定义要完成什么

  1. 该阶段必须回答的问题是“是什么?”

  2. 其目的是弄清用户需要解决的问题,以及项目所需的资源和经费

  3. 关键性任务就是确定问题的性质、工程的目标和规模

5.可行性分析

可行性分析

① 概念:用最小的代价在尽可能短的时间内确定问题是否能够解决

②可行性研究的3个方面

  1. 技术可行性:现有的技术能实现这个系统吗
  2. 经济可行性:系统所产生的经济效益能高于它的开发成本吗
  3. 操作可行性:系统的操作方式在这个用户组织内行得通吗

案例:库存清单系统

项目:库存清单系统

目标:1. 管理仓库各类零件数量的变化,并及时修改(更新库存清单文件)。

​ 2.报告库存零件达到库存量临界值的订货报告,产生订货信息。

​ 3.生成订货报表。

想法:用本厂的小型机进行库存清单处理

可行性研究:时间**15天

系统流程图

概述

① 描绘物理系统的传统工具,描述数据在系统各部件之间流动的情况

② 用图形符号以黑盒子形式描绘组成系统的每个部件

符号和含义

  1. 基本符号
CqEk.png
  1. 系统符号
CJOO.png

案例

​ 某工厂有一个库房, 存放该厂生产需要的物品, 库房中的各种物品的数量及各种物品库存量临界值等数据记录在库存文件上,当库房中物品数量有变化时,应更新库存文件。若某种物品的库存量少于库存临界值,则报告采购部门以便其订货, 每天向采购部门送一份采购报告。

​ 库房可使用一台微机处理更新库存文件和产生订货报告的任务。物品的发放和接受称为变更记录,由键盘录入到微机中。 系统中的库存管理模块对变更记录进行处理,更新存储在磁盘上的库存文件,并把订货信息记录到联机存储中。每天由报告生成模块读一次订货信息,并打印出订货报告。

Crn9.png

数据流图DFD

概述

① 描绘信息流和数据从输入移动到输出的过程中所经受的变换

② 数据流图只需考虑系统必须完成的基本逻辑功能,完全不需要考虑如何具体的实现这些功能

③ 不同阶段随着需求等的变化,DFD也会变化

如何绘画

① 先找系统数据的输入输出点,画出外部实体

② 确定外部实体的输入输出数据流

③ 由源点外部实体的数据流出发,逐渐进行加工,完成整个数据流图

④ 一张图的处理超过5~9个时,应该进行分层,把最基本的系统功能做为第0层,从第1层开始对每个模块的功能进行细化

⑤ 数据流平衡、子父图平衡

符号和含义

CIHV.png

案例:订货系统

源点/终点 仓库管理员/采购员
处理 产生报表 处理事务
数据存储 订货信息 库存清单
数据流 订货报表 事务
  1. 顶层图
CMz3.png
  1. 0层图
CZid.png
  1. 1层图
CXA6.png

数据字典DD

描述DFD中数据流、数据存储、处理过程和外部实体。

概述

① 数据流图中所有元素定义的集合

② 系统逻辑模型=DFD+数据字典

  • 没有数据字典,数据流图就不严格

  • 没有数据流图的数据字典难以发挥其作用

③ 字典中可有以下四种类型的条目

​ 数据流 、数据元素 、 数据存储 、 处理

案例:存折

C7fW.png

成本效益分析方法(案例)

① 货币的时间价值

  1. 假设年利率为i,现在投入P元,则n年后能够得到: \(F=P(1+i)^n\), 这就是P元钱在n年后的价值。

  2. 注意变式:\(F/(1+i)^n\)

问题描述:假设购置一套应用软件投资20万元,预计可使用5年,每年直接经济效益9.6万元,年利率为5%,试计算投入/产出比。

解:考虑到货币的时间价值,5年的总体收入应当逐年按照变式计算,并非为恒定的9.6万元。1~5年中,每年的收入折算到当前的数据如下表所示。

CUci.png
  • 5年后预计实际收入:41.5630,不是9.6*5=48
  • 本软件投入/产出比为: 41.5630/20 = 2.0785

② 投资回收期(回本)

两年后收入17.8513万元,尚欠2.15万元没有收回成本20万元,在第三年还需要:2.15/(26.1432-17.8513) = 0.259(年),故投资回收期为2.259年。

③ 纯收入

41.5630-20=21.5630

6.需求分析

为什么要需求分析

为了开发真正满足用户需求的成功的软件产品,必须进行需求分析

需求分析的任务

CiQp.png
  • 确定对系统的综合要求;
  • 分析系统的数据要求;
  • 导出系统的逻辑模型;
  • 修正系统开发计划;

实体联系图ER

描述数据对象和它们之间的关系

实体联系

① 一对一联系(1:1)

② 一对多联系(1:N)

③ 多对多联系(M:N

符号

CjEf.png

案例(银行存取款)

​ 银行计算机储蓄系统的工作过程大致如下:储户填写的存款单或取款单由业务员输入系统,如果是存款则系统记录存款人姓名、住址(或电话号码)、身份证号码、存款类型、存款日期、到期日期、利率及密码(可选)等信息,并印出存单给储户;如果是取款而且存款时留有密码,则系统首先核对储户密码,若密码正确或存款时未留密码,则系统计算利息并印出利息清单给储户

CTeZ.png

状态转化图STD

定义

状态转换图(状态图)通过描绘系统的状态及引起系统状态转换的事件,来表示系统的行为。

符号表示

①初态:用实心圆表示。

②终态:用一对同心圆(内圆为实心圆)表示。

③中间状态:用圆角矩形表示。可以用两条水平横线把它分成上、中、下3个部分。

  • 上面部分为状态的名称,这部分是必须有的
  • 中间部分为状态变量的名字和值
  • 下面部分是活动表
C6qb.png

案例

​ 机票预定系统中涉及的状态是机票的状态。当新的航空公司入驻之后,系统管理员会向数据库中添加机票相关信息,该机票进入审核状态,当该机票审核通过后,则处于待售状态;在销售过程中,如果该机票全部销售完毕,则进入售罄状态;销售过程中,如果航班取消,机票会进入下架状态,机票售罄或下架后,管理员清空机票信息,机票会进入退出流通状态,最后管理员删除机票

Clsq.png

​ 复印机的工作过程大致如下:未接到复印命令时处于闲置状态,一旦接到复印命令则进入复印状态,完成一个复印命令规定的工作后又回到闲置状态,等待下一个复印命令;如果执行复印命令时发现没纸,则进入缺纸状态,发出警告,等待装纸,装满纸后进入闲置状态,准备接收复印命令;如果复印时发生卡纸故障,则进入卡纸状态,发出警告,等待维修人员来排除故障,故障排除后回到闲置状态。

CKil.png

层次方框图

概述

  • 层次方框图用树形结构的一系列多层次的矩形框来描述数据的层次结构:
  • 树形结构的顶层是一个单独的矩形框,它代表着完整的数据结构;
  • 下面的各层矩形代表这个数据的子集;
  • 最低层的各个框代表组成这个数据的实际数据元素

案例

CFHg.png

CH1I.png

warnier图

树形结构、关系、数量

C9dB.png

7.形式化说明技术

概念区分

① 非形式化方法:用自然语言描述需求规格说明,是典型的非形式化方法。

  • 矛盾;
  • 二义性;
  • 含糊性;
  • 不完整性;
  • 抽象层次混乱;

② 半形式化:用数据流图或实体—联系图建立模型

③ 形式化:描述系统性质的基于数学的技术(严谨),如果一种方法有坚实的数学基础,那么它就是形式化的

有穷状态机

有穷状态机是表达规格说明的一种形式化方法。

构成

一个有穷状态机可以表示为一个5元组(J,K,T,S,F)

  • 状态集J
  • 输入集K
  • 由当前状态和当前输入确定下一个状态(次态)的转换函数T、
  • 初始态S
  • 终态集F

状态转换形式

当前状态[菜单]+事件[所选择的项]⇒下个状态

案例(自动化图书馆)

自动化图书馆流通系统:每本书都有一个条形码,每个借阅人都有一个带有条形码的卡片。当一个借阅人想借一本书时,图书管理员扫描书上的条形码和借阅人卡片上的条形码,然后在计算机终端上输入C;当归还一本书时,图书管理员将再做一次扫描,并输入R。图书管理员可以把一些书加到(+)图书集合中,也可以删除(-)它们。借阅人可以在终端上查找到某个作者所有的书(输入“A=”和作者名字),或具有指定标题的所有书籍(输入“T=”和标题),或属于特定主题范围内的所有图书(输入“S=”加主题范围)。最后,如果借阅人想借的书已被别人借走,图书管理员将给这本书设置一个预约,以便书归还时把书留给预约的借阅人(输入“H=”加书号)。

① 图书有穷状态机

状态机J:{书在图书馆S1,书被借出S2,书被预约S3}

输入集K:{书上条形码,借阅卡条形码,终端输入各种命令}

转换函数T:如下图

初始态S:{书在图书馆S1,书被借出S2}

终态集F:{书被借出S2,书被预约S3}

CgYG.png

② 图书馆终端管理员模式的有穷状态机

状态机J:{管理员设置状态,书入库,书出库(删除),预约}

输入集K:{终端输入管理员命令,书的各种状态(S1,S2,S3)}

转换函数T:如图

初始态S:{管理员设置状态}

终态集F:{书入库,书出库(删除),预约}

Ctez.png

④ 图书馆终端用户模式的有穷状态机

状态机J:{读者查询状态,查询结果}

输入集K:{终端输入用户查询命令,书的各种状态(S1,S2,S3)}

转换函数T:如图

初始态S:{读者查询状态}

终态集F:{查询结果}

C2qT.png

8.总体设计

任务

① 划分模块,确定软件结构

② 确定系统的数据结构

③ 设计用户界面

设计原理

模块化

① 模块是程序对象有名字的集合,是构成程序的基本构件。例如,过程、函数、子程序、宏等。

② 模块化就是将系统划分为若干个模块,每个模块完成一个子功能。

③ 模块化的目的是将系统“分而治之”,模块化能够降低问题的复杂性,使软件结构清晰,易阅读、易理解,易于测试和调试,因而也有助于提高软件的可靠性。

抽象

① 抽象就是抽出事物的本质特性而暂时不考虑它们的细节。

② 优点

  • 简化了软件的设计和实现;
  • 提高了软件的可理解性和可测试性;
  • 使得软件更容易维护;

逐步求精

(1)定义:为了能集中精力解决主要问题而尽量推迟对问题细节的考虑。

(2)原理

​ ①逐步求精是一种自顶向下的设计策略。

​ ②求精实际上是细化过程。

信息隐藏和局部化

模块独立(耦合、内聚)

耦合

① 耦合是对一个软件结构内不同模块之间互连程度的度量

② 完全独立<数据耦合<控制耦合<特征耦合<公共环境耦合<内容耦合。

内聚

① 内聚衡量一个模块内部各个元素彼此结合的紧密程度

Cfw4.png

软件设计原则:低耦合、高内聚”和“高扇入、低扇出”。

启发规则

① 改进软件结构提高模块独立性

模块规模应该适中

③ 深度、宽度、扇出和扇入都应适当

深度

表示软件结构中从顶层模块到最底层模块的层数。

宽度

表示控制的总分布。

扇入

指一个模块的直接上属模块个数。

扇出

指一个模块直接控制下属的模块个数。

Cs1v.png

高扇入,低扇出。可结合班级管理理解。

描绘软件结构的图形工具

层次图

HIPO图

Cosy.png

C1hQ.png

C3XR.png

结构图SC

基本符号

① 方框代表一个模块,框内注明模块的名字或主要功能;

② 方框之间的箭头(或直线)表示模块的调用关系

③ 尾部是空心圆的箭头表示传递的是数据实心圆的箭头表示传递的是控制信息

特殊符号

① 表示当模块M中某个判定为真时调用模块A,为假时调用模块B;

CPdC.png

② 表示模块M循环调用模块A、B和C;

CWjh.png

案例

注意输入、处理、输出和他们的上层和下层组成

C8YE.png COqO.png CNBk.png

面向数据流的设计方法

变换流

事务流

9.详细设计(编写代码)

程序流程图

盒图(N-S)

PAD图

判定表

判定树

Jackson图

改进的Jackson图

10.else见ppt和电子书

微信读书

[https://weread.qq.com/web/bookDetail/2ad325c0719cd2792ade42d]

ppt

[ppt文件夹]

学堂在线选择题

[ [学堂在线 选择题.pdf]](学堂在线 选择题.pdf)

标签:状态,模型,系统,软件工程,模块,数据流,软件
From: https://www.cnblogs.com/shyfvm/p/17224034.html

相关文章

  • 软件工程日报十八——实现闹钟定时功能
    今天学习如何在安卓上实现闹钟定时功能xml文件源码如下<?xmlversion="1.0"encoding="utf-8"?><RelativeLayoutxmlns:android="http://schemas.android.com/apk/res......
  • 软件工程
    1.软件什么是软件程序以及开发使用维护程序所需的所有文档软件=程序+数据+文档2.软件危机什么是软件危机软件危机是指在计算机软件的开发和维护过程中所遇到的一......
  • 软件工程不是教会不怎么会写程序的人开发软件
    软件工程并不是教会不怎么会写程序的人开发软件,因为软件工程主旨为工程化的方法指导软件开发、维护。软件工程开发过程分为可行性研究、需求分析、软件设计、编码、软件测......
  • 对软件工程课程的希望及个人目标
    通过学习软件工程这门课程,我希望能够了解软件工程这门课程以及懂得如何学以致用,同时能够提升自己的思维水平,懂得如何高效率地开发一款高质量的软件,以及懂得如何去维护。个......
  • 2023.3.14软件工程日报
    时间:3小时代码量:150行今日总结来说,进行了地铁系统的思路研讨,沿着建民老师的思路进行了开发,分了三种情况,但是第三种情况还在进行思考,此外把自己的Androidstudio中的app进......
  • 2023年3月14日(软件工程日报)
    Application是Android的一大组件,在App运行过程中有且仅有一个Application对象贯穿应用的整个生命周期。打开AndroidManifest.xml,发现activity节点的上级正是application节......
  • 3月14日软件工程结队日报
    学习时间:五小时代码量:600博客量:1任务:今天我和我的cp完成了对于之前安卓程序的收尾工作,然后绘制完了地铁查询系统的前端界面。 ......
  • 软件工程——对流程和规范的认识
     2023-03-1121:01 来自小组成员: 哒咩~ 从某种程序上来说,流程规范确实是一种约束:约束了我们如何做一件事,约束了我们用什么标准做事,约束了我们用特定的顺序做事。......
  • 软件工程方法论对我们经软件开发有多大用处?
       软件工程方法论是指在软件开发过程中必须遵循的普遍行为和规则,包含方法(一种使用定义好的技术集及符号表示组织软件开发的过程,是完成软件开发各个任务的技术方法)、......
  • 软件工程之个人工作流程
    一、单元测试:单元测试作为一种解决方案,让自己负责的模块功能定义尽量明确,模块内部的改变不会影响其他模块,而且模块的质量能得到稳定、量化的保证。1.1写单元测试1.2......