架构师备考-系统分析与设计(结构化方法)

定义        

        1978年,E.Yourdon 和 L.L.Constantine 提出了结构化方法,即 SASD 方法,也可称为面向功能的软件开发方法或面向数据流的软件开发方法。Yourdon 方法是20世纪80年代使用最广泛的软件开发方法。

        结构化方法提出了一组提高软件结构合理性的准则,如分解与抽象、模块独立性、信息隐蔽等。针对软件生存周期各个不同的阶段,它有结构化分析(SA),结构化设计(SD)和结构化编程(SP)等方法。

优点

  1. 开发目标清晰化:保持与用户沟通,让用户了解工作进展,校准工作方向。
  2. 开发工作阶段化:每个阶段完成后,要进行评审,便于项目管理与控制。
  3. 开发文档规范化:每个阶段完成后,按照要求完成相应文档,保证系统维护工作的便利。
  4. 设计方法结构化:自顶向下分解,进行分析与设计。根据设计要求编写各个功能模块,自底向上实现

缺点

  1. 开发周期长
  2. 难以适应需求变化
  3. 很少考虑数据结构

结构化分析

         结构化分析方法给出一组帮助系统分析人员产生功能规格的原理与技术。它一般利用图形表达用户需求,使用的手段主要有数据流图、数据字典、结构化语言、判定表以及判定树等。

  • 结构化分析是面向数据流的需求分析方法,它的思想是通过功能分解方式把系统功能分解到各个模块中。
  • 结构化分析的常用手段是数据流图(DFD)和数据字典。

结构化分析的步骤如下:

  1. 分析业务情况,做出反映当前物理模型的数据流图
  2. 推导出等价的逻辑模型的 DFD
  3. 设计新的逻辑系统,生成数据字典和基元描述
  4. 建立人机接口,提出可供选择的目标系统物理模型的DFD
  5. 确定各种方案的成本和风险等级,据此对各种方案进行分析
  6. 选择一种方案
  7. 建立完整的需求规约

结构化设计

  • 结构化设计是一种面向数据流的设计方法,它以SRS 和 SA 阶段所产生的数据流图和数据字典等文档为基础,是一个自顶向下,逐步求精和模块化的过程。
  • SD 方法的基本思想是将软件设计成由相对独立且具有单一功能的模块组成的结构,分为概要设计和详细设计两个阶段
    • 其中概要设计的主要任务是确定软件系统的结构,对系统进行模块划分,确定每个模块的功能、接口和模块之间的调用关系;
    • 详细设计的主要任务是为每个模块设计实现的细节;
  • 软件的结构化设计包括体系结构化设计、接口设计、数据设计和过程设计
    • 体系结构设计: 定义软件系统主要部件之间的关系
    • 接口设计(人机界面设计):软件内部,软件和和操作系统间以及软件和人之间如何通信
    • 数据设计:将模型转换成数据结构的定义。好的数据设计将改善程序结构和模块划分,降低过程复杂性
    • 过程设计:系统结构部件转换成软件的过程描述

软件结构设计

        软件结构设计的任务是定义系统主要结构元素之间的关系。通常是从数据流图出发,对数据流图进行分析,得出软件的层次化的模块结构图

系统结构图
  • 系统结构图(SC),又称为模块结构图,他是软件概要设计阶段的工具,反应系统的功能实现和模块之间的联系与通信,包括各模块之间的层次结构,既反映了系统的总体结构。
  • 在系统分析阶段,系统分析师可以采用 SA 方法获取由 DFD 、数据字典和加工说明等组成的系统的逻辑模型;在系统设计阶段,系统设计师可根据一些规则,从 DFD 中导出系统初始的 SC。

模块结构

        人们在解决复杂问题时使用的一个很重要的原则,就是将它分解成多个小问题分别处理,在处理过程中,需要根据系统总体要求,协调各业务部门的关系。

        在SD 中,这种功能分解就是将系统划分为模块,模块是组成系统的基本单位,它的特点是可以自由组合、分解和变换,系统中任何一个处理功能都可以看成一个模块。

信息隐藏与抽象
  • 信息隐藏原则要求采用封装技术,将程序模块的实现细节隐藏起来,对于不需要这些信息的其他模块来说是不能访问的,使模块接口尽量简单。按照信息隐藏的原则,系统中的模块应设计成“黑盒”,模块外部只能使用模块结构说明中给出的信息,例如,操作和数据类型等。模块之间相对独立,既易于实现,也易于理解和维护。
    • 通过信息隐藏可以提高软件的可修改性、可测试性和可移植性
  • 抽象原则要求抽取事务最基本的特性和行为,忽略非本质的细节,采用分层次抽象的方式可以控制软件开发过程的复杂性,有利于软件的可理解性和开发过程的管理。通常,抽象层次包括过程抽象,数据抽象和控制抽象。
