文章目录

  • 软件工程
    • 第3章 传统软件工程方法学
      • 3.1 结构化设计
        • 结构化设计的概念与原理
          • 模块化
          • 抽象
          • 逐步求精
          • 信息隐蔽
          • 模块独立
      • 3.2 模块独立
        • 耦合
        • 内聚
      • 3.3 启发规则
      • 3.4 面向数据流设计方法
        • 软件结构图
        • 信息流类型
        • 面向数据流设计过程
        • 变换分析
        • 事务分析
      • 3.5 人机界面设计
        • 人机界面设计问题
        • 人机界面设计指南
      • 3.6 过程设计
        • 过程设计任务
        • 结构化程序设计
        • 结构化程序设计工具
        • 程序复杂度
      • 3.7 面向数据结构设计方法
        • Jackson方法步骤

软件工程

第3章 传统软件工程方法学

3.1 结构化设计

传统软件工程方法学采用结构化设计技术(SD)。从工程管理角度结构化设计分两步:

  1. 概要设计:
    将软件需求转化为数据结构和软件系统结构。
  2. 详细设计:
    过程设计,通过对结构细化,得到软件详细数据结构和算法。
  • 数据设计:数据模型及核心数据字典转变为数据结构。
  • 体系结构设计:功能模型中数据流图转变成计算机模块框架。
  • 接口设计:功能模型中数据流图转变成软件内部、软件与协作系统间、软件与用户间通信方式。
  • 过程设计:行为模型及功能模型中的“处理规格说明”转换成软件构件过程描述。

结构化设计的概念与原理

模块化
  • “模块“又称”构件”一般指用一个名字调用的相邻程序元素序列。
  • 模块化设计(modular design):按适当的原则把软件划分为一个个较小的、相关而又相对独立的模块。
抽象

抽出事物的本质特性,暂不考虑细节。

逐步求精

求精是指为了能集中精力解决主要问题,尽量推迟对细节问题的考虑,实际上是一个细化过程,
与抽象是互补的概念。

  • 抽象使得设计者能够说明过程和数据,同时却忽略底层细节;
  • 求精帮助设计者在设计过程中揭示底层细节。
信息隐蔽

每个模块的实现细节对于其他模块来说是隐藏的也就是说,模块中所包含的信息是不允许其他不需
要这些信息的模块访问的。

每个客户只能通过接口来了解该模块,而所有的实现都隐蔽起来。

模块独立

具有独立功能且和其他模块没过多作用。模块独立的理由:

  1. 容易分工合作;
  2. 容易测试和维护,修改工作量较小,错误传播范围小,扩充功能容易。

模块独立的两个定性度量标准:耦合内聚

3.2 模块独立

耦合

软件结构中不同模块间互连程度度量。
取决模块间接口复杂程度,通过接口数据。追求尽可能松散耦合系统。

  1. 非直接耦合
    两个模块分别能独立地工作不需要另一模块存在。

  2. 数据耦合
    两模块通过参数交换数据信息。

  3. 控制耦合
    两模块通过参数交换控制信息(包括数字形式)

  4. 公共环境耦合
    两个或多个模块通过一公共数据环境作用。

  • 一模块送数据,另一模块取,等价数据耦合。
  • 两模块既往公共环境送又从里面取,介于数据耦合和控制耦合之间。
  1. 内容耦合

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

原则:尽量使用数据耦合,少用控制耦合,限制公共环境耦合, 完全不用内容耦合。

内聚

模块内各元素彼此结合紧密程度。

  1. 功能内聚 10分
    一模块中各部分是完成某一功能必不可少组成部分。

  2. 顺序内聚 9分
    模块内处理元素同某功能密切相关,顺序执行。

  3. 通信内聚 7分
    一模块内各功能部分都使用相同输入数据,或产生相同输出数据。

  4. 过程内聚 5分
    模块内处理元素相关,特定次序执行。如把流程图中循环部分、判定部分、计算部分分成三个模块,这三个模块都是过程内聚模块。

  5. 时间内聚 3分
    多为多功能模块,要求所有功能在同一时间内执行。如初始化模块和终止模块及紧急故障处理模块。

  6. 逻辑内聚 1分
    一模块完成功能在逻辑上属相同相似一类。

  7. 偶然内聚 0分
    模块内各部分间没有联系,即使有也很松散。

