第六章 结构化开发方法(软件设计师教程)

结构化方法涵盖结构化分析、结构化设计以及结构化程序设计,属于面向数据流的开发方法。其总体指导思想为自顶向下、逐层分解,基本原则是功能的分解与抽象。下面是对软件设计师教程中该部分知识点的梳理。

一、系统分析与设计

(一)系统分析一般过程

  1. 认识、理解当前现实环境,获取当前系统 “物理模型”:通过对现有系统的详细调研,包括业务流程、数据流向、操作方式等,了解系统当前的实际运行情况,形成对当前系统的直观认知,构建起当前系统的物理模型,此模型描述了系统的物理构成及实际运作机制。

  2. 从当前系统 “物理模型” 抽象出当前系统 “逻辑模型”:去除物理模型中的具体实现细节,如硬件设备、软件工具等,关注系统的核心功能、数据处理逻辑以及业务规则等,提炼出系统的逻辑结构和功能关系,形成当前系统的逻辑模型,该模型反映了系统的本质功能。

  3. 对当前系统 “逻辑模型” 进行分析和优化,建立目标系统 “逻辑模型”:分析当前系统逻辑模型的优缺点,结合用户需求和业务发展趋势,对其进行改进和优化,去除不合理的部分,增加新的功能需求,从而构建出目标系统的逻辑模型,这个模型体现了系统未来应具备的功能和特性。

  4. 对目标系统逻辑模型具体化(物理化),建立目标系统物理模型:为目标系统的逻辑模型选择合适的技术平台、硬件设备、软件工具等,确定具体的实现方案,将逻辑模型转化为可实际运行的物理模型,包括系统架构、数据库设计、程序模块设计等,使系统能够在实际环境中得以部署和运行。

系统开发的目标是将现有系统的物理模型转化为目标系统的物理模型,系统分析阶段的成果是得到目标系统的逻辑模型。逻辑模型反映系统的功能和性质,而物理模型反映系统的某一种具体实现方案。

(二)系统设计基本原理

  1. 抽象:作为重要工具,将复杂现实简化到可分析、实验或理解的程度。在软件开发中,通过抽象忽略事物的非本质细节,提取关键特征和行为,形成对系统的高层理解,为后续的设计和开发提供清晰的框架。

  2. 模块化:把待开发软件分解为若干小且简单的模块,每个模块可独立开发、测试,最后组装成完整程序。模块化降低了软件的复杂度,提高了开发效率和可维护性,使得不同开发人员可以专注于不同模块的开发,减少相互干扰。

  3. 信息隐蔽:将每个程序成分隐藏或封装在单一设计模块中,尽量减少内部处理的显露。这提高了软件的可修改性、可测试性和可移植性,因为对模块内部的修改不会轻易影响到其他模块,同时也方便对单个模块进行测试和在不同环境中移植。

  4. 模块独立:每个模块完成相对独立的特定子功能,且与其他模块联系简单。衡量模块独立程度的标准有耦合性和内聚性,应追求高内聚、低耦合。

  • 耦合:衡量模块之间相对独立性(互相连接紧密程度)。耦合程度从低到高依次为:

    • 无直接耦合:两个模块无直接关系,分别从属于不同模块控制与调用,不传递任何信息,耦合性最弱,模块独立性最高。

    • 数据耦合:模块间有调用关系,传递简单数据值,类似高级语言值传递。

    • 标记耦合:模块间传递数据结构。

    • 控制耦合:一个模块调用另一个模块时传递控制变量,被调用模块依此有选择地执行模块内某一功能。

    • 外部耦合:模块间通过软件之外环境联结(如 IO 关联到特定设备、格式通信协议)。

    • 公共耦合:通过公共数据环境相互作用的模块间耦合。

    • 内容耦合:一个模块直接使用另一个模块内部数据,或通过非正常入口转入另一个模块内部。

  • 内聚:度量模块内部各元素彼此结合紧密程度。内聚程度从高到低依次为:

    • 功能内聚:处理单一功能,各部分协同工作,缺一不可,内聚最强。

    • 顺序内聚:处理元素相关且必须顺序执行,前一功能元素输出是下一功能元素输入。

    • 通信内聚:所有处理元素集中在同一数据结构上操作,或各处理使用相同输入数据或产生相同输出数据。

    • 过程内聚:完成多个任务,任务须按指定过程执行。

    • 时间内聚:把需同时执行的动作组合在一起形成模块。

    • 逻辑内聚:模块内执行若干逻辑上相似功能,通过参数确定完成哪一个功能。

    • 偶然内聚(巧合内聚):模块内各处理元素无任何联系。

