软件工程第四章——软件设计

  • 软件设计
    • 好的设计的特点
    • 设计质量属性
    • 设计指导原则
    • 设计相关概念
  • 设计技术(面向过程)
    • 数据设计
    • 体系结构设计
      • 体系架构组织与细化的基本问题
    • 部署设计
    • 接口设计
    • 结构化的总体设计方法
      • 系统结构图中的模块
      • 变换型系统结构图
      • 事务性系统结构图
    • 结构化组件设计
  • 流程图
  • PDL程序设计语言(伪代码)
  • 判定表转换
  • 面向对象设计
    • 1.架构设计
      • 第一步 构造系统的物理模型
      • 第二步 设计子系统
        • 划分子系统
        • 定义子系统之间的关系
      • 第三步 非功能性需求设计
    • 2.用例设计
      • 类之间的关系
      • 分析类图
      • 细化用例
    • UML顺序图
      • 什么时候需要UML
    • 面向对象设计的四个层次

软件设计

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

好的设计的特点

  1. 设计必须实现在分析模型中包含的所有明确要求,必须满足客户所期望的所有隐含要求
  2. 设计必须对编码人员、测试人员及后续的维护人员是可读可理解的
  3. 设计应提供该软件的完整视图,从实现的角度解决数据、功能及行为等各领域方面的问题

设计质量属性

  1. 功能性
  2. 易用性
  3. 可靠性
  4. 性能
  5. 可支持性(包括:扩展性,适应性,可维护性)

设计指导原则

  1. 设计应该是一种架构
  2. 设计应该是模块化的
  3. 设计应该包含数据、体系结构、接口和组件各个方面

应该设计出系统所用的数据结构
应该设计出展现独立功能特性的各组件
应该设计出各组件与外部环境连接的各接口

  1. 设计由软件需求分析过程中获得信息驱动,采用可重复使用的方法导出
  2. 设计应该采用正确清楚的表示法

设计相关概念

  1. 抽象
  2. 体系结构
  3. 设计模式
  4. 模块化
  5. 信息隐藏
  6. 功能独立
  7. 精化
  8. 重构

设计技术(面向过程)

数据设计

体系结构设计

系统需要执行的函数功能组件集(如数据库、计算模块)
组件之间通信、协同和合作的连接器
组件集成构成系统的约束
设计人员通过分析系统组成部分的已知特性,理解其整体特性的语义模型分析

体系架构组织与细化的基本问题

  1. 控制架构
  2. 数据传递

部署设计

输出部署架构,实施规范,实施计划

接口设计

结构化的总体设计方法

系统结构图中的模块


传入:
传入模块一从下属模块取得数据,经过某些处理,再将其传送给上级模块。它传送的数据流叫做逻辑输入数据流。
传出:
传出模块一从上级模块获得数据,进行某些处理,再将其传送给下属模块。它传送的数据流叫做逻辑输出数据流。
变换:
变换模块一它从上级模块取得数据,进行特定的处理,转换成其它形式,再传送回上级模块。它加工的数据流叫做变换数据流。
协调:
协调模块一对所有下属模块进行协调和管理的模块。

变换型系统结构图

事务性系统结构图

它接受一项事务,根据事务处理的特点和性质,选择分派一个适当的处理单元,然后给出结果。
在事务型系统结构图中,事务中心模块按所接受的事务的类型,选择某一事务处理模块执行。各事务处理模块并列。每个事务处理模块可能要调用若干个操作模块,而操作模块又可能调用若干个细节模块。

结构化组件设计

流程图


PDL程序设计语言(伪代码)

declare<数据名>as<限定词><限定词>具体的数据结构:scalar<纯量>array<数组>list<列表>char<字符>structure<结构>(2)   子程序结构procedure<子程序名>interface<参数表><分程序PDL语句>returnend<子程序名> <PDL语句指各种PDL构造>(3)   分程序结构begin<分程序名>语句>end<分程序名>(4)   顺序结构选择型:if <条件> then<语句>else<语句>end ifif <条件> then<语句>else if <条件> then<语句>else< 语句>end ifWHILE循环:loop while <条件>语句>end loopUNTIL型循环:loop until <条件><语句>end loopCASE型:Case <选择句子> of<标号>{,<标号}:>语言>[defoult] :[语句>]end case(5)   输入/输出结构 print read display

判定表转换

面向对象设计

1.架构设计

架构设计的目的是要勾画出系统的总体结构,这项工作由经验丰富的架构设计师主持完成。
输入:用例模型、分析模型
输出:物理结构、子系统及其接口、概要的设计类

第一步 构造系统的物理模型


第二步 设计子系统

