软件工程第六章

合集下载

软件工程第六章 详细设计

软件工程第六章 详细设计

软件工程第六章详细设计软件工程第六章详细设计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章 软件编码设计

软件工程第6章  软件编码设计

10
(1)理论标准 1)理想的模块化机制、易于阅读和使用的控制结 构及数据结构 模块化、良好的控制结构和数据结构可以降低编码 工作的难度,增强程序的可理解性,提高程序的可测试 性和可维护性,从而减少软件生存周期中的总成本,并 缩短软件开发所需的时间。 2)完善、独立的编译机制
11
(2)实用标准 1)系统用户的要求 由于用户是软件的使用者,因此软件开发者应充分 考虑用户对开发工具的要求。特别是当用户要负责软件 的维护工作时,用户理所应当地会要求采用他们熟悉的 语言进行编程。 2)工程的规模 3)软件的运行环境 4)可以得到的软件开发工具
16
(3)语句的构造及书写 语句是构成程序的基本单位,语句的构造方式和书 写格式对程序的可读性具有非常重要的决定作用。 在一行内只写一条语句,并且采取适当的移行格式, 使程序的逻辑和功能变得更加明确。 程序编写首先应当考虑清晰性,不要刻意追求技巧 性,使程序编写得过于紧凑。
17
(4)输入/输出 由于输入和输出是用户与程序之间传递信息的渠道, 因此输入、输出的方式往往是用户衡量程序好坏的重要 指标。为了使程序的输入、输出能便于用户的使用,在 编写程序时应对输入和输出的设计格外注意。 1)输入 2)输出
23
良好的编码风格,应该以结构程序设计的原则为指 导,使用单输入口和单输出口的控制结构。倡导源程序 代码的文档化,程序内部良好的文档资料,有规律的数 据说明格式,简单清晰的语句构造和输入输出格式等, 都对程序的可读性有很大作用,也在相当大的程度上改 进了程序的可维护性。程序的输入输出应该充分考虑运 行工程学的要求,在满足数据可靠性的前提下,尽量做 到对用户友善。
19
(1)用于提高运行速度的指导原则 ①编写程序之前,先对需要使用的算术表达式和逻 辑表达式进行化简。 ②尽可能多地采用执行时间短的算术运算。 ③尽量避免使用多维数组、指针和其他复杂的数据 类型。 ④尽量采用整型算术表达式和布尔表达式。 ⑤尽可能减少循环体,特别是内循环中语句的个数。 ⑥尽量使同一表达式中的数据类型保持统一。 ⑦应当对所有的输入和输出安排适当的缓冲区,以 减少频繁通信所带来的额外开销。

软件工程导论第6章

软件工程导论第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)画出程序流程图。

软件工程第六章 详细设计

软件工程第六章 详细设计

软件工程第六章详细设计软件工程第六章详细设计1. 引言本章将对软件系统的详细设计进行介绍。

详细设计是软件开发过程中的一个重要阶段,它负责将需求分析阶段产生的需求和概念设计阶段产生的设计方案转化为具体的实现细节。

2. 设计概述2.1 数据设计在数据设计方面,我们将详细定义系统中所使用的数据结构、数据类型和数据库设计。

这将包括实体类的定义、数据库表的设计以及数据字典的编制。

2.2 模块设计模块设计是将系统划分成各个功能模块,并定义模块之间的接口和交互方式。

我们将详细描述每个模块的功能、输入输出以及模块之间的调用关系。

2.3 界面设计界面设计负责定义系统与用户之间的交互方式。

我们将详细描述系统的界面布局、界面元素的设计和交互逻辑的实现。

3. 数据设计3.1 数据结构在此处描述系统中所使用的各种数据结构,包括树、链表、堆栈等,以及它们的定义和使用方式。

3.2 数据类型在此处描述系统所使用的各种数据类型,包括整型、浮点型、字符型等,以及它们的定义和使用方式。

3.3 数据库设计在此处描述系统所使用的数据库的设计,包括数据库表的结构、字段定义、关系等。

3.4 数据字典在此处编制系统的数据字典,明确定义每个数据元素的含义、取值范围、数据类型等。

4. 模块设计4.1 模块1名称在此处详细描述模块1的功能、输入输出以及模块内部的具体实现细节。