3.3 启发规则

  1. 改进软件结构提高模块独立性
    初步结构分解或合并,降低耦合提高内聚。

  2. 模块规模应该适中

    • 过大分解不充分,但进一步分解不应降低模块独立性;
    • 过小开销大于有效操作,模块数目过多系统接口复杂;
    • 通常语句行数在50~100(一页纸),最多不超过500行。
  3. 深度、宽度、扇出和扇入应适当

    • 深度:软件结构控制层数,标志一系统大小和复杂程度。
    • 宽度:软件结构同一层模块数最大值,越大系统越复杂。
    • 扇出:一模块直接控制(调用)模块数,过大,模块复杂,过小(如1)不好。3-9。
    • 扇入: 有多少上级模块直接调用它,越大共享该模块上级模块越多。
  4. 模块作用域应在控制域内

    • 作用域:受该模块内判定影响的所有模块集合。
    • 控制域:模块本身及所有直接或间接从属它的模块集合。
    • 若模块作用域不在控制域内,会增大模块间控制耦合。
  5. 降低模块接口复杂程度
    模块接口复杂是软件发生错误一主要原因。应使信息传递简单且和模块功能一致。

  6. 设计单入口、单出口模块
    避免内容耦合。

  7. 模块功能可预测
    输入数据相同,产生同样输出。模块功能防止过分受限。

3.4 面向数据流设计方法

  • 面向数据流的设计要解决的任务,就是将软件需求分析阶段生成的逻辑模型数据流图映射(Mapping)表达软件系统结构的软件结构图。
  • 结构化设计属于面向数据流的设计方法。

软件结构图

1.模块–在SC图中用矩形框表示,并用名字来标记它
2.模块的调用关系和接口

信息流类型

1.变换流
信息沿输入通路进入系统,由外部形式变换成内部形式,通过变换中心加工处理后再沿输出通路变换成外部形式离开软件系统

2.事务流
信息沿输入通路到一处理,由处理根据输入信息类型在若干动作序列中选一个执行。
处理称事务中心,完成任务:

  • 接收输入信息(又称事务);
  • 分析每个事务确定类型;
  • 根据事务类型选取一活动通路。

面向数据流设计过程

变换分析

将具有变换流特点的数据流图映射成软件结构。

  1. 复查基本系统模型
    确保系统输入和输出数据符合实际。

  2. 复查并精化数据流图
    正确、处理项完成相对独立功能。

  3. 确定数据流图具有变换特性还是事务特性
    没有明显事务中心,为变换型。

  4. 找出变换中心
    确定数据流边界。

  5. 完成一级分解

  6. 完成第二级分解

  7. 对初步软件结构精化

事务分析

信息流有明显事务特点(事务中心),采用事务分析方法。

软件结构:一接收分支和一发送分支。

3.5 人机界面设计

人机界面设计问题

  1. 系统响应时间:从用户完成某控制动作,到软件给出预期响应。

两个重要属性:长度和易变性。

  • 关于长度:

    • 过长用户感到不安、沮丧(用户觉得系统立即响应时间范围0.1-1秒,超出1秒会让用户注意到延迟)

      • 1-10 秒 鼠 标 显 示 成 为 沙 漏
      • 10 到18 秒 由微帮助来显示处理进度
      • 18 秒 以 上 显示处理窗口,或显示进度条
    • 过短迫使用户加快操作节奏,导致出错。
  • 关于易变性:
    • 易变性指响应时间相对平均响应时间偏差,越低越好,否则会让用户误认为系统工作异常。
  1. 用户帮助措施
    手册和联机帮助(不离开用户界面)。
    联机帮助两类:集成帮助和附加帮助。
  • 集成帮助设计在软件里面

  • 附加帮助系统建成后加到软件中,前者可用性更强。

  • 请求帮助:帮助菜单,特殊功能键,HELP 命令。

  • 显示帮助信息:

    • 独立窗口
    • 参考某个文档
    • 屏幕固定位置作简短提示
  • 组织帮助信息:

    • 平面结构,通过关键字访问
    • 层次结构,查更详细信息
    • 超文本结构
  1. 出错信息处理
  • 以用户可用理解术语;
  • 提供清楚、易理解报错信息(出错位置、原因);
  • 从错误中恢复的建设性意见;
  • 信息用颜色等在视觉上引人注目;
  • 可能造成负面后果。
  1. 命令交互

建议保留命令交互方式:

  • 控制序列:Ctrl-C(拷贝) Ctrl-H(帮助) Ctrl-P(打印)
  • 功能键:F1(帮助)
  • 键入命令
  • 命令宏机制:用户定义名字代表一个常用命令序列。

