软件设计师(六)结构化开发方法

在这里插入图片描述

结构化方法由结构化分析结构化设计结构化程序设计构成,它是一种面向数据流的开发方法。

分类说明
结构化分析(SA)根据分解与抽象的原则,按照系统中数据处理的流程,用数据流图来建立系统的功能模型,从而完成需求分析工作
结构化设计(SD)根据模块独立性准则、软件结构优化准则将数据流图转换为软件的体系结构,用软件结构图来建立系统的物理模型,实现系统的概要设计
结构化程序设计(SPD)使用 3 种基本控制结构构造程序,任何程序都可以由顺序、选择和重复 3 种基本控制结构构造。

结构化方法总的指导思想是自顶向下逐层分解,它的基本原则是功能的分解与抽象

一、系统分析与设计概述

1、系统分析概述

系统分析是一种问题求解技术,它将一个系统分解成各个组成部分,目的是研究各个部分如何工作、交互,以实现其系统目标。
系统分析的目的是为项目团队提供对触发项目的问题和需求的更全面的理解,因此强调业务问题方面,而非技术或实现方面。

(1)系统分析的目的和任务

系统分析的主要任务:是对现行系统进一步详细调查,将调查中所得到的文档资料集中,对组织内部整体管理状况和信息处理过程进行分析,为系统开发提供所需的资料,并提交系统方案说明书。
系统分析侧重于从业务全过程的角度进行分析,主要内容有业务和数据的流程是否通畅、是否合理数据、业务过程和组织管理之间的关系原系统管理模式改革和新系统管理方法的实现是否具有可行性等

系统分析报告,即系统方案说明书。

(2)系统分析的主要步骤

在这里插入图片描述

  1. 认识、理解当前的现实环境,获得当前系统的“物理模型”
  2. 从当前系统的“物理模型”抽象出当前系统的“逻辑模型”。
  3. 对当前系统的“逻辑模型”进行分析和优化,建立目标系统的“逻辑模型”
  4. 对目标系统的逻辑模型具体化(物理化),建立目标系统的物理模型。

2、系统设计的基本原理

(1)抽象

抽象是一种设计技术,重点说明一个实体的本质方面,而忽略或者掩盖不太重要或非本质的方面。
抽象的最底层就是实现该软件的源程序代码

(2)模块化

模块在程序中是数据说明、可执行语句等程序对象的集合,或者是单独命名和编址的元素。
模块是可组合、分解和更换的单元。
模块化:是指将一个待开发的软件分解成若干个小的简单部分一一模块,每个模块可独立地开发、测试,最后组装成完整的程序。
模块化的目的是使程序的结构清晰,容易阅读、理解、测试和修改。

(3)信息隐蔽

信息隐蔽是开发整体程序结构时使用的法则,即将每个程序的成分隐蔽或封装在一个单一的设计模块中,在定义每一个模块时尽可能少地显露其内部的处理。
信息隐蔽原则对提高软件的可修改性、可测试性和可移植性都有重要的作用。

(4)模块独立

模块独立是指每个模块完成一个相对独立的特定子功能,并且与其他模块之间的联系简单。
衡量模块独立程度的标准有两个:耦合性和内聚性。
在这里插入图片描述
在这里插入图片描述

3、系统总体结构设计

系统总体结构设计是要根据系统分析的要求和组织的实际情况对新系统的总体结构形式和可利用的资源进行大致设计,这是一种宏观、总体上的设计和规划。

(1)系统结构设计原则

  • 分解-协调原则
  • 自顶向下的原则
  • 信息隐蔽、抽象的原则
  • 一致性原则
  • 明确性原则
  • 模块之间的耦合尽可能小,模块的内聚度尽可能高
  • 模块的扇入系数和扇出系数要合理
  • 模块的规模适当

(2)子系统划分

