软件工程第5章程序编码

合集下载

软件工程导论 第五章总体设计

软件工程导论  第五章总体设计
低 数据 耦合
控制 耦合
耦合性
特征耦 合 公共 耦合 内容 耦合

28
注意!!
在软件设计中应该追求尽可能松散耦合的系统。
否则影响系统的可理解性、可测性、可靠性和可
维护性。
29
耦合程度强弱的区分

无耦合:如果两个模块中的每一个都能独立 地工作而不需要另一个模块的存在,那么它 们彼此完全独立,模块间无任何连接。
在可行性研究阶段,软件作为系统的一个完整 部件; 在需求分析期间,软件解法是使用在问题环境 内熟悉的方式描述的; 当由总体设计向详细设计过渡时,抽象的程度 也就随之减少; 最后,当源程序写出来以后,也就达到了抽象 的最低层。 20
5.2.3 逐步求精
定义:为了能集中精力解决主要问题而尽量推迟 对问题细节的考虑。 人类的认知过程遵守Miller法则:一个人在任何时 候都只能把注意力集中在(7±2)个知识块上。
6
3. 推荐最佳方案 • 综合分析对比各种合理方案的利弊,推荐 一个最佳的方案,并且为推荐的方案制定 详细的实现计划。 • 在使用部门的负责人也接受了分析员所推 荐的方案之后,将进入总体设计过程的下 一个重要阶段——结构设计。
7
4.功能分解 • 为确定软件结构,首先需要从实现角度把 复杂的功能进一步分解。结合算法描述仔 细分析数据流图中的每个处理,如果一个 处理的功能过分复杂,必须把它的功能适 当地分解成一系列比较简单的功能。
12
5.2 设计原理

5.2.1 模块化
模块化:把程序划分成独立命名且可独立访问的模块,每个 模块完成一个子功能,这些模块集成起来构成一个整体,可 以完成指定的功能以满足用户的需求。 模块是由边界元素限定的相邻程序元素的序列,而且有一个 总体标识符代表它。模块是构成程序的基本构件。 过程、函数、子程序和宏等,都可作为模块。 面向对象方法学中的对象是模块,对象内的方法(或称为服 务)也是模块。

软件工程导论(第5章)

软件工程导论(第5章)
10
11
5.1.2 选取若干个合理的方案
至少选取低成本、中等成本和高成本三种方案。
每种方案准备四份资料:



系统流程图; 组成系统的物理元素清单; 成本/效益分析; 实现这个系统的进度计划。
12
5.1.3 推荐最佳方案
分析员应该综合分析对比各种合理方案的利
弊,推荐一个最佳的方案,并且为推荐的方 案制定详细的实现计划。
发出较高质量的软件系统。
7
第一部分:设计过程 第二部分:设计原理 第三部分:启发原则 第四部分:软件结构图 第五部分:面向数据流的设计方法
8
5.1 设 计 过 程
总体设计过程通常由两个主要阶段组成: 系统设计:确定系统的具体实现方案。 结构设计:确定软件结构。 9个步骤: ① 设想供选择的方案 ② 选取合理的方案 ③ 推荐最佳方案 ④ 功能分解 ⑤ 设计软件结构 ⑥ 设计数据库 ⑦ 制定测试计划 ⑧ 书写文档 ⑨ 审查和复审
和理解; 可以使软件容易测试和调试,因而有助于提高软 件的可靠性; 能够提高软件的可修改性; 有助于软件开发工程的组织管理。
32
模块化五条标准
模块可分解性
把问题分解为子问题 模块可组装性 可复用 模块可理解性 无需参考其他模块,易于构造和修改 模块连续性 微小修改只导致对个别模块 模块保护性 异常影响局限在模块内部


“隐蔽”意味着模块彼此间仅仅交换那些为了完成系统功能而 必须交换的信息。 “局部化”是指把一些关系密切的软件元素物理地放得彼此靠 近。局部化有助于实现信息隐蔽。


设计和确定模块时,使得一个模块内包含的信息(过程和 数据)对于不需要这些信息的模块来说,是不能访问的。 模块内部的数据与过程,应该对不需要了解这些数据与过 程的模块隐藏起来。只有那些为了完成软件的总体功能而 必需在模块间交换的信息,才允许在模块间进行传递。

