四、设计工程

2023-10-31

        软件设计开始于软件需分析和规约之后,是把需求转化为软件系统的重要环节。软件需求解决“做什么”的问题,软件设计解决“怎么做”的问题。

一、概述

        早期设计工程分为概要设计详细设计

        概要设计:将需求转换为数据结构、软件体系结构及其接口。

        详细设计或部件级设计:将软件体系结构中的结构性元素转换为软件部件的过程性描述,得到详细的数据结构和算法。

        现在设计工程分为数据/类设计软件体系结构设计接口设计部件设计

1. 软件设计的任务

        软件设计的输入是软件分析模型

        使用一种设计方法(之后章节讲),把软件分析模型中通过数据、功能和行为模型所展示的软件需求信息传送给设计阶段,产生数据/类设计软件体系结构设计接口设计部件设计

(1)数据/类设计:将分析模型转变为类的实现和软件实现所需要的数据结构。

(2)体系结构设计:定义了软件的整体结构,由软件部件、外部可见的属性和它们之间的关系组成。

(3)接口设计:描述软件内部、软件和协作系统之间以及软件同人之间的通信方式。

(4)部件级设计:将软件体系结构的结构性元素转化为对软件部件的过程性描述。

2. 软件设计的目标

3.软件设计的过程

①制定规范

②体系结构和接口设计

③数据/类设计

④部件级设计

⑤编写设计文档

⑥设计评审

二、软件设计原则

        软件设计的原则有很多,下面介绍典型的四种:

1. 抽象与逐步求精

(1)抽象

        抽象分为过程抽象数据抽象

        过程抽象指任何一个完成明确定义功能的操作都可以当作单个实体看待,忽略实现该操作的更低级操作。

        数据抽象指定义数据类型和施加于该类型对象的操作,并限定了对象的取值范围,只能通过操作修改和观察数据。

(2)逐步求精

        把问题的求解过程分解成若干步骤或阶段,每一步比上一步更精化,更接近问题的解法。

2.模块化

        模块化就是:把软件按照规定的原则,划分成一个个较小的、相互独立的但又相互关联的部件

        模块化实际是系统分解和抽象的过程

        问题越复杂,解决问题的花费越大。

        把一个困难问题划分成多个较简单的问题,解决起来多个较简单问题的花费和是小于解决一个困难问题的花费的。

        但是并不能对一个问题无限划分下去,因为划分之后的这些小的模块之间还需要联系,这些模块接口也需要一些费用。

                                

        因此需要衡量模块划分的数量,而且划分也需要遵守其他的设计原则。

3.信息隐藏

        每个模块实现的细节对于其他模块来说应该是隐蔽的

        模块中所包含的信息(包括数据和过程),不允许其他不需要这些信息的模块使用。

4.功能独立

        指模块的功能独立性,就是在设计模块时,使得模块实现独立的功能并且与其他模块的接口简单,符合信息隐蔽原则,模块间的关联和依赖程度尽可能小

(1)内聚

        内聚是一个模块内部各个元素彼此结合的紧密程度的度量

        内聚分为以下几种类型:

        

(2)耦合

        耦合是指模块之间的相对独立性(相互连接的紧密程度)的度量

        耦合取决于各个模块之间接口的复杂程度、调用模块的方式以及通过接口的信息类型

        耦合类型:

        

三、软件体系结构设计

        软件体系结构关注系统的一个或多个结构,包括软件部件、这些部件的对外可见的性质以及他们之间的关系。

1. 体系结构发展过程

单主机结构:

        客户界面、数据和程序集中在主机上,通常只支持一个用户操作,不需要考虑多个用户并发操作的问题,因此结构简单。

客户/服务器(C/S)结构:

         应用程序的处理由客户机和服务器分担;

        处理请求通常被关系数据库处理,客户机在接收到经处理的数据后实现显示和业务逻辑;

         系统支持模块化开发,通常有GUI界面。

浏览器/服务器(B/S)结构:

        就是熟知的三层/多层计算:

        ①处理用户接口和用户请求的客户层,典型的就是网络浏览器。

        ②处理Web服务和运行业务代码的服务层。

        ③处理关系型数据库和其他后端数据资源的数据层。

