9512.net
甜梦文库
当前位置:首页 >> 理学 >>

北京理工大学软件工程实践


北京理工大学 软件工程实践
汤铭端 中国航天科工集团公司204所

第三讲
结构化方法

内容和目的
? ? ?

?

了解结构化方法的产生和有关概念 掌握结构化方法的基本原则 了解结构化分析、设计、编程方法的基 本内容 了解软件开发的一般原则

软件开发方法
?

?

?

软件开发方法是软件开发过程所遵循的 方法和步骤,其目的在于有效地得到一 些工作产品,既程序和文档,并且满足 质量要求 程序设计方法是软件开发方法的组成部 分 此外还有分析方法和设计方法

评价软件开发方法的四大特征
? ?

?

?

技术特征:支持各种技术概念的方法特色,如层次性、抽 象性、并行性、安全性、正确性等 使用特征:用于具体开发时的特色,如易理解性、易移植 性、易复用性、工具的支持、任务范围、使用的广度、活 动过渡的可行性、产品的易修改性、对正确性的支持等 管理特征:增强对软件开发活动管理的能力方面的特色, 如易管理性、支持或阻碍团队工作的程度、中间阶段的确 定、工作产品、配置管理、阶段结束准则、费用估计等 经济特征:给软件组织产生的在质量和生产力方面的可见 效益,如分析活动的局部效益、全生存周期效益、获得该 开发方法的代价、使用它的代价、管理的代价等

选用软件开发方法的考虑因素
1 对该开发方法是否已具有经验,或者已 有受过培训的人员 2 开发项目的进度、人员组成情况 3 为开发项目提供的资源如何 4 计划、组织、管理的可行性 5 开发项目的领域知识准备情况

航天的考虑
?

?

?
?

结构化方法较全面、最成熟、最基础、 使用最广泛、有成功经验 结构化方法适合航天软件研制工作 结构化方法是基础性方法 结构化方法包括就形成了配套的软件结 构化分析方法、结构化设计方法和结构 化编程方法,其核心和基础是结构化程 序设计理论

“结构化”起源:对GOTO的认 识
?

?

1968年Dijkstra在ACM通讯中发表了 “GOTO语句是有害的”文章,认为: GOTO语句是有害的,是造成程序混乱的 祸根,程序的质量与GOTO语句的数量成 反比,应该在所有高级程序设计语言中 取消GOTO语句 激起了强烈的反响和长期广泛的论战

论据
?

?

?

1966年,Boehm和Jacopini证明了程序设 计语言只要上旬、选择和重复三种形式 的控制结构就足以表达出各种其他形式 的结构 1970年McKeeman称其XPL编译程序仅用 一个GOTO语句 1972年C.Strachey设计的操作系统只在 五处使用了标号和GOTO语句

争辩
?

否定GOTO
?

?

肯定GOTO
?

?

?

取消GOTO后,程序 易理解、易排错、易 维护 没有其它好的结构代 替GOTO的话,容易 滥用GOTO 无GOTO的程序容易 进行正确性证明

?

?

在块和进程的非正常 出口处往往需要 使用GOTO会使程序 执行效率较高 在合成程序目标时, GOTO语句往往是有 用的,如返回语句用 GOTO

结论
? ?

?

1974年Knuth发表了总结性文章:“带有GOTO的结构化 程序设计” 令人信服地总结和证实了以下三点: ? 滥用GOTO语句确实有害,应尽量避免 ? 完全避免使用GOTO语句也并非是个明智的方法,有 些地方使用GOTO语句,会使程序流程更清楚、效率 更高 ? 争论的焦点不应该放在是否取消GOTO语句,而应该 放在用什么样的程序结构上 最后一点使关键,肯定以提高程序清晰性为目标的结 构化方法

结构化方法
?

?

结构化程序设计:一种良好定义的软件 开发技术,它采用自顶向下设计和实现 方法,并严格地采用结构化程序的控制 构造 结构化方法的原则:
? ? ?

清晰第一效率第二 设计先于编码 自顶向下逐步细化

1 清晰第一效率第二
?

? ? ?

著名的“清晰第一,效率第二”已成为 当今主导的程序设计风格 “先求清楚后求快” “保持程序简单以求快” “写清楚——不要为‘效率’牺牲清晰”

2 设计先于编码
?

?

?

“开始写程序越早,完成程序需要的时 间就越长。” “设计先于编码”已成为所有程序设计 必须遵守的一条原则。 设计一定要利用各种设计工具来进行。

3 逐步细化的设计方法…
?

