系统架构:软件工程速成

2023-09-11 20:27:55

参考

软件工程速成(期末+考研复试+软考)均适用. 支持4K

概述

软件工程概述

定义:采用工程的概念、原理、技术和方法来开发与维护软件。

三要素:

  • 方法:完成软件开发各项任务的技术方法,回答“怎么做”。
  • 工具:为运用方法提供的自动或半自动软件工程支撑环境。
  • 过程:为了获得高质量软件所需要完成的一系列任务框架,回答“什么时候做”

软件生命周期三时期、八阶段。

  1. 软件定义时期。包括的阶段有:
    问题定义阶段:用户需要解决什么样的问题。
    可行性研究阶段:软件开发是否可行。
    需求分析:明确客户需求,输出标准化的需求说明书。
  2. 软件开发时期,包括的阶段有:
    总体设计:设计整体结构、确定综合测试目标
    详细设计
    编码和单元测试
    综合测试
  3. 软件维护时期(持续时间最长、花费最大)
    软件运维

软件过程

主要包括瀑布模型、增量模型、螺旋模型、喷泉模型等,是任务框架。

  1. 瀑布模型
    在这里插入图片描述
    特点:是最基本的软件开发生命周期模型。
    优点:方便组织管理,提高了大型软件开发的质量和效率。
    缺点:开发过程死板,不便修改,很难实践

  2. 增量模型
    在这里插入图片描述
    优点:人员分配灵活、可先发布部分功能给客户。
    缺点:并行开发有难以集成的风险。

  3. 螺旋模型
    在这里插入图片描述特点:引入了风险分析,每个螺旋周期大致是瀑布模型。
    优点:设计灵活,方便变更、每个周期均要求用户评估。
    缺点:迭代次数太多导致成本高。

  4. 喷泉模型
    在这里插入图片描述
    特点:划分为多个阶段,但无明显界限,可迭代交叉。

可行性分析

可行性分析概述

可行性分析:用最小代价在最短时间内确定问题是否可解决。
可行性研究:了解客户要求,从技术、经济、社会因素等方面论证可行性

数据流图

数据流图也称为数据流程图DFD,是一种便于用户理解、分析系统数据流程的图形工具,其基本元素包括:

  • 外部实体:表示数据的源点和终点,为软件系统外的人员或组织。
  • 加工:数据的处理。
  • 数据存储:信息的静态存储。
  • 数据流:转移了什么数据。

在这里插入图片描述

例题:零件入库或出库称为事务,通过放在仓库中的CAT终端把出入库事务报告给订货系统。当某种零件的库存数小于阈值时应该再次订货。采购部每天需要一张订货报表,报表按零件编号排序,表中列出所有需要再次订货的零件,这些零件具有如下数据(零件编号、零件名称、订货数量、目前价格、主要供应商、次要供应商)。

解题:
一、从问题描述中提取数据流的四种成分

  • 源点和终点:通过仓库的CAT终端把事务报告给订货系统,进而到采购部,源点是仓库管理员,终点是采购人员。
  • 加工:采购部需要订货报表,因此需要生成订货报表。出入库改变零件数量也是一个加工。
  • 数据流:一是从仓库把出入库事务报告给订货系统,二是订货报表送到采购部。
  • 数据存储:需要订货的零件的信息、库存信息。

二、画大致模型

在这里插入图片描述
三、进一步细化

在这里插入图片描述

数据字典

数据流图描述了系统的分解,数据字典用于为数据流图中的每个数据流、文件、加工、数据项等作出说明,有以下四类条目:

  • 数据流条目:描述数据组成部分(如:内部号码=非零数字+3{数字}3)
  • 数据存储条目:
  • 数据项条目:
  • 处理条目:

在数据字典中,通常采用以下符号表示系统中使用数据项的情况,以及数据项之间的相互关系。
=:表示“等价于”或“定义为”。
+:表示“和”,连接两个数据元素。
[ ]:表示“或”,对[ ]中列举的各数据元素,用“〡”分隔,表示可任选其中某一项。
例如,储户到银行存款时,可选择存款期限为活期、半年期、1年期、3年期或5年期中的某一种,可表示为存款期限=[活期半年|1年|3年|5年]
{ }:表示“重复”,对{ }中的内容可重复使用。
( ):表示“可选”,对( )中的内容可选、可不选,各选项之间用“,”号隔开。
如果要对{ }表示的重复次数加以限制,可将重复次数的下限和上限写在花括号的左右(或在花括号左边分别用下角标和上角标表示)。
特别地,1{A}表示A的内容至少要出现1次;{B}表示B的内容允许重复零至任意次。

例题:某校可用的电话号码有以下几类。
校内电话号码由4位数字组成,第一位数字不是0;
校外电话第一位是0,分为本市电话和外地电话;
本市电话接着拨8位号码,其中第一位不是0;
外地电话先拨区号(3-5位),再拨当地电话号(7或8位,且第一位不是0)。
请描述其数据字典。

解:从大到小,逐步精细。
电话号码 = [校内电话 | 校外电话]
校内电话 = 非零数字 + 3{数字}3
非零数字 = [1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9]
数字 = [0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9]
校外号码 = [本市电话 | 外地电话]
本市电话 = 0 + 非零数字 + 7{数字}7
外地电话 = 0 + 区号 + 当地号码
区号 = 3{数字}5
当地号码 = 非零数字 +6{数字}7