2. 软件体系结构的风格

(1)数据为中心的体系结构

        

        即一些数据保存在整个结构的中心,并且被其他部件频繁使用、添加、删除和修改。

(2)数据流风格的体系结构

        

        这种体系结构适用于输入数据被一系列的计算或处理部件变换成输出数据。

        由管道和过滤器组成。

(3)调用和返回风格的体系结构

(4)面向对象风格的体系结构

(5)层次式风格的体系结构

                        ​​​​​​​        

 四、部件级设计技术

        部件在不同的分析设计方法中有着不同的名称。在结构化分析和设计方法中部件往往是模块;在面向对象分析和设计中部件指的是类;在基于构件开发方法中部件指的是构件。

        部件级设计阶段任务:

        ①为每个部件确定算法,选择某种适当的工具表达算法的过程,编写部件详细过程性描述。

        ②确定每一部件内部使用的数据结构。

        ③在部件级设计结束时,应该把上述结果写入部件级设计说明书,并且通过复审形成正式文档,作为下一阶段(编码阶段)的工作依据。

1. 结构化程序设计方法

        并无明确的定义,一种较为流行的定义是:

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

2. 图形表示法

        如何选择一种合适的方式描述每个部件的执行过程?常用的描述方法有三种:图形描述、语言描述和表格描述。

        图形描述包括程序流程图、盒图、问题分析图等;

        语言描述用某种设计性语言来描述过程的细节;

        表格描述包括判定表。

(1)程序流程图

         程序流程图独立于任何一种程序设计语言,直观、简单易学习。

        流程图只能使用以下五种结构:

   

(2)盒图(N-S图)

        ​​​​​​​        ​​​​​​​        

(3)PAD

 

        PAD图执行顺序是从左边最上面向下执行,遇到判断或者循环自左向右进入下一层。

        ​​​​​​​         

 3. 判定表

         当算法中包含多重嵌套但是条件选择时,用流程图、N-S图和PAD都不易清楚的描述。

        判定表可以清晰的表达复杂条件的组合与应做动作之间的对应关系。但是他是静态的,不能表示加工的顺序,也不能表示循环结构,因此不能作为一种通用的设计工具。

        ​​​​​​​        

 4. 设计性语言PDL

        PDL是一种用于描述功能部件的算法设计和处理细节的语言,称为设计性语言,是一种伪码。

五、设计规约与设计评审

...

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

四、设计工程 的相关文章

