电子科技大学软件工程期末复习笔记(四):软件设计

news2024/9/23 1:30:03

目录

前言

重点一览

软件工程设计

软件设计定义

软件设计包含的两类活动

软件设计包涵

软件的质量属性

各种设计技术

程序结构(深度、宽度、扇入、扇出)

完整的设计规格

软件体系架构

用户界面设计的3条原则

用户界面设计的3种分析

结构化设计方法

结构化程序设计的概念 

流程图

程序流程图的主要缺点:

伪代码

NS图

PAD图

本章小结


前言

本复习笔记基于王玉林老师的课堂PPT与复习大纲,供自己期末复习与学弟学妹参考用。


重点一览

分为两个部分讲解: 软件设计工程和结构化设计方法


软件工程设计

软件设计定义

软件设计定义为软件的架构、构件、接口和其他特性的定义过程及该过程的结果。

软件设计是:

  • 软件工程生命周期中的一个活动
  • 进行软件编码的基础
  • 软件需求分析被转化为软件的内部结构
  • 是连接用户需求和软件技术的桥梁

软件设计包含的两类活动

软件架构设计

  • 又叫“概要设计”、“顶层设计”
  • 描述软件的顶层架构和组织,划分不同的组件
    • 将软件需求转化为数据结构和软件的系统结构
    • 软件架构设计阶段完成体系结构设计(架构设计)、数据设计、接口设计

软件详细设计

  • 又叫“组件设计”、“过程设计”
  • 详细描述各组件以便编码实现
    • 完成各模块内的过程设计

软件设计包涵

软件设计主要为

分解设计:将软件映射为各组件,即模块划分

系列模式设计:建立一系列软件中可重用的公共组件

不包括

创新设计:在软件下需求分析阶段对用户需求进行构思和确定的解决方案

因为它被认为是需求分析和需求规格定义的一部分

软件的质量属性

软件质量可以通过质量属性来描述:FURPS质量属性

  • 功能性:Functionality
  • 易用性:Usability
  • 可靠性:Reliability
  • 性能:Performance
  • 可支持性:Serviceability
    • 扩展性
    • 适应性
    • 可维护性

各种设计技术

抽象、细化、设计模式、模块化、信息隐藏、功能独立、重构

模块化为什么不能无限划分模块?

因为模块划分越小,虽然每个模块成本就会越小,但是相对应的集成成本会大幅增加,从而使得总成本高于预期。所以最佳选择是在最小代价区间中,如下图:

【模块化含义】:软件被划分为命名和功能相对独立的多个组件(通常称为模块),通过这些组件的集成来满足问题的需求。

信息隐藏原则的定义?

模块应该具有彼此隐藏的特性,即:模块定义和设计时应当保证模块内的信息(过程和数据)不可以被不需要这些信息的其他模块访问。

  

意义:

信息隐藏意味着有效的模块划分可以通过定义一些相对独立的模块来实现;

信息隐藏原则定义和隐藏了模块内的过程细节和模块内的本地数据结构

重构的定义?

不改变组件功能和行为条件下简化组件设计(或代码)的一种重组技术。

 

方法:

检查现有设计的冗余情况、未使用的设计元素、无效或不必要的算法、较差的构建方式或不恰当的数据结构,或其他任何可更改并导致更好设计的错误。

抽象

  • 含义:忽略具体的信息将不同事物看成相同事物的过程,是发现事物本质特征和方法的过程
  • 机制:参数化、规范化
  • 规范化抽象:过程抽象、数据抽象、控制(迭代)抽象
  • 抽象侧重于相关的细节忽略不相关的细节,作为识别基本行为和消除不相关及繁琐细节的过程,允许设计师专注于解决特定问题的相关细节而不考虑相关的底层细节。
  • 在进行软件设计时,设计开始时应尽量提高软件的抽象层次,按抽象级别从高到低进行软件设计。

设计模式

  • 通用含义:在给定上下文环境中一类共同问题的共同解决方案
  • 具体含义:一套被反复使用的、多人知晓的、经过分类编目的、代码设计经验的总结
  • 目的:为了可重用代码、让代码更容易被他人理解、保证代码可靠性、程序的重用性
  • 分类:创建型模式(如抽象工厂模式)、结构型模式(如适配器模式)、行为型模式(如命令模式)
  • 范围:由面向对象的程序构造,到(可视化的)对象框架构建