4.2 模块2名称在此处详细描述模块2的功能、输入输出以及模块内部的具体实现细节。

5. 界面设计5.1 界面布局在此处详细描述系统的界面布局方案,包括各个界面的位置、大小、排列等。

5.2 界面元素设计在此处详细描述系统所使用的各种界面元素,包括按钮、文本框、下拉框等,以及它们的样式和交互方式。

5.3 交互逻辑在此处详细描述系统与用户之间的交互逻辑,包括各个界面的功能和用户操作的响应方式。

6. 附件本文档涉及的附件包括:- 数据结构定义文档- 数据库表设计文档- 界面原型设计文档7. 法律名词及注释- 法律名词1: 注释1 - 法律名词2: 注释2。

软件工程导论第6章(第4版)

软件工程导论第6章(第4版)

二. 人机界面设计
人机界面设计是接口设计的一个重要的组成部 分。对于交互式系统来说,人机界面设计和数据设 计、体系结构设计及过程设计一样重要。
1.指导规则
T.Mandel在《用户界面设计要素》中,提出了3 条指导规则: 让用户驾驭软件,不是软件驾驭用户 减少用户的记忆 保持界面的一致性
2. 应该考虑的设计问题
4. 人机界面设计指南
(3) 数据输入指南 尽量减少用户的输入动作。 保持信息显示和数据输入之间的一致性。 允许用户自定义输入。 交互应该是灵活的,可调整成用户喜欢的输入方式。 使在当前动作语境中不适用的命令不起作用。 让用户控制交互流。 对所有输入动作都提供帮助。 消除冗余的输入。
三. 过程设计
1.过程设计的目的与任务 目的 确定模块采用的算法和块内数据结构,用某种 选定的表达工具给出清晰的描述。 任务:编写软件的“过程设计说明书” 为每个模块确定采用的算法 (模块的详细过程性 描述) 确定每一模块使用的数据结构 确定模块接口的细节 (包括对系统外部的接口和 用户界面,对系统内部其他模块的接口,以及关 于模块输入数据、输出数据及局部数据的全部细 节)
三. 过程设计
2.过程设计的原则与方法
清晰第一的设计风格 结构化的控制结构 结构程序设计的经典定义为: “如果一个程序的代码块仅仅通过顺序、选择和循环这3 种基本控制结构进行连接,并且每个代码块只有一个入口和 一个出口,则称这个程序是结构化的。” 结构程序设计技术是一种实现在逻辑上正确描述每个模 块的功能,并且使设计出的处理过程尽可能简明易懂的关键 技术,是过程设计的逻辑基础。 逐步细化的实现方法 例:在一组数中找出其中的最大数
(4) 命令交互 命令行现在仍然是许多高级用户偏爱的交互方式。在 多数情况下,用户既可以从菜单中选择软件功能,也可以 通过键盘命令序列调用软件功能。 在提供命令交互方式时,必须考虑下列设计问题: 是否每个菜单选项都有对应的命令? 采用何种命令形式?有3种选择:控制序列(例如Ctrl+P), 功能键和键入命令。 学习和记忆命令的难度有多大?忘记了命令怎么办? 用户是否可以定制或缩写命令? 在理想的情况下,所有应用软件都有一致的命令使用 方法。

软件工程课件第六章

软件工程课件第六章

根据上面的讨论,需要命名的数据有:
20.09.2020
结构化程序设计的核心内容
2、三种基本结构的共同点是单入口、单出口。
单入口单出口的控制理 解,也容易保证程序的正确性。
20前.0一9.页2020
国家软件开发工程规范的规定
国家软件开发工程规范规定“程序单元必须只有唯一的 入口,唯一的出口”有两个不同的概念:
1972年,IBM公司的Mills进一步提出,程 序应该只有一个入口和一个出口。
20.09.2020
结构化程序设计
结构程序设计是按照一组能提高程序 的可读性和易维护性的规则而进行的程序 设计方法,目的是为了使程序具有一种合 理的结构,以使程序易理解和维护,便于 保证和验证程序的正确性。
20.09.2020
扩展的结构程序设计:还允许使用DO_CASE型多分支结 构和DO_UNTIL型循环结构。
修正的结构程序设计:再允许使用BREAK(LEAVE)结构。
20.09.2020
逐步求精算法实例
空气污染物含量数据的统计处理程序
假定某工厂烟囱附近,在24小时中每分钟测量1次空气中
污染物含量。得到的数据以每100单位中所含污染物成分的值
3、自顶向下的程序验证。
20.09.2020
结构化程序设计的核心内容
二、使用三种基本控制结构来构造程序 1、任何程序都由顺序、选择和重复三种基本控制结构构造。
顺序实现了任何算法规约中的核心处理步骤; 条件允许根据逻辑情况选择处理方式; 重复提供了循环。 这些逻辑元素是结构化程序设计的基础。 根据逐步求精的思想,可用三种方式对模块过程进行分解: ①用顺序方式对过程分解,确定各部分的执行顺序; ②用选择方式对过程分解,确定各部分的执行条件; ③用循环方式对过程分解,确定某个部分进行重复的开始和 结束的条件。 对处理过程仍然模糊的部分反复使用以上分解,直到所有细 节确定下来。