软件工程概论课后答案解析

软件工程概论课后答案解析

第1章软件与软件工程的概念1、1 举出您所知道的应用软件的例子。

办公软件、游戏软件、财务软件、银行软件、人事管理软件、工资管理软件、学籍管理软件等。

1、2 认为“软件就就是程序,软件开发就就是编程序。

”这种观点就是否正确?为什么?认为“软件就就是程序,软件开发就就是编程序。

”这种观点就是错误的。

首先,软件就是计算机系统中与硬件相互依存的另一部分,它就是包括程序,数据及其相关文档的完整集合,程序只就是软件的组成部分之一;其次,在软件开发中,编程只就是软件开发过程的一个阶段。

1、3 如果将软件开发比作高楼大厦的建造,可以将软件的设计比作什么?可以将软件的设计比作建筑设计,软件设计的成果相当于建筑设计的设计图纸。

1、4 什么就是软件危机?它有哪些典型表现?为什么会出现软件危机?软件危机:软件危机就是指在计算机软件的开发与维护过程中所遇到的一系列严重问题。

典型表现:(1)对软件开发成本与进度的估计常常很不准确。

(2)用户对“已完成的”软件系统不满意的现象经常发生。

(3)软件产品的质量往往靠不住。

(4)软件常常就是不可维护的。

(5)软件通常没有适当的文档资料。

(6)软件成本在计算机系统总成本中所占的比例逐年上升。

(7)软件开发生产率提高的速度,既跟不上硬件的发展速度,也远远跟不上计算机应用迅速普及深入的趋势。

产生软件危机的原因:除了软件本身的特点,其原因主要有以下几个方面:(1) 缺乏软件开发的经验与有关软件开发数据的积累,使得开发工作计划很难制定。

(2) 软件人员与用户的交流存在障碍,使得获取的需求不充分或存在错误。

(3) 软件开发过程不规范。

如,没有真正了解用户的需求就开始编程序。

(4) 随着软件规模的增大,其复杂性往往会呈指数级升高。

需要很多人分工协作,不仅涉及技术问题,更重要的就是必须有科学严格的管理。

(5) 缺少有效的软件评测手段,提交给用户的软件的质量不能完全保证。

1、5 什么就是软件工程?软件工程就是指导计算机软件开发与维护的工程学科。

软件工程 第4版 第5章 详细设计

软件工程 第4版 第5章 详细设计

数据流程图
01
数据流程图表示 求解某一问题的 数据通路,同时 规定了处理的主 要阶段和所用的 各种数据媒体
程序流程图
02
程序流程图表示 程序中的操作顺 序
系统流程图
03
系统流程图表示 系统的操作控制 和数据流
程序网络图
04
程序网络图表示 程序激活路径和 程序与相关数据 流的相互作用
系统资源图
05
系统资源图表示 适用于一个问题 或一组问题求解 的数据单元和处 理单元的配置
5.1.3 PAD
01 PAD 的基本符号
OPTION
➢ 顺序结构 ➢ 条件结构 ➢ CASE 型多分支结构 ➢ 先检测循环条件的WHILE 型循环结构 ➢ 后检测循环条件的UNTIL 型循环结构 ➢ 语句标号 的特点
OPTION
用PAD 表示的程序从最左边的竖线的上端开始,自上而 下、自左向右执行 用PAD 设计的软件结构必然是结构化的程序结构
图1
图2
5.1.1 流程图
04 流程图的3 种基本结构
OPTION
流程图的3 种基本结构为顺序结构、条件 结构和循环结构,如图1所示,图中的C 是判 定条件。顺序结构如图(a)所示。条件结构 可分为两种,一种是IF...THEN...ELSE 型条件 结构,如图(b)所示;另一种是CASE 型多 分支结构,如图(c)所示。
应的应做的工作。
2 判定表中的符号
右上部用T 表示条件成立,用F表示条件不 成立,空白表示条件成立与否不影响。
右下部画× 表示在该列上面规定的条件下做 该行左边列出的那项工作,空白表示不做该 项工作。
5.1.5 判定树
判定树和判定表一样,也能表明复杂的条件组 合与对应处理之间的关系。判定树是一种图形表示 方式,更易被用户理解。