功能独立

  • 每个模块只解决了需求中特定的子功能并从程序结构的其他部分看该模块具有简单的接口
  • 好处:
    • 易于开发(功能被划分、接口被简化)
    • 易于维护(次生影响有限、错误传递减少、模块重用)
  • 定性衡量标准
    • 内聚性:模块的功能相对强度
      • 信号隐蔽原则有利于提高模块的内聚性
    • 耦合性:模块之间的相互依赖程度

细化

  • 细化就是逐步求精的过程
  • 与抽象的关系:是一组相对的概念,相辅相成
  • 抽象使设计师确定过程和数据,但不局限于底层细节
  • 细化有助于设计者在设计过程中揭示底层细节(过程/数据细节...)

在软件工程中,从系统定义到实现,每进展一步都可以看作是对软件解决方案的抽象化过程的一次细化!

程序结构(深度、宽度、扇入、扇出)

相关概念:

  • 程序结构的深度:结构层次数
  • 程序结构的宽度:同一层最大模块数
  • 模块的扇入扇出:扇出标识一个模块直接调用/控制其他的模块数目;扇入则定义为调用/控制一个给定模块的模块个数。

多扇出意味着需要控制和协调许多下属模块,而多扇入的模块通常是公用模块 

完整的设计规格

一共有四层:核心层、基础层、应用层、用户接口层

  • 每一层为上层提供服务,并作为下一层的客户
  • 每一层至多和相邻的上下两层交互,功能的改变最多影响相邻的内外层
  • 允许每层用不同的方法实现,为软件复用提供强大的支持 

软件体系架构

5种架构风格

  • 单主机结构(集中式体系结构)
  • 分布式结构
    • 多处理器体系结构
    • 客户机/服务器体系结构(C/S, B/S结构)
    • 分布式对象体系结构
    • 代理 

C/S架构

  • 基于资源不对等与实现资源共享提出,由客户机、服务器、网络组成。
  • 传统的C/S体系结构分为两层:客户机、服务器
    • 瘦客户机模型:服务器负责所有计算
    • 胖客户机类型:服务器只负责数据管理
  • 三层C/S体系结构增加了应用服务器,整个系统分成表示层,应用逻辑层,数据层三个部分。
  • 可以将整个应用逻辑驻留在应用服务器上,只有表示层存在于客户机上       

B/S架构

浏览器/服务器风格是一种三层体系结构的实现方式,其具体结构为浏览器/Web服务器/数据库服务器。结构如下图:

优点:系统安装、修改、维护全在服务器端解决;提供了异种机、异种网、异种应用服务的联机、联网、统一服务的最现实的开放性基础。

不足:缺乏对动态页面的支持能力,没有集成有效的数据库处理功能;数据查询等响应速度远远低于CS;数据提交一般以页面为单位,动态交互性不强,不利于在线事务处理。 

用户界面设计的3条原则

  • 用户控制系统/用户为中心
  • 减少用户记忆负担
  • 保持界面一致 

用户界面设计的3种分析

  • 用户是什么人?
  • 用户怎样学习与新的系统交互?
  • 用户需要完成哪些工作?

结构化设计方法

结构化程序设计的概念 

如果一个程序的代码块仅仅通过顺序、选择和循环这三种基本控制结构进行连接,并且每个代码块只有一个入口和一个出口,则称这个程序是结构化的。

流程图

程序流程图也叫程序框图,是软件开发者最熟悉的算法表达工具。

基本控制结构

顺序型、选择型、先判定型(while)、后判定型(until)、多情况型(case)

程序流程图标准符号

循环的标准符号

注解符的使用

多选择判断

程序流程图的主要缺点:

  • 程序流程图从本质上来说不是逐步求精的好工具,它容易使程序员过早地考虑程序的控制流程,而不去考虑程序的全局结构
  • 程序流程图中用箭头代表控制流,程序员可以不顾结构程序设计的精神,随意转移控制,而使程序结构过于混乱
  • 程序流程图在表示数据结构方面存在不足 

伪代码

一种介于自然语言和形式化语言的半形式化语言,用于描述功能模块的算法设计和加工细节的语言,也称为程序设计语言。

基本控制结构