模块化

        在SD 方法中,模块是实现功能的基本单位,它一般具有功能、逻辑和状态 3个基本属性,其中功能是指该模块“做什么”,逻辑是描述模块内部“怎么做”,状态是该模块使用时的环境和条件。

  • 在描述一个模块时,必须按模块的外部特性内部特性分别描述。
    • 模块的外部特性是指模块的结构与功能;包括模块名、参数表和给程序乃至整个系统造成的影响;
    • 模块的内部特性则是指局部数据、程序代码;即完成其功能的程序代码和仅供该模块内部使用的数据;

        对于模块的外部环境(例如,调用这个模块的上级模块)来说,只需要了解这个模块的外部特性就足够了,不必了解它的内部特性。而软件设计阶段,通常是先确定模块的外部特性,然后再确定它的内部特性。

耦合

        耦合表示模块之间关联的程度。紧密耦合表示模块之间联系非常强,松散耦合表示模块之间联系比较弱,非直接耦合则表示模块之间无任何直接联系。

耦合类型(由低到高)

描述

详细描述

非直接耦合

没有直接联系,互相不依赖对方

数据耦合

借助参数表传递简单数据

标记耦合

一个数据结构的一部分借助于模块接口被传递

这个记录是某一数据结构的子结构,而不是简单变量。其实传递的是这个数据结构的地址

控制耦合

模块间传递的信息中包含用于控制内部逻辑的信息

如果一个模块通过传送开关,标志,名字等控制信息,明显的控制选择另一个模块的功能,就是控制耦合

外部耦合

与软件以外的环境有关

一组模块都访问同一全局简单变量而不是同一全局数据结构,而且不是通过参数传递该全局变量的信息,称之为外部耦合

公共耦合

多个模块引用同一个全局数据区

若一组模块都访问一个公共数据环境,则他们之间的耦合就是公共耦合。公共的数据环境可以是全局数据结构,共享的通信区,内存的公共覆盖区等

内容耦合

一个模块访问另一个模块的内部数据;一个模块不通过正常入口转到另一个模块的内部;两个模块有一部分程序代码重叠;一个模块有多个入口

  • 耦合性也叫块间联系。指软件系统结构中各模块间相互联系紧密程度的一种度量。模块之间联系越紧密,其耦合性就越强,模块之间越独立,则越差
  • 模块间耦合性的高低取决于模块间接口的复杂性,调用的方式,以及传递的信息。
内聚

        内聚表示模块内部各代码成分之间联系的紧密程度,是从功能角度来度量模块内的联系,一个好的内聚模块应当恰好做目标单一的一件事情。

内聚类型(由高到底)

描述

功能内聚

完成一个单一功能,各个部分协同工作,缺一不可

顺序内聚

处理元素相关,而且必须顺序执行

通信内聚

所有处理元素集中在一个数据结构的区域上

过程内聚

处理元素相关,而且必须按特定的次序执行

瞬时内聚

所包含的任务必须在同一时间间隔内执行

逻辑内聚

完成逻辑上相关的一组任务

偶然内聚

完成一组没有关系或松散关系的任务

  • 一般来说系统中各模块的内聚越高,则模块间的耦合就越低,但这种关系并不是绝对的。耦合低是的模块间尽可能相对独立,各模块可以单独开发和维护;
  • 内聚高使得模块的可理解性和可维护性大大增强。
  • 因此,在模块的分解中应尽量减少模块的耦合,力求增加模块的内聚,遵循“高内聚,低耦合”的设计原则。
模块划分

        在模块划分时,要遵循如下原则:模块的大小要适中、模块的扇入扇出要合理、深度和宽度适当、模块要高内聚、低耦合

  • 模块的大小要适中:一般来说模块的大小其实现代码在1-2页纸之内,或者其实现代码行数在50-200 行之间,这种规模的模块易于实现和维护
  • 模块的扇入和扇出要合理:一个模块的扇出指该模块直接调用下级模块的个数;扇出大表示模块的复杂性高,可适当增加中间层次。一个模块的扇入指直接调用该模块的上级模块的个数;扇入大表示模块的复用性高。设计良好的软件结构通常顶层扇出比较大,中间扇出较少,底层模块则有大扇入。一般来说,系统的平均扇入和扇出系数为3或4,不应该超过7,否则会增大出错的概率;
  • 深度和宽度适当:深度表示软件结构中模块的层数;宽度指软件结构中同一个层次上的模块总数的最大值,一般来说宽度越大,系统越复杂,对宽度影响最大的因素是模块的扇出。
  • 模块要高内聚、低耦合