对于一个复杂的软件系统来说,将其分解成若干个子系统,子系统内还可以继续划分子系统或包,这种自顶向下、逐步细化的组织结构非常符合人类分析问题的思路。
每个子系统与其它子系统之间应该定义接口,在接口上说明交互信息,注意这时还不要描述子系统的内部实现。

划分子系统

按照功能划分,将相似的功能组织在一个子系统中
按照系统的物理布局划分,将在同一个物理区域内的软件组织为一个子系统
按照软件层次划分子系统,软件层次通常可划分为用户界面层、专用软件层、通用软件层、中间层和数据层

定义子系统之间的关系

“请求–服务”关系,“请求”子系统调用“服务”子系统,“服务”子系统完成一些服务,并且将结果返回给“请求”子系统。
平等关系,每个子系统都可以调用其它子系统。
如果子系统的内容相互有关联,就应该定义它们之间的依赖关系。在设计时,相关的子系统之间应该定义接口,依赖关系应该指向接口而不要指向子系统的内容。
如果两个子系统之间的关系过于密切,则说明一个子系统的变化会导致另一个子系统变化,这种子系统理解和维护都会比较困难
解决:

重新划分子系统,这种方法比较简单,将子系统的粒度减少,或者重新规划子系统的内容,将相互依赖的元素划归到同一个子系统之中
定义子系统的接口,将依赖关系定义到接口上

每个子系统的接口上定义了若干操作,体现了子系统的功能,而功能的具体实现方法应该是隐藏的,其他子系统只能通过接口间接地享受这个子系统提供的服务,不能直接操作它。

第三步 非功能性需求设计

分析阶段定义了整个系统的非功能需求,在设计阶段要研究这些需求,设计出可行的方案。

非功能需求包括:
系统的安全性、错误监测和故障恢复、可移植性和通用性等等

具有共性的非功能需求一般设计在中间层和通用应用层,目的是充分利用已有构件,减少重新开发的工作量。

2.用例设计

根据分析阶段产生的高层类图和交互图,由用例设计师研究已有的类,将它们分配到相应的用例中。

检查每个用例功能,依靠当前的类能否实现,同时检查每个用例的特殊需求是否有合适的类来实现。

细化每个用例的类图,描述实现用例的类及其类之间的相互关系其中的通用类和关键类可用粗线框区分,这些类将作为项目经理检查项目时的重点。

类的表示

类之间的关系

分析类图

细化用例

第1步:通过扫描用例中所有的交互图识别参与用例解决方案的类。在设计阶段完善类、属性和方法。例如,每个用例至少应该有一个控制
类,它通常没有属性而只有方法,它本身不完成什么具体的功能,只是起协调和控制作用。
每个类的方法都可以通过分析交互图得到,一般地检查所有的交互图发送给某个类的所有消息,这表明了该类必须定义的方法。例如“借
书控制”类向“读者”类发送“检查读者(读者编号)”消息,那么“检查读者”就作为“读者”类应该提供的方法。
第2步:添加属性的类型、方法的参数类型和方法的返回类型。
第3步:添加类之间的关系,包括关联、依赖、继承等。

UML顺序图

顺序图是强调消息时间顺序的交互图。
顺序图描述了对象之间传送消息的时间顺序,用来表示用例中的行为顺序。
顺序图将交互关系表示为一个二维图。即在图形上,顺序图是一张表,其中显示的对象沿横轴排列,从左到右分布在图的顶部;而消息则沿纵轴按时间顺序排序。创建顺序图时,以能够使图尽量简洁为依据布局。



  1. 对象

  1. 生命线

  1. 消息








  1. 激活

什么时候需要UML

当一个用例涉及多个类时

面向对象设计的四个层次

确定系统的总体结构和风格,构造系统的物理模型,将系统划分成不同的子系统。
中层设计:对每个用例进行设计,规划实现用例功能的关键类,确定类之间的关系。
进行底层设计:对每个类进行详细设计,设计类的属性和操作,优化类之间的关系。
补充实现非功能性需求所需要的类。

