第六章软件工程
软件工程讲义第六章
ENDWHILE; 2.1、2.2、2.4已能用程序语言表达,只需对2.3进一步精细化。 为了处理60个数据,又需一循环结构。
引入分钟值变量:minutes,每分钟要做的工作是: 累计:求每小时的平均值 检查违章情况 为了累计,引入变量sum: 在每小时处理前设初值为0。 每小时处理后求平均值。
3、自顶向下的程序验证。
2019年11月26日星期二
西南交通大学信息科学与技术学院
结构化程序设计的核心内容
二、使用三种基本控制结构来构造程序 1、任何程序都由顺序、选择和重复三种基本控制结构构造。 顺序实现了任何算法规约中的核心处理步骤; 条件允许根据逻辑情况选择处理方式; 重复提供了循环。 这些逻辑元素是结构化程序设计的基础。
BEGIN
1. 设置初值;
2. 处理24小时数据;
END
求精步骤1:设置初值。开始时一般不明确为哪些变量赋初值。
求精步骤2:计算结果是以小时为统计单位输出,它是重复执行24次的
循环结构。
局部数据结构设计:数据输入的方案选择:
1、处理前读入所有24小时数据,共1440个,需要大一个大的数组。
2、每次计算输入一个数据,这要保证对先前输入的数据不再使用。
ENDWHILE;
Mean:=sum/60.0; 一次违章出现是指连续5次污染值超过10.00。如果违章分布在两个相间的时 间段上,则把这次违章算在下一小时上。 首先测试当前值是否超过10.00,若是,还将进一步检查是否连续出现5次。 为了实现第二个测试,需要两个计数器: Voilation:计数本小时出现的违章次数。 Infraction:计数连续出现超过正常值的次数。 每次超正常值出现时,Infraction增1。为了保证Infraction表示连续出现超正 常值,必须保证在第一次出现超正常值时其初值为0。为了保证相继两个小时的 Infraction的值能连续被使用,在每小时处理前不能为Infraction置0值,只能在 第一小时处理前置0。另外,在发现一次未超正常值时,也应置它为0,即连续 出现超正常值中断。
软件工程第六章面向对象方法概述
系
人科
车辆
非机动车 机动车
哺乳动物
翼手目
食肉目
猴科
犬科
自行车 人力车 客车 卡车 拖拉机
鲸目
猫科
人
猩猩
狗 狼 狐猫 虎 豹
继承性(续)
▪ 不要滥用继承
➢ 如果类A和类B毫不相关,不可以为了使B的功 能更多些而让B继承A的功能。 人想拥有狗鼻 子的灵敏问题。
➢ 若在逻辑上A是B的“一部分”(a part of), 则不允许B继承A的功能,而是要用A和其它东 西组合出B。 头与眼睛、鼻子、耳朵、嘴巴的 关系。
其中,ID MS DS MI是对象受理的消息名集合(即对外接口)
➢ 对象(Object)是类(Class)的一个实例(Instance)。
面向对象的基本概念(续)
▪ 类的定义
➢ 对具有相同数据和相同操作的一组相似对象的定 义。
➢ 类是对象的程序描述,对象是该程序运行时所创 建的实例。
➢ 对象比作房子,那么类就是房子的设计图纸 。 ➢ 对象比作一个个活人,则人类则是对人这类动物
▪ 对象A向对象B发送消息f就是对象A调用对象B的 方法f
面向对象的特征
▪ 以数据为中心,抑或以行为为中心
➢ 分别用上述两种方式来描述人
▪ 封装性 ▪ 继承性 ▪ 多态性
封装性
▪ 封装性是把对象的属性和方法结合成一个独立的 单元,并尽可能荫蔽对象的内部细节。
➢ Public,private,protected ➢ 避免访问内部数据 ➢ 尽量通过方法访问
归纳关系(续)
组合关系
▪ 组合关系就是“整 体—部分”关系,它 反映了对象之间的构 成关系。组合关系也 称为聚集关系。
▪ 组合关系具有的最重 要的性质是传递性。 也就是说,如果A是B 的一部分,B是C的一 部分,则A也是C的一 部分
软件工程第六章 详细设计
软件工程第六章详细设计软件工程第六章详细设计6.1 概述本章节旨在对软件系统的详细设计进行介绍。
详细设计将在系统的高层设计基础上,进一步细化系统结构、模块划分以及相互关系,并定义系统中各个组件的详细功能和接口。
6.2 系统结构设计系统结构设计主要包括以下内容:- 系统总体架构:描述系统整体的结构和组成部分,包括各个模块和它们的关系。
- 模块划分:根据系统需求,将系统划分为若干个模块,并定义各个模块的职责和功能。
- 模块关系:描述各个模块之间的依赖关系和通信方式,包括模块之间的接口和数据流。
6.3 模块设计模块设计是详细设计的核心内容,主要包括以下内容:- 模块接口:定义模块的输入和输出接口,包括参数和数据格式。
- 模块内部实现:描述模块内部的算法、数据结构以及运行流程。
- 模块测试方法和策略:定义对模块进行单元测试的方法和策略。
6.3.1 模块A设计本节详细介绍模块A的设计。
- 模块接口:模块A接收来自模块B的数据输入,处理后输出结果给模块C。
- 模块内部实现:模块A内部使用算法X对输入数据进行处理,然后将结果输出给模块C。
- 模块测试方法和策略:对模块A进行单元测试时,使用测试用例集合Y进行测试。
6.3.2 模块B设计本节详细介绍模块B的设计。
- 模块接口:模块B接收来自模块D的数据输入,处理后输出结果给模块A。
- 模块内部实现:模块B内部使用算法Z对输入数据进行处理,然后将结果输出给模块A。
- 模块测试方法和策略:对模块B进行单元测试时,使用测试用例集合Z进行测试。
6.3.3 模块C设计本节详细介绍模块C的设计。
- 模块接口:模块C接收来自模块A的数据输入。
- 模块内部实现:模块C内部对输入数据进行处理,并输出结果。
6.4 数据库设计如果系统涉及数据库,本节详细介绍数据库的设计。
- 数据库结构:描述数据库的表、字段以及它们之间的关系。
- 数据库访问接口:定义系统访问数据库的接口和方法。
6.5 接口设计本节详细介绍系统与外部系统或用户的接口设计。
软件工程第6章 软件编码设计
10
(1)理论标准 1)理想的模块化机制、易于阅读和使用的控制结 构及数据结构 模块化、良好的控制结构和数据结构可以降低编码 工作的难度,增强程序的可理解性,提高程序的可测试 性和可维护性,从而减少软件生存周期中的总成本,并 缩短软件开发所需的时间。 2)完善、独立的编译机制
11
(2)实用标准 1)系统用户的要求 由于用户是软件的使用者,因此软件开发者应充分 考虑用户对开发工具的要求。特别是当用户要负责软件 的维护工作时,用户理所应当地会要求采用他们熟悉的 语言进行编程。 2)工程的规模 3)软件的运行环境 4)可以得到的软件开发工具
16
(3)语句的构造及书写 语句是构成程序的基本单位,语句的构造方式和书 写格式对程序的可读性具有非常重要的决定作用。 在一行内只写一条语句,并且采取适当的移行格式, 使程序的逻辑和功能变得更加明确。 程序编写首先应当考虑清晰性,不要刻意追求技巧 性,使程序编写得过于紧凑。
17
(4)输入/输出 由于输入和输出是用户与程序之间传递信息的渠道, 因此输入、输出的方式往往是用户衡量程序好坏的重要 指标。为了使程序的输入、输出能便于用户的使用,在 编写程序时应对输入和输出的设计格外注意。 1)输入 2)输出
23
良好的编码风格,应该以结构程序设计的原则为指 导,使用单输入口和单输出口的控制结构。倡导源程序 代码的文档化,程序内部良好的文档资料,有规律的数 据说明格式,简单清晰的语句构造和输入输出格式等, 都对程序的可读性有很大作用,也在相当大的程度上改 进了程序的可维护性。程序的输入输出应该充分考虑运 行工程学的要求,在满足数据可靠性的前提下,尽量做 到对用户友善。
19
(1)用于提高运行速度的指导原则 ①编写程序之前,先对需要使用的算术表达式和逻 辑表达式进行化简。 ②尽可能多地采用执行时间短的算术运算。 ③尽量避免使用多维数组、指针和其他复杂的数据 类型。 ④尽量采用整型算术表达式和布尔表达式。 ⑤尽可能减少循环体,特别是内循环中语句的个数。 ⑥尽量使同一表达式中的数据类型保持统一。 ⑦应当对所有的输入和输出安排适当的缓冲区,以 减少频繁通信所带来的额外开销。
软件工程 第6章
N-S图的基本符号
N-S图的嵌套定义形式
练 习
请利用N-S描述下列问题的程序结构
某汽车修配厂,有一个存有汽车零件的 仓库,其中存有若干种零件,请编写一个查 询程序,用于查询该库中某零件的库存量为 多少。
设该模块为查询模块。请设计该模块的 程序结构。具体要求:
1、应具有重复查询功能; 2、应具有数据检测功能; 3、请利用N-S图描述该模块的算法。
伪代码----文字形式的表达工具,不能在计算机上执行, 但形式上与代码相似。用它来描述程序的结构,工作量 要比画图小,又比较容易转换真正的代码。
PDL-----关键词+自然语言
结构化语言的结构分为外层和内层:
外层: 具有严格的关键字外语法,用于定义控制
结构和数据结构。包括有简单陈述句、判定和 重复结构等三种。
A=B
A<B
A:B
A>B
X=? =1 =2 =3 =4 =5
X=?
x=1 x=2 x=3 x=4
练 习
请利用程序流程图描述下列问题的程序结构
某汽车修配厂,有一个存有汽车零件的 仓库,其中存有若干种零件,请编写一个查 询程序,用于查询该库中某零件的库存量为 多少。
设该模块为查询模块。请设计该模块的 程序结构。具体要求:
输入错误!
继续查询?
Y
N
跳出循环
6.3.3 PAD图
问题分析图(Problem Analysis Diagram) 采用二维树形结构图表示程序的控制流。
A B (a)顺序结构
A
P
B
(b)选择结构
PAD图的基本符号
WHILE P
S
(c) WHILE型循环结构
软件工程导论第6章
70年代初N.Wirth在Pascal语言中设置支持“顺序 结构”、“IF-THEN-ELSE选择结构”、“DO-WHILE 重复结构”或“DO-UNTIL重复结构”三种基本控制 结构语句。
25
3种基本控制结构
(1) 顺序型
A B
(2) 选择型
F P A B T
(2) 多情况选择型(case)
T T
P=1 F P=2 F P=n F
…
A1 A2
T
An
(3) 先判定型循环
后判定型循环
(do-while)
F
(do-until)
P T S
S P F
T
例1、某模块有两个输入a和b,一 个输出c,当满足条件(a>0)and(b<2) 时,c=a+b,否则c=a-b。画出该模 块的程序流程图。
a b
第6章 详细设计
6.1 结构程序设计 6.2 人机界面设计 6.3 过程设计的工具 6.4 面向数据结构的设计方法 6.5 程序复杂程度的定量度量 6.6 小结 习题
1
详细设计阶段的根本目标:确定应该怎样具体地 实现所要求的系统。 为软件结构图中的每一个模块确定使用的算法和 块内数据结构,并用某种选定的表达工具给出清晰 的描述。
100 110
120
130 140
Eq:等于 ne:不等于 gt:大于 lt:小于 ge:大于等于 le:小于等于
例:打印A、B、C三数中最小者的程序 if (A.LT.B .AND. A.LT.C)then write(6,*) A else if (A.GE.B .AND. B.LT.C) then write(6,*) B else write(6,*) C endif endif
(完整版)软件工程第六章答案
作业4参考答案1.假设只有SEQUENCE和DO_WHILE两种控制结构,怎样利用它们完成IF_THEN_ELSE操作?答:转化如下:K = 1DO WHILE (条件.AND. K.EQ.1)程序块1K=K+1END DODO WHILE ((.NOT. 条件) .AND. K.EQ.1)程序块2K=K+1END DO2.假设允许使用SEQUENCE和IF_THEN_ELSE两种控制结构,怎样利用它们完成DO_WHILE操作?答:转化如下;label: IF (条件) THEN程序块GOTO labelELSE程序块END IF3.画出下列伪码程序的程序流程图和盒图:STARTIF p THENWHILE q DOfEND DOELSEBLOCKgnEND BLOCKEND IFSTOP答:(1)流程图如图4-1所示:图4-1 从伪码变成的程序流程图(2)该程序的盒图如图4-2所示:图4-2 从伪码变成的程序盒图4.下图给出的程序流程图代表一个非结构化的程序,请问:(1)为什么说它是非结构化的?(2)设计一个等价的结构化程序。
(3)在(2)题的设计中你使用附加的标志变量flag吗?若没用,请再设计一个使用flag 的程序;若用了,再设计一个不用flag的程序。
答:(1)通常所说的结构化程序,是按照狭义的结构程序的定义衡量,符合定义规定的程序。
图示的程序的循环控制结构有两个出口,显然不符合狭义的结构程序的定义,因此是非结构化的程序。
(2)使用附加的标志变量flag,至少有两种方法可以把该程序改造为等价的结构化程序,图4-3描绘了等价的结构化程序的盒图。
(a)解法1(b)解法2图4-3 与该图等价的结构化程序(用flag)(3)不使用flag把该程序改造为等价的结构化程序的方法如图4-4所示。
图4-4 与该图等价的结构化程序(不用flag)5.研究下面的伪代码程序:LOOP: Set I to (START+FINISH)/2If TABLE(I)=ITEM goto FOUNDIf TABLE(I)<ITEM Set START to (I+1)If TABLE(I)>ITEM Set FINISH to (I-1)If (FINISH-START )>1 goto LOOPIf TABLE(START)=ITEM goto FOUNDIf TABLE(FINISH)=ITEM goto FOUNDSet FLAG to 0Goto DONEFOUND: Set FLAG to 1DONE:Exit(1)画出程序流程图。
软件工程导论第6章(第4版)
二. 人机界面设计
人机界面设计是接口设计的一个重要的组成部 分。对于交互式系统来说,人机界面设计和数据设 计、体系结构设计及过程设计一样重要。
1.指导规则
T.Mandel在《用户界面设计要素》中,提出了3 条指导规则: 让用户驾驭软件,不是软件驾驭用户 减少用户的记忆 保持界面的一致性
2. 应该考虑的设计问题
4. 人机界面设计指南
(3) 数据输入指南 尽量减少用户的输入动作。 保持信息显示和数据输入之间的一致性。 允许用户自定义输入。 交互应该是灵活的,可调整成用户喜欢的输入方式。 使在当前动作语境中不适用的命令不起作用。 让用户控制交互流。 对所有输入动作都提供帮助。 消除冗余的输入。
三. 过程设计
1.过程设计的目的与任务 目的 确定模块采用的算法和块内数据结构,用某种 选定的表达工具给出清晰的描述。 任务:编写软件的“过程设计说明书” 为每个模块确定采用的算法 (模块的详细过程性 描述) 确定每一模块使用的数据结构 确定模块接口的细节 (包括对系统外部的接口和 用户界面,对系统内部其他模块的接口,以及关 于模块输入数据、输出数据及局部数据的全部细 节)
三. 过程设计
2.过程设计的原则与方法
清晰第一的设计风格 结构化的控制结构 结构程序设计的经典定义为: “如果一个程序的代码块仅仅通过顺序、选择和循环这3 种基本控制结构进行连接,并且每个代码块只有一个入口和 一个出口,则称这个程序是结构化的。” 结构程序设计技术是一种实现在逻辑上正确描述每个模 块的功能,并且使设计出的处理过程尽可能简明易懂的关键 技术,是过程设计的逻辑基础。 逐步细化的实现方法 例:在一组数中找出其中的最大数
(4) 命令交互 命令行现在仍然是许多高级用户偏爱的交互方式。在 多数情况下,用户既可以从菜单中选择软件功能,也可以 通过键盘命令序列调用软件功能。 在提供命令交互方式时,必须考虑下列设计问题: 是否每个菜单选项都有对应的命令? 采用何种命令形式?有3种选择:控制序列(例如Ctrl+P), 功能键和键入命令。 学习和记忆命令的难度有多大?忘记了命令怎么办? 用户是否可以定制或缩写命令? 在理想的情况下,所有应用软件都有一致的命令使用 方法。
第六章面向对象的软件工程
30
1. 确定对象
运用前面介绍的方法确定系统中所有的对象及对象的属性和操作。 运用前面介绍的方法确定系统中所有的对象及对象的属性和操作。如家 庭安全系统: 庭安全系统:
继承意味着可以利用已有的定义、设计和实现, 继承意味着可以利用已有的定义、设计和实现,简 化了相似类的重复定义。实现了软件的可重用性。 化了相似类的重复定义。实现了软件的可重用性。
14
从结构上讲类是分层的,一个类的上层可以有超 从结构上讲类是分层的,一个类的上层可以有超 父类),下层可以有子类 继承具有传递性。 ),下层可以有子类, 类(父类),下层可以有子类,继承具有传递性。
Y1
Y2
Yn
Y
多重继承: 多重继承:
X
单重继承: 单重继承:
X
15
1 面向对象软件的开发过程
采用面向对象开发方法构造的软件具有以下特点: 采用面向对象开发方法构造的软件具有以下特点: 面向对象技术构造的模型与客观世界一致; 面向对象技术构造的模型与客观世界一致; 适应变化的需要,修改局限在模块中; 适应变化的需要,修改局限在模块中; 具有可复用性
26
Caod & Yourdon的设计模型 的设计模型
窗口 人机交互 界 面 问题域
系统交互 界 面 (任务 管理) 管理)
其它系统
设 备 数据管理 报告 处理器
数据库
27
应用框架结构 根据应用领域系统的特有结构划分子系统(模板、 根据应用领域系统的特有结构划分子系统(模板、 主题、抽象类的集合) 主题、抽象类的集合)。 然后设计细化每个子系统的对象模型、动态模型 然后设计细化每个子系统的对象模型、 和功能模型。 和功能模型。 如专家系统的典型结构: 如专家系统的典型结构:
软件工程(第五版)-习题及答案---第六章
软件工程(第五版)-习题及答案---第六章-标准化文件发布号:(9456-EUATWK-MWUB-WUNN-INNUL-DDQTY-KII一、选择题1、UML的主要特点不正确的是(C)。
A、面对对象,表达能力强B、可视化建模C、面对过程,表达能力强D、统一标准2、静态建模图不包括(B)。
A、用例图B、协作图C、类图D、对象图3、用例图的模型元素不包括(D)。
A、用例B、系统C、行为者D、软件开发者4、类图的要素不包括(D)。
A、类名称B、操作C、属性D、对象5、时序图中的要素不包括(A)。
A、执行者B、对象C、对象生命线D、消息6、对象模型的描述工具是(C)。
A、状态图B、数据流图C、对象图D、结构图7、协作图的要素不包括(A)。
A、用例B、对象C、链D、消息8、类图反映了系统中对象之间的抽象关系,不包括(D)。
A、关联B、聚合C、泛化D、内聚9、下面(D)不是状态图的图符。
A、圆角的矩形B、实心圆点C、实心圆环D、椭圆10、描述类中某个对象的行为,反映了状态与事件关系的是(A)。
A、状态图B、数据流图C、对象图D、结构图11、动态模型的描述工具(C)。
A、对象图B、设计图C、状态图D、结构图12、表示对象的相互行为的模型是(A)模型。
A、对象B、动态C、结构D、静态13、有关类和对象的描述中,错误的是(A)。
A、一个类只能有一个对象B、对象是类的具体实例C、类是某一类对象的抽象D、类和对象的关系是一种数据类型和变量的关系14、用例图中用例之间的关系通常有关联关系、依赖关系和(C)关系。
A、协作B、聚合C、泛化D、内聚15、动态模型图包括:时序图、协作图、状态图和(C)图。
A、对象图B、设计图C、活动图D、结构图二、简答题1.简要介绍用例图的三个要素。
答:用例图主要包括以下三个元素:①用例(Use Case):用例是系统的使用过程或要执行的动作序列,用来描述某个参与者使用系统所完成的功能。
在图中用椭圆来表示,用例名称可写在椭圆中或椭圆下面。
软件工程软件工程软件工程6
例:一图书销售系统,其中一加工为“优惠处理”,条件是:顾客的营业额大于1000元,同时必须信誉好,或者虽然信誉不好,但是20年以上的老主顾。
1 2 3 4
>1000元 Y Y Y N 信誉好 Y N N - >20 年 - Y N - 优 惠 X X 正 常 X X
6.3.6 PDL
PDL语言的主要特点如下: (1) 各种定义语句及控制结构的表达都具有严格的语法形式,使程序结构、数据说明等更加清晰。 (2) 提供了数据说明机制,可用于定义简单及复杂的数据结构。 (3) 提供了模块的定义和调用机制,方便了程序模块化的表达。
6.4 面向数据结构的设计方法
详细设计的任务
详细设计的任务
(4) 为每个模块设计一组测试用例。 由于负责详细设计的软件人员对模块的实现细节十分清楚,因此由他们在完成详细设计后提出模块的测试要求是非常恰当和有效的。 (5) 编写文档,参加复审。 详细设计阶段的成果主要以详细设计说明书的形式保留下来,在通过复审对其进行改进和完善后作为编码阶段进行程序设计的主要依据。
6.3.3 PAD图
6.3.3 PAD图
图6.ቤተ መጻሕፍቲ ባይዱ 使用PAD图提供的定义功能来逐步求精的例子
当算法中包含多重嵌套的条件选择时,用程序流程图、盒图、PAD图或后面即将介绍的过程设计语言(PDL)都不易清楚地描述。然而判定表却能够清晰地表示复杂的条件组合与应做的动作之间的对应关系。 一张判定表由4部分组成,左上部列出所有条件,左下部是所有可能做的动作,右上部是表示各种条件组合的一个矩阵,右下部是和每种条件组合相对应的动作。判定表右半部的每一列实质上是一条规则,规定了与特定的条件组合相对应的动作。
6.3.6 PDL
软件工程与实践第6章
6.1 6.2 6.3 6.4 6.5 6.6
结构程序设计 人机界面设计 过程设计的工具 面向数据结构的设计方法 程序复杂程度的定量度量 小结
详细设计阶段的根本目标是确定应该怎样具体地实 现所要求的系统。 详细设计阶段的任务还不是具体地编写程序,而是 要设计出程序的“蓝图”,以后程序员将根据这个 蓝图写出实际的程序代码。 详细设计的目标不仅仅是逻辑上正确地实现每个模 块的功能,更重要的是设计出的处理过程应该尽可 能简明易懂。 结构程序设计技术是详细设计的逻辑基础。
6.2.3 人机界面设计指南
用户界面设计主要依靠设计者的经验,总结众多设 计者的经验得出的设计指南,有助于设计者设计出 友好、高效的人机界面。下面介绍3类人机界面设 计指南。 1. 一般交互指南 一般交互指南涉及信息显示、数据输入和系统整体 控制,因此,这类指南是全局性的,忽略它们将承 担N-ELSE型分支和 DO-WHILE型循环这3种基本控制结构,则称为经 典的结构程序设计;如果除了上述3种基本控制结 构之外,还允许使用DO-CASE型多分支结构和 DO-UNTIL型循环结构,则称为扩展的结构程序设 计;如果再加上允许使用LEAVE(或BREAK)结构, 则称为修正的结构程序设计。
6.3.6 过程设计语言
过程设计语言(PDL)也称为伪码,它是用正文形 式表示数据和处理过程的设计工具。 PDL应该具有下述特点: (1) 关键字的固定语法,它提供了结构化控制结构、 数据说明和模块化的特点。 (2) 自然语言的自由语法,它描述处理特点。 (3) 数据说明的手段。应该既包括简单的数据结构 (例如纯量和数组),又包括复杂的数据结构(例如, 链表或层次的数据结构)。 (4) 模块定义和调用的技术,应该提供各种接口描 述模式。
软件工程第6章面向数据流的设计方法
21
变换分析
输入流 变换流 输出流
A C
B E D F G H
主控模块 输入流 控制模块
变换流 控制模块
输出流 控制模块
图6-5 一级分解
22
变换分析
图6-5展示的是一个简单三叉结构,实际处 理大型系统的复杂数据流时,可能需要多 个模块对应图6-5中一个模块的功能。“一 级分解”总的原则是,在完成控制功能并 保持低耦合度、高内聚度的前提下尽可能 地减少模块的数量。 “传感器监测子系统”一级分解如图6-6所 示,其中控制模块的名字概括了所有下属 模块的功能。
E
输出流控制模块 G
A
C
F
主控模块
H
输入流控制模块 B A D C
E F
G H
图6-8 结构的优化
31
监控传感器执行者
警报输出控制器 获得响应信息 建立警报条件
产生显示 读传感器
生成警报信号
建立与电话网络的 连接
产生脉冲
32
变换分析
上述七个设计步骤的目标是给出软件的 一个整体描述。 一旦有了这样一个描述,设计人员即可 从整体角度评价和精化软件的总体结构, 此时修改所需耗费不多,却能大大提高 软件质量。
39
无效口令
图6-2-1 用户交互子系统的二级数据流图
事务分析
事务分析法可概括为七个步骤:
步骤一、复审基本系统模型; 步骤二、复审并精化软件数据流图; 步骤三、确定数据流图的特征; 步骤四、指出事务中心,确定接收部分和发送部分 的流界; 步骤五、映射出系统上层模块结构; 步骤六、分解并精化事务结构以及每条动作路径所 对应的结构。根据流经每一动作路径的数据流特征, 参考前面所述“变换设计” 相关步骤可以逐一导出 这些子结构.
软件工程第六章
软件工程第六章在软件工程的广袤领域中,第六章往往聚焦于一些关键且核心的概念与实践。
这一章,或许是关于软件设计原则与模式的深入探讨,或许是对软件测试策略与方法的详细阐述,又或许是围绕软件项目管理中的关键环节展开论述。
当我们谈论软件设计原则时,就不得不提及“单一职责原则”。
这个原则主张一个类或模块应该仅有一个引起它变化的原因。
想象一下,假如一个类承担了过多不同类型的职责,那么当其中一项职责发生改变时,就可能会对整个类的稳定性产生影响,从而引发一系列不必要的修改和潜在的错误。
这就好比一个人同时要兼顾多个完全不同的工作,很容易顾此失彼,导致工作质量下降。
“开闭原则”也是重要的设计原则之一。
它表明软件实体(如类、模块、函数等)应该对扩展开放,对修改关闭。
简单来说,就是在不修改现有代码的基础上,能够通过添加新的代码来实现新的功能或扩展系统的行为。
这使得软件具有更好的可维护性和可扩展性,避免了因为频繁修改现有代码而引入新的错误。
设计模式在软件工程中起着举足轻重的作用。
例如,“工厂模式”常用于创建对象,将对象的创建和使用分离,提高了代码的灵活性和可维护性。
当我们需要根据不同的条件创建不同类型的对象时,工厂模式可以帮助我们轻松地实现这一需求,而无需在每次创建对象时都编写复杂的条件判断代码。
再来说说软件测试。
在第六章中,可能会详细介绍各种测试类型,如单元测试、集成测试、系统测试和验收测试。
单元测试是针对软件中的最小可测试单元(通常是函数或方法)进行的测试,确保每个单元的功能正确无误。
集成测试则着重于检验各个模块之间的接口是否正常工作,是否能够协同完成特定的功能。
系统测试则是从整个系统的角度出发,对软件的功能、性能、兼容性等方面进行全面的测试。
而验收测试则是由用户或客户参与,以确定软件是否满足他们的需求和期望。
在软件测试中,测试用例的设计至关重要。
好的测试用例应该具有较高的覆盖率,能够有效地发现潜在的问题。
同时,测试用例还应该易于维护和更新,以适应软件的不断变化。
计算机软件工程第六章 详细设计
PAD图的基本符号
SOFTWARE ENGINEERING
PAD图的基本符号
输入框 输出框 处理框 选择框
重复框(先判 定,再重复) 或 子程序框
重复框(先执行, 后判定,再重复)
定义框
使用PAD图提供的定义功能来逐步求精的例子
• 作业:判定一个数是不是素数的PAD图
SOFTWARE ENGINEERING
SOFTWARE ENGINEERING
盒图的基本符号
SOFTWARE ENGINEERING
§6.2 详细设计的工具
6.2.4 PAD图(Problem Analysis Diagram) 用二维树形结构的图来表示程序的控制流。 优点: ①设计出的程序是结构化程序; ②描绘程序结构清晰; ③表示程序逻辑,易读、易懂、易记;(自上而下, 从左向右顺序执行,遍历所有结点); ④易转换成 语言源程序,可用软件工具自动完成; ⑤也可用于描绘数据结构; ⑥支持自顶向下、逐步求精方法的使用。
例题 根据伪码画出程序流程图、盒图、 PAD图
Start If p1 then while q2 do x end do Else block y z end block End if stop
SOFTWARE ENGINEERING
作业:根据伪码画出程序流程图、盒图、PAD图
Begin Input(a,b,c) i=0 While i<=6 do Begin If a>6 or b>=0 Then c=c+a Else b=c+a End if i=i+1 End End do Print(a,b,c) End
PAD图(问题分析图)
(4)PAD是二维树形结构的图形,程序从图中 最左竖线上端的结点开始执行,自上而下,从 左向右按顺序执行,遍历所有结点; (5)容易将PAD转换成高级语言源程序,该转 换可由软件自动完成,有利于提高软件可靠性 和软件生产; (6)既可用于表示程序逻辑,也可用于描绘数 据结构; (7)PAD的元素支持自顶向下、逐步求精方法 的使用。
自学考试软件工程第6章例题分析与解答
第6章例题分析与解答
一、填空题
1.软件需求分析之后,软件的设计、编码、测试与语言的特性有很大的关系,这个特性主要是语言的______特性。
[答案]技术
2.为了提高程序的易读性,同时减少错误,提高软件开发效率,编码时注意养成良好的_____。
[答案]程序设计风格
3.源程序中加注释是帮助理解程序的重要手段,注释分为_______两类。
[答案]序言性注释和功能性注释
二、选择题
1.在结构化程序设计思想提出之前,在程序设计中曾强调程序的效率,现在人们更重视程序的( )。
A.技巧性
B.保密性
C.一致性
D.可理解性
[答案]D
2.与选择编程语言无关的因素是( )。
A.软件开发的方法
B.软件执行的环境
C.程序设计风格
D.软件开发人员的知识
[答案]C
3.源程序文档化要求在每个模块之前加序言性注释。
该注释内容不应有( )。
A.模块的功能
B.语句的功能
C.模块的接口
D.开发历史
[答案]B
4.不适合作为数据处理的语言是( )。
A.PROLOG
B.C
C.4GL
D.SQL
[答案]A
5.提高程序效率的根本途径并非在于( )。
A.选择良好的设计方法
B.选择良好的数据结构
C.选择良好的算法
D.对程序语句作调整
[答案]D。
软件工程软件详细设计
例1 程序P为: t:=x; x:=y; y:=t
那么,对于任意给定旳初始数据状态 X:(x, y, t),P旳最终数据状态将为 Y:(y,x,x)。因而,程序函数[P]为:
{((x,y,t),(y,x,x))}
程序函数是对程序功能旳一种精确描述。假如 两个程序有相同旳程序函数,那么它们所完毕 旳功能一定是相同旳。
– [定理6-2]:假如不增长辅助变量、不增长额外计算 或不变化程序旳执行顺序,那么必然存在不能用 if—while表达旳构造。
– [定理6-3] :在定理一旳假设条件下,if—while构造 旳充分必要条件是:该构造不包括两个(或两个以 上)旳出口循环。
图6—13(a)所示,是一种非构造化旳流程图。 经过变化构造旳执行顺序,形成了图6—13(b)所示 与图6—13(a)等价旳构造化流程图。在图6—13(b) 中,使用了组合判断A1和A2,“”表达 A1“非”与
A2“非”。
图6—13变化构造执行顺序
– [定理4] :若允许增长辅助变量、或增长额外计算、 或变化程序旳执行顺序,问题解旳任何算法都能够 表达为构造化构造。
图6—14(a)所示旳构造化流程图中有10个元 素。是一种非构造化流程图程序。因为,它旳两个 选择构造出现重叠,造成了程序段D有两个入口, 一种出口,破坏了单入口单出口这项构造化原则。
图6---7 非正规程序
因为正规程序有一种入口线和一种出口,因而一种正 规程序总能够抽象为一种函数结点。这个函数结点概 括了该正规程序对数据进行旳运算和测试旳总旳作用。
正规子程序
[定义6-2]假如一种正规程序旳某部分依然是正规程序, 那么称其为该正规程序旳正规子程序。
图6--8正规程序旳抽象过程
3.组织形式
软件工程第六章
6.4.1、 6.4.1、Booch方法 方法
• 1、类图:类与类之间的相互关系
6.4.1、 6.4.1、Booch方法 方法
• 2、对象图:由对象和消息组成
6.4.1、 6.4.1、Booch方法 方法
• 3、状态图:用于描述某个类的状态空间, 状态的改变和引起状态改变的事件及系统 中类的动态行为
• 1、模块化: • 面向对象的开发方法本身就支持把系统分解 “ 成模块的设计原则 • 2、抽象: • 在面向对象的设计阶段,对象具有极强的抽 象表达能力,类实现了对象的数据和行为的 抽象
6.3.2、 6.3.2、面向对象设计的准则
• 3、信息隐藏: • 信息隐藏即在面向对象的方法中的 “封装 “ 性”,这是保证软件部件具有优良的模块性 的基础。 • 封装性是将对象的属性及操作(服务)结合为一 个整体,尽可能屏蔽对象的内部细节,软件 部件外部对内部的访问通过接口实现
6.3.1、面向对象设计( 6.3.1、面向对象设计(OOD)的概念 )
• OOD 模型的抽象层次较低,但其建模原则和 OOA方法相同。
“ • 它设计出的结果是产生一组相关的类,每个 类都是一个独立的模块,既包含完整的数据 结构(属性),又包含完整的控制结构(服务)。
6.3.2、 6.3.2、面向对象设计的准则
6.2.1、 6.2.1、面向对象分析的特点
• 3、对需求变化有较强的适应性
“
• 构成系统最基本的元素:对象 • 对象的基本特征:封装性
6.2.1、 6.2.1、面向对象分析的特点
• 4、支持软件重用
“
• 面向对象方法的继承性 • 类的完整性、独立性
6.2.2、面向对象分析的基本任务 6.2.2、面向对象分析的基本任务 与务 6.2.2、面向对象分析的基本任务 与分析过程
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
(2)数据处理与数据库应用 SQL 为 IBM 公司开发的数据库查询语言 4GL 称为第 4 代语言 (3)实时处理 实时处理软件一般对性能的要求很高,可选用的语言有: 汇编语言、Ada 语言等。 (4)系统软件。 如果编写操作系统、编译系统等系统软件时,可选用汇编语言、C 语言、Pascal 语言和 Ada 语言。 (5)人工智能。 如果要完成知识库系统、专家系统、决策支持系统、推理工程、语言识别、模式识别等人 工智能领域内的系统,应选择 Prolog、Lisp 语言。 2. 软件开发的方法(详见第 9 章) 有时编程语言的选择依赖于开发的方法,如果要用快速原型模型来开发,要求能快速实现 原型,因此宜采用 4GL。如果是面向对象方法,宜采用面向对象的语言编程。 3. 软件执行的环境 良好的编程环境不但有效提高软件生产率,同时能减少错误,有效提高软件质量。 4. 算法和数据结构的复杂性 科学计算、实时处理和人工智能领域中的问题算法较复杂,而数据处理、数据库应用、系 统软件领域内的问题,数据结构比较复杂,因此选择语言时可考虑是否有完成复杂复杂算法 的能力,或者有构造复杂数据结构的能力。 5. 软件开发人员的知识 编写语言的选择与软件开发人员的知识水平及心理因素有关,开发人员应仔细地分析软件
项目的类型,敢于学习新知识,掌握新技术。 6.2 程序设计风格
随着计算机技术的发展,软件的规模增大了,软件的复杂性也增强了。为了提高程序的可 阅读性,要建立良好的编程风格。
1.源程序文档化 (1)标识符应按意取名。 (2)程序应加注释。注释是程序员与日后读者之间通信的重要工具,用自然语言或伪码描 述。它说明了程序的功能,特别在维护阶段,对理解程序提供了明确指导。注释分序言性注 释和功能性注释。 序言性注释应置于每个模块的起始部分,主要内容有: ①说明每个模块的用途、功能。 ②说明模块的接口:调用形式、参数描述及从属模块的清单。 ③数据描述:重要数据的名称、用途、限制、约束及其他信息。 ④开发历史:设计者、审阅者姓名及日期,修改说明及日期。 功能性注释嵌入在源程序内部,说明程序段或语句的功能以及数据的状态。注意以下几点: ①注释用来说明程序段,而不是每一行程序都要加注释。 ②使用空行或缩格或括号,以便很容易区分注释和程序。 ③修改程序也应修改注释。 2.数据说明 为了使数据定义更易于理解和维护,有以下指导原则: (1)数据说明顺序应规范,使数据的属性更易于查找,从而有利于测试、纠错与维护。例 如按以下顺序:常量寿命、类型说明、全程量说明、局部量说明。 (2)一个语句说明多个变量时,各变量名按字典序排列。 (3)对于复杂的数据结构,要加注释,说明在程序实现时的特点。 3.语句构造 语句构造的原则是:简单直接,不能为了追求效率而使代码复杂化。为了便于阅读和理解, 不要一行多个语句。不同层次的语句采用缩进形式,使程序的逻辑结构和功能特征更加清晰。 要避免复杂的判定条件,避免多重的循环嵌套。表达式中使用括号以提高运算次序的清晰度 等等。 4.输入和输出 在编写输入和输出程序时考虑以下原则: (1)输入操作步骤和输入格式尽量简单。 (2)应检查输入数据的合法性、有效性,报告必要的输入状态信息及错误信息。 (3)输入一批数据时,使用数据或文件结束标志,而不要用计数来控制。 (4)交互式输入时,提供可用的选择和边界值。 (5)当程序设计语言有严格的格式要求时,应保持输入格式的一致性。 (6)输出数据表格化、图形化。 输入、输出风格还受其他因素的影响,如输入、输出设备,用户经验及通信环境等。 5.效率 效率指处理机时间和存储空间的使用,对效率的追求明确以下几点: (1)效率是一个性能要求,目标在需求分析给出。 (2)追求效率建立在不损害程序可读性或可靠性基础上,要先使程序正确,再提高程序效 率,先使程序清晰,再提高程序效率。 (3)提高程序效率的根本途径在于选择良好的设计方法、良好的数据结构算法,而不是靠
4.科学工程计算、数据处理与数据库应用、实时处理、系统软件、人工智能
5.源程序文档化
三、选择题
1.D. 2.B. 3.C. 4.A. 5.D.
3.程序设计语言的心理特性在语言中表现不应包括( )。
A.歧义性 B.简洁性 C.保密性 D.传统性
4.程序设计语言的工程特性其中之一表现在( )。
A.软件的可重用性
B.数据结构的描述性
C.抽象类型的描述性 D.数据库的易操作性
5.程序设计语言的技术特性不应包括( )。
A.数据结构的描述性 B.抽象类型的描述性
编程时对程序语句做调整。
一、名词解释
1.编码
2.程序设计风格
二、填空题
1.程序设计语言的特性主要有_______三方面。
2.程序设计语言的心理特性在语言中的表现形式为_______。
3.程序设计语言的工程特性主要表现为_____。
4.项目的应用领域一般有_____几种类型。
5.与编码风格有关的因素有数据说明、语句构造、输入输出、效率等,其中还有一个重要的
因素是_______。
三、选择题
1.项目的应用领域是选择编程语言关键的因素之一,不适合作为项目应用领域的类型是( )。
A.系统软件
B.数据处理与数据库应用
C.实时处理
D.UNIX 操作系统
2.为了提高易读性,源程序内部应加功能性注释,用于说明( )。
A.模块总的功能
B.程序段或语句的功能
C.模块参数的用途 D.数据的用途
C.数据库的易操作性 D.软件的可移植性
四、简答题
1.在项目开发时,选择程序设计语言通常考虑哪些因素?
2.什么是程序设计风格?应在哪些方面注意培养良好的设计风格?
参考答案
二、填空题
1.心理特性、工性和传统性
3.可移植性、开发工具的可利用性、软件的可重用性、可维护性
6.1 程序设计语言的特性及选择 程序设计语言是人机通信的工具之一,使用这类语言“指挥”计算机干什么,是人类特定的
活动。我们从以下三个方面介绍语言的特性。 6.1.1 程序设计语言特性
1. 心理特性 (1)歧义性。 (2)简洁性。 (3)局部性和顺序性。 (4)传统性。 2. 工程特性 (1)可移植性。 (2)开发工具的可利用性。 (3)软件的可重用性。 (4)可维护性。 3. 技术特性 支持结构化构造的语言有利于减少程序环路的复杂性,使程序易测试、易维护。 6.1.2 程序设计语言的选择 1. 项目的应用领域