人机界面设计指南

  1. 一般交互

    • 保持人机界面菜单选择、命令输入、数据显示风格一致;
    • 提供有意义信息反馈:双向通信;
    • 破坏性动作前要确认:删除、覆盖;
    • 允许取消大多数操作;
    • 减少两次操作之间必须的记忆量;
    • 提高对话、移动和思考的效率;
    • 允许犯错误:保护不受致命错误破坏;
    • 按功能对动作分类,设计屏幕布局;
    • 提供帮助措施;
    • 用简单的动词或动词短语作为命令名。
  2. 信息显示

    • 显示与当前工作有关信息;
    • 简单易懂方式表示数据:图形、图表;
    • 使用一致标记、标准缩写和可预知颜色;
    • 产生有意义出错信息;
    • 使用模拟的方式显示信息等。
  3. 数据输入

    • 减少用户输入动作:鼠标选择、滑动标尺等;
    • 使当前不适用命令不起作用;
    • 交互灵活:保留各种输入方式;
    • 让用户控制交流;
    • 对所有输入都提供帮助;
    • 消除冗余输入:数据单位、提供缺省值等。

3.6 过程设计

过程设计任务

  • 确定模块算法
  • 确定模块使用数据结构
  • 确定模块接口(系统外部接口、用户界面、内部模块间接口细节、输入数据和输出数据)

结构化程序设计

结构化程序设计技术是过程设计一关键技术。

  • 经典定义:程序代码通过顺序、选择、循环三种控制结构连接,单入口单出口。
  • 扩展定义:可限制使用GOTO语句、DO_UNTIL和DO_CASE
  • 修正定义:LEAVE和BREAK,可从循环中转移出来。

结构化程序设计工具

程序流程图

历史最悠久、使用最广泛的过程设计工具。

  1. 顺序型:几个连续的加工依次序排列;
  2. 选择型:由某个判定的取值决定选择两个加工中一个;
  3. 当型循环型:当循环控制条件成立时,重复执行特定的加工。
  4. 直到型循环型:重复执行特定的加工,直到循环控制条件成立时。;
  5. 多情况选择型:列出多种加工情况根据控制变量的取值,选择执行其一。
  • 优点:对控制流程描绘直观,便于初学者掌握。
  • 缺点:
    • 不是逐步求精好工具,过早考虑控制流程,非整体结构;
    • 用箭头代表控制流,程序员随意转移控制;
    • 不易表示数据结构和调用关系。

N-S图

特点:

  • 功能域(一特定控制结构的作用域)明确;
  • 不可能任意转移控制;
  • 容易确定局部和全程数据的作用域;
  • 容易表现嵌套关系,也可表示模块的层次结构

PAD图

优点:

  • 使用PAD图设计的程序必然是结构化程序;
  • PAD图描绘的程序结构十分清晰;
  • 用PAD图表现程序逻辑,易读、易懂、易记;
  • 容易将PAD图转换成高级语言源程序;
  • 支持自顶向下逐步求精。

判定表

能清晰表示复杂的条件组合与应做动作间对应关系。包含四部分:

  • 左上部列出所有条件;
  • 左下部所有可能做的动作;
  • 右上部表示各种条件组合的一矩阵;
  • 右下部是和每种条件组合相对应的动作。

判定树

  • 优点:形式简单,易看出含义,易于掌握和使用。
  • 缺点:简洁性不如判定表,相同数据元素重复写多遍,越接近叶端重复次数越多。

过程设计语言

伪码,用正文形式表示数据和处理过程设计工具。

  • PDL具有严格关键字外部语法,定义控制结构和数据结构;
  • PDL表示实际操作和条件的内部语法灵活自由,适应各种工程项目需要。

程序复杂度

介绍使用比较广泛的McCabe方法。

  1. 根据过程设计结果画出相应流图,流图描述程序控制流;
  2. 计算流图的环形复杂度,三种方法:
    • V(G)=区域数
    • V(G)=E-N+2 ,其中E为流图中边数,N为流图中节点数
    • V(G)=P+1 P为判定点数

3.7 面向数据结构设计方法

数据结构既影响程序的结构也影响程序的处理过程,可从数据结构导出程序的处理过程,适合详细设计。

面向数据结构设计方法两种:Jackson和Warnier方法

Jackson方法步骤

  1. 确定输入数据和输出数据逻辑结构,用Jackson图表达;
  2. 确定输入结构和输出结构中有对应关系(因果)的单元;
  3. 描绘数据结构的Jackson图导出描绘程序结构Jackson图;
  4. 列出所有操作和条件,分配到Jackson图中;
  5. 用伪码表示。