软件工程第四章——软件设计(仅记录我所认为重要的知识点)相关推荐

  1. 计算机网络第三章——数据链路层(仅记录我所认为重要的知识点)

    计算机网络第三章--数据链路层 数据链路层使用的信道类型 点对点信道 广播信道 数据链路层位置 数据链路层的3个基本问题 数据链路和帧 链路 数据链路 数据链路层传输的是帧 封装成帧 透明传输问题 差 ...

  2. 软件工程学习笔记——第六章 软件设计方法

    目录 第一章 概述 第二章 过程和活动 第三章 软件过程模型 第四章 问题定义和可行性研究方法 第五章 需求分析方法-1 第五章 需求分析方法-2 第六章 软件设计方法 第七章 软件实施与测试方法 第 ...

  3. 【软件体系结构】考点总结 第四章 软件体系结构描述 XJU

    软件体系结构 第四章 软件体系结构描述 前言   本文为XJU本科期间博主根据 <软件体系结构原理.方法与实践>第二版所作的期末考点总结,因为是课堂重点总结,所以有些重要知识点没有涵盖还请 ...

  4. 软件工程学习笔记(四)软件设计

    软件设计概述 软件设计的基本特征:目标,形态,内容 从技术角度考虑,软件设计主要包括4方面内容: 系统结构设计:确定软件系统的结构,即软件系统的组成,以及各组成成分(子系统或模块)之间的相互关系 接口 ...

  5. 《软件工程》第三章——软件设计综述

    1. 软件设计的任务与目标 任务和目标:以软件需求规格设计说明书为依据,根据其提出的系统目标,进行数据设 计(数据结构),系统结构设计(软件系统的体系结构),过程设计(吧结构转换为软件的过程性描述), ...

  6. 软件工程——第1章软件工程学概述知识点整理

    本专栏是博主个人笔记,主要目的是利用碎片化的时间来记忆软工知识点,特此声明! 文章目录 1.为什么要有软件工程这门学科? 2.软件分为哪些阶段? 3.软件危机的定义? 4.软件危机包含的问题有哪些? ...

  7. 电子科技大学数据库与软件工程实验四(课程设计)

    适用于网工和物联网专业 目录 相关内容涉及隐私部分没有列出 此部分是期末考试最后一个大题 第一章 概述 1.1软件工程的起源 1.1.1软件危机 1.1.2软件工程概念提出 1.2软件工程的定义 1. ...

  8. 软件工程 | 第四章 系统设计

    软件工程 系列为本学期(2020春季)软件工程以及软件工程实践课程笔记整理~ 天朗气清,惠风和畅,空气里渐渐飘起了调皮的柳絮 今天软工老师终于上课啦,来更新一波笔记~ 目录 一.软件设计的目标的任务 ...

  9. 软件工程-第2章 软件生存周期与软件过程

    文章目录 软件工程 第二章 软件生存周期与软件过程 ==2.1 软件生存周期== 2.2 传统软件过程 1.瀑布模型 2.快速原型模型 3.软件演化模型 4.形式化方法模型 5.净室模型 2.3 面向 ...

  10. 软件工程导论 01章软件工程学概述

    1.软件是程序.数据以及各种相关文档的集合. 程序是对计算任务的处理规则的描述,数据是对计算任务的处理对象的描述,文档则是有关计算机程序功能.设计.编制与使用的文字图形资料. 软件等于程序加数据加相关 ...

最新文章

  1. 干货丨一文看懂人工智能、机器学习和深度学习的区别与联系
  2. 一文读懂Faster R-CNN目标检测
  3. 构建之法 学习笔记06
  4. Java-Runoob-高级教程-实例-字符串:13. Java 实例 - 字符串格式化
  5. android面向数据库的的编程工具-OrmLite
  6. Linux中的15个‘echo’ 命令实例
  7. php数据趋势曲线,数据曲线图怎么做
  8. mysql 常用数据库连接池_常见的数据库连接池
  9. Linux 用虚拟地址(逻辑地址)计算物理地址(十进制 十六进制)
  10. 什么是Apache Flink
  11. Django中加载static无法成功的解决方法
  12. 数据包的忽略打印与脱敏打印
  13. 国内外有哪些有前景的 AR VR公司?
  14. ibm x240使用 server guide 9.41 安装server 2003 32bit的一些注意事项
  15. linux中安装微信开发者工具
  16. 7-12 愿天下有情人都是失散多年的兄妹 (25分)
  17. 请不要再轻视Git —— 我在工作中是如何使用 Git 的
  18. csharp c++
  19. LNMP生产环境部署
  20. 常用抓包工具,手机调试工具大合集

热门文章

  1. handlersocket mysql_[原创]MongoDB、HandlerSocket和MySQL性能测试及其结果分析
  2. Apache Ant安装与配置
  3. 自己的域名申请和google账户申请
  4. 魔兽世界服务器修改模型,修改模型教程!
  5. CCF-CSP真题《202206-2—寻宝大冒险》思路+python满分题解
  6. FLASH动画之制作动画
  7. office韩文版本
  8. 用纯前端表格控件SpreadJS,搭建上海泛微协同OA管理平台
  9. 人型自走输入法(网页日语输入法)
  10. 正点原子以太网转串口模块 调试和使用方法(实战详解)