逐步细化方法是结构化程序设计的 心脏。
a. 程序设计是一个由粗到细的过程; b. 程序设计不仅包括对控制结构的设计,也 包括对数据结构的设计,两者都要一步步地 细化。

1)中心思想

3 逐步细化的设计方法
2)指导原则 a. 先分解主要问题,次要的问题可暂时搁置; b. 坚持渐进的原则,每一步的变化不要太大; c. 过程的细化与数据结构的细化宜并行、交叉地进 行; d. 选用适合于问题的设计工具; e. 最后一步应详细到所得结果可以直接翻译为源程 序。 3)优点 a. 便于控制开发的复杂性; b. 便于验证程序的正确性。

模块化原则
?

?
?

?

主要思想是:将整个系统进行分解成为若干 功能独立的,能分别设计、编程和测试的模 块 程序员能单独地负责一个或几个模块的开发 开发一个模块不需要知道系统其它模块的内 部结构和编程细节 模块之间的接口尽可能简明,模块应尽可能 彼此隔离

模块化应达到的要求
?

?

?

具有可修改性:对整个系统的一次修改只涉及 少数几个模块,这种局部性的修改不仅能满足 系统修改的要求,而且不会影响系统已经具有 的良好质量 具有易读性:每个模块的含义和职责被明确, 模块之间的接口关系清楚,从而降低复杂性, 使得阅读和理解比较方便 具有易验证性:只有每个模块能实现正确,才 可能使整个系统的正确性有必要的前提

信息隐藏方法
? ? ?

Parnas提出 信息隐藏是模块化程序设计的基本方法 信息隐藏:为了实现部件的可见性控制, 在分层构造软件模块时,要求这些部件 只在模块内部可见,在模块外部不可见

结构化分析方法
?

?

结构化分析(SA)方法是结构化程序设计理论在 软件需求分析阶段的运用。它是七十年代中期 倡导的基于功能分解的分析方法,常用于基于 瀑布模型的软件研制过程的需求分析阶段,其 目的是帮助弄清用户对软件的需求。 按照DeMarco的定义,“结构化分析就是使用 数据流图(DFD)、数据字典(DD)、结 构化英语、决策表和决策树等工具,来建立一 种新的、称为结构化规格说明的目标文档。”

结构化分析五个步骤
1) 通过对用户的调查,以软件的需求为线索, 获得当前系统的具体模型; 2) 去掉具体模型中非本质因素,抽象出当前系 统的逻辑模型; 3) 根据计算机的特点分析当前系统与目标系统 的差别,建立目标系统的逻辑模型; 4) 完善目标系统并补充细节,写出目标系统的 软件需求规格说明; 5) 评审直到确认完全符合用户对软件的需求。

八条指导原则
1) 请用户共同参与开发; 6) 自顶向下的方法进行测 试; 2) 编写用户资料,考虑他 们的专门技术水平和阅 7) 验收之前,就让用户看 读与使用资料的目的; 到系统的某些主要输出, 使用户能够尽早地看到 3) 使用画图工具做媒介, 结果,及时地提出意见; 减少与用户交流时发生 问题的可能性; 8) 对系统的评价不仅是指 开发和运行费用的评价, 4) 进行系统设计之前建立 而是对整个生存过程中 一个系统的逻辑模型; 的费用和收益的评价。 5) 自顶向下进行分析设计;

结构化分析方法四大特点
一是用画图的方法 二是自顶向下地分解 三是强调逻辑而不是物理 四是没有重复性

结构化分析的工具
1) 数据流图(DFD); 2) 控制流图(CFD); 3) 数据字典(DD); 4) 控制逻辑表达方法,包括状态转换图(STD)等; 5) 处理逻辑表达方法,包括结构化语言、判断 树和判断表; 6) 数据存储结构规范化; 7) 数据立即存取图(DIAD)。

四句指导工作的准则
? ?

?

?

?

分层分片,均衡分解;父子平衡,推迟细节。 分层就是逐步细化;分片就是用一组数据流图 来代替一大张包罗万象的总图。 均衡分解是指自顶向下画分层数据流图时,各 个子系统的分解程度应大致均匀。 父子平衡是指数据流图的父图与子图在输入数 据和输出数据上应该分别保持一致。 推迟细节是指为了优先考虑重要问题,允许将 一些细节推迟到下层数据流图来处理。

结构化设计方法
? ?

?

?