随机推荐

  • Java jsp cannot be resolved to a type解决方法之一

    不要在一个文件夹下面建两个名字一样的包和类
  • 团队管理的四大挑战——招人篇

    团队管理的四大挑战 招人篇 招人篇 1 告诉 HR 你的团队需要什么样的人 2 尊重应聘者 3 你不需要套路 4 互补而不是趋同 5 如果犹豫 那么放弃 6 如何面试比你高阶的人 7 面试最重要的目的是识别风险 8 缺点易现 亮点难得 结语
  • 【chineseOCR】踩过的坑

    1 环境 ubuntu16 04 cuda10 tensorflow1 13 2 web py 0 40 dev0 这两个比较重要 不然会报好多奇怪的错 说明tensorflow必须1 13版本 低了不支持cudn10 高了chineseO
  • Android自定义轮播效果(优化)

    创作背景 本文是继上一篇 Android自定义轮播效果 优化问题而写 希望大家能有顺序的看 优化一 实现自动无线轮播 private class myPagerAdapter extends PagerAdapter Override pu
  • 【知识点】单片机USB转TTL模块的相关知识

    前言 USB转TTL模块的作用就是把电平转换到双方都能识别进行通信 单片机通信接口的电平逻辑和PC机通信接口的电平逻辑不同 PC机上的通信 接口有USB接口 相应电平逻辑遵照USB原则 还有DB9接口 九针口 相应电平逻辑遵照RS 232原
  • MFC的Brush与Pen的使用

    Brush的使用 void CMFCApplicationDlg OnBnClickedOk CDC pDC GetWindowDC CBrush brush1 Must initialize brush1 CreateSolidBrush
  • SonarQube代码质量检测的一点坑

    这里解决的问题有以下几点 1 之前用过sonarqube检测过代码的质量 因其自带的CFamily需要license 故在github上找到相关开源免费的C C 插件 针对特定的sonarqube版本都有相对应的sonar cxx c版本
  • 原生js实现导航条动画

    原生js实现毛毛虫导航 直接上代码
  • 计算机毕业设计选题推荐基于nodejs+Vue360学生宿舍系统

    管理员 首页 个人中心 宿舍信息管理 学生管理 宿舍报修管理 访客信息管理 水电费管理 管理员管理 交流论坛 系统管理 学生 首页 个人中心 宿舍报修管理 水电费管理 前台首页 首页 交流论坛 通知公告 个人中心 后台管理 在线沟通等 目
  • win 10 下cmd命令无法使用ssh命令

    在WIN 10 系统下出现cmd命令无法正常使用ssh命令 提示 ssh不是内部命令 出现这种情况要考虑到是环境变量出现问题 1 鼠标右键单击 我的电脑 进入 属性 2 点击 系统高级设置 选择 环境变量 3 找到 path 点击打开 4
  • Qt中使用QTextStream中文乱码的情况解决

    1 前言 今天在做一个文件编辑器 然后发现读取txt文件的时候 中文的显示乱码 然后在网上查了一些方法 没用 自己摸索了一下 找出了一个办法 2 解决办法 QTextStream in new QTextStream file in gt
  • Csharp:TinyMCE HTML Editor in .NET WindowsForms

  • STM32控制电机简易教程

    STM32控制电机简易教程 包教包会 近期 电赛临近 来补习一下电机的使用方式 使用起来非常的方便 首先是在CUBEMX里面配置一些基本内容 然后是使用PWM去调速 其他的时钟和调试配置就不多说了 然后就是初始化了 同样的 这里使用的是结构
  • 【华为OD机试真题 python】最大报酬【2022 Q4

    题目描述 最大报酬 小明每周上班都会拿到自己的工作清单 工作清单内包含 n 项工作 每项工作都有对应的耗时时间 单位 h 和报酬 工作的总报酬为所有已完成工作的报酬之和 那么请你帮小明安排一下工作 保证小明在指定的工作时间内工作收入最大化
  • 如何在SYSTEM权限下实现屏幕监控

    屏幕监控是远控软件的基本功能之一 现在很多远控程序的服务端通常为DLL形式 通过远程线程注入等方法插入到services svchost等SYSTEM权限的进程中去 而此时常规的屏幕监控就会失效 这是因为与SYSTEM权限进程关联的窗口站
  • Springboot 各种常用配置

    目录 数据库配置 常用 sql 数据源 spring 配置 druid 依赖 基础配置 统一错误处理 统一响应信息处理 Swagger 配置 Spring security 配置 抽象业务配置 实体类的父类 控制器父类 mybatis pl
  • 【统计模型】ToothGrowth数据集双因素方差分析

    目录 ToothGrowth数据集双因素方差分析 一 研究目的 二 数据来源和相关说明 三 描述性分析 3 1 样本描述 3 2 样本均值 3 3 箱线图 四 数学建模 五 结论与建议 5 1 结论 5 2 建议 六 代码 ToothGro
  • 111. 二叉树的最小深度

    给定一个二叉树 找出其最小深度 最小深度是从根节点到最近叶子节点的最短路径上的节点数量 说明 叶子节点是指没有子节点的节点 Definition for a binary tree node public class TreeNode in
  • android so劫持,防劫持SDK

    防劫持SDK 一 产品简介 防劫持SDK是具备防劫持兼防截屏功能的SDK 可有效防范恶意程序对应用进行界面劫持与截屏的恶意行为 二 iOS版本 2 1 环境要求条目说明兼容平台iOS 8 0 开发环境XCode 4 0 CPU架构armv7
  • 四、设计工程

    软件设计开始于软件需分析和规约之后 是把需求转化为软件系统的重要环节 软件需求解决 做什么 的问题 软件设计解决 怎么做 的问题 一 概述 早期设计工程分为概要设计和详细设计 概要设计 将需求转换为数据结构 软件体系结构及其接口 详细设计或