需求分析

需求分析概述

定义:需求分析是指开发人员要准确理解客户要求,进行详细调查研究,将用户的非形式话的需求描述转换为完整的需求定义,进而生成软件需求规格说明书的过程。

ER图

提供了表示实体类型、属性和联系的方法。

状态转换图

通过描绘系统状态及引起系统状态转换的事件,来表示系统的行为,其符号包括:

  • 初态:用实心圆表示。
  • 中间状态:用圆角矩形表示,可分为上中下三部分,分别代表状态的名称、变量说明(可选)和活动表(可选)。
  • 终态:用一对同心圆表示。
  • 状态转换:用箭头表示。如转换由事件触发则应在箭头上标明,不标明则表示在原状态内部活动执行完之后自动触发。

在这里插入图片描述

更多推荐

day2| 977.有序数组的平方、209.长度最小的子数组、 59.螺旋矩阵II

977.有序数组的平方题目链接:https://leetcode.cn/problems/squares-of-a-sorted-array/文章讲解:https://programmercarl.com/0977.%E6%9C%89%E5%BA%8F%E6%95%B0%E7%BB%84%E7%9A%84%E5%B9%

/etc/sysctl.conf的参数

/proc/sys目录下存放着大多数内核参数,并且可以在系统运行时进行更改,不过重新启动机器就会失效。/etc/sysctl.conf是一个允许改变正在运行中的Linux系统的接口,它包含一些TCP/IP堆栈和虚拟内存系统的高级选项,修改内核参数永久生效。也就是说/proc/sys下内核文件与配置文件sysctl.co

充分利用学习平台,提升个人职业竞争力

在当今竞争激烈的职场环境中,个人职业竞争力的提升变得至关重要。而充分利用学习平台成为了我们提升竞争力的一种有效途径。学习平台不仅可以提供丰富多样的学习资源,还能提升个人技能和知识水平,让我们更具竞争力。学习平台提供了丰富的学习资源,为我们进一步学习和提升提供了便利。无论是在线课程、教学视频、学习资料还是学术期刊,学习平

OSCP系列靶场-Esay-Gaara保姆级

OSCP系列靶场-Esay-Gaara目录OSCP系列靶场-Esay-Gaara总结准备工作信息收集-端口扫描目标开放端口收集目标端口对应服务探测信息收集-端口测试22-SSH端口的信息收集22-SSH端口版本信息与MSF利用22-SSH协议支持的登录方式22-SSH弱口令爆破(待定)22-SSH手动登录尝试(无)80

C 初级语法学习笔记(基础)

C程序结构,主要分为以下部分:1.预处理器指令#include用来引入头文件#define预先定义2.函数(标识符&关键字&运算符)存储类每个C语言程序都需要包含main()函数,main()函数是程序运行的入口。return_typefunction_name(parameterlist){bodyofthefunc

CS224W - Colab 5 学习笔记

Inthisnotebook,wewillfirstlearnhowtotransformNetworkXgraphsintoDeepSNAPrepresentations.Then,wewilldivedeeperintohowDeepSNAPstoresandrepresentsheterogeneousgraph

类加载器 - 双亲委派模型

文章目录回顾一下类加载过程类加载器类加载器介绍类加载器加载规则类加载器总结自定义类加载器双亲委派模型双亲委派模型介绍双亲委派模型的执行流程双亲委派模型的好处打破双亲委派模型方法本文参考:类加载器详解(重点)|JavaGuide(Java面试+学习指南)回顾一下类加载过程开始介绍类加载器和双亲委派模型之前,简单回顾一下类

怎样提高服务器安全性?45.248.10.x

服务器被攻击一般有两种比较常见的方式:一是恶意的攻击行为,如拒绝服务攻击,网络病毒等等,这种方式就是消耗服务器资源,影响服务器的正常运作,甚至服务器所在网络的瘫痪;另外一个就是恶意的入侵行为,这种行为更是会导致服务器敏感信息泄露,入侵者更是可以为所欲为,肆意破坏服务器。所以我们要保证网络服务器的安全可以说就是尽量减少网

vite + vue3 的项目中使用 vitest 做单元测试(仅供参考)

一、配置文件//vitest.config.tsimport{fileURLToPath}from'node:url'import{mergeConfig,defineConfig}from'vite'import{configDefaults}from'vitest/config'//importviteConfig

探索工业路由器如何助力无人驾驶方案的突破性解析

随着无人驾驶技术的发展,越来越多的企业和组织开始部署无人驾驶车辆来提高运输效率和安全性。在这些方案中,工业路由器被广泛应用于建立稳定、安全和高效的通信网络。在本篇文章中,我们将分享一个真实的无人驾驶方案部署案例,其中工业路由器使用了星创易联的SR800-d,它如何助力无人驾驶方案的实现。案例背景:某物流公司是一家专注于

【Node.js】模块化:

文章目录1、模块化的基本概念2、Node.js中模块化【1】Node.js中模块的分类【2】加载模块【3】模块作用域【4】向外共享模块作用域中的成员【5】模块化规范3、npm与包(包/依赖/插件)【1】包的基本知识:【2】开发属于自己的包【3】发布包4、模块的加载机制【1】优先从缓存中加载【2】内置模块的加载机制【3】

热文推荐