70年代提出的面向数据流、重点确定软件结构的 设计方法 “结构化设计就是采用最佳的可能方法设计系统 的各个组成部分以及各成分之间的内部联系的技 术。也就是说,结构化设计是这样一个过程,它 决定用哪些方法把哪些部分联系起来,才能解决 好某个具体有清楚定义的问题。” 基本思想是将软件设计成由相对独立、单一功能 的模块组成的结构。 评价模块结构质量的两个具体标准——内聚度和 耦合度

耦合度
?

?

耦合度:耦合度是各模块之间相互联系 的一种度量,它是对模块独立性的直接 衡量,耦合度越弱就意味着模块的独立 性越高,则模块间相互影响就越小。 耦合度的强弱可以由弱至强分为非直接 耦合、数据耦合、特征耦合、控制耦合、 外部耦合、公共耦合和内容耦合七个等 级。

内聚度
?

?

内聚度是指一个模块内部各成分(语句 或语句段)之间的联系程度,内聚度高, 则模块的相对独立性势必会提高。 内聚度由低到高可划分为偶然内聚、逻 辑内聚、时间内聚、过程内聚、通讯内 聚、顺序内聚和功能内聚七个等级。

结构化设计方法设计步骤
1) 建立初始结构图; 2) 改进初始结构图。

开始

建立初始结构图


细化/修改软件需求 规格说明中的 数据流图 否 是变换 型吗?

变换 分析

事物 分析

将映射得来的初始结构图 改进为最终结构图 对最终结构图进行评审

结束
从数据流图过渡到结构图

传入部分 传入

变换中心 变换

传出部分 传出

(a)变换型结构
接受部分 事务中心 事务 分析 动作 1 动作 2 动作 3

接受

DFD

(b)事务型结构

主模块 输入模块 主加工模块 (a) 事务控制模块 接受模块 动作发送模块 输出模块

动作1模块

动作1模块

动作1模块

SC

(b)

改进初始结构图…

1)减少块间联系,降低耦合度:可从方式、 作用、数量等方面着手,其中最常用的 是减少模块间传递的参数个数; 2)消除管道性模块,提高内聚度:管道性 模块的块内联系很弱,只是像管道一样 将一些参数从主模块传送到它的几个下 层模块,对这样的模块,应予以消除; 3)适当考虑系统将来可能发生的变化;

改进初始结构图

4)注意模块的大小:限制模块大小是降低 复杂性的手段之一; 5)适当调整调用和被调用的次数,即深度、 宽度、扇出和扇入都要适当。一个模块 调用或被调用过多,往往是设计不好的 迹象; 6)整体考虑问题:即尽可能研究整张结构 图,而不是只分别考虑一张结构图的各 个部分。

三条指导规则
1)对模块分割、合并和变动模块调用关系 的指导规则 2)保持高扇入/低扇出的规则 3)把作用域保持在控制域之内的规则

对模块分割、合并和变动模块 调用关系的指导规则
?

? ?

分割或合并结构图中的模块,应以提高 模块独立性为首要的标准:力求提高内 聚,降低耦合,简化接口,少用全局性 和控制型信息 要适当考虑快的大小 对模块位置应否变更,视处理是否方便 来定,不必拘泥于数据流图

保持高扇入/低扇出的规则
? ? ? ? ?

?

扇入数指调用该模块的模块个数 扇出数指该模块调用的模块个数 扇入高则上级模块多,能增加利用率 扇出低则下级模块少,能减少复杂度 扇出数以3-4为宜,最好不超过5-7 软件结构通常具有“瓮”形或“清真寺” 形的形状

把作用域保持在控制域之内的规 则
?

?

?

一个模块的控制域,等于模块本身加上 其下级模块。 一个模块的作用域,是受这个模块中的 判定所影响的模块。 规则的含义是:
a. 作用域不要超过控制域的范围; b. 软件系统的判定,其位置离受它控制的模 块越近越好。

结构化编程方法
?

?

用一组标准的准则和工具从事程序设计,称为 结构化程序设计;这些准则和工具包括一组基 本控制结构,自顶向下扩展原则,模块化和逐 步求精 结构化编程方法派生于结构化程序设计理论, 它要求使用顺序、选择、循环等基本控制结构, 并遵循增加程序产量、提高程序可读性、容易 测试和验证的原则来编写程序。

结构化编程应遵循的原则…
1) 使用程序设计语言中的顺序、选择、循环 等有限的控制结构表示程序的控制逻辑; 2) 选用的控制结构只准许有一个入口和一个 出口; 3) 程序语句组成容易识别的块,每块只有一 个入口和一个出口; 4) 复杂结构应该用嵌套的基本控制结构来实 现;