软件工程课件第6章

软件工程课件第6章

第6章 编码
二、存储器效率
采用结构化程序设计,将程序功能合理 分块,使每个模块或一组密切相关模块的程 序体积大小与每页的容量相匹配,可减少页 面调度、减少内外存交换,提高存储器效率。
在微型计算机系统中,存储器的容量对 软件设计和编码的制约比较大。因此要选择 可生成较短目标代码且存储压缩性能优良的 编译程序,有时需要采用汇编语言编程。
第6章 编码
三、程序设计语言的选择
程序设计语言的选择常从以下几个方面考虑:
(1)项目的应用领域 (2)算法与计算的复杂性 (3)数据结构的复杂性 (4)效率 (5)可移植性 (6)程序设计人员的水平 (7)构造系统的模式
第6章 编码
6.2 编码风格
编码风格实际上是一种编码原则。从 20世纪70年代以来,编码的目标从强调效 率转变到强调清晰。与此相应,编码风格 也从追求“聪明”和“技巧”,变为提倡 “简明”和“直接”。人们逐渐认识到, 良好的编码风格能在一定程度上弥补程序 设计语言存在的缺点。反之,如果不注意 编码风格,即使使用了结构化的现代语言, 也很难写出高质量的程序。
(2)好的设计可以提高效率。
(3)代码效率与代码的简单性相关。
第6章 编码
一、代码效率
(1)应先简化算术和逻辑的表达式。 (2)仔细研究嵌套的循环,以确定是否有语 句可以从内层往外移。 (3)尽量避免使用多维数组。 (4)尽量避免使用指针和复杂的列表。 (5)使用执行时间短的算术运算。 (6)即使语言允许,一般也不要采用混合数 据类型。 (7)尽量使用整数表达式和布尔表达式。
第6章 编码
一、代码文档化:指织形式。
二、数据说明:程序或模块在其可执行部分的前面 都集中了一些说明语句 ,出于阅读理解和维护的 要求,最好使其规范化,使说明的先后次序固定 。

软件工程考核知识点-第6章-软件编码

软件工程考核知识点-第6章-软件编码

软件工程考核知识点-第6章-软件编码6.1 程序设计语言的特性及选择程序设计语言是人机通信的工具之一,使用这类语言“指挥”计算机干什么,是人类特定的活动。

我们从以下三个方面介绍语言的特性。

6.1.1 程序设计语言特性1. 心理特性(1)歧义性。

(2)简洁性。

(3)局部性和顺序性。

(4)传统性。

2. 工程特性(1)可移植性。

(2)开发工具的可利用性。

(3)软件的可重用性。

(4)可维护性。

3. 技术特性支持结构化构造的语言有利于减少程序环路的复杂性,使程序易测试、易维护。

6.1.2 程序设计语言的选择1. 项目的应用领域(1)科学工程计算。

需要大量的标准库函数,以便处理复杂的数值计算,可供选用的语言有:FORTRAN语言、C语言等。

(2)数据处理与数据库应用SQL为IBM公司开发的数据库查询语言4GL称为第4代语言(3)实时处理实时处理软件一般对性能的要求很高,可选用的语言有:汇编语言、Ada语言等。

(4)系统软件。

如果编写操作系统、编译系统等系统软件时,可选用汇编语言、C语言、Pascal语言和Ada语言。

