202110111235 - 软件工程笔记

news/2025/3/20 19:28:34/文章来源:https://www.cnblogs.com/route/p/18783792

1. 概述

1.1 开发只占冰山一角
1.2 计算机科学、数学,工程,管理
1.3 软件开发的本质:实现问题域中的概念和处理逻辑 到 运行平台的概念和处理逻辑的映射。

系统建模
需求 -> 设计 -> 实现

1.4 软件工程的目标:

  • 生产具有正确性、可用性、以及开销合宜的产品。
    1.5 软件工程的活动:
    需求:定义问题,给出系统模型
    - 需求获取,跟用户、领域专家沟通
    - 需求定义,给出系统功能正确的陈述。通常采用自然语言、use case图
    - 需求规约,系统需求规格说明
    - 需求验证,验证需求陈述和需求规约的一致性、完整性、可跟踪性。
    设计:在需求分析的基础上,给出系统的软件设计方案。
    - 总体设计
    - 建立整个软件体系结构,包括子系统/模块以及相关层次的说明、每一模块的接口定义
    - 结构类型:层次模块体系结构、C/S
    - 详细设计
    - 根据总体设计,给出每一模块的详细描述,即数据结构和实现算法
    实现:把设计结果转换为可执行代码
    确认:贯穿整个开发过程
    支持:修改和完善,纠错/适应

2. 软件过程

2.1 软件过程
开发逻辑,是获取正确软件的关键
- 软件开发有哪些活动?即要做哪些映射
- 应如何正确组织开发活动,形成求解软件的逻辑?

软件开发方法学:结构化方法、面向对象方法、面向数据结构方法、维也纳开发方法

过程是活动的集合,活动是任务的集合,任务是把输入转换成输出的操作。

2.2 软件生存周期过程
按承担软件开发工作的主体,分三类:
基本过程
- 获取、供应、开发、运行、维护
- 开发过程包括13个活动
- 过程的实施准备
- 系统需求分析(软硬件、人)
- 系统结构设计
- 软件需求分析(一致性、二义性)
- 软件体系结构设计
- 软件详细设计
- 软件编码和测试
- 软件集成
- 软件合格测试
- 系统集成
- 系统合格测试
- 软件安装
- 软件验收支持
支持过程
- 文档过程
- 配置管理过程
- 质量保证过程
- 验证过程
- 确认过程
- 联合评审过程
- 审计过程
- 问题解决过程
组织过程
- 管理过程
- 基础设施过程
- 改进过程
- 人力资源过程
- 资产管理过程
- 复用程序管理过程
- 领域软件工程过程

软件开发模型 = 软件生存周期模型

  • 瀑布模型
    • 每个阶段的工作产品,可提交的产品
  • 增量模型
    • 适用:最初的需求是明确,确定的。不断迭代
  • 演化模型
    • 适用:最初需求不明确。初版用户反馈
  • 喷泉模型
    • 需求分析和系统设计融合较多

3. 需求

需求的基本性质:

  • 必要性:是要求的吗?
  • 无歧义性:只能用一种方式解释
  • 可测的:可以进行测试吗?
  • 可跟踪的:可以从一个开发阶段到另一个开发阶段进行跟踪
  • 可测量的,可量化

需求分类:

  • 功能
    功能需求规约了系统或系统构建必须执行的功能。
    (1)关于该功能输入的所有假定,或为了验证该功能输入,有关监测的假定;
    (2)功能内的任一次序,这一次序是与外部相关的;
    (3)对异常条件的响应,包括所有内外部产生的错误;
    (4)需求的时序优先程度;
    (5)功能之间的互斥规则;
    (6)系统内部状态的假定;
    (7)为了该功能的执行,所需要的输入和输出次序;
    (8)用于转换或内部计算的公式。
  • 性能
  • 外部接口
  • 设计约束:限制了系统或构建的设计方案
  • 质量属性

软件需求规约SRS:
格式:

1. 引言1.1 目的1.2 范围1.3 定义,缩略语1.4 参考文献1.5 概述(即项目范围)2. 总体描述2.1 产品概述2.2 产品功能2.3 用户特性2.4 约束2.5 假设和依赖3. 特定需求(核心)附录
索引

4. 结构化分析方法

模型:就一定目的而言,从某种角度,给出物理系统抽象的描述。主要是边界,及内部关系。

就软件需求分析而言,即:系统化地使用问题域属于,给出该问题的模型(即“系统必须做什么”的一个估算)

需求分析的目标:
对需求陈述进行分析,解决其中的歧义、不一致等问题,以系统化的形式表达用户的需求,即给出问题的形式化或半形式化的描述(称为系统的概念模型,或系统的需求规约或需求规格说明)。作为开发人员和客户间技术契约的基础,并作为而后开发活动的一个基本输入。