结构化编程

  • 结构化程序设计最早由E.W.Dijikstra 在 1965 年提出。“面向结构”|的设计方法即结构化程序设计方法,是“面向过程”方法的改进。
  • 结构上将软件系统划分为若干功能模块,各模块按要求单独编程,再组合构成相应的软件系统。
  • 该方法强调程序的结构性,所以容易做到易读易懂。该方法思路清晰,做法规范,程序的出错率和维护费用大大减少。
  • 结构化程序的原则可表示为: 程序 = (算法) + (数据结构)
  • 结构化设计提出的原则可以归纳为32个字:
    • 自顶向下,逐步细化;清晰第一,效率第二;书写规范,缩进格式;基本结构,组合而成。

数据库设计

        数据库设计是根据用户的需求,在某一具体的数据库管理系统上,设计数据库的结构和建立数据库的过程。数据库设计的内容包括:需求分析、概念结构设计、逻辑结构设计、物理结构设计、数据库的实施和数据库的运行和维护

概念结构设计

        概念结构设计是对用户要求描述的现实世界,通过对其中实体事物的分类、聚集和概括,建立抽象的概念数据模型。这个概念模型应反映现实世界各部门的信息结构、信息流动情况、信息间的互相制约关系以及各部门对信息储存、查询和加工的要求等。通常采用实体-联系图(E-R图)来表示。

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

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

相关文章

人工智能原理实验二:搜索方法

一、实验目的 本实验课程是计算机、智能、物联网等专业学生的一门专业课程,通过实验,帮助学生更好地掌握人工智能相关概念、技术、原理、应用等;通过实验提高学生编写实验报告、总结实验结果的能力;使学生对智能程序、智能算法等…

【AI应用】大模型工具如何助力文字创意工作(提示词Prompt+谷歌NotebookLM)

出发点:身处信息碎片和过载的时代,如何在日常工作学习中汇总并高效梳理知识?普通用户又如何激发AI大模型产出高质量的结果呢?本文将给出这两个问题的一些解决思路。 0、提纲: 提示词工程应知应会NotebookLM惊艳登场总…

springboot 使用 weixin-java-pay 支付demo

springboot引入依赖 <dependency><groupId>com.github.binarywang</groupId><artifactId>weixin-java-pay</artifactId><version>4.6.0</version></dependency>配置 wx:pay:appId: *********mchId: ********apiV3Key: ******…

剧本杀门店预约小程序,在线一键预约体验

剧本杀作为集社交、角色扮演、休闲娱乐为一体的游戏&#xff0c;吸引了年轻人的目光。当下&#xff0c;随着市场的发展&#xff0c;剧本杀行业正面临挑战&#xff0c;对于门店来说&#xff0c;如何找到新的发展方向&#xff0c;在市场中脱颖而出是重中之重&#xff01; 线上线…

SpringBoot技术:闲一品交易的新机遇

摘 要 随着科学技术的飞速发展&#xff0c;社会的方方面面、各行各业都在努力与现代的先进技术接轨&#xff0c;通过科技手段来提高自身的优势&#xff0c;闲一品交易平台当然也不能排除在外。闲一品交易平台是以实际运用为开发背景&#xff0c;运用软件工程原理和开发方法&…

柔性数组的使用

1.只有一个malloc的情况 //柔性数组的使用 #include<stdio.h> #include<stdlib.h> #include<errno.h> struct s {int i;int a[]; }; int main() {struct s* ps (struct s*)malloc(sizeof(struct s) 20 * sizeof(int));if (ps NULL){perror("malloc&…

从0到1,用Rust轻松制作电子书

我之前简单提到过用 Rust 做电子书&#xff0c;今天分享下如何用Rust做电子书。制作电子书其实用途广泛&#xff0c;不仅可以用于技术文档&#xff08;对技术人来说非常方便&#xff09;&#xff0c;也可以制作用户手册、笔记、教程等&#xff0c;还可以应用于文学创作。 如果…

计算机毕业设计django+大模型租房推荐系统 租房可视化 租房大屏可视化 租房爬虫 spark 58同城租房爬虫 房源推荐系统

开题报告&#xff1a;《Django大模型租房推荐系统》 一、研究背景与意义 随着城市化进程的加快&#xff0c;房屋租赁市场日益繁荣。然而&#xff0c;传统的房屋租赁方式存在信息不对称、交易流程繁琐等问题&#xff0c;给租户和房主带来了诸多不便。因此&#xff0c;开发一套…

ubuntu进程相关操作