(三)系统总体结构设计

  1. 系统结构设计原则
  • 分解 - 协调原则:将复杂系统分解为多个子系统或模块,然后协调各部分工作,以实现整体目标。

  • 自顶向下原则:从系统的总体目标出发,逐步细化系统的功能和结构,先确定顶层框架,再逐步深入到下层细节。

  • 信息隐蔽、抽象原则:隐藏模块内部细节,通过抽象接口与其他模块交互,提高系统的可维护性和可扩展性。

  • 一致性原则:整个软件设计过程遵循统一规范、标准和文件模式,保证系统的整体性和兼容性。

  • 明确性原则:每个模块功能、接口明确,消除多重功能和无用接口,降低接口复杂度,避免病态连接。

  • 模块间低耦合、模块内高内聚原则:减少模块间依赖,增强模块内部功能的完整性和独立性,提高系统稳定性和可维护性。

  • 模块的扇入系数和扇出系数要合理原则:扇入系数指一个模块直接上级模块个数,扇出系数指一个模块直属下级模块个数。合理的扇入扇出系数有助于控制模块复杂度和系统结构的合理性。

  • 模块规模适当原则:模块规模既不能过大导致复杂度增加,也不能过小造成系统接口复杂,应根据实际情况确定合适规模。

  1. 子系统划分原则
  • 子系统相对独立:各子系统具有独立功能,能独立完成特定任务,减少子系统间相互影响。

  • 子系统间依赖小:降低子系统间数据和控制依赖,便于子系统独立开发、测试和维护。

  • 数据冗余小:避免子系统间数据重复存储,提高数据一致性和存储效率。

  • 考虑扩展性:为系统未来功能扩展和业务变化预留空间,便于添加新子系统或修改现有子系统。

  • 便于系统分阶段实现:根据项目实际情况和需求优先级,合理划分子系统,便于分阶段开发和部署。

  • 考虑各类资源利用情况:充分考虑人力、物力、时间等资源,合理分配资源到各子系统开发中。

  1. 系统模块结构设计
  • 模块四要素

    • 输入输出:模块从调用者获取输入,加工后返回输出给调用者。

    • 处理功能:模块执行的具体操作和数据处理逻辑。

    • 内部数据:模块内部使用的数据结构和变量。

    • 程序代码:实现模块功能的具体代码。前两者是模块外部特性,反映模块外貌;后两者是模块内部特性。

  • 模块结构图:用于描述系统中模块的层次结构、调用关系以及数据传递关系,直观展示系统的模块架构。

二、结构化分析方法

结构化分析与设计方法是面向数据流的传统软件开发方法,以数据流为中心构建软件分析模型和设计模型。采用自顶向下逐层分解思想进行分析建模,充分体现分解和抽象原则。分析结果由一套分层数据流图、一本数据词典、一组小说明(加工逻辑说明)及补充材料组成。

(一)数据流图(DFD)

  1. 基本图形元素
  • 数据流(Data Flow):由一组固定成分数据组成,表示数据流向。流向可从一个加工到另一个加工、从加工到数据存储(写)、从数据存储到加工(读)、从外部实体到加工(输入)、从加工到外部实体(输出),且必须与加工有关。

  • 加工(Process):描述输入数据流到输出数据流的变换,即输入数据流经何种处理变为输出数据流。一个加工可有多个输入和输出数据流,但至少有一个输入和一个输出数据流。

  • 数据存储(Data Store):用于存储数据,可被加工读取或写入。

  • 外部实体(External Agent):存在于软件系统外的人员或组织,指出系统数据发源地和归宿地。

  1. 扩充符号
  • 与(AND)关系:用 “+” 表示。若为输入流,表示所有输入数据流全部到达后才能加工处理;若为输出流,表示加工结束同时产生所有输出数据流。

  • 或(OR)关系:用 “|” 表示。若为输入流,表示其中任一输入数据流到达即可加工处理;若为输出流,表示加工结果至少产生其中一个输出数据流。

  • 异或(XOR)关系:用 “⊕” 表示。若为输入流,表示当且仅当其中一个输入流到达才能加工处理;若为输出流,表示加工结果仅产生这些输出数据流中的一个。

  1. 层次结构
  • 顶层图:只有一个加工,代表整个软件系统,描述软件系统与外界(外部实体)的数据流。

  • 0 层图:顶层图中加工分解后的图,对系统主要功能模块及相互关系进行初步展示。

  • 底层图:所有加工不再分解的图,展现系统最底层的详细处理过程。

  • 中间层:至少有一个加工被分解成子图的图,起到承上启下作用,逐步细化系统功能。

  • 基本加工:处于分层数据流图最底层,不再分解成子图的加工。

