结构化开发方法--系统分析及设计概述

2023-10-27

说在前面:

本系列文章专注于软考备考复习内容梳理,文章内容是对教材中知识点和考点的提炼,备考过程中可以有针对的进行复习,减少阅读量,有的放矢。


导航目录

一、系统分析概述

系统分析是一种问题求解技术,它将一个系统分解成各个组成部分,目的是研究各个部分如何工作、交互,以实现其系统目标。

系统分析的目的是为项目团队提供对触发项目的问题和需求的更全面的理解,因此强调业务问题方面,而非技术或实现方面。系统分析阶段要求和系统用户一起工作,以便清楚地定义新系统的业务需求和预期。

1. 系统分析的目的和任务

系统分析的主要任务是对现行系统进一步详细调查,将调查中所得到的文档资料集中,对组织内部整体管理状况和信息处理过程进行分析,为系统开发提供所需的资料,并提交系统方案说明书。

系统分析侧重于从业务全过程的角度进行分析,主要内容有业务和数据的流程是否通畅、是否合理;数据、业务过程和组织管理之间的关系;原系统管理模式改革和新系统管理方法的实现是否具有可行性等。

确定的分析结果包括开发者对于现有组织管理状况的了解,用户对信息系统功能的需求,数据和业务流程,管理功能和管理数据指标体系以及新系统拟改动和新增的管理模型等。

最后,提出信息系统的各种设想和方案,并对所有的设想和方案进行分析、研究、比较、判断和选择,获得一个最优的新系统的逻辑模型,并在用户理解计算机系统的工作流程和处理方式的情况下,将它明确地表达成书面资料———系统分析报告,即系统方案说明书。

2. 系统分析的步骤

企业信息系统是一个具有业务复杂性和技术复杂性的大系统,为的是目标系统既能实现当前系统的基本职能,又能改进和提高。系统开发人员首先必须理解并描述出已经实际存在的当前系统,然后进行改进,从而创造出基于当前系统又高于当前系统的目标系统,即新系统。
系统分析过程一般按如下步骤进行。

(1)对当前系统进行详细调查,收集数据。

(2)建立当前系统的逻辑模型。


(3)对现状进行分析,提出改进意见和新系统应达到的目标。

(4)建立新系统的逻辑模型。

(5)编写系统方案说明书。

二、系统设计的基本原理

1.抽象

抽象是一种设计技术,重点说明一个实体的本质方面,而忽略或者掩盖不太重要或非本质的方面。抽象是一种重要的工具,用来将复杂的现象简化到可以分析、实验或者可以理解的程度。软件工程中从软件定义到软件开发要经历多个阶段,在这个过程中每前进一步都可看作是对软件解法的抽象层次的一次细化。抽象的最底层就是实现该软件的源程序代码。在进行模块化设计时也可以有多个抽象层次,最高抽象层次的模块用概括的方式叙述问题的解法,较低抽象层次的模块是较高抽象层次模块对问题解法描述的细化。

2. 模块化

模块在程序中是数据说明、可执行语句等程序对象的集合,或者是单独命名和编址的元素,例如高级语言中的过程、函数和子程序等。在软件的体系结构中,模块是可组合、分解和更换的单元。

模块化是指将一个待开发的软件分解成若干个小的简单部分———模块,每个模块可独立地开发、测试,最后组装成完整的程序。这是一种复杂问题“分而治之”的原则。模块化的目的是使程序的结构清晰,容易阅读、理解、测试和修改。

3.信息隐蔽

信息隐蔽是开发整体程序结构时使用的法则,即将每个程序的成分隐蔽或封装在一个单一的设计模块中,在定义每一个模块时尽可能少地显露其内部的处理。在设计时首先列出一些可能发生变化的因素,在划分模块时将一个可能发生变化的因素隐蔽在某个模块的内部,使其他模块与这个因素无关。当这个因素发生变化时,只需修改含有这个因素的模块,而与其他模块无关。
信息隐蔽原则对提高软件的可修改性、可测试性和可移植性都有重要的作用。