子系统的划分应遵循的原则

  • 子系统要具有相对独立性
  • 子系统之间数据的依赖性尽量小
  • 子系统划分的结果应使数据冗余较小
  • 子系统的设置应考虑今后管理发展的需要
  • 子系统的划分应便于系统分阶段实现
  • 子系统的划分应考虑到各类资源的充分利用

子系统结构设计

子系统结构设计的任务是确定划分后的子系统模块结构,并画出模块结构图。

(3)系统模块结构设计

模块的概念

模块是组成系统的基本单位,它的特点是可以组合、分解和更换。
根据功能具体化程度的不同,模块可以分为逻辑模块和物理模块。
模块的4个要素:输入和输出(外部特性)、处理功能(外部特性)、内部数据(内部特性)、程序代码(内部特性)。

模块结构图

模块结构图主要关心的是模块的外部属性,即上下级模块、同级模块之间的数据传递和调用关系,并不关心模块的内部。
模块结构图是结构化设计中描述系统结构的图形工具,由模块、调用、数据、控制信息和转接符号 5 种基本符号组成。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

(4)数据存储设计

4、系统文档

文档的多种作用:

  • 用户与系统分析人员在系统规划和系统分析阶段通过文档进行沟通。
  • 系统开发人员与项目管理人员通过文档在项目期内进行沟通。
  • 系统测试人员与系统开发人员通过文档进行沟通。
  • 系统开发人员与用户在系统运行期间进行沟通。
  • 系统开发人员与系统维护人员通过文档进行沟通
  • 用户与维修人员在运行维护期间进行沟通

二、结构化分析方法 ( Structured Analysis , SA)

1、结构化分析方法概述

抽象和分解是处理任何复杂问题的两个基本手段。
自顶向下的过程是分解的过程,自底向上的过程是抽象的过程。
结构化方法的分析结果:一套分层的数据流图、一本数据词典、一组小说明 (也称加工逻辑说明)、补充材料。

2、数据流图(DFD)

数据流图也称数据流程图(Data Flow Diagram,DFD),它是一种便于用户理解、分析系统数据流程的图形工具。

(1)数据流图的基本图形元素

元素图元
数据流由一组固定成分的数据组成,表示数据的流向。每个数据流通常有一个合适的名词反映数据流的含义在这里插入图片描述
加工加工描述了输入数据流到输出数据流之间的变换,也就是输入数据流做了什么处理后变成了输出数据流在这里插入图片描述
数据存储(文件)用来表示暂时存储的数据,每个文件都有名字。流向文件的数据流表示写文件,流出的表示读文件在这里插入图片描述
外部实体指存在于软件系统外的人员或组织在这里插入图片描述

(2)数据流图的扩充符号

在 DFD 中,一个加工可以有多个输入数据流和多个输出数据流,此时可以加上一些扩充符号来描述多个数据流之间的关系。

星号(*)星号表示数据流之间存在“与”关系。如果是输入流则表示所有输入数据流全部到达后才能进行加工处理:如果是输出流则表示加工结束将同时产生所有的输出数据流
加号 (+)加号表示数据流之间存在“或”关系。如果是输入流则表示其中任何一个输入数据流到达后就能进行加工处理:如果是输入流则表示加工处理的结果是至少产生其中一个输出数据流
异或(⊕)异或表示数据流之间存在“互斥”关系。如果是输入流则表示当且仅当其中一个输入流到达后才能进行加工处理: 如果是输出流则表示加工处理的结果是仅产生这些输出数据流中的

(3)数据流图的层次结构

每张图中加工个数大致控制在“7加减2”的范围内。
为了方便对图进行管理和查找,可以采用下列方式对 DFD 中的图和加工编号

  1. 顶层图中只有一个加工 (代表整个软件系统),该加工不必编号。
  2. 0 层图中的加工编号分别为 1、2、3···。
  3. 子图号就是父图中被分解的加工号。
  4. 对于子图中加工的编号,若父图中的加工号为x的加工分解成某一子图,则该子图中的加工编号分别为 x.1、x.2、x.3···。
    在这里插入图片描述

