软件工程6章

合集下载

软件工程讲义第六章

软件工程讲义第六章
hour:=hour+1;
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,即连续 出现超正常值中断。

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

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

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

《软件工程实用教程》第6_章_面向对象的软件设计

《软件工程实用教程》第6_章_面向对象的软件设计

第6 章 面向對象的軟體設計
例:
第6 章 面向對象的軟體設計
2.部署圖 部署圖描述了處理器、設備和軟體構件運行時 的體系結構。 ( 1 )結點:是某種計算資源的物理對象,包括電 腦、設備(如印表機、通信設備)等 (2) 連接:連接用一條直線表示,它指出結點之間 存在著某種通信路徑,並指出通過哪條通信路 徑可使這些結點間交換對象或發送消息
第6 章 面向對象的軟體設計
2.詳細設計 (1)細化、補充類的屬性和操作 (2)設計類操作的實現演算法 (3)優化數據訪問路徑 (4)實現外部互動式的控制 (5)調整類結構,增加繼承性 (6)設計類之間的關聯的實現方式 (7)確定對象屬性的精確表示 (8)把類和關聯打包歸納到模組中
第6 章 面向對象的軟體設計
第6 章 面向對象的軟體設計
3)依賴倒置原則:指的是依賴關係應該是儘量依賴介面 (或抽象類),而不是依賴於具體類。在面向對象 的設計中,高層的類往往與領域的業務有關,這些 類只依賴於一些抽象的類或介面,當具體的實現細 節改變時,不會對高層的類產生影響。 4)介面分離原則:指的是在設計時採用多個與特定客戶 類有關的介面比採用一個通用的介面要好。即一個 類要給多個客戶類使用,那麼可以為每個客戶類創 建一個介面,然後這個類實現所有這些介面,而不 要只創建一個介面,其中包含了所有客戶類需要的 方法,然後這個類實現這個介面。
第6 章 面向對象的軟體設計
2.設計基於類的構件 (1)基本設計原則 2)Liskov替換原則:指的是子類可以替 換父類出現在父類能出現的任何地方。 例如,類ClassA要使用ClassB,ClassC 是ClassB的子類。如果在運行時,用 ClassC代替ClassB,則ClassA仍然可以 使用原來ClassB中提供的方法,而不需 要做任何改動。

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

现代软件工程第6章 构件级设计

现代软件工程第6章  构件级设计
如果内部处理逡辑采用一系列ifthenelse结构来实现其中每个返样的结构都负责一个丌同的传感器类型那么对于新增加的传感器类型就需要增加额外的内部处理逡辑依然是另外的ifthenelse结构返显然违背ocp原则
目录
1 什么是构件 2 设计基于类的构件 3 实施构件级设计 4 WebApp的构件级设计 5 设计传统构件 6 基于构件的开发
分析类
PrintJob
numberOfPages numberOfSides paperType magnification productionFeatures
computePageCost() passJobtoPrinter()
computeJob initiateJob
设计构件 PrintJob
6.1.2 传统观点
为了说明这个过程,考虑ComputePageCost模块。该模块的目的在于根据用 户提供的规格说明来计算每页的印刷成本。为了实现该功能,需要以下数据: 文档的页数、文档的印刷份数、单面或者双面印刷、颜色、纸张大小。这些 数据通过该模块的接口传递给ComputePageCost。ComputePageCost根据任 务量和复杂度,使用这些数据来决定一页的成本——这是一个通过接口将所 有数据传递给模块的功能。每页的成本与任务量成反比,与任务的复杂度成 正比。
6.1.2 传统观点
getJobData
细化后的模块
accessCostsDB
PageCost
in: numberPages in: numberDocs in: sides=1, 2 in: color=1, 2, 3, 4 in: page size = A, B, C, D out: pagecost in: job size in: color=1, 2, 3, 4 in: pageSize = A, B, C, D out: BPC out: SF

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

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

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

软件工程(第五版)-习题及答案---第六章

软件工程(第五版)-习题及答案---第六章