4. 模块独立

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

1) 
耦合是模块之间的相对独立性(互相连接的紧密程度)的度量。耦合取决于各个模块之间接口的复杂程度、调用模块的方式以及通过接口的信息类型等。一般模块之间可能的耦合方式有7种类型∶:

  • 无直接耦合。
    指两个模块之间没有直接的关系,它们分别从属于不同模块的控制与调用,它们之间不传递任何信息。因此,模块间耦合性最弱,模块独立性最高。
  • 数据耦合。
    指两个模块之间有调用关系,传递的是简单的数据值,相当于高级语言中的值传递。
  • 标记耦合。
    指两个模块之间传递的是数据结构。
  • 控制耦合。
    指一个模块调用另一个模块时,传递的是控制变量,被调用模块通过该控制变量的值有选择地执行模块内的某一功能。因此,被调用模块应具有多个功能,哪个功能起作用受调用模块控制。
  • 外部耦合。
    模块间通过软件之外的环境联结(如I/O将模块耦合到特定的设备、格式、通信协议上)时称为外部耦合。
  • 公共耦合。
    指通过一个公共数据环境相互作用的那些模块间的耦合。
  • 内容耦合。
    当一个模块直接使用另一个模块的内部数据,或通过非正常入口转入另一个模块内部时,这种模块之间的耦合称为内容耦合。

2)
内聚是对一个模块内部各个元素彼此结合的紧密程度的度量。一个内聚程度高的模块(在理想情况下)应当只做一件事。一般模块的内聚性分为7种类型:

  • 偶然内聚(巧合内聚)。
    
指一个模块内的各处理元素之间没有任何联系。
  • 逻辑内聚。
    指模块内执行若干个逻辑上相似的功能,通过参数确定该模块完成哪一个功能。
  • 时间内聚。
    把需要同时执行的动作组合在一起形成的模块称为时间内聚模块。
  • 过程内聚。
    指一个模块完成多个任务,这些任务必须按指定的过程执行。
  • 通信内聚。
    指模块内的所有处理元素都在同一个数据结构上操作,或者各处理使用相同的输入数据或者产生相同的输出数据。
  • 顺序内聚。
    指一个模块中的各个处理元素都密切相关于同一功能且必须顺序执行,前一功能元素的输出就是下一功能元素的输入。
  • 功能内聚。
    这是最强的内聚,指模块内的所有元素共同作用完成一个功能,缺一不可。

耦合性和内聚性是模块独立性的两个定性标准,在将软件系统划分模块时,应尽量做到高内聚、低耦合,提高模块的独立性。

三、系统总体结构设计

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

1. 系统结构设计原则


为保证总体结构设计顺利完成,应遵循以下几条原则。


(1)分解-协调原则。整个系统是一个整体,具有整体目的和功能,但这些目的和功能的实现又是由相互联系的各个组成部分共同工作的结果。解决复杂问题的一个很重要的原则就是把它分解成多个小问题分别处理,在处理过程中根据系统总体要求协调各部门的关系。


(2)自顶向下的原则。首先抓住系统总的功能目的,然后逐层分解,即先确定上层模块的功能,再确定下层模块的功能。



(3)信息隐蔽、抽象的原则。上层模块只规定下层模块做什么和所属模块间的协调关系,但不规定怎么做,以保证各模块的相对独立性和内部结构的合理性,使得模块与模块之间层次分明,易于理解、实施和维护。



(4)一致性原则。要保证整个软件设计过程中具有统一的规范、统一的标准和统一的文件模式等。



(5)明确性原则。每个模块必须功能明确、接口明确,消除多重功能和无用接口。


(6) 模块之间的耦合尽可能小,模块的内聚度尽可能高。