软件工程- 第3章 传统软件工程方法学相关推荐

  1. 《软件工程》第一章——初始软件工程

    1.1 软件无处不在 软件是软件工程的研究对象,也是软件工程的产品形态于客观存在. 工程是理论知识应用于实践的科学,其目的是经济有效地解决实际问题. →软件工程是为了解决开发成本效益和软件质量的问题而 ...

  2. python26章_笨方法学Python-26章练习题

    源地址存在问题 新的练习地址为: https://learnpythonthehardway.org/book/exercise26.txt 具体代码如下: def break_words(stuff ...

  3. 面向对象软件工程方法学与传统方法学的异同

    面向对象软件工程方法学与传统方法学的异同 名称 面向对象软件工程方法学 传统方法学 基本概念 面向对象方法学是一种把面向对象的思想应用于软件开发过程中,指导开发活动的系统方法,是建立在"对象 ...

  4. 编程方法学24:管理大型数据中的良好软件工程原理

    前言 本笔记是斯坦福公开课,编程方法学的学习笔记. 总体而言,这门课讲了很多很基础的东西,具有很强的通用性. 正文 本次的笔记对应的是第二十四节课,这堂课是助教来讲管理大型数据中的良好软件工程的原理的 ...

  5. 软件工程方法学要素含义_日期时间数据的要素工程

    软件工程方法学要素含义 According to Wikipedia, feature engineering refers to the process of using domain knowle ...

  6. 什么是软件危机?软件危机的主要表现是什么?什么是软件?什么是软件工程?什么是软件过程?软件过程与软件工程方法学有何关系?​​​​​​​什么是软件开发方法?软件开发方法主要有哪些?

    软件危机:在软件的开发和维护过程中所遇到的一系列严重问题. 软件危机主要包含两方面的问题: 1.如何开发软件,以满足对软件日益增长的需求 2.如何维护数量不断膨胀的已有软件. 软件危机的消除途径: 软 ...

  7. 南大计算机博士黄鑫,南京大学软件学院张贺教授团队在经验软件工程方法学研究中取得重要成果...

    近二十年来,经验软件工程(ESE)在软件工程研究中扮演了越来越重要的角色.主要研究经验型数据的ESE在人工智能技术全面接管软件工程之前,都将占据极其重要的地位.对ESE方法学的研究,关系到为什么要进行 ...

  8. 软件工程(方法学、三要素)

    软件 1983年IEEE这么定义:软件是计算机程序.方法.规则.相关的文档资料和在计算机上运行程序所必需的数据. 软件工程 1983年IEEE这么定义:软件工程是软件开发.运行.维护和修复软件的系统方 ...

  9. 《软件工程》第九章 面向对象方法学引论 作业

    1.什么是面向对象方法学?它有哪些优点? 面向对象的方法学的出发点和基本原则,是尽可能模拟人类习惯的思维方式,使开发软件的方法与过程尽可能接近人类认识世界解决问题的方法与过程,也就是使描述问题的问题空 ...

最新文章

  1. 软件架构师的工作职责
  2. mysql可扩展数据库_五大技巧提高MySQL可扩展性
  3. C#:设置CefSharp的一些参数,比如忽略安全证书
  4. mysql 主从_mysql主从复制异常中断分析处理
  5. JavaSE基础之-Calendar时间类
  6. pycharm设置python环境_pycharm怎么配置python环境
  7. matlab算kdj指标,通达信带注释的KDJ指标公式
  8. 注册表怎么打开详细教程
  9. 稀疏数组——优化五子棋游戏的小技巧
  10. 蓝蓝算法09-进制转换
  11. 企业wms系统安装在云服务器,wms云服务器配置
  12. 巨掌柜,新模式,新机遇!
  13. Node.js v0.10.31API手册-Addons插件
  14. 关于熔断器Hystrix替代方案的调研报告
  15. linux安装git并配置GitHub账号,本地与GitHub之间进行文件的上传(push)、下载(克隆)、更新
  16. 架构师小跟班:SSL证书免费申请及部署,解决页面样式错乱问题完整攻略
  17. FTP-----局域网内部远程桌面
  18. python课程网络多少钱一年_python学费多少?线上python课程一般多少钱?
  19. 面试题 02.07. 链表相交
  20. python学习第十二天

热门文章

  1. Unity - DrawCall, Batch, SetPassCall区别
  2. 安装Mysql8打补丁顺序
  3. 使用pygame开发游戏:合金弹头(5)
  4. 你感觉到疲倦了吗?释放压力的10个方法
  5. JMeter之负载阶梯压力测试
  6. 1106. 解析布尔表达式
  7. 佳能EOS 450D 如何用液晶屏取景
  8. python gridfs_【已解决】用Python去连接本地mongoDB去用GridFS保存文件
  9. js虚拟代理实现图片的预加载
  10. 自贡市计算机编程学校,自贡电子技术应用专业学校