简单的陈述句结构:避免复合语句

判定结构:IF_THEN_ELSE或CASE_OF

重复结构:WHILE_DO或REPEAT_UNTIL

实例

NS图

一种符合结构化程序设计原则的图形描述工具,叫作盒图,也叫NS图。

基本控制结构

顺序型、选择型、WHILE重复型、UNTIL重复型、多分枝选择型

PAD图

有程序流程图演化而来,用结构化程序设计思想表现程序逻辑结构的控制工具。

基本控制结构

顺序型、选择型、WHILE重复型、UNTIL重复型、多分枝选择型

扩充控制结构

PAD的优点


本章小结

  • 设计是软件工程技术核心
  • 数据结构、体系结构、接口和软件组件的过程细节在设计中逐步细化、开发、评审和记录
  • 模块化(包括程序和数据)和抽象概念能够使设计人员简化和重用软件组件
  • 细化提供了详细表示各顺序功能层的机制
  • 程序和数据结构有助于建立软件架构的整体视图,而过程提供了算法实现必要的细节
  • 信息隐藏和功能独立为实现有效模块化提供了启发

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

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

相关文章

linux所需的pcre库和zlib库从网上下载的步骤

在linux服务器安装Nginx的时候需要下载一些依赖的库,其中就有pcre 和 zlib正常情况下执行如下命令就可以了yum install -y pcre pcre-develyum install -y zlib zlib-devel但是有时候会有各种原因报错,你可以选择去解决,也可以换个思路,那么我不从yum源下载了,直接从网上下载所…

PGLBox 超大规模 GPU 端对端图学习训练框架正式发布

作者 | PGLBox项目组 导读 PGLBox是百度研发的基于GPU的大规模图模型训练框架,支持数百亿节点和边的图模型全GPU训练,已在百度广泛部署。相比业界主流的分布式 CPU 解决方案,PGLBox 具有超高性能、超大规模、算法丰富、灵活易用、落地广泛等优…

springBoot 处理静态资源原理

springBoot是如何自动处理静态并映射静态资源的,直接上代码。 一、在springBoot autoconfigure jar包中,存在WebMvcAutoConfiguration 自动配置类,该类的生效条件是:存在Servlet ,DispatcheServlet ,WebMvcConfigurer这三个类…

k8s 配置ingress 并做一个demo

需求:k8s 配置好之后除了 nodeport 以外都是对集群内部的行为使用nodeport 并不是很友好,要自己处理很多的端口管理使用ingress 可以更好的整合配置服务进程:下载ingress-nginx 的yaml 文件https://github.com/kubernetes/ingress-nginx/blob…

京东HBase异地多活调研

京东HBase平台架构 HBase Replication原理 HBase的Replication是基于WAL日志文件的,在主集群中的每个RegionServer上,由ReplicationSource线程来负责推送数据,在备集群的RegionServer上由ReplicationSink线程负责接收数据。ReplicationSourc…

Web自动化测试框架Selenium

作者:霍格沃兹测试开发学社 链接:https://www.zhihu.com/question/59854292/answer/2827875817 来源:知乎 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。 什么是自动化测试 自动化测试就是&#xff0…

电子技术——AB类输出阶

电子技术——AB类输出阶 原理 交越失真可以通过通过一个较小的偏置电流解除,如下图: QNQ_NQN​ 和 QPQ_PQP​ 的基极之间存在偏置电压 VBBV_{BB}VBB​ 。对于完美匹配的晶体管,当 vI0v_I 0vI​0 的时候,此时 vO0v_O 0vO​0 。每…

初识CSS

1.CSS语法形式CSS基本语法规则就是:选择器若干属性声明由选择器选择一个元素,其中的属性声明就作用于该元素.比如:<body><p>这是一个段落</p><!-- style可以放在代码的任意地方 --><style>p{/* 将字体颜色设置为红色 */color: red;}</style&g…

Android 动画详解

Android动画的分类与使用学习Android必不可少的就是动画的使用了&#xff0c;在Android版本迭代的过程中&#xff0c;出现了很多动画框架&#xff0c;这里做一个总结。Android动画类型分类逐帧动画【Frame Animation】&#xff0c;即顺序播放事先准备的图片。补间动画【Tween A…

Mysql——双机同步