(4)数据流图的平衡原则

父图与子图之间的平衡
子图内平衡

3、数据字典(DD)

数据流图描述了系统的分解,但没有对图中各成分进行说明。数据字典就是为数据流图中的每个数据流、文件、加工,以及组成数据流或文件的数据项做出说明。其中,对加工的描述称为“小说明”,也可以称为“加工逻辑说明”

在这里插入图片描述
在这里插入图片描述

三、结构化设计方法(Structured Design, SD)

结构化设计(Structured Design,SD) 方法是一种面向数据流的设计方法,它可以与 SA 方法衔接。基本思想是将系统设计成由相对独立、功能单一的模块组成的结构。
结构化设计方法中用结构图(Structure Chart) 来描述软件系统的体系结构,指出一个软件系统由哪些模块组成,以及模块之间的调用关系。

1、结构化设计的步骤

第一步是建立一个满足软件需求规约的初始结构图,第二步是对结构图进行改进。

(1)建立初始结构图

结构化方法本质上是一种功能分解方法。
功能模块的分解应满足自顶向下、逐步求精、信息隐蔽、高内聚低耦合等设计准则,

(2)对结构图的改进

初始结构图往往存在一些不合理的设计(包括不合理的模块分解),因此,可根据设计准则对其进行改进。

(3)书写设计文档

在概要设计完成之后应书写设计规格说明,特别要为每个模块书写模块的功能、接口、约束和限制等,必要时可建立模块开发卷宗。

(4)设计评审

对设计结果及文档进行评审。

2、数据流图到软件体系结构的映射

结构化设计是将结构化分析的结果 (数据流图) 映射成软件的体系结构 (结构图)。
可将数据流图分为变换型数据流图和事务型数据流图。

(1)信息流的类型

交换流

信息沿着输入通路进入系统,同时将信息的外部形式转换成内部表示,然后通过变换中心(也称主加工)处理,再沿着输出通路转换成外部形式离开系统。具有这种特性的信息流称为变换流。变换流型的 DFD 可以明显地分成输入、变换 (主加工) 和输出三大部分。

事务流

信息沿着输入通路到达一个事务中心,事务中心根据输入信息 (即事务)的类型在若干个动作序列(称为活动流)中选择一个来执行,这种信息流称为事务流。事务流有明显的事务中心,各活动流以事务中心为起点呈辐射状流出。

(2)变换分析

变换分析是从变换流型的 DFD 导出程序结构图

确定输入流和输出流,分离出变换中心

第一级分解

第一级分解主要是设计模块结构的顶层和第一层。
在这里插入图片描述

第二级分解

第二级分解主要是设计中、下层模块.

事务分析

事务分析是从事务流型 DED 导出程序结构图。
在这里插入图片描述
在这里插入图片描述

SD方法的设计步骤

  1. 复查并精化数据流图。
  2. 确定 DFD 的信息流类型 (变换流或事务流)。
  3. 根据流类型分别实施变换分析或事务分析。
  4. 根据系统设计的原则, 对程序结构图进行优化

四、WebApp分析与设计

1、WebApp的特性

  • 网络密集型
  • 并发性
  • 无法预知的负载量
  • 性能
  • 可用性
  • 数据驱动

2、WebApp需求模型

建模以需求工程中确定的用户类别、可用目标、使用场景、业务环节等各类需求等为输入,产生如下 5 种主要的模型类型

(1)内容模型

内容模型给出由 WebApp 提供的全部系列内容,包括文字、图形、图像、音频和视频。
在这里插入图片描述

(2)交互模型

交互模型描述了用户与 WebApp 采用了哪种交互方式。交互模型由一种或多种元素构成,包括用例、顺序图、状态图、用户界面原型等。

(3)功能模型

(4)导航模型

导航模型为 WebApp 定义所有导航策略。

(5)配置模型

配置模型描述 WebApp 所在的环境和基础设施