(7) 模块的扇入系数和扇出系数要合理。一个模块直接调用其他模块的个数称为模块的扇出系数;反之,一个模块被其他模块调用时,直接调用它的模块个数称为模块的扇入系数。模块的扇入、扇出系数必须适当。经验表明,一个设计得好的系统的平均扇入、扇出系数通常是3或4,一般不应超过7,否则会引起出错概率的增大。但菜单调用型模块的扇入与扇出系数可以大一些,公用模块的扇入系数可以大一些。



(8) 模块的规模适当。过大的模块常常使系统分解得不充分,其内部可能包含了若干部分的功能,因此有必要进一步把原有的模块分解成若干功能尽可能单一的模块。但分解也必须适度,因为过小的模块有可能降低模块的独立性,造成系统接口的复杂性。

2. 子系统划分

1)子系统划分的原则

为了便于今后的系统开发和系统运行,子系统的划分应遵循以下几点原则。

(1)子系统要具有相对独立性。子系统的划分,必须使得子系统的内部功能、信息等各方面的凝聚性较好。子系统独立可以减少子系统间的相互影响,有利于多人分工开发不同的模块,从而提高软件产品的生产率,保证软件产品的质量,同时也增强了系统的可维护性和适应性。

(2) 子系统之间数据的依赖性尽量小。子系统之间的联系要尽量减少,接口要简单明确。一个内部联系强的子系统对外部的联系必然很少,所以在划分的时候,应将联系较多者列入子系统内部,而剩余的一些分散、跨度比较大的联系,就成为这些子系统间的联系和接口。这样划分的子系统,将来调试、维护和运行都是非常方便的。

(3)子系统划分的结果应使数据冗余较小。如果把相关的功能数据分布到各个不同的子系统中,则会有大量的原始数据需要调用,大量的中间结果需要保存和传递,大量的计算工作将要重复进行,从而使得程序结构紊乱,数据冗余,不仅给编码带来很大的困难,而且系统的工作效率也大大降低。

(4)子系统的设置应考虑今后管理发展的需要。子系统的设置仅依靠上述系统分析的结构是不够的,因为现存的系统由于各种原因,很可能没有考虑到一些高层次管理决策的要求。

(5)子系统的划分应便于系统分阶段实现。信息系统的开发是一项较大的工程,它的实现一般要分批进行,所以子系统的划分应能适应这种分期分批的实施。

(6)子系统的划分应考虑到各类资源的充分利用。一个适当的子系统划分应该既考虑有利于各种设备资源在开发过程中的搭配使用,又考虑到各类信息资源的合理分布和充分使用,以减少系统对网络资源的过分依赖,减少输入、输出和通信等设备压力。

2)子系统结构设计

子系统结构设计的任务是确定划分后的子系统模块结构,并画出模块结构图。在进入这个过程中必须考虑以下几个问题。


(1)每个子系统如何划分成多个模块。


(2)如何确定子系统之间、模块之间传送的数据及其调用关系。

(3) 如何评价并改进模块结构的质量。

(4)如何从数据流图导出模块结构图。

3. 系统模块结构设计

1)模块的概念

模块是组成系统的基本单位,它的特点是可以组合、分解和更换。系统中的任何一个处理功能都可以看成是一个模块。根据功能具体化程度的不同,模块可以分为逻辑模块和物理模块。在系统逻辑模型中定义的处理功能可视为逻辑模块。物理模块是逻辑模块的具体化,可以是一个计算机程序、子程序或若干条程序语句,也可以是人工过程的某项具体工作。
一个模块应具备以下4个要素。


(1)输入和输出。模块的输入来源和输出去向都是同一个调用者,即一个模块从调用者那里取得输入,进行加工后再把输出返回给调用者。


(2)处理功能。指模块把输入转换成输出所做的工作。


(3)内部数据。指仅供该模块本身引用的数据。


(4)程序代码。指用来实现模块功能的程序。
前两个要素是模块外部特性,反映了模块的外貌。后两个要素是模块的内部特性。在结构化设计中,主要考虑的是模块的外部特性,对其内部特性只做必要了解,具体的实现将在系统实施阶段完成。