(5)人工智能。

如果要完成知识库系统、专家系统、决策支持系统、推理工程、语言识别、模式识别等人工智能领域内的系统,应选择Prolog、Lisp语言。

2. 软件开发的方法(详见第9章)有时编程语言的选择依赖于开发的方法,如果要用快速原型模型来开发,要求能快速实现原型,因此宜采用4GL。

如果是面向对象方法,宜采用面向对象的语言编程。

3. 软件执行的环境良好的编程环境不但有效提高软件生产率,同时能减少错误,有效提高软件质量。

4. 算法和数据结构的复杂性科学计算、实时处理和人工智能领域中的问题算法较复杂,而数据处理、数据库应用、系统软件领域内的问题,数据结构比较复杂,因此选择语言时可考虑是否有完成复杂复杂算法的能力,或者有构造复杂数据结构的能力。

5. 软件开发人员的知识编写语言的选择与软件开发人员的知识水平及心理因素有关,开发人员应仔细地分析软件项目的类型,敢于学习新知识,掌握新技术。

软件工程第6章面向数据流的设计方法

软件工程第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章软件维护
例如,开发每一行源代码耗资25美 元,维护每一行源代码需要耗资 1000美元。
维护工作量包括生产性活动(如分 析和评价、设计修改和实现)和 “轮转”活动(如力图理解代码在 做什么、试图判明数据结构、接口 特性、性能界限等)。
21
维护工作量的模型
MpKced
M是维护中消耗的总工作量 p是上面描述的生产性工作量 K是一个经验常数 c是因缺乏好的设计和文档而导致
复杂性的度量 d是对软件熟悉程度的度量。
22
模型指明,如果使用了不好的软件 开发方法(未按软件工程要求做), 原来参加开发的人员或小组不能参 加维护,则工作量(及成本)将按 指数级增加。
23
6.2 软件维护实施活动
为了有效地进行软件维护,应事先 就开始做组织工作。 首先建立维护的机构 申明提出维护申请报告的过程及 评价的过程 为每一个维护申请规定标准的处 理步骤 建立维护活动的登记制度以及规 定评价和评审的标准。
3
一、软件维护的定义
在软件运行/维护阶段对软件产品进行的修改就是 所谓的维护。
软件维护是软件生存周期的最后一个阶段,不属于系统开发的过程。
问题


维护 满足用户对已开发产品的性能与运行环境不断提高的要求,进而
目的 达到延长软件寿命的目的。
改正性 对程序使用期间发现的程序错误进行诊断和改正的过程;
改正性 17—21% 适应性 18—25%
完善性 50—66% 预防性 4%左右
软件的易维护性是软件开发过程中每个步骤的一个关键目标。维护费用占软件总支
出的20-30%到70-80%。而无形的代价更是无法估计的。
4
改正性维护
在软件交付使用后,因开发时测试 的不彻底、不完全,必然会有部分 隐藏的错误遗留到运行阶段。

自学考试软件工程第6章例题分析与解答

自学考试软件工程第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。

软件工程第六章

软件工程第六章

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、面向对象分析的基本任务 与分析过程

软件工程 第6章

软件工程 第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型循环结构
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
什么是失败的测试? 没有找到至今尚未发现的错误。
(3)什么是好的软件测试?
用最少的代价能够找到至今尚未发现的更多的错误。 测试工作反映了经济学的观点。
(4)穷举测试能够把所有的错误找完吗?
例1 对于程序内部路径的测
A ≤20