软件工程 第5章--RUP统一开发过程

软件工程 第5章--RUP统一开发过程
10
(3) 制品(Artifact)
制品是过程生产、修改或使用的一种信息。制 品可分为输入制品和输出制品。
在面向对象设计中,制品被当作活动的参数。 制品有多种可能的形式,如:
模型 : 如用例模型或设计模型; 模型元素 : 如类、用例或子系统; 文档 : 如一个业务用例或体系结构文档; 源代码; 可执行文件。
13
a) 核心工作流
在 RUP 中共有 9 个核心过程工作流。它们将 所有工作人员和活动进行逻辑分组。
核心过程工作流分为 6 个核心工程工作流和 3 个核心支持工作流。
核心工程工作流有:业务建模工作流、需求 工作流、分析和设计工作流、实现工作流、 测试工作流、实施工作流。
核心支持工作流有:项目管理工作流、配置 和变更管理工作流、环境工作流。
11
Iteration Plan Storyboard
Use Case Model Project Measurements User-Interface Prototype
Developer Test
Iteration Assessment
Business Goal Test Environment Configuration
场景的系统大致轮廓; 估计整个项目需要的成本和时间; 评估风险,即分析不确定性的原因;
31
制品
a) 构想文档:有关项目核心需求、关键特 性和主要限制的构想。
b) 用例模型调查:包括所有在此阶段可确 定的用例和参与者。
c) 初期的项目术语。 d) 初始的业务用例:包括业务环境、是否
成功的评价标准、经济预测。 e) 早期的风险评估。 f) 项目计划:表明阶段和迭代。
内部发布 小里程碑
第1个外部发布 (如Beta版本)

第5章 软件实现-软件工程基础(第3版)-胡思康-清华大学出版社

第5章  软件实现-软件工程基础(第3版)-胡思康-清华大学出版社
代码复用是利用已有的代码来构造或编写新的软件系统, 代码的形式主要有二进制的目标代码(库文件)和源代码。
➢代码复用 ➢库文件形式的复用 ➢面向对象机制下的复用
第5章 软件实现
第 10 页10
代码评审
代码评审,也称为代码复查,是指在软件开发 过程中,通过阅读源代码和相关设计文件,对源代码 编码风格、编码标准以及代码质量等活动进行系统性 检查的过程。
第5章 软件实现
第 6 页6
程序设计风格
2. 数据说明 为使程序中的数据说明更易于理解和维护,数据说明的次
序应当规范化: ➢ 可按说明类型(常量,简单变量类型,复杂类型 ) ➢ 一个语句说明多个变量时,按字母顺序排列。 ➢ 复杂的数据结构,要加注释。
第5章 软件实现
第 7 页7
程序设计风格
3. 语句结构的处理 语句构造,尤其是流程控制语句的构造技术,直接影响到程序的可读 性及效率。应采用直接、清晰的构造方式,而不要为了提高效率或者 显示技巧而降低程序的清晰性和可读性。
程序设计语言
程序设计语言的分类
第一代计算机语言——机器语言 第二代计算机语言——汇编语言 第三代计算机语言——高级语言 第四代计算机语言——4GL
第5章 软件实现
第 3 页3
程序设计语言
不同的程序语言机制,对设计的支持不尽相同,目前被 广泛采用的是结构化程序设计语言和面向对象语言。
结构化程序设计语言机制需考虑到: 数据结构(变量和常量)的显示表示 模块化编程 控制结构
第 5 章 软件实现 小节
➢程序设计语言 ➢程序设计风格 ➢代码复用 ➢代码评审
第5章 软件实现
第 12 页12
4. 输入输出设计准则 ⑴ 输入、输出的格式在整个系统中应该统一;

软件工程5软件编码