结构化分析模型:
(1)基本术语
数据流、加工、数据存储、数据源、数据潭
数据流、数据存储 -- 描述数据抽象
加工 -- 描述过程/功能的抽象,表达系统内涵
数据源、数据潭 -- 描述系统边界抽象,表达系统外延
(2)模型表达工具
数据流图(DFD图) -- 表达系统功能模型的工具
数据字典 -- 定义数据流和数据存储
加工小说明 -- 判定表或判定树
描述加工做什么,即加工逻辑,也包括执行条件、优先级、执行频率、出错处理等。
【1】结构化自然语言
if 20 < 订票量
then 订票折扣为10%
else 订票折扣为5%
【2】判定表
【3】判定树

flowchart LR A[计算折扣量] --> B1[7-9/12月] & B2[1-6/10/11月] B1 --> C1[订票量大于20-15%] & C2[订票量<=20-5%] B2 --> C3[订票量大于20-30%] & C4[订票量<=20-20%]

(3)结构化分析过程
【1】建立系统的功能模型
首先:建立系统环境图(顶层数据流图),确定系统边界
继之:自顶向下,逐步求精,建立系统的层次数据流图
【2】建立数据字典
定义数据流、数据存储、数据项
【3】给出加工小说明
例:





(4) 需遵循的约定
加工 -- 其标识使用领域术语,采用动宾结构;必须有输入和输出
数据流 -- 其标识使用领域术语,采用名词或名词短语
(5)《XX系统需求规格说明书》

1. 引言1.1 编写目的说明编写本需求规格说明书的目的1.2 背景说明(1)给出待开发的软件产品的名称(2)说明本项目的提出者、开发者及用户(3)说明该软件产品将做什么,如有必要,说明不做什么1.3 术语定义1.4 参考文献2. 概述2.1 功能概述叙述待开发软件产品将完成的主要功能。2.2 约束叙述对系统设计产生影响的限制条件,并对下一节中所述的某些特殊需求提供理由,如管理模式、硬件限制、安全等。3. 数据流图与数据字典与加工说明3.1 数据流图3.1.1 数据流图1(1)画出该数据流图(2)加工说明(3)数据流说明3.2 数据字典3.2.1 文件说明3.2.2 数据项说明4. 接口4.1 用户接口4.2 硬件接口4.3 软件接口5. 性能需求5.1 精度逐项说明对各项输入数据和输出数据达到的精度5.2 时间特征定量说明本软件的时间特征,如响应时间、更新处理时间、数据传输、转换时间、计算时间等。5.3 灵活性说明本软件所具有的灵活性,即当用户需求有某些变化(如操作方式、运行环境、时间特征等),本软件的适应能力。6. 属性6.1 可使用性规定某些需求,如检验点、恢复方式和重启动性,以确定软件可使用。6.2 保密性规定保护软件的要素6.3 可维护性6.4 可移植性7. 其他需求7.1 数据库7.2 操作7.3 故障及处理

5. 结构化设计方法

设计:一种软件开发活动,定义实现需求规约所需要的软件结构。

设计目标:依据需求规约,在一个抽象层上建立系统软件模型,包括软件体系结构(数据和程序结构),以及详细的处理算法,产生设计规格说明书。

结构化设计分:

  • 总体设计:确定系统的整体模块结构,需要的软件模块以及这些模块之间的调用关系。+
    • 体系结构设计(MSD):定义软件模块及模块间关系,从分析模型(DFD图)导出。
    • 接口设计
      • 外部接口设计:依据分析模型中的顶层数据流图。包括用户界面,与其他软硬件的接口
      • 内部接口设计:系统内部各元素间的接口
    • 数据设计:根据数据字典确定软件涉及的文件系统的结构及数据库的表结构
  • 详细设计:详细描述模块。

结构化设计方法
(1)总体设计阶段(将DFD转为MSD)
【1】引入两个术语:模块、调用
【2】引入模块结构图(MSD)
分两步:
DFD转为初始MSD,分类:
变换型DFD
变换设计步骤:
设计准备:复审语境,符合实际
确定边界:输入、变换、输出的边界,确定系统的逻辑输入和逻辑输出
第一级分解:主模块、输入模块、变换模块、输出模块
第二级分解:

事务型DFD
初始DSD转为可供详细设计的DSD
模块和模块化 (高内聚低耦合)
接口:由其他模块访问的对象
实现:私有量、、过程描述、源程序代码
耦合类型
内容耦合:一个模块直接访问或修改另一模块的数据
公共耦合:两个模块共同引用一个全局数据项
控制耦合:一个模块向另一模块发送控制信号
记耦合:
数据耦合:模块通过参数传递基类型的数据
内聚类型
s
三个阶段:
初始设计:根据穿越边界的数据流初步确定系统与外部的接口
精化设计:”高内聚低耦合“,精化DSD,并设计全局数据结构和每一模块的接口
设计复审

启发式规则
7 +- 2
接口设计
数据设计

详细设计工具
伪码
程序流程图(程序框图)
PAD图
N-S图
判定表/判定树