如图中所示从A到B的中间有一
个20次的循环,循环中有5条路 径,那么从A到B的独立路径数 约为1014(即520+519+…+51)
② 代码评审(人工方式),包括代码会审、走查、办公桌 检查等。
(2)动态测试(简称测试):将被测程序在机器上运 行来发现程序中的错误。动态测试包括2类方式:
① 黑盒测试(测试程序的功能) ② 白盒测试(测试程序的结构)
3)测试的文档
(1)测试计划 主体是测试内容说明。包括:测试项目名称,各项
输入条件 地区码 前缀 后缀 合理的等价类
空白(1) 3位数字(2) 从200到999的3位数字(3) 4位数字(4)
测试用例的设计:
测试范围
等价类(1) (3) (4) 等价类(2) (3) (4) 等价类(5)
期望结果
有效 有效 无效
无效等价类(6)-(15) 无效
不合理的等价类
有非数字字符(5) 少于3位数字(6) 多于3位数字(7) 有非数字字符(8) 少于3位数字(9) 多于3位数字(10) 起始位为‘0’(11) 起始位为 ‘1’ (12) 有非数字字符(13) 少于3位数字(14) 多于3位数字(15)
(5)因果图法
等价类划分和边界值分析方法,都是着重考虑输入条件,
而未考虑输入条件之间的联系。如果在测试时必须考虑 输入条件的各种组合则可能又会产生一些新的情况。
因此,必须考虑使用一种适合于多种条件组合的动态测
试方法,这就是因果图法——把输入条件视为“因”, 把输出条件视为“果”,采用逻辑图的形式来表达功能 说明书中输入条件的各种组合与输出的关系。
因果图方法最终生成的是判定表,它适合于检查程序输
人条件的各种组合情况。

因果图方法实例
某电力公司有A、B、C、D四类收费标准, 并规定: 居民用电 <100度/月 按A类收费 ≥100度/月按B类收费 动力用电 <10000度/月,非高峰,B类收费 ≥10000度/月,非高峰,C类收费 <10000度/月, 高峰,C类收费 ≥10000度/月, 高峰,D类收费
2)软件测试方法
(1)静态分析:通过对被测程序的静态检查,发现代 码中潜在的错误。静态分析包括2种方式:
① 静态分析器分析(自动方式);如PMD 扫描java源代码, 查找潜在的问题:

可能的bugs,如空的try/catch/finally/switch声明 死亡的代码,没有使用的本地变量,参数和私有方法 过于复杂的表达式,如不必要的if表达式 重复的代码,拷贝、粘贴的代码
②其次,选取测试数据。
应当选取正好等于、刚刚大于或刚刚小于边界的值作
为测试数据,而不是选取等价类中的典型值或任意值 作为测试数据。
例 边界值分析
模块bubblesort(a,n)是对数组a中的n个整型数从小 到大进行排序。 假设n为10。那么可以用5组数据进行测试: 0个数据 1个数据 9个数据 10个数据 11个数据
测试的目的、步骤、进度,测试用例的设计等。 (2)测试报告 主体是测试结果。包括:测试项目名称,实测结果 与期望结果的比较,发现的问题,测试达到的效果 等。 (3)测试用例
6.3 黑盒测试方法
(1)黑盒测试的基本概念 不考虑程序的内部结构和处理过程,只在程序
的接口处进行测试,以检查程序功能是否能按 规格说明书中的要求正常实现。 黑盒测试又称为功能测试,其主要目的是为了 发现程序在功能方面的错误。
测试为什么重要
发射失败的原因 程序中试图将64位浮点数转换成16位整数时的 溢出错误 如果看其浮点转换程序,并没有任何问题。问 题在于他们复用了Ariane 4的部分软件需求文档 因而软件工程师不知道其Ariane 5的水平加速度 比Ariane 4快5倍因此要求额外3位整数存储,所 以其背后的真正原因是系统需求。
因此,通过测试不可能证明软件不存在错误。 测试只能证明错误存在,而不能证明错误不存在(不彻底性)。
(6)测试的基本工作有哪些?
制定测试计划 建立测试环境
设计测试用例
执行测试 结果分析 完成测试报告
(7)什么是测试用例? 测试用例(Test Case)=测试数据+期望的结果 测试用例的重要作用:测试用例是连接测试计 划与实施测试的桥梁。 设计测试用例是搞好软件测试的关键。
测试数据自动生成程序 静态分析程序 动态分析程序 测试结果分析程序
驱动测试的测试数据库等等。
分析测试结果
测试完成后,要对所有的测试结果进行分析,如果发现
软件有错误,就要排错并修正有关文档,接着再测试, 直到通过为止。 如果经常出现需要修改设计的严重错误,则软件质量与 可靠性值得怀疑,需进一步测试。 如果测试未发现错误,则应重新审查测试配臵。
测试为什么重要