结构化编程应遵循的原则
5) 语言中所没有的控制结构,应该采用前后 一致的方法来模拟; 6) 严格控制GOTO语句,仅在下列情况才可使 用: a. 用一个非结构化的程序设计语言去实现 一个结构化的构造; b. 若不使用GOTO语句会使功能模糊; c. 在某种可以改善而不是损害程序可读性 的情况下。

结构化编程方法的主要优点
1) 易于理解、使用和维护。程序员采用结构化 编程方法,降低了程序的复杂性,因此容易编 写程序。程序员能够进行逐步求精、程序证明 和测试,以确保程序的正确性,程序容易阅读 并被人理解,便于用户使用和维护。 2) 提高编程工作的效率,降低了软件开发成本。 由于结构化编程方法能够把错误控制到最低限 度,因此能够减少调试和查错时间。结构化程 序是由一些为数不多的基本结构模块组成,这 些模块甚至可以由机器自动生成,从而极大地 减轻了编程工作量。

软件开发的原则(1)
?

规范严格的原则
?

?

? ?

?

遵循严格化原则,可以达到开发出正确、成功的软 件产品的目的 软件开发过程是创造性的工作过程,但严格化不会 抑制创造性 严格的分析设计可以增强对创造性成果的信心 严格化对可靠性、维护性、可移植性、可理解性等 产生影响 过程详细记录可供精确地掌握和控制开发过程

软件开发的原则(2)
?

分隔化的原则
?

?

?

解决复杂问题时从不同的方面把问题分隔开, 然后单独集中精力解决每一个方面的问题 分隔化原则是要将相互关系不太紧密的方面 分割开,对相互联系仅考虑其影响 分隔的途径:以时间次序、以质量指标、以 软件规模、以不同的视图、以开发人员的技 能

软件开发的原则(3)
?

模块化的原则
?

?

?

?

先对复杂问题进行分析,找出基本要素,尽 量使之独立,然后各个击破 简单的单元易于加工、维修,可以标准化、 通用化 复杂问题的分解,基于自顶向下的思路 已有模块的组合,基于自底向上的思路

软件开发的原则(4)
?

抽象化的原则
?

?

重要、带有普遍意义特征的方面或内容被抽 象出来,次要的、缺乏普遍意义的方面或内 容被忽略 抽象是分隔化原则的一种特殊应用

软件开发的原则(5)
?

预见变动的原则
?

? ?

软件由于其错误、新需求、新环境而产生变 化要求 开发时就要考虑到软件变动的要求 PARNAS的原则
? ?

开发系列产品 渐进开发,从子集出发,信息隐藏,保持接口不 变

?

采用为变化而设计的技术

软件开发的原则(6)
?

通用化的原则
?

?

?

?

尽量找出对类似问题或相关问题的具有一定普遍意 义的解决方法,并在相应产品开发中应用,使软件 产品具有一定的通用性 对普遍性、通用性问题的解决方法具有质量、经济 方面的价值 对通用和专用,需要在经济和效率方面进行权衡 通用性原则是设计通用的软件产品的一个最基本原 则

软件开发的原则(7)
?

逐步完善的原则
?

?

由于难以确定用户的具体需求,只能从不完 善逐步走向完善 必须注意:
? ?

记录每一个有意义的渐进 文档必须尽早反映变动,变动得到控制

?

MICROSOFT在采用逐步完善原则方面取得 了成功

软件开发的原则(8)
?

有关软件质量的原则
?

用户至上的原则
? ? ? ?

以用户的利益为前提 处处为用户使用方便着想 千方百计帮助用户使用好软件 注意与用户的交流 在质量、成本之间进行权衡

?

质量可靠的原则
?

软件开发的原则(9)
?

有关软件文档的原则
? ?

文档标准化原则 用户手册简明原则
?
? ?

?

用词规范 尽可能使用用户的专业术语或行话 通俗易懂 描述的句子不要太长

软件开发的原则(10)
?

有关设计编码的原则
? ?

?
? ?

根据文档设计(需求记录在文档) 注意概念的完整 整个软件要适于变动、易于维护 程序编制简明清晰 注意技术与工具更新

软件开发的原则(11)
?

有关软件测试的原则
?

测试的独立性原则
? ? ? ?

克服心理障碍 独立公正 专业优势 成功的测试是发现问题的测试

?

要分析错误产生的原因,举一反三

软件开发的原则(12)
?

有关开发管理的原则
? ?

?

良好的管理 适量的人员 切实的计划

谢谢!
汤铭端 010-68389085(O) 010-68389504(H) bicast@public3.bta.net.cn