2) 模块结构图

为了保证系统设计工作的顺利进行,结构设计应遵循以下原则。


(1)所划分的模块其内部的凝聚性要强,模块之间的联系要少,即模块具有较强的独立性。
(2)模块之间的连接只能存在上下级之间的调用关系,不能有同级之间的横向联系。

(3)整个系统呈树状结构,不允许网状结构或交叉调用关系出现。

(4)所有模块(包括后继IPO图)都必须严格地分类编码并建立归档文件。


模块结构图主要关心的是模块的外部属性,即上下级模块、同级模块之间的数据传递和调用关系,并不关心模块的内部。
模块结构图是结构化设计中描述系统结构的图形工具。


作为一种文档,它必须严格地定义模块的名字、功能和接口,同时还应当在模块结构图上反映出结构化设计的思想。

4. 数据存储设计

信息系统的主要任务是从大量的数据中获得管理所需要的信息,这就必须存储和管理大量的数据。因此,建立一个良好的数据组织结构和数据库,使整个系统都可以迅速、方便、准确地调用和管理所需的数据,是衡量信息系统开发工作好坏的主要指标之一。

数据结构组织和数据库或文件设计,就是要根据数据的不同用途、使用要求、统计渠道和安全保密性等来决定数据的整体组织形式、表或文件的形式,以及决定数据的结构、类别、载体、组织方式、保密级别等一系列的问题。

一个好的数据结构和数据库应该充分满足组织的各级管理要求,同时还应该使后继系统的开发工作方便、快捷、系统开销(如占用空间、网络传输频度、磁盘或光盘读写次数等)小、易于管理和维护。

在建立了数据的整体结构之后,剩下的就是要确定数据的资源分布和安全保密性。其中,数据资源的分布是针对分布数据库系统而言的,而安全保密属性的定义则是针对某些特殊信息,例如财务数据等而言的。

(1)数据资源分布。如果所规划和设计的系统是在网络环境之下,那么数据库设计必须考虑整个数据资源在网络各节点(包括网络服务器)上的分配问题。

(2)数据的安全保密。一般数据库软件都提供定义数据安全保密性的基本功能。系统所提供的安全保密功能一般有8个等级(0-7级),4种不同方式(只读、只写、删除、修改),而且允许用户利用这8个等级的4种方式对每一个表自由地进行定义。

四、系统文档信息

系统的文档是系统建设过程的“痕迹”,是系统维护人员的指南,是开发人员与用户交流的工具。规范的文档意味着系统是按照工程化开发的,意味着信息系统的质量有了形式上的保障。文档的欠缺、文档的随意性和文档的不规范,极有可能导致原来的开发人员流动以后,系统不可维护、不可升级,变成了一个没有扩展性、没有生命力的系统。

信息系统的文档不仅包括应用软件开发过程中产生的文档,还包括硬件采购和网络设计中形成的文档∶不仅包括上述有一定格式要求的规范文档,也包括系统建设过程中的各种来往文件、会议纪要、会计单据等资料形成的不规范文档,后者是建设各方谈判甚至索赔的重要依据;不仅包括系统实施记录,也包括程序资料和培训教程等。

未完待续。。。

更多知识传送:

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

以上内容整理参考《软件设计师教程(第5版)》和《软件设计师考试同步辅导(第四版)》(忘记是哪个老师的了,侵删)。本文章内容旨在帮助更多想要进军软考,给自己镀金的小伙伴。有兴趣的小伙伴可以共勉。

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