爱国者导弹
第一次海湾战争期间,美国爱国者导பைடு நூலகம்
弹系统拦截伊拉克飞毛腿导弹失败。 导弹摧毁了一个美军兵营,造成28名 士兵死亡,100人受伤。 起因 导弹拦截软件的取整错误导致计时不正确, 令爱国者忽略了飞毛腿导弹
(2)什么是成功的测试?什么是失败的测试?
什么是成功的测试? 能够找到至今尚未发现的错误。
例 如下是一个程序的功能描述,用等价类划分法设计测试用例。
功能描述:某城市的电话号
码由3部分组成。假定被测程 序能接收一切符合下述规定 测试用例 的电话号码,拒绝所有不符 276 2345 合规定的电话号码。 地区码:空白或3位数字; 027 805 9321 20A 123 4356 前缀:非‘0’或‘1’开头 的3位数字; 剩下的10个用例 后缀:4位数字。
等价类划分法的步骤
①划分等价类 合理的(有效的)、不合理的(无效的)2类
②找出测试用例 给每个等价类规定一个惟一的编号; 设计一个新的测试用例,使其尽可能多地覆盖未被覆 盖的有效等价类,直到所有合理等价类被覆盖完为止; 设计一个测试用例,使其仅仅覆盖一个未被覆盖的无 效等价类,直到所有不合理等价类被覆盖完为止。
(10)纠错由谁来完成?
程序员
(11)测试的信息流之间有何关系?
(测试数据)
测试过程的输入 测试过程中需要3类输入(见上图): 软件配臵
包括软件需求规格说明、软件设计规格说明、源代码等。
测试配臵 包括测试计划、测试用例、测试驱动程序等。 测试工具 为测试的实施提供某种服务,以减轻完成测试任务中的手工劳动。 测试工具

黑盒法分类
等 价 类 化 分 法
边 界 值 分 析 法
错 误 猜 测 法
因 果 图 法
(2)等价类划分法
基本思想:根据程序的I/O特性,将程序的输入域划分为
有限个等价区段 —“等价类”,并从等价类中选出最有 “代表性”的用例。 等价类:是指某个输入域的子集合。在该子集合中,各 个输入数据对于揭露程序中的错误都是等效的。
6.2 测试的原则、类型和文档
1)测试原则
(1)所有的测试都应追溯到用户需求。 软件测试的目标在于揭示错误。而最严重的错误是那
些导致程序无法满足需求的错误。 (2)充分注意测试中的群集现象。 在被测程序段中,若发现错误数目多,则残存错误数 目也比较多。因此,应当对错误群集的程序段进行重 点测试,以提高测试投资的效益。
(3)测试应从“小规模”开始,逐步转向”大规
模”。 (4)测试应该由非程序员或非开发机构来进行。 (5)对于非法的和非预期的输入情况也要象正常 测试一样,编写测试用例。 检查程序是否做了要做的事仅仅是成功的一半, 另一半是看程序是否做了不该做的事。 (6)妥善保存测试计划、测试用例、出错统计和 最终分析报告。 回归测试
测试某等价类的代表值就等价于对这一类其它值的测试。 如果一个测试用例不能检测出某个错误,那么等价类中其它测试
用例也不能发现这一错误。
等价类分为:
有效等价类 — 对于程序的规格说明是合理的、有意义的输入数据 构成的集合。 无效等价类 —对于程序的规格说明,是不合理的,是没有意义的 输入数据构成的集合。
例2 对于程序功能的测试 一个程序需要3个整型数的输入。 假设计算机字长是16位,则每 个整数可能取值有216个,那么3 个输入整数的各种可能值的情 况 约 为 216 ×216 ×216 = 248 ≈3 × 1014
B
(5)通过测试能够证明软件无错吗?
穷举测试是不可取的。
通过测试不可能把所有的软件错误找完。
(1)什么是软件测试?其目的是什么?
测试的定义
软件(程序)测试是为了发现错误而执行程
序的过程。
测试的目的
发现程序的错误。
测试为什么重要

ARIANE火箭
耗资70亿美元,1996年发射37秒
后爆炸

begin sensor_get(vertical_veloc_sensor); sensor_get(horizontal_veloc_sensor); vertical_veloc_bias := integer(vertical_veloc_sensor); horizontal_veloc_bias := integer(horizontal_veloc_sensor); ... exception when numeric_error => calculate_vertical_veloc(); when others => use_irs1(); end;
相关文档
最新文档