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

2023-10-27

目录

前言

重点一览

软件工程设计

软件设计定义

软件设计包含的两类活动

软件设计包涵

软件的质量属性

各种设计技术

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

完整的设计规格

软件体系架构

用户界面设计的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的优点


本章小结

  • 设计是软件工程技术核心
  • 数据结构、体系结构、接口和软件组件的过程细节在设计中逐步细化、开发、评审和记录
  • 模块化(包括程序和数据)和抽象概念能够使设计人员简化和重用软件组件
  • 细化提供了详细表示各顺序功能层的机制
  • 程序和数据结构有助于建立软件架构的整体视图,而过程提供了算法实现必要的细节
  • 信息隐藏和功能独立为实现有效模块化提供了启发
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

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

随机推荐

  • PySpark 连接Hive

    文章目录 简介 环境搭建与效果演示 更细节的搭建方法 搭建HDFS Spark或hive的前提 已经有了远程可访问的测试集群 搭建hadoop2 7 2 修改hadoop配置 格式化hdfs 测试 搭建spark 2 4 5 解压hive
  • C++成员函数末尾const关键字…

    原文地址 C 成员函数末尾const关键字的作用 作者 olym 1 gt 尽管函数名和参数列表都相同 void foo const成员函数是可以与void foo 并存的 可以形成重载 我们假设调用语句为obj foo 如果obj为non
  • git常用命令与常见面试题总结

    目录 1 git框架介绍 2 列举工作中常用的几个git命令 3 提交时发生冲突 如何解决 4 新建git功能分支的步骤 5 说明GIT合并的两种方法以及区别 6 Git提交代码的步骤 7 idea集成git 7 1 File gt set
  • IDEA开发及运行第一个Android项目

    IDEA自动下载SDK Gradle 保证能访问网络 原来eclipse能使用的sdk 配到idea报错 就换成自动下载最新的了 之前没成功可能是我防火墙禁用了上网 新建项目 提示安装SDK 等待下载完成 继续建项目 选择手机或平板及目标设
  • JVM实战:JVM内存分配策略

    JVM运行时数据区 Java虚拟机在执行Java程序的过程中会把它所管理的内存划分为若干个不同的数据区域 这些区域都有各自的用途 以及创建和销毁的时间 有的区域随着虚拟机进程的启动而存在 有些区域则依赖用户线程的启动和结束而建立和销毁 Ja
  • JAVA学习笔记——内部类

    目录 基本概念 使用内部类访问对象状态 内部类的特殊语法规则 局部内部类 访问外部变量 匿名内部类 静态内部类 基本概念 内部类 inner class 是定义在另一个类中的类 主要特点有 内部类方法可以访问该类定义所在的作用域中的数据 包
  • QString转化成其他字符串

    1 QChar 转char char xxx QChar unicode 2 QString 转 String String xxx QString toStdStrng 3 QString转 char 先将 QString 转为标准库中的
  • 【手把手教你写服务器】客户端程序和服务器程序的简单实现

    文章目录 1 基本TCP客户 服务器程序的套接字函数 2 server c 3 client c 1 基本TCP客户 服务器程序的套接字函数 下图中各个函数的功能 参数及返回值自行查阅 UNIX网络编程卷1 套接字联网API 第4章 2 s
  • Python字符串与Bytes之间的互相转换

    Python字符串与Bytes之间的互相转换 byte转字符串 方式一 data b x31 x32 x33 print data b 123 strdata data decode gbk print strdata 123 strdat
  • .Net core基于xUnit的单元测试查看测试覆盖率

    写代码如何保证代码质量 基本大家都知道要做单元测试 那如何知道你单元测试是不是测试到了所有代码场景呢 这就要通过测试覆盖率来体现了 测试覆盖率 一般来说主要是Line代码行数覆盖率 同样还会有Branch分支覆盖率 Method方法覆盖率等
  • 使用QFrame类实现界面美化

    使用QFrame类实现界面美化 QFrame类是Qt框架中用于创建和显示矩形框架的基本组件 它可以用于美化界面 分割界面等多种场景 在Qt中使用QFrame类非常简单 我们只需要在ui文件中拖动一个QFrame控件并在代码中设置它的属性即可
  • 一刷总结!

    前面都还算顺利 走到贪心和动态规划的时候就感觉比较吃力了 就是那种怎样都感觉自己想不出来的 还需要多多练习和多多理解 有了这个监督之后 已经养成了每天要写算法的习惯 hh不错 希望能继续坚持下去 秋招能有一个好结果
  • Java-1.5

    题目描述 编写程序 计算 9 5 4 5 2 5 3 45 5 3 5 代码 法1 public class Calculate public static void main String args final double a 9 5
  • linux网络编程(三) TCP通信时序与多进程/线程并发服务器的编写

    文章目录 1 TCP通信时序 2 滑动窗口 TCP流量控制 3 出错处理封装函数 4 多进程并发服务器编写 5 多进程并发服务器编写 4 TCP状态转换 5 半关闭 6 2MSL 6 1 2MSL 6 2 端口复用 1 TCP通信时序 下图
  • 用python写注册登录界面web_用Python实现web端用户登录和注册功能

    这篇文章主要介绍了用Python实现web端用户登录和注册功能的教程 需要的朋友可以参考下 用户管理是绝大部分Web网站都需要解决的问题 用户管理涉及到用户注册和登录 用户注册相对简单 我们可以先通过API把用户注册这个功能实现了 RE M
  • GD32F303调试小记(零)之工程创建与编译

    前言 干这行的朋友都知道 真正拿单片机做项目时 作为软件编写人员 你所掌握的肯定不止一款单片机 又或者说你必须有能独立上手新单片机的能力 这里的新指的是对你个人来说是从未接触过的或者不熟悉的 而不一定是说这个单片机有多新 而调试一款新的单片
  • 二分类模型评价指标

    二分类模型指标 混淆矩阵 TP 实际为正预测为正 FP 实际为负但预测为正 TN 实际为负预测为负 FN 实际为正但预测为负 准确率 A c c u r a
  • kafka入门安装及消息发送接受初体验(附源码)

    这里是weihubeats 觉得文章不错可以关注公众号小奏技术 文章首发 拒绝营销号 拒绝标题党 官方文档 https kafka apache org quickstart 版本 3 5 0 安装 这里我们提供两种安装方式 一种是编译好的
  • Async异步处理【Springboot】

    简单实现异步处理 springboot异步处理 先建立一个controller目录 再建一个AsynController java 建立一个service目录 再建立一个AsynController java 启动项目 效果 1 在三秒以后
  • 电子科技大学软件工程期末复习笔记(四):软件设计

    目录 前言 重点一览 软件工程设计 软件设计定义 软件设计包含的两类活动 软件设计包涵 软件的质量属性 各种设计技术 程序结构 深度 宽度 扇入 扇出 完整的设计规格 软件体系架构 用户界面设计的3条原则 用户界面设计的3种分析 结构化设计