3、WebApp设计

包括:架构设计、构件设计、内容设计、导航设计、美学设计、界面设计。

(1)架构设计

模型-视图-控制器(Model-View-Controller,MVC) 结构是WebApp 基础结构模型之一,它将 WebApp 功能及信息内容分离。

(2)构件设计

  • 构件级内容设计
  • 构件级功能设计

(3)内容设计

WebApp 的内容结构(线性或非线性)也影响架构,因此设计内容体系结构。
内容体系结构着重于内容对象(诸如网页的组成对象) 的表现和导航的组织,通常采用线性结构、网格结构、层次结构、网络结构四种结构及其组合。

(4)导航设计

建立了 WebApp 的体系结构及其构件后,定义导航路径,使用户可以访问 WebApp 的内容和功能。

五、用户界面设计

1、黄金原则

(1)用户操作控制

  • 以不强迫用户进入不必要的或不希望的动作的方式来定义交互模式
  • 提供灵活的交互
  • 允许中断和撤销用户交互
  • 当技能级别增长时可以使交互流线化并允许定制交互
  • 使用户与内部技术细节隔离开来
  • 设计应允许用户与出现在屏幕上的对象直接交互

(2)减少用户的记忆负担

  • 减少对短期记忆的要求
  • 建立有意义的默认
  • 定义直观的快捷方法
  • 界面的视觉布局应该基于真实世界的象征
  • 以不断进展的方式揭示信息

(3)保持界面一致

  • 允许用户将当前任务放入有意义的环境中
  • 在应用系统家族内保持一致性
  • 如果过去的交互模型已经建立起了用户期望,除非有不得已的理由,否则不要改变它

2、用户界面的分析与设计

(1)用户界面分析和设计模型

  • 软件工程师所创建的设计模型(Design Model)。
  • 人机界面设计工程师创建的用户模型 (User Model)。
  • 最终用户在脑海里对界面产生的映像,称为用户的心理模型或系统感觉 (System Perception)。
  • 系统实现者创建的系统映像(System Image)。

(2)用户界面分析和设计的过程

包括 4 个不同的框架活动:界面分析及建模、界面设计、界面构造和界面确认。

3、用户界面设计问题

在进行用户界面设计时,几乎总会遇到以下 4 个问题:系统响应时间、帮助设施、错误信息处理、菜单和命令标记。

(1)系统响应时间

系统响应时间是指从用户开始执行动作到软件以预期的输出和动作形式给出响应这段时间。
系统响应时间包括两方面的属性:时间长度和可变性。
可变性是指相对于平均时间的偏差(最重要的响应时间特性)。

(2)帮助设施

考虑帮助设施时需要在设计中解决以下问题:

  • 进行性交互时,是否在任何时候对任何功能都能得到帮助?
    答:有2种选择:提供部分功能的帮助 和 提供全部功能的帮助。
  • 用户怎么请求帮助?
    答:有 3 种选择:帮助菜单、特殊功能键和 HELP 命令。
  • 如何表达帮助?
    答:有 3 种选择:提供单独的帮助窗口、在另一个窗口中指示参考某个已印刷的文档、在屏幕特定位置给出一行或两行的简单提示。
  • 用户如何回到正常的交互方式?
    答:有3种选择:屏幕上显示的返回按钮、功能键或控制序列
  • 如何构造帮助信息?
    答:有 3 种选择:平面结构(所有信息均通过关键词来访问)、分层结构(用户可以进入分层结构得到更详细的信息) 和超文本的使用。

(3)错误信息处理

出错信息和警告是指出现问题时系统反馈给用户的“坏消息”。
具备特征:

  • 消息以用户可以理解的语言描述问题。
  • 消息应提供如何从错误中回复的建设性意见。
  • 消息应指出错误可能导致哪些不良后果(例如破坏数据文件),以便用户检查是否出现了这些情况。
  • 消息伴随着视觉或听觉上的提示。也就是说,显示消息应该伴随警告声或者消息用闪烁方式显示,或以明显表示错误的颜色来显示。
  • 消息不应是裁判性的,即不能指责用户