结构化开发方法--系统分析及设计概述 的相关文章

  • mysql的安装与使用

    1 mysql下载与安装 下载解压 下载地址 https dev mysql com downloads mysql 5 7 html downloads 下载到指定位置 如D mysql 5 7 23 winx64 把解压的文件夹bin目
  • 计算机系统课程 笔记总结 CSAPP第二章 信息的表示和处理(2.3-2.4)

    GitHub计算机系统CSAPP课程资源 计算机系统课程 笔记总结 CSAPP第二章 信息的表示和处理 2 1 2 2 计算机系统课程 笔记总结 CSAPP第二章 信息的表示和处理 2 3 2 4 计算机系统课程 笔记总结 CSAPP第三章
  • opencv android 服务包,Unity中使用C++ OpenCV并且打包为Android apk

    我们需要在Unity中使用WebCamTexture获取图像 传送到OpenCV中做处理 然后返回到Unity中作显示 Unity通过调用动态链接库so与OpenCV进行通信 最终程序会打包成APK并且在Android上运行 系统环境 Vi
  • 华为OD机试 Python 【座位调整】

    描述 由于疫情原因 学生之间的座位要保持一定距离 每个学生的左右都要至少有一个空座 给定一个代表座位情况的数组desk 其中1代表有学生坐在那个位置 0代表该位置为空 问你在保持疫情安全距离的前提下 我们还能安排多少学生 输入 一个整数数组
  • cuda运行时库配置问题

    总是遇到一堆问题 这次遇到的问题和这个类似 http cudazone nvidia cn forum forum php mod viewthread tid 483 先看了一些文章 明白了是因为VC在编译和链接过程用的默认库被新库取代
  • vue动态加载页面组件

    问题说明 在开发时遇到一个问题 在同一个页面 局部页面要根据下拉框的选项来动态加载不同的页面 参考 1 Vue 下拉框代码