进程相关操作 1.查看进程top/htop top 命令输出解释 在 top 命令中&#xff0c;字段通常表示如下&#xff1a; USER&#xff1a;进程的所有者。PR&#xff1a;优先级。NI&#xff1a;nice 值&#xff08;优先级调整&#xff09;。VIRT&#xff1a;进程使用的虚拟内存总量。…

如何在算家云搭建LongWriter(长文创作)

一、 LongWriter 简介 在自然语言处理领域&#xff0c;随着对长文本处理需求的不断增加&#xff0c;能够高效生成长文本的语言模型变得至关重要。LongWriter 的推出正是为了打破传统语言模型在生成超长文本时的限制。LongWriter-glm4-9b 是基于glm-4-9b进行训练的&#xff0c;…

C语言串口接收GPS数据

要在C语言中接收GPS数据&#xff0c;需要使用串口通信来与GPS设备进行数据交互。一个简单的串口通信代码主要包含了以下几个部分&#xff1a; 1.标准库头文件 stdio.h&#xff1a;包含输入输出函数&#xff0c;如 printf string.h&#xff1a;包含字符串处理函数&#xff0c…

【天线&空中农业】蜜蜂检测系统源码&数据集全套:改进yolo11-ASF

改进yolo11-dysample等200全套创新点大全&#xff1a;蜜蜂检测系统源码&#xff06;数据集全套 1.图片效果展示 项目来源 人工智能促进会 2024.10.30 注意&#xff1a;由于项目一直在更新迭代&#xff0c;上面“1.图片效果展示”和“2.视频效果展示”展示的系统图片或者视频可…

NavVis LX系列产品典型应用—现有住宅装修改造-沪敖3D

现有住宅装修改造项目的 数据捕捉和测量技术 当Jay Ure着手翻新和美化自己的新家时&#xff0c;他敏锐地发现这是现场测试NavVis VLX的绝佳机会。 为了全面评估&#xff0c;他聘请了一位工程师&#xff0c;采用传统的全站仪技术进行地形测绘。之后&#xff0c;他用移动扫描设…

点评项目-12-好友关注

好友关注主要有三个功能&#xff1a; 1.关注和取关 2.共同关注 3.关注推送 关注和取关 涉及到的表&#xff0c;中间表&#xff1a;tb_follow,是博主 User 和粉丝 User 的中间表 请求一&#xff0c;查询是否关注了该用户&#xff1a; 请求路径&#xff1a;follow/or/not/…

Android 在github网站下载项目:各种很慢怎么办?比如gradle下载慢;访问github慢;依赖下载慢

目录 访问github慢gradle下载慢依赖下载慢 前言 大家好&#xff0c;我是前期后期&#xff0c;在网上冲浪的一名程序员。 为什么要看这篇文章呢&#xff1f;问题是什么&#xff1f; 我们在Github上面看到一些好的项目的时候&#xff0c;想下载下来研究学习一下。但经常遇到各…

阿里面试:为什么MySQL不建议使用Delete删除数据?

MySQL有建议过不要使用他们家的DELETE吗&#xff1f;在MySQL 8.0的官方文档里没有找到不建议使用DELETE的文字。 DELETE VS NOT DELETE&#xff0c;这是由来已久的问题 时间回到2009的8月30号。大佬Ayende Rahien——也被称为Oren Eini&#xff0c;Hibernating Rhinos公司的C…

机器学习中的嵌入是什么?

一、说明 嵌入是真实世界对象的数字表示&#xff0c;机器学习&#xff08;ML&#xff09;和人工智能&#xff08;AI&#xff09;系统利用它来像人类一样理解复杂的知识领域。例如&#xff0c;计算算法了解 2 和 3 之间的差为 1&#xff0c;这表明与 2 和 100 相比&#xff0c;2…

Python | Leetcode Python题解之第517题超级洗衣机

题目&#xff1a; 题解&#xff1a; class Solution:def findMinMoves(self, machines: List[int]) -> int:tot sum(machines)n len(machines)if tot % n:return -1avg tot // nans, s 0, 0for num in machines:num - avgs numans max(ans, abs(s), num)return ans

若依框架部署到服务器后头像资源访问404

排错过程 第一开始以为是代理出问题了 官网给出的解决方案 第一种是用代理后端接口&#xff0c;第二种是重写路径直接访问静态文件 接口通过捕获profile开头的路径/profile/avatar…&#xff0c;转为/home…/avatar找到我们在该路径下的文件 但是我想了一下&#xff0c;我ngin…

《手写Spring渐进式源码实践》实践笔记(第十二章 aop融入bean生命周期)

提示&#xff1a;写完文章后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 第十二章 将AOP融入Bean生命周期背景目标设计实现代码结构类图实现步骤 测试事先准备自定义拦截方法Spring.xml 配置AOP测试用例测试结果&#xff1a; 总结 第十二章…