遇到一个需求&#xff0c;需要两台服务器的上的mysql数据库数据实时同步&#xff0c;包括结构也同步。 利用mysql本身的binlog确实实现了这个效果&#xff0c;但是因为个实际业务场景不满足&#xff0c;所以pass掉了&#xff0c;但是记录一下。 目录一、环境二、配置2.1 创建同…

件测试之易用性测试

一、易用性测试概述我们所说的易用性测试是指软件界面的测试&#xff0c;而对于产品的易用性来说&#xff0c;不仅仅是软件界面&#xff0c;还包括硬件(即产品的外观)&#xff0c;如按钮图标是否易懂、菜单是否易找到等。易用性主要研究3个方向&#xff1a;用户研究、交互设计、…

【使用两个队列实现栈】

文章目录前言使用两个队列实现栈1.队列接口函数引入2.栈的初始化3.向栈中插入元素4.出栈操作5.取出栈顶元素6.判断栈是否为空7.释放内存空间总结前言 本文章主要介绍栈和队列的相互转换。 使用两个队列实现栈 我们知道&#xff0c;栈的特点是后进先出&#xff0c;而队列的特点…

[工具笔记]1.UnityEngine.Plane

public struct Plane : IFormattable{} Plane是存在于 3D 空间中&#xff0c;无限大的平坦表面&#xff0c;将空间划分为两半&#xff08;称为半空间&#xff09;。可方便地确定特定点处于两个半空间的哪一个中&#xff0c;以及确定该点与平面相距多远。 此对象在unity并不可见…

一分钟掌握技术术语:API(接口)

很多产品经理在项目开发过程中经常听到&#xff1a;你调我这个接口就好了&#xff1b;这个功能你写个接口给我&#xff1b;有什么不懂的就看下API接口文档。 开发经常说的接口是什么意思呢&#xff1f;术语解释&#xff1a;API&#xff08;Application Programming Interface&…

【C++】泛型编程——模板初阶

文章目录1. 泛型编程2. 函数模板2.1 函数模板的概念2.2 函数模板的使用2.3 函数模板的原理2.4 函数模板的实例化隐式实例化显式实例化2.5 模板参数的匹配原则3. 类模板1. 泛型编程 首先我们来思考一个问题&#xff1a;如何实现一个通用的交换函数呢&#xff1f; 即我们想交换两…

神经网络中的激活函数

文章目录为什么要使用激活函数常用的激活函数如何选择激活函数ReLU激活函数的优点及局限性为什么Sigmoid和Tanh会导致梯度消失的问题为什么Tanh收敛速度⽐Sigmoid快&#xff1f;为什么要使用激活函数 在真实情况中&#xff0c;我们往往会遇到线性不可分问题&#xff0c;需要非…

汇编指令学习(MOV,MOVSX,MOVZX,LEA,XCHG)

一、MOV指令1、将十六进制0x1234数值&#xff0c;赋值给eax寄存器mov eax,0x12342、将十六进制0x123数值&#xff0c;赋值给内存地址为ebxmov dword [ebx],0x1233、将edx的高八位赋值给eax的低八位ax&#xff0c;eax的低16位&#xff0c;al&#xff0c;eax的低8位&#xff0c;a…

RedisTemplate 的基本使用手把手教

下载实例源码 使用步骤 1、引入 spring-boot-starter-data-redis 依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId> </dependency>2、在 application.yml 配置 R…

一文分析Linux虚拟化KVM-Qemu之virtqueue

说明&#xff1a; KVM版本&#xff1a;5.9.1QEMU版本&#xff1a;5.0.0工具&#xff1a;Source Insight 3.5&#xff0c; Visio 1. 概述 前边系列将Virtio Device和Virtio Driver都已经讲完&#xff0c;本文将分析virtqueue&#xff1b;virtqueue用于前后端之间的数据交换&…

[4.10]-AutoSAR零基础学习-Secure Debug(SHE+)(一)

目录 1 内部调试保护概述 2 UCB confirmation AURIXTM 设备提供多个安全保护层&#xff0c;以限制调试器访问整个微控制器。 保护层的配置基于用户配置块 UCB&#xff0c;存在于DFlash上&#xff08;DF_UCB&#xff09;。UCB 包含保护设置参数和其他可由用户配置的参数。 DF_…