软件工程5软件编码
持结构化的程序设计。 (2)修补了C语言中的一些漏洞 (3)生成的目标程序质量高,程序执行效率高。 (4)提供了异常处理机制,简化了程序的出错处理。 (5)函数可以重载并可以使用缺省参数。 (6)提供了模板机制。
a
3.Java
Java的特点包括: (1)平台无关性。 (2)安全性。 (3)面向对象。 (4)分布式。 (5)健壮性。
a
开发人员在选择程序设计语言时,应考虑以下因 素:
1.应用领域 2.算法与数据结构的复杂性 3.软件执行的环境 4.软件执行的效率
a
5.2 编码规范
a
5.2.1 编排格式
a
1.采用缩进风格 2.控制代码行宽度 3.使用空格字符实现缩进 4.适当地使用空行 5.不允许把多个短语句写在一行中 6.适当使用空格
a
5.2.2 命名规则
a
(1)尽量采用有意义的名字命名。 (2)名字的长度无限制,但也不宜过长。 (3)如果名字使用缩写,那么缩写规则须保持一致。
a
5.2.3 注释
a
(1)每一个注释都应当有用,应避免无意义的注释。
(2)合理使用序言性注释和功能性注释。 以下一段代码是序言性注释的例子:
/* 名称:求平均值函数 功能:计算数组的平均值 输入:score – 数组,元素类型为float,代表分数 n – 数组中元素的个数 返回值:score数组中所有元素的平均值 使用举例:aver = average(score,n) 作者:张** 11/12/2008 版本号:1.1
a
9.ALGOL
ALGOL是结构化语言的前驱,它提供了特别丰富的 过程构造及数据类型构造,在欧洲得到了广泛应用。 但是, PASCAL语言和C语言问世以后,它的位置就逐 渐被取代了。

软件工程 第5章--UML

软件工程 第5章--UML
10
UML的定义
UML定义有两个主要组成部分:语义和表示法。 语义用自然语言描述,表示法定义了UML的可 视化标准表示符号,这决定了UML是一种可视 化的建模语言。 在语义上,模型是元模型的实例。UML定义给 出了语法结构的精确定义。 使用UML时,要从不同的角度观察系统,为此 定义了概念“视图(View)‖。视图是对系统的模 型在某方面的投影,注重于系统的某个方面。
独立于过程
系统建模语言,独立于开发过程。
9

容易掌握使用 概念明确,建模表示法简洁明了,图形结 构清晰,容易掌握使用。 着重学习三个方面的主要内容: (1) UML的基本模型元素 (2) 组织模型元素的规则 (3) UML语言的公共机制 与程序设计语言的关系 用Java,C++ 等编程语言可实现一个系统。 一些CASE工具可以根据 UML所建立的系 统模型来产生Java、C++ 等代码框架。
31
UML事物 — 注释事物
11) Note(注释)
依附于一个元素或一组元素之上,对其进
行约束或解释的简单符号。没有语义影响。
See policy8-5-96.doc for details about these algorithms.
CashAccount presentValue()
32
15
UML定义 9 种图,表达UML中的 5 种视图,各 视图在静态和动态方面表示系统模型。
结构 视图 静态 方面
动态 方面
行为 视图 同左
实现 视图 构件图
环境 视图 部署图
同左
用例 视图 用例图
同左
类图 对象图
顺序图 同左 顺序图 合作图 (注重 合作图 状态图 进程、 状态图 活动图 线程) 活动图
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

源程序的质量标准
正确性 可读性 可靠性 可维护性
结构化程序设计
结构化程序设计主要包括两方面: (1) 在编写程序时,强调使用几种基
本控制结构,通过组合嵌套,形成 程序的控制结构。尽可能避免使用 GOTO语句。 (2) 在程序设计过程中,尽量采用自 顶向下和逐步细化的原则,由粗到 细,一步步展开。
100 write ( C ); goto 140;
110 write ( B ); goto 140;
120 if ( A < C ) goto 130; goto 100;
130 write ( A );
140 end 该程序出现了多条GOTO语句,程
序可读性较差。
程序2
if ( A < B ) and ( A < C ) then
不满足结构化要求!
程序2
f0 = f (a); f1 = f (b);
if ( f0 * f1 <= 0 ) { xfo0 r=(ai;=x11;= ib<;= n;i++ ) { //正常出口
xm = ( x0+x1) / 2;fm = f (xm); if (abs( fm )<eps || abs( x1-x0 )<eps)
结构化程序设计的主要原则
使用语言中的顺序、选择、重复等 有限的基本控制结构表示程序逻辑。
选用的控制结构只准许有一个入口 和一个出口。
程序语句组成容易识别的块,每块 只有一个入口和一个出口。
复杂结构应该用基本控制结构进行 组合嵌套来实现。
语言中没有的控制结构,可用一段等价 的程序段模拟,但要求该程序段在整个 系统中前后一致。
break; //非正常出口
iefls{(exf00
* =
fxmm>;0f)0
=
fm;}
x1 = xm; }
}
该程序仍然存在二个出口,不是结构化程序。
程序3
f0 = f (a);f1 = f (b); if ( f0 * f1 <= 0){
x0 = a;x1 = b;i = 1;finished = 0; while (i <= n && finished == 0) {
严格控制GOTO语句,仅在下列情形才 可使用: ① 用一个非结构化的程序设计语言去 实现一个结构化的构造。 ② 若不使用GOTO语句就会使程序功 能模糊。 ③ 在某种可以改善而不是损害程序可 读性的情况下。
例1 打印A, B, C三数中最小者的程序
程序1 if ( A < B ) goto 120; if ( B < C ) goto 110;
for ( i = 2;i <= 100;i++ ) A[i] = i;
/* 建立2到10的素数表B[ ],其中存放2到10以内的素数*/
B[1] =2;B[2] = 3;B[3] = 5;B[4] = 7;
/*若A[i]=i是B[ ]中任一数的倍数,则剔除A[i]*/
for ( j = 1;j <= 4;j++ )
检查A[ ]所有的数能否被B[j]整除,并将能被整除的数从 A[ ]中剔除---------------3.1
xifm(a=b(sx(0f+m)<x1 )e/ps2||;abfsm(=x1f-(xxm0));<eps) finished = 1;
if (finished == 0)
if
( f0 * { x0
=fmx>m;0 )f0
=
fm;}
else
x1 = xm ;
}
}
引入布尔变量 finished,改 for
▪ 结构化程序设计 ▪ 程序设计风格
▪ 程序复杂性度量
做为软件工程过程的一个阶段,程序编 码是设计的继续。
程序设计语言的特性和程序设计风格会 深刻地影响软件的质量和可维护性。
为了保证程序编码的质量,程序员必须 深刻地理解、熟练地掌握并正确地运用 程序设计语言的特性。此外,还要求源 程序具有良好的结构性和良好的程序设 计风格。
write ( A ) else
if ( A B ) and ( B < C ) then write ( B )
else if 该程序结构清晰、可读性好。
例2 用二分法求方程 f (x)=0 在区间 [a..b]中的根的程序
假设在闭区间[a..b]上函数 f (x) 有唯一
eps)
if ( f0 * fm > 0 ) el{sex0x1==xmx;m;f0 = fm;} }
finish:printf (“\n The root of this equation
is %d\n”,xm );
} 该程序是单入口,两出口。正常出口
是循环达到 n 次,非正常出口是循环 中途控制转出到标号 finish 所在位置。
型循环为 while 型,将单入口多出
口结构改为单入口单出口结构。是
结构化程序!
自顶向下,逐步求精
在详细设计和编码阶段,应 当采取自顶向下、逐步求精 的方法。 把一个模块的功能逐步分解、 细化为一系列具体的步骤, 进而翻译成一系列用某种程 序设计语言写成的程序。
例 用筛选法求100以内的素数
筛选法就是从2到100中去掉2、 3、…、9、10的倍数,剩下的 就是100以内的素数。
的一个零点
程序1
f0 = f (a); f1 = f (b);
if ( f0 * f1 <= 0 ) {
x0 = for
a; ( i=
x11;= ib<;=
n;i++
){
xm = ( x0+x1 ) / 2;
if ( abs goto
f(ifnmi)sh<;eps
||
afmbs=(fx(1x-m)x;0) <
为了解决这个问题,可先按程 序功能写出一个框架。
程序框架
main ( )
{
建立2到100的数组A[ ],其中A[i]=i;
-----------------------------------1
建立2到10的素数表 B[ ],其中存放2到10以内的素数;
-----------------------------------2
若A[i]=i是B[ ]中任一数的倍数,则剔除A[i];
-----------------------------------3
输出A[ ]中所有没有被剔除的数;
-----------------------------------4
}
对程序细化
main ( )
{
/*建立2到100的数组A[ ],其中A[i]=i*/
相关文档
最新文档