软件设计规约
概要设计规约
详细设计规约

6. 面向对象设计

OOA

OOD
OOP

UML
需求获取层:USE CASE图
需求分析层:类图、交互图
设计层:类图、交互图
实现:

表达客观事物的术语: 八个类目
类和对象:类图
接口
协作:交互图
用况:
主动类:至少一个进程或线程
构件:
制品:打包
节点:
控制复杂性的术语:包
表达关系的术语:
关联
泛化
实现
依赖

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

202109060657 - hadoop架构和读写流程

1. 整体架构 hdfs架构zkmonode高可用。HA的工作原理?是否需要每个datanode监听zk?namenodeNameNode(nn):Hdfs集群的管理者,Master 管理Hdfs的名称空间(NameSpace) 维护副本策略 记录文件块(Block)的映射信息 负责处理客户端读写请求datanodeDataNode:NameNode下达命令,…

基于风险的完整性和检查建模(RBIIM)MATLAB仿真

1.程序功能描述 基于风险的完整性和检查建模(Risk-Based Integrity and Inspection Modeling ,RBIIM)MATLAB仿真,对比prior density,posterior perfect inspection,posterior imp inpection,cummulative posterior imperfect inspection四个指标。 2.测试软件版本以及…

202108151156 - kafka消费积压案例

0. 背景 上游厂家生产信令数据,我方消费kafka数据,过滤后插入HBase。 上游生产的信令数据分了4个主题,每个主题有若干分区,这4个主题的数据消费后都插入同一张HBase表。 问题:kafka消息积压达到百亿。 以下以topic1为例,有6个分区。 1. 查看消费滞后情况 kafka-consumer-…

mysql 多表怎么连接的

前言 简单描述一下多表怎么连接的。 正文 首先,我们得抛开我们一些自以为是的想法。 我想过这个问题,就是为什么我们背乘法口诀的时候,我们总是背: 22 = 4, 99=81 这样背下去,似乎这是口诀。然而这是缓存,不是计算,既然不是计算那么就不是逻辑学。 我们理所当然的想9*9…

202108120808 - 类加载器及双亲委派机制

Bootstrap ClassLoader 这是加载器中的大 Boss,任何类的加载行为,都要经它过问。它的作用是加载核心类库,也就是 rt.jar、resources.jar、charsets.jar 等。当然这些 jar 包的路径是可以指定的,-Xbootclasspath 参数可以完成指定操作。 这个加载器是 C++ 编写的,随着 JVM …

keil仿真时导出数据操作

keil仿真时导出数据操作 save D:\savedata.txt 0x20001013,0x20001035

spring-boot-starter-validation

官方提供的注解 spring-boot-starter-validation 是 Spring Boot 提供的一个 starter,是一个用于验证 Java Bean 的标准,它提供了一套注解和相应的运行时 API 来定义和执行校验规则。 具体来说,当你在项目中引入 spring-boot-starter-validation 后,你可以使用一系列预定义…

省选算法复习

省选算法复习 1. 线段树优化建图 当我们需要向区间内所有点连边或者从区间中所有点连到某个点的时候,便可以使用线段树来优化,如果需要从区间每一个点连到另一个区间每一个点的话,加一个虚点就好了。 这不是一个很困难的技巧,关键在于要建模。 P5471 [NOI2019] 弹跳 - 洛谷…

fastadmin订单父子表管理端

fastadmin后台父子表使用方法 发布于 2021-01-22 12:48:10fastadmin后台的所有表格都是支持父子表配置的,只需要简单修改一下对应的JS即可,下面直接进入主题。示例是我的全国省市行政区划表,是从国家统计局网站采集下来的,共五级行政数据,非常适合用来做父子表,按照级别一…

Rudolf and k Bridges

Rudolf and k Bridges 题目 大致题意上图为俯视图 有一个\(nXm\)的网格,下标从\(1-n\) 以及从 \(1-m\),\((i, j)\) 的值就是这个这垂直一格水的深度 现在要安装支架,有几个信息:\((i, 1)\) 和 \((i, m)\) 处必须要安装相邻支架的距离不能超过 \(d\), 相邻距离为 \(abs(j - …

背离Divergence Trading ,贪小便宜

趋势交易(trend trading)和背离交易(divergence trading),代表了两种不同的交易策略。做背离交易相当于赌市场短期失效,承认你比市场聪明,虽然能赚小钱,但往往是亏大钱的根源。 贪小便宜爱背离,贪小便宜(gain small advantages)不爱止损(cut losses),所以背离和不止损…

在鸿蒙NEXT开发中实现一个语音识别组件

鸿蒙系统发布以后都不知道叫它5.0版本还是NEXT版本了,哈哈,反正是最新版本就对了。对于语音转换文字,鸿蒙系统提供了离线语音识别模型speechRecognizer,语种目前支持中文,识别效果非常不错。今天要分享的是使用speechRecognizer实现一个语音识别组件。要实现语音识别,首先…