随机推荐

  • 论文笔记:PhaseNet: a deep-neural-network-based seismic arrival-time pickingmethod

    2018 Geophysical Journal International 1 Intro 1 1 Motivation 地震检测和定位是地震学的基础 地震目录的质量主要取决于到达时间测量的数量和准确性 地震到达时间测量或相位选择通常由网
  • Linux服务器磁盘分区、挂载、卸载及报错处理

    整体操作是 先对磁盘进行格式化 格式化后挂载到需要的挂载点 最后添加分区启动表 以便下次系统启动时自动挂载 一 linux分区 1 Linux来说wulun有几个分区 分给哪一目录使用 他归根结底只有一个根目录 一个独立且唯一的文件结构 L
  • restapi(1)- 文件上传下载服务

    上次对restapi开了个头 设计了一个包括了身份验证和使用权限的restful服务开发框架 这是一个通用框架 开发人员只要直接往里面加新功能就行了 虽然这次的restapi是围绕着数据库表的CRUD操作设计的 但文件类数据在服务端与客户端
  • azkaban简介及azkaban部署、原理和使用介绍

    azkaban简介及azkaban部署 原理和使用介绍 azkaban简介 Azkaban是一套简单的任务调度服务 整体包括三部分webserver dbserver executorserver Azkaban是由Linkedin开源的一
  • Effective C# 摘录(5) - 使用框架

    35 重写函数优于事件处理器 Prefer Overrides to Event Handlers e g 实现Form实例时 选择重写OnMouseDown 方法而不是添加事件句柄OnMouseDown 使用事件有更大的伸缩性 可以在一个
  • 1一9数字行书写法_考试不粗心—实用训练6法

    考试粗心是指在对相应的知识和技能构成掌握的前提下 学生在考试中出现遗漏与错误的心理现象 主要表现为在计算时容易将相似的字符混淆 在书写与运算过程中将个别文字 数位 小数点 甚至是题目本身遗漏 在作业过程中将计算类型弄错 忽略正确的计算顺序
  • 睿智的目标检测43——TF2搭建Retinaface人脸检测与关键点定位平台(tensorflow2)

    睿智的目标检测43 TF2搭建Retinaface人脸检测与关键点定位平台 tensorflow2 学习前言 什么是Retinaface人脸检测算法 源码下载 Retinaface实现思路 一 预测部分 1 主干网络介绍 2 FPN特征金字
  • nginx 部署vue项目

    首先需要在服务器里下载nginx apt get install nginx 检查nginx是否安装 输入如下命令后若出现版本号则安装成功 nginx v 然后启动nginx server nginx restart 如果有如下报错 则按照
  • 100天精通Python(数据分析篇)——第70天:Pandas常用排序、排名方法(sort_index、sort_values、rank)

    文章目录 一 按索引排序 sort index 1 Series类型排序 1 升序 2 降序 2 DataFrame类型排序 1 按行索引排序 2 按列索引排序 二 按值排序 sort values 1 Series类型排序 1 升序 2
  • 2023 QEMU模拟FT2000+(armv8)运行麒麟V10并安装tensorflow2

    2023 QEMU模拟FT2000 armv8 运行麒麟V10并安装tensorflow2 资源准备 麒麟V10SP1 桌面 QEMU 4 1 0以上 qeum安装kylin python tensorflow2 10 0 资源准备 麒麟V
  • python--pandas学习总结

    目录 一 Series和DataFrame 1 pandas Series 2 pandas DataFrame 二 Pandas常见用法 1 访问数据 1 1 head 和tail 1 2 describe 1 3 T 1 4 sort
  • BES提示音

    基于BES2500提示音的日志 11656 I NONE L M 13 threadpredict awaken label 1 11656 I NONE L M 13 app voice report handler 11656 I NO
  • Stable Diffuse 之 安装文件夹、以及操作界面 UI 、Prompt相关说明

    Stable Diffuse 之 安装文件夹 以及操作界面 UI Prompt相关说明 目录 Stable Diffuse 之 安装文件夹 以及操作界面 UI Prompt相关说明 一 简单介绍 二 安装文件相关说明 三 界面的简单说明 四
  • 微博评论内容的Chatgpt 话题聚焦和情感分析 情感分析&LDA主题&可视化&多元线性回归

    为了分析热点话题背后演化的逻辑 本项目选取了掀起大范围讨论的OpenAI发布的语言训练模型 ChatGPT 作为研究对象 通过对微博 豆瓣 知乎等社交平台进行考察分析 微博以活跃用户多 讨论热度高 公众关注度广等特点成为了本小组的第一首选
  • Makefile中echo和@echo的区别

    echo 会在shell中显示echo这条命令和这条命令的输出结果 echo 不会在shell中显示echo这条命令 但是会显示命令的输出结果 例如 echo test echo hello world echo test with add
  • 网络结构(1)ResNeXt介绍及cardinality介绍

    写这篇文章是因为最近在阅读论文的过程中 接触到了 cardinality 这个概念 出自2017年CVPR何凯明大神组的论文Aggregated Residual Transformations for Deep Neural Networ
  • 例题:加权合并与路径压缩

    题目 使用加权合并规则与路径压缩 对下列从0到15之间的数的等价对进行归并 并给出所得到的树的父指针表示法的数组表示 在初始情况下 集合中的每个元素分别在独立的等价类中 当两棵待归并的树的规模同样大时 使结点值较大的根结点作为值较小的根结点
  • 从redis为什么单线程还那么快到epoll的设计原理

    文章目录 redis为什么快 上下文切换 为什么采用单线程 redis的I O多路复用 epoll与select poll区别 select poll的几大缺点 用户态拷贝到内核态 epoll IO多路复用模型实现机制 epoll 优势详解
  • Redis-密钥登录ssh,免密码

    1 在kali上生成密钥 命令 ssh keygen t rsa 因为我这里有了 所以y选择了覆盖 如果是想无密码登录的话 则直接enter跳过 2 因为我这里config set dir root ssh dir有问题 所以我直接就把生成
  • 结构化开发方法--系统分析及设计概述

    说在前面 本系列文章专注于软考备考复习内容梳理 文章内容是对教材中知识点和考点的提炼 备考过程中可以有针对的进行复习 减少阅读量 有的放矢 导航目录 一 系统分析概述 二 系统设计的基本原理 三 系统总体结构设计 四 系统文档信息 一 系统