(二)数据字典

数据字典是对系统中使用的所有数据元素定义的集合,包括数据项、数据结构、数据流、数据存储和处理过程。对数据流图中每个数据流、文件、加工、组成数据流或文件的数据项做出说明,有数据流、数据项、数据存储、基本加工四类条目。数据项是组成数据流和数据存储的最小单位,外部实体不包含在数据字典条目中。其作用包括按各种要求列表、相互参照、由描述内容检索名称、进行一致性检验和完整性检验等,为系统开发人员准确理解数据含义和使用方式提供依据。

(三)加工规格说明(小说明)

  1. 常用描述方法
  • 结构化语言:结合自然语言和结构化程序设计语言的控制结构,如顺序、选择、循环等,清晰描述加工逻辑。

  • 判定表(决策表):能清楚表示复杂条件组合与应做动作的对应关系。左上部分定义条件,左下部分定义动作,右上部分列出条件取值组合,右下部分指出对应动作。

  • 判定树(决策树):直观表达加工逻辑,以树状结构展示条件和动作关系,从根节点开始,根据不同条件分支,叶节点为最终执行动作。

  1. 编写要点
  • 表达 “做什么” 而非 “怎么做”,关注加工的功能和逻辑,而非具体实现细节。

  • 描述基本加工如何将输入数据流变换为输出数据流的加工规则。

  • 描述实现加工的策略,而非实现加工的具体步骤。

三、结构化设计方法

结构化设计(SD)是面向数据流的设计方法,与结构化分析(SA)衔接,基本思想是将系统设计成相对独立、功能单一的模块结构。

(一)设计步骤

  1. 建立初始结构图:依据结构化分析得到的数据流图,将系统功能逐步分解为模块,确定模块的层次结构和调用关系,构建初始的软件体系结构。

  2. 对结构图进行改进:检查初始结构图的合理性,如模块的耦合度、内聚度,扇入扇出系数等,对不合理之处进行调整和优化,提高系统的可维护性和可扩展性。

  3. 书写设计文档:详细记录软件体系结构设计的结果,包括模块功能描述、接口定义、调用关系等,为后续开发和维护提供依据。

  4. 设计评审:组织相关人员对设计文档进行评审,检查设计是否满足需求,结构是否合理,是否存在潜在问题等,根据评审意见进一步完善设计。

(二)数据流图到软件体系结构的映射

根据信息流特点,数据流图分为变换型数据流图和事务型数据流图,对应映射为变换分析和事务分析。

  1. 变换型数据流图:具有明显输入、变换(主加工)和输出部分。变换分析从变换流型 DFD 导出程序结构图,先确定主加工,再分别设计输入、输出和变换模块。

  2. 事务型数据流图:数据沿输入通路到达一个处理,该处理根据输入数据类型在若干动作序列中选择执行,这个处理称为事务中心。事务分析根据事务型 DFD 结构,确定事务中心,将输入流分为接收路径和发送路径,分别设计相应模块。

四、用户界面设计

(一)用户界面设计的黄金原则(Theo Mandel 提出)

  1. 用户操纵控制:给予用户对交互过程的主导权,不强迫用户执行操作,交互方式灵活,支持中断和撤销操作,允许用户定制界面,实现直接交互,提高用户操作便捷性和自主性。

  2. 减少用户的记忆负担:界面设计简洁明了,操作流程简单易懂,避免过多复杂信息和操作步骤,减少用户记忆压力,使用户能快速上手和使用系统。

  3. 保持界面一致:在整个系统中保持界面风格、操作方式、提示信息等一致性,使用户形成统一认知和操作习惯,降低学习成本,提高操作效率。

(二)用户界面的分析与设计

  1. 分析和设计模型
  • 设计模型:描述界面的结构、布局、交互方式等设计细节。

  • 用户模型:对用户特征、需求、使用习惯等进行分析和建模,以指导界面设计满足用户期望。

  • 系统感觉:界面给用户的整体感受,包括视觉效果、操作流畅性等。

  • 系统映像:用户对系统的认知和理解,通过界面设计引导用户正确理解系统功能和操作方法。

  1. 分析和设计过程:通过用户需求调研、用户测试等方式,不断优化界面设计,提高用户体验。在设计过程中,充分考虑用户模型和系统感觉,使界面设计符合用户使用习惯,给用户良好的交互体验。

结构化开发方法在软件开发过程中具有重要地位,通过系统分析明确需求,结构化设计构建合理软件架构,用户界面设计提升用户体验,为开发高质量软件提供了有效的方法和步骤。掌握这些知识点对于软件设计师来说是至关重要的。

(注:文档部分内容可能由 AI 生成)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值