(4)菜单和命令标记

在提供命令或菜单标签交互时,必须考虑以下问题:

  1. 每个菜单选择是否都有对应的命令?
  2. 以何种方式提供命令? 有 3 种选择:控制序列(如 Alt+P)、功能键或输入命令
  3. 学习和记忆命令的难度有多大? 忘记命令怎么办?
  4. 用户是否可以定制和缩写命令?
  5. 在界面环境中菜单标签是不是自解释的?
  6. 子菜单是否与主菜单所指的功能相一致?

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

7种有效安全的网页抓取方法,如何避免被禁止?

网页抓取是一种从互联网上抓取网页内容的过程,但在网络抓取种相信您也经常遇到障碍?尤其是做跨境业务的,在抓取国外的网站时更有难度。但我们站在您的立场上,提供七种有效的方法来进行网页抓取而不被阻止,最大限度地降…

python可以做哪些小工具,python可以做什么小游戏

大家好,小编来为大家解答以下问题,python可以做什么好玩的,python可以做什么小游戏,今天让我们一起来看看吧! 最近有几个友友问我说有没有比较好玩的Python小项目来练手,于是我找了几个比较有意思的给他们&…

CUDA编程

银河系CUDA编程指南(3)——矩阵乘法的分块实现 银河系CUDA编程指南(3)——矩阵乘法的分块实现 - 知乎0 写在前面前面一节实现了一个朴素的GPU矩阵乘法,效果和使用cublas库差距极大。其中一个原因就是因为对全局存储器 ( global memory) 的访问。全局内存通常使用DR…

亚马逊关键词的作用有哪些?

亚马逊关键词在平台上扮演着重要的作用,涵盖了消费者、卖家和整个平台的多个方面: 1、消费者的作用: 帮助消费者快速找到所需商品:通过输入关键词,消费者可以迅速找到感兴趣的商品,节省时间和精力。 支持…

百分点科技跻身中国智慧应急人工智能解决方案市场前三

近日, 全球领先的IT市场研究和咨询公司IDC发布了《中国智慧应急解决方案市场份额,2022》报告,数据显示,2022年中国智慧应急整体市场为104亿元人民币。其中,智慧应急人工智能解决方案子市场备受关注,百分点科…

day1-牛客67道剑指offer-JZ4 JZ6 JZ7 JZ9 JZ11 JZ69 JZ70 替换空格 斐波那契数列及其变形 左移/右移运算符

文章目录 1. JZ4 二维数组中的查找暴力法右上角往左下角逼近二分查找-左闭右开区间 2. 替换空格3. JZ6 从尾到头打印链表4. JZ7 重建二叉树思路1哈希加速 5. JZ9 用两个栈实现队列6. JZ11 旋转数组的最小数字常规遍历二分法 7. 斐波那契数列动态规划递归 8. JZ69 跳台阶动态规划…

PS - Photoshop 实现涂抹功能 (橡皮擦、图章、吸管、画笔)

欢迎关注我的CSDN:https://spike.blog.csdn.net/ 本文地址:https://spike.blog.csdn.net/article/details/131997323 在 Photoshop 中,橡皮擦工具,以及吸管工具和画笔工具可以配合使用,实现涂抹功能,再通过…

AMEYA360:瑞萨电子MCU和MPU产品线将支持Microsoft Visual Studio Code

全球半导体解决方案供应商瑞萨电子宣布其客户现可以使用Microsoft Visual Studio Code(VS Code)开发瑞萨全系列微控制器(MCU)和微处理器(MPU)。瑞萨已为其所有嵌入式处理器开发了工具扩展,并将其…

zookeeper入门学习