软件工程(第五版)-习题及答案---第六章-标准化文件发布号:(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章

软件工程与实践第6章
第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章-软件编码

软件工程考核知识点-第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的元素支持自顶向下、逐步求精方法 的使用。

软件工程实用教程(2版)-6章-习题与参考答案-2012-5-28

软件工程实用教程(2版)-6章-习题与参考答案-2012-5-28
在进行分层设计时应注意以下几点。
层与层之间的耦合应尽可能地松散,这样只要保证接口一致,某一层的具体实现就很容易被扩展和替换;
级别相同,职责类似的元素应该被组织到同一层中;
复杂的模块应被继续分解为粒度更细的层或子系统;
应尽量将可能发生变化的元素封装到一个层次中,这样发生变化时我们只要改变受影响的层就可以了;
4.举例说明各种程序设计语言的特点及适用范围。
答案要ห้องสมุดไป่ตู้:
JAVA:面向对象,多线程,可重用性强,继承,多态,有庞大的Applet和GUI库,网络应用广泛等
C:是一个结构化语言,它的重点在于算法和数据结构。C程序的设计首要考虑的是如何通过一个过程,对输入(或环境条件)进行运算处理得到输出(或实现过程(事务)控制),而对于C++,首要考虑的是如何构造一个对象模型,让这个模型能够契合与之对应的问题域,这样就可以通过获取对象的状态信息得到输出或实现过程(事务)控制。所以C与C++的最大区别在于它们的用于解决问题的思想方法不一样。
《软件工程实用教程》

1.简述分层模式的特点及设计时的注意事项。
答案要点:
表示层:图形用户界面、窗口等。
应用逻辑层:管理业务过程的任务和规则。
对象存储层:持久化存储机制,例如,文件系统、数据库等。
这种体系结构的主要特征是将应用逻辑从软件中分离出来,形成了一个单独的逻辑中间层。把应用逻辑和存储逻辑分开是非常重要的,这样不管哪一部分的改变都不会影响其他的部分。
(2)基于使用的测试。这种策略首先测试几乎不使用服务器类的那些类(称为独立类),把独立类都测试完之后,再测试使用独立类的下一个层次的类(称为依赖类)。对依赖类的测试一个层次一个层次地持续进行下去,直至把软件系统构造完为止。

软件工程课本讲解第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章 详细设计2

软件工程导论第6章 详细设计2
双向通信。
2、信息显示界面设计
1)、可使用性 ① 使用简单
② 用户界面中所用术语的标准化和一致性 ③ 具有HELP功能 ④ 快速的系统响应和低的系统成本 2)、灵活性
① 提供不同的系统响应信息(多媒体)。 ② 提供根据用户需求制定和修改界面。 3)、界面的复杂性与可靠性 复杂性—界面规模及组织应该愈简单愈好。只显示与当前工作 内容相关的信息。使用窗口分隔不同类型的信息。 可靠性—用户界面应该能够保证用户正确、可靠地使用系统, 及程序、数据的安全。产生有意义的出错信息。
顺序 结构
选择 结构
Case 型多 分支 结构
While 型循环 Until 型 循环
定义
PAD图基本符号
31
使用PAD图提供的定义功能逐步求精的例子
32
例:用PAD图表示:打印50名学生中成绩在 80分以上者的学号和成绩。
开始 i=1 Until i>50 结束
gi>=80
输出ni和gi
i=i+1
使用一种语言(通常是自 然语言)的词汇,同时却 使用另一种语言(某种结 构化语言)的语法。
45
PDL的特点
PDL用正文形式表示数据和处理过程的设计工具,其外层语法是确 定的,而内层语法则不确定。
(1)PDL具有严格的关键字外部语法,用于定义控制结构和数据 结构。外层语法描述控制结构它用类似于一般程序设计语言控制结 构的关键字:
一个菱形判断框有两个出口, 而一个选择结构只有一个出口 。不要将菱形框的出口和选择 结构的出口混淆。)
选择结构二
7
循环结构的图示:
F
F
T
T
当型(While型)循环结构 直到型(Until型)循环
相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
3.集成测试有两种集成方式:非增量集成方式;增量集成方式。
6.4.1非增量集成方式
非增量集成方式是将经过单元测试的所有模块一次性全部组装起来,然后进行整体测试,最后得到所要求的软件系统。
这种集成方式容易出现混乱,开始可能遇到一大堆错误,错误定位非常困难,新旧错误交织在一起,会使测试变得更加困难。因此,一般不应采用这种集成方式。
2.自底向上集成优缺点
优点:
①只需设计驱动模块,不需要设计桩模块,测试用例的设计也相对简单。
②由于涉及到复杂算法和直接输入输出的模块最先得到组装和测试,可以在早期解决这些最容易出问题的部分;
③自底向上集成可以实施多个模块并行测试。
缺点:
对高层控制与判断进行测试的时间较晚,如果到测试的后期才发现整体存在较严重问题,就不得不进行较大的返工,此时代价将是巨大的。
④出现上溢出、下溢出、地址异常等。
3)模块中所有独立路径的测试
单元测试旨在找出如下错误:
①计算中常见的错误,有:运算符优先级错误、混合运算类型匹配错误、变量初值错、达不到精度、表达式不正确等。
②不正确的比较判断和不恰当的控制流常见的错误,有:被比较的对象的类型不匹配、错误地使用逻辑运算符及其优先级、计算误差引起的判断错误、循环终止条件不合适、错误地修改了循环变量、迭代发散时不能退出循环等。
④保证每一循环都在边界条件和一般条件至少各执行一次;
⑤验证所有内部数据结构的有效性。
几种典型的白盒测试技术
1.逻辑覆盖
逻辑覆盖是指设计测试用例对程序的内部分支逻辑结构进行部分或全部覆盖的技术。包括如下内容:
1)语句覆盖
2)判定覆盖
3)条件覆盖
4)判定/条件覆盖
5)条件组合覆盖
6)路径覆盖
6.6.2控制结构测试
自顶向下集成的优缺点
(1)自顶向下集成的特点是不需要驱动模块,但需要大量的桩模块。
(2)优点是能够尽早地验证程序的主要控制和判断机制,可以较早发现此类错误,从而减少以后的返工。
(3)缺点是在测试较高层模块时,低层模块采用较简单的桩模块来代替,不能反映实际情况,测试可能不充分。
2.自底向上集成
即从程序结构的最底层模块开始组装和测试。这种测试需要一定数量的驱动模块,而不需要桩模块。
教学内容
备注
第六章实现
6.1编码
6.1.1选择程序设计语言
程序的可靠性、可维护性和效率通常由程序设计语言、源代码的质量、和语言的实现机制决定的。
1.程序设计语言选择的理想标准
为了使程序容易测试和维护以减少软件的总成本,所选用的高级语言应该有理想的模块化机制,以及可读性好的控制结构和数据结构;为了便于调试和提高软件可靠性,语言特点应该使编译程序能够尽可能多地发现程序中的错误;为了降低软件开发和维护的成本,选用的高级语言应有良好的独立编译机制。
1)模块接口测试
①输入的实参与本模块的形参在个数、类型、顺序、量纲上是否一致;
②调用其他模块时所给实际参数与被调模块的形式参数在个数、类型、顺序、量纲上是否一致;
2)模块局部数据结构的测试
主要的测试内容有:
①不适合或不相容的类型说明;
②变量名不正确(拼写或截断错误等);
③变量无初值或初始化、缺省值有错;
6.4集成测试
1.集成测试—将软件组装成系统的一种测试技术。因此,又称为组装测试或综合测试。
2.集成测试旨在发现与接口有关的错误。这些错误包括:
①数据通过接口时会丢失;
②一个模块的功能对另一个模块产生了不利影响;
③几个子功能组合起来没有实现主功能;
④全局数据结构出现错误;
⑤误差的不断积累达到不能接受的程度。
6.4.2增量集成方式
可分为自顶向下集成和自底向上集成两种方法。
1.自顶向下集成
自顶向下集成方式是从主控模块开始,按照软件的控制层次结构,以深度优先或广度优先的策略,逐步把各个模块组装在一起。
深度优先策略
广度优先策略
广度优先策略——沿控制层次结构水平地向下移动,按一层一层的顺序将模块一个个地集成起来。如图的集成的顺序为M1、M2、M3、M4、M5、M6、M7、M8,在集成的过程中也需桩模块的配合。
1.验收测试的实施
验收测试需要采用一系列的黑盒测试来完成。
参加人员有:专门的测试人员,必须有用户或客户参加。
文档:需求规格说明书、用户手册等,应事先制定测试计划,确定测试的种类、测试进度、设计具体的测试用例。
2.软件配置复审
软件配置复审是验收测试的重要环节之一。软件配置复审的任务是审查软件配置(组成程序、所有文档资料、数据结构的所有项目)的正确性、完整性和一致性,以便确保软件配置齐全、分类有序,并包括软件维护所必需的细节,从而为以后的软件维护工作奠定了基础。
系统测试需要有硬件工程师、软件工程师、数据库工程师、专业领域的专家等各类技术人员参加,协同完成调试和测试任务。
6.6设计测试方案
6.6.1白盒测试
白盒测试的原则是:
①保证程序中每一独立的路径至少执行一次;
②保证所有判定的每一个分支至少执行一次;
③保证每个判定表达式中每个条件的所有可能结果至少出现一次;
2.测试结果评价
(1)经常发现严重的错误并需要修改软件,则软件的质量和可靠性一定不高,需要进一步测试;
(2)如果测试所发现的错误不多且易于改正,软件功能看起来也较完善,则需考虑两种可能:一方面软件质量和可靠性确实令人满意;另一方Biblioteka 测试不全面,很可能还潜伏着严重错误;
(3)如果测试过程没有发现任何错误,则很有可能是测试配置不合理。
计算机辅助静态分析是指利用静态分析软件工具对程序进行静态分析,主要检测变量是否用错、参数是否匹配、循环嵌套是否有错、是否有死循环和永远执行不到的死代码等等。同时,它还可对程序的特性进行分析。
2.动态测试
动态测试是指事先设计好一组测试用例,然后通过运行程序来发现错误。
动态测试有两种测试方法:黑盒测试和白盒测试。
1.基本路径测试
其主要思想是根据软件详细设计的过程性描述或源代码中的控制流程求出程序的环形复杂性度量,然后用此度量确定程序的基本路径集合,并由此导出一组测试用例来覆盖该集合中的每一个独立的路径,从而可以保证每个语句至少执行一次。
2.条件测试
用条件测试技术设计出的测试用例,能够检查程序模块中包含的逻辑条件.一个简单条件是一个布尔变量或一个关系表达式。关系表达式形式如下:
4)模块中各条错误处理路径的测试
5)模块边界条件的测试
模块边界条件的测试是单元测试中最后、也是最重要的一项测试任务,因为程序最容易在边界上出错。可以采用边界值分析技术针对边界值及其左、右值设计测试用例,很有可能检测出新的错误。
6.3.2单元测试的步骤
通常,单元测试在编码阶段进行。在源程序代码编制完成并经过编译检查和评审后,就可以开始进行单元测试。测试用例的设计应与评审工作相结合,根据测试计划和详细设计信息设计测试数据,并应给出对应的期望结果。
(2)用户能有一段熟悉新系统的时间
(3)可以验证用户指南和使用手册之类的文档。
(4)能够以准生产模式对新系统进行全负荷测试,可以用测试结果验证性能指标。
6.2.4测试阶段的信息流
1.测试的输入流有软件配置和测试配置。
(1)软件配置由需求规格说明、设计说明、源代码等组成;
(2)测试配置包括测试计划、测试用例(其中包括预期的结果)、测试工具等组成。
2.实用选择标准
6.1.2编程风格
不同的程序员可能具有不同的编程风格,有时候很难说哪种风格好,哪种风格不好,比如在分支语句之后的语句块,一些程序员可能习惯这样:
if(a>b){
.......
}
而另外的程序员喜欢这样:
if(a>b)
{
......
}
一般的软件组织允许程序员在不影响代码的可读性、可修改性、可测试性、可维护性的基础上使用自己的风格编写程序。但是有些规则则是所有程序员必须遵守的。
E1<关系算符>E2
其中E1和E2是算术表达式,而<关系算符>是下列算符之一:<,<=,=,!=,>,或>=。复合条件由两个或多个简单条件、布尔算符和括弧组成。布尔算符有OR,AND,NOT。不包含关系表达式的条件称为布尔表达式。
6.2.3软件测试的步骤
根据软件测试的第四条准则,测试过程也必须分步进行,后一步在逻辑上是前一步的继续。
1.模块测试
把每个模块作为一个单独的实体来测试,而且通常比较容易设计检验模块的正确性。
2.子系统测试
把经过单元测试的模块放在一起形成一个子系统来测试。模块相互之间的协调和通信是这个测试过程的主要问题,因此这个测试也称为接口测试。
3.α、β测试
要验证所开发的软件是否真正满足最终用户的要求,就应由用户在其实际工作的环境中进行一系列的“验收测试”。
但一方面用户进行“验收测试”可能导致开发延期,另一方面是一个软件产品不可能由每个用户验收。因此,通常的做法是采用“α、β测试”的方法。
6.5.2系统测试
软件开发完毕,就应和系统硬件、数据库等其他系统要素集成为一个完整的系统。在集成的过程中,要进行一系列的系统调试和测试,以便验证各个系统要素能否在软件的控制下有条不紊地工作,实现系统规格说明中所规定的系统功能、性能等系统需求。
6.2.1软件测试的目标与原则
测试用例——为了进行有效的测试而设计的输入数据和预期的输出结果数据。
1.Myers在其软件测试著作中对软件测试的目标提出以下观点:
2.测试原则
6.2.2软件测试的常用方法
1.静态测试
静态测试是采用人工检测和计算机辅助静态分析的方法对程序进行检测。
人工检测是指靠人工走查程序或评审软件。这种走查与评审主要针对编码的质量和软件开发各个阶段的文档,特别是总体设计和详细设计阶段的错误。能发现30%~70%的逻辑设计和编码错误。
相关文档
最新文档