更多相关文章:
北京理工大学软件工程实践_图文.ppt
北京理工大学软件工程实践 - 北京理工大学 软件工程实践 汤铭端 中国航天科工集
2018年北京理工大学软件工程(专业学位)复试实战预测五....pdf
2018年北京理工大学软件工程(专业学位)复试实战预测五套卷 - 考研专业课资料、辅导、答疑一站式服务平台 目录 2018 年北京理工大学软件工程(专业学位)复试实战预测...
北京理工大学-2016版专业学位硕士研究生培养方案(2017....pdf
北京理工大学 2016 版硕士专业学位研究生培养方案 领域:软件工程 领域代码:085212...2.实践环节(6 学分) 专业实践环节是专业学位硕士研究生培养的一个特色和重要...
2017年北京理工大学软件工程复试实战预测五套卷.pdf
2017年北京理工大学软件工程复试实战预测五套卷 - 目录 2017 年北京理工大学软件工程复试实战预测五套卷(一) ......
2018年北京理工大学软件工程考研(085212)考试科目、招....doc
2018年北京理工大学软件工程考研(085212)考试科目、招生人数、参考 书目
北京理工大学软件工程考研经验.pdf
北京理工大学软件工程考研经验_人力资源管理_经管营销_专业资料。北京理工大学软件工程考研经验路是脚踏出来的,历史是人写出来的,人的每一步行动都在书写自己的历史。...
17春北理工软件工程》在线作业.doc
17春北理工软件工程》在线作业 - 2017 秋 17 春北理工软件工程》在
北京理工大学软件工程参考书目及真题.doc
北京理工大学软件工程参考书目及真题 - 北京理工软件工程参考书目以及真题 008
软件工程实践(1)原理_图文.ppt
软件工程实践(1)原理 - 北京理工大学 软件工程实践 汤铭端 中国航天科工集团
2017年北京理工大学软件工程复试仿真模拟三套题.pdf
2017年北京理工大学软件工程复试仿真模拟三套题 - 目录 2017 年北京理工大学软件工程复试仿真模拟三套题(一) ......
软件工程实践(2)结构化_图文.ppt
软件工程实践(2)结构化 - 北京理工大学 软件工程实践 汤铭端 中国航天科工集
2018年北京理工大学软件工程(专业学位)考研复试核心题库.pdf
37 第 1 页,共 44 页 考研专业课资料、辅导、答疑一站式服务平台 2018 年北京理工大学软件工程(专业学位)考研复试核心题库(一) 特别说明: 1-本资料为学员...
软件工程实践(8)项目跟踪与控制_图文.ppt
软件工程实践(8)项目跟踪与控制 - 北京理工大学 软件工程实践 汤铭端 中国航
北京理工大学软件工程专业基础综合历年真题汇编考研真....pdf
北京理工大学软件工程专业基础综合历年真题汇编考研真题 - 华研考试网www.ed
北京理工大学软件工程(软件学院)考研 招生人数 参考书 ....doc
北京理工大学软件工程(软件学院)考研 招生人数 参考书 报录比 复试分数线 考研
设计说明书(操作系统,北理工,软件工程).doc
设计说明书(操作系统,北理工,软件工程)_计算机软件及应用_IT/计算机_专业资料。操作系统,北理工,软件工程,大作业 《微型文件系统:mini-uFS》设计说明书数据结构...
软件工程实践(12)项目跟踪64.ppt
软件工程实践(12)项目跟踪64_计算机软件及应用_IT/计算机_专业资料。软工资料,很实用北京理工大学 软件工程实践汤铭端 中国航天科工集团公司204所 第十二讲软件估计...
2017年北京理工大学软件工程C语言程序设计复试实战预测....pdf
2017年北京理工大学软件工程C语言程序设计复试实战预测五套卷 - 目录 2017 年北京理工大学软件工程 C 语言程序设计复试实战预测五套卷(一) ......
2017年北京理工大学软件工程(专业学位)复试仿真模拟三套题.pdf
2017年北京理工大学软件工程(专业学位)复试仿真模拟三套题 - 目录 2017 年北京理工大学软件工程(专业学位)复试仿真模拟三套题(一) ......
北京理工大学2006软件工程考研真题_图文.doc
北京理工大学2006软件工程考研真题_研究生入学考试_高等教育_教育专区 暂无评价|0人阅读|0次下载 | 举报文档 北京理工大学2006软件工程考研真题_研究生入学考试_...
更多相关标签:

All rights reserved Powered by 甜梦文库 9512.net

copyright ©right 2010-2021。
甜梦文库内容来自网络,如有侵犯请联系客服。zhit325@126.com|网站地图