zookeeper入门学习 zookeeper应用场景 分布式协调组件 客户端第一次请求发给服务器2,将flag值修改为false,第二次请求被负载均衡到服务器1,访问到的flag也会是false 一旦有节点发生改变,就会通知所有监听方改变自己的值&#…

ConcurrentHashMap 的简单介绍

ConcurrentHashMap是Java集合框架中的一个并发容器,它是线程安全的哈希表的实现。它被设计为比Hashtable和SynchronizedMap(通过使用同步方法或块来保证线程安全)更高效和可扩展的替代品。 ConcurrentHashMap具有以下特点: 线程…

Docker安装RabbitMQ镜像

步骤1:拉取镜像 docker pull rabbitmq:management 步骤2:运行 docker run -d –-name rabbit -e RABBITMQ_DEFAULT_USERadmin -e RABBITMQ_DEFAULT_PASSadmin -p 15672:15672 -p 5672:5672 -p 25672:25672 -p 61613:61613 -p 1883:1883 rabbitmq:mana…

Windows同时安装两个版本的JDK并随时切换,以JDK6和JDK8为例,并解决相关存在的问题(亲测有效)

Windows同时安装两个版本的JDK并随时切换,以JDK6和JDK8为例,并解决相关存在的问题(亲测有效) 1.下载不同版本JDK 这里给出JDK6和JDK的百度网盘地址,具体安装过程,傻瓜式安装即可。 链接:http…

Redis学习总结

Redis学习总结 文章目录 Redis学习总结Radis基本介绍docker的安装基本数据结构通用命令字符型key的层次结构Hash类型Listset sortedset集合redis的java客户端jedis的使用jedis连接池的配置 SpringDataRedis自定义redistemplate的序列化与反序列化方式stringtemplate的使用 redi…

windows创建占用特定端口程序

默认情况下,远程桌面使用的是3389端口。如果您想将远程桌面端口更改为8005,以达到模拟程序占用端口8005的情况,可以执行以下操作: 如执行以下命令,则1,2,3步相同操作可以跳过,直接往…

【Java】Springboot脚手架生成初始化项目代码

Springboot配置生成初始化项目代码可以通过mvn的mvn archetype:generate 和阿里云原生应用脚手架(地址)、spring官方提供的start初始化生成页面(地址)。 1、mvn archetype:generate 通过mvn选择对应的脚手架可以快速生成初始化代码&#xf…

一次有趣的Webshell分析经历

一次有趣的Webshell分析经历 1.拉取源代码2.解密后门代码3.分析webshell逻辑4.分析404的原因5.附:格式化后的php代码 1.拉取源代码 在对某目标做敏感目录收集时发现对方网站备份源代码在根目录下的 backup.tar.gz,遂下载,先使用D盾分析有没有…

shiro快速入门

文章目录 权限管理什么是权限管理?什么是身份认证?什么是授权? 什么是shiro?shiro的核心架构shiro中的三个核心组件 shiro中的认证shiro中的授权shiro使用默认Ehcache实现缓存shiro使用redis作为缓存实现 权限管理 什么是权限管理…

31.利用linprog 解决 投资问题(matlab程序)

1.简述 语法:[X,FVAL] linprog(f,a,b,Aeq,Beq,LB,UB,X0); X 为最终解 , FVAL为最终解对应的函数值 *注意:求最大值时,结果FVAL需要取反* f 为决策函数的系数矩阵。 *注意:当所求为最大值…

SpringBoot实现数据库读写分离

SpringBoot实现数据库读写分离 参考博客https://blog.csdn.net/qq_31708899/article/details/121577253 实现原理:翻看AbstractRoutingDataSource源码我们可以看到其中的targetDataSource可以维护一组目标数据源(采用map数据结构),并且做了路由key与目标…

LeetCode 26 题:删除有序数组的重复项

思路 在写这一个题时,我突然想到了Python中的 set()函数可能会有大用处,便选择了用Python写。 set()函数可以将列表转化为集合,集合会保证元素的单一性,所以会自动删去相同字符。 …