Toggle navigation
Mr.Strawberry's House
文章
网址导航
更多
甜品站
杂物间
新版博客
关于 快刀切草莓君
友情链接
妙妙屋开发日志
注册
登录
搜索
文章列表
分类 标签
归档
# 软件工程笔记 2 曾在MOOC上走马观花地学习了软件工程,现在又在学校选这门课作为辅修,在此对所学进行记录。 [TOC] ## 总体设计 1. 总体设计阶段主要由**系统设计**和**结构设计**两阶段组成。 2. 进行软件结构设计时应该遵循的最主要的原理是**模块独立原理**。 3. 在软件开发过程中既要充分重视和利用这些**启发式规则**, 又要从实际情况出发避免生搬硬套。 4. **层次图**和**结构图**是描绘软件结构的常用工具。 5. 用形式化的方法由**数据流图映射出软件结构**。 ### 设计过程 1. 制定规范(优先顺序、设计方法、文档标准、编码、接口等) 2. 软件系统结构总体设计(确定算法、划分模块层次结构、模块调用关系等) 3. 处理方式设计(周转时间、响应时间、性能等) 4. 数据结构设计(文件系统、数据库、逻辑数据结构、软件包等) 5. 可靠性设计(易于修改维护) ### 设计原理 核心概念:软件结构(模块结构和数据结构)、程序结构、模块化、信息屏蔽、模块的独立性、自顶向下逐步细化、抽象化。 1. 模块化:将整个软件划分为若干单独命名和可编址的组件 组件的三个基本属性:功能、逻辑、状态 ![](http://zrawberry.com/media/picture/3fc9575cc5ae495bbdf027e93f2a97db.png) 2. 抽象:抽出事物的本质特性而暂时不考虑它们的细节,软工过程的每一步都是腿抽象层次的一次精化。 3. 逐步求精:集中精力解决主要问题,尽量推迟对问题细节的考虑。 与抽象是一对互补的概念 4. 信息隐藏和局部化 5. **模块独立** 判断独立程度的标准:内聚、耦合 - 内聚:模块内各个元素结合的紧密程度![](http://zrawberry.com/media/picture/c57579c08ea3470e9cf3afc8580d1e8c.png) - 耦合:模块间互相连接的紧密程度![](http://zrawberry.com/media/picture/f72b6ce9866c4b62bcc1e5af85144c5a.png) ### 启发规则 1. 完善模块。模块包含如下部分: - 执行规定功能 - 出错处理 无法完成时返回出错标志 - 返回一些列数据或加工完成,应返回结束标志 2. 消除重复功能: - 完全相似: 仅数据类型不同 可以采取完全合并的方法 - 局部相似:找出相似部分,分离出去重新定义成一个独立模块 3. 模块作用域应该在控制域内 在一个设计得很好的系统中,所有受判定影响的模块应该都从属于做出判定的那个模块,最好局限于做出判定的那 个模块及它的直属下级模块。例如A的控制域是A~F 要使A内的判断 仅影响A的作用域 ![](http://zrawberry.com/media/picture/ac29dedd443841c9b389c150a2c81ce2.png) 4. 力争降低模块接口的复杂度 ### 描绘软件结构的图形工具 1. 层次图 很适合自顶向下的设计过程中使用 2. HIPO图 层次图 + IPO图 除最顶层方框,每个方框都加了编号方便追踪。 3. 结构图 方框之间用箭头表示模块的调用关系,尾部空心圆的箭头表示数据传递。 附加符号,分支小菱形,循环弧线箭头。 ![](http://zrawberry.com/media/picture/dbe01aead53b468f9c02a21ca920807f.png) ### 面向数据流的设计方法 简单来说就是根据数据流图进行**变换分析**,设计各个模块过程 交换流,事务流,设计过程 ![](http://zrawberry.com/media/picture/cae0adef986849968824c93104d9bb1b.png) ## 详细设计 目标:确定怎样具体地实现系统,设计出程序的蓝图。 1. **结构程序设计技术**是进行详细设计的逻辑基础 2. **人机界面**设计必须重视。 3. **过程设计**是详细设计阶段完成的主要工作。 4. 在开发有清楚的层次结构时可采用**面向数据结构**的设计方 法完成设计过程设计。 5. 使用**环形复杂度**可以定量度量程序的复杂程度。 ### 结构程序设计 - 定义:代码块仅通过**顺序、选择和循环**这三种基本控制结构进行连接,并且代码块只有一个入口和出口,则称其为结构化的。(减少用GOTO语句,仅在检测出错误时才使用且总是前向使用GOTO) - **经典**的结构程序设计:顺序, IF-THEN-ELSE, DO-WHILE - **扩展**的结构程序设计:上述再加上 DO-CASE, DO-UNTIL - **修正**的结构程序设计:允许使用BREAK ### 人机界面设计 1. 设计问题 - 系统响应时间 长度、易变性 - 用户帮助设施 集成的、附加的 - 出错信息处理 - 命令交互 2. 设计过程:一个**迭代**的过程,先创建设计模型,再用原型实现该模型,并根据用户意见进行修改。 3. 设计指南 - 一般交互:一致性、反馈有意义、大破坏性动作前确认、允许撤销操作、减少操作间要记忆的信息量、提高效率、允许犯错、按功能分类设计布局、命令名简单 - 信息显示:只显示当前相关、不要用数据淹没用户、一致的标记、保持可视化的语境、产生有意义的出错信息、窗口分隔不同类型的消息 - 数据输入:减少输入动作、保持输入输出的一致性、允许自定义输入、交互灵活... ### 过程设计的工具 1. 程序流程图(框图) ![](http://zrawberry.com/media/picture/736b5c4c427f4c938af341f598a245cb.png) 2. 盒图 N-S图 - 功能域明确 - 不能任意转移控制 - 易确定局部和全程数据的作用域 - 易表示嵌套关系、模块的层次结构 ![](http://zrawberry.com/media/picture/f5327bed4dfc4a609ebd98d36f394209.png) a: 顺序 b: IF-THEN-ELSE c: CASE d: 循环 e:调用子程序A 3. PAD图 problem analysis diagram 问题分析图 ![](http://zrawberry.com/media/picture/f05678eb57ed42f0a058391275f949bf.png) 4. 判定表 5. 判定树 6. 过程设计语言 PDL 伪码 ### 面向数据结构的设计方法 1. Jackson图 ![](http://zrawberry.com/media/picture/7759b02687b2437da00132797915b552.png) - 顺序结构,B、C、D中任一个 都不能是选择出现或重复出现的 数据元素(即不能是右上角有小 圆圈或星号标记的元素); - 选择结构,S右面括号中的数字 i是分支条件的编号; - 可选结构,A或者是元素B或者 不出现; - 重复结构,循环结束条件的编 号为i。 2. Jackson 法 - 分析并确定输入数据和输出数据的**逻辑结构**,并用 Jackson图描绘这些数据结构。 - 找出输入数据结构和输出数据结构中有**对应关系**的数据单 元。 - 用下述3条规则从描绘数据结构的Jackson图导出描绘程 序结构的Jackson图。 - 列出所有操作和条 件(包括分支条件和循 环结束条件),并且把 它们分配到程序结构图 的适当位置。 - 用伪码表示程序。 Jackson方法中使用的 伪码和Jackson图是完全对应的 ``` 顺序结构 A seq B C D A end 选择结构 A select cond1 B A or cond2 C A or cond3 D A end 重复结构 A iter until (或while) c ond B A end ``` ### 程序复杂度的定量度量 价值:估算错误量、工作量;比较算法优劣;模块规模的限度 1. McCabe - 流图 退化了的程序流程图,不表现具体操作和分支循环条件 - 计算环形复杂度的方法 V(G) = E-N +2 or P + 1(P判定结点数、E边数、N结点数) - 用途:模块规模小于10为宜 2. Halstead方法 - 根据运算符N1和操作符N2的出现总次数来定义 - 程序长度:N = N1 + N2 - 不同运算符(含关键字)的个数n1,不同操作数(变量和阐述)n2 - 预测程序长度:H = n1log2(n1) + n2 log2(n2) - 错误个数 E = Nlog2(n1+n2)/3000
文章信息
标题:软件工程笔记 2
作者:快刀切草莓君
分类:计算机基础课程
发布时间:2020年5月6日
最近编辑:2020年5月11日
浏览量:1167
↑