软件工程第七章
软件工程第7章ppt资料
复杂问题(大型系统)的对象模型由下 述五个层次组成:主题层(也称为范畴层)、 类与对象层、结构层、属性层和服务层, 如图7.1
Page 7
河南理工大学
2020/10/12
Page 8
图7.1 复杂问题的对象模型
河南理工大学
2020/10/12
我们在概念上可以认为,面向对象分析大 体上按照下列顺序进行:
Page 12
河南理工大学
2020/10/12
7.2 需求陈述
7.2.1
通常,需求陈述的内容包括:问题范 围,功能需求,性能需求,应用环境及假 设条件等。总之,需求陈述应该阐明“做 什么”而不是“怎样做”。
Page 13
河南理工大学
2020/10/12
它应该描述用户的需求而不是提出解 决问题的方法。应该指出哪些是系统必要 的性质,哪些是任选的性质。应该避免对 设计策略施加过多的约束,也不要描述系 统的内部结构,因为这样做将限制实现的 灵活性。
寻找类—&—对象, 识别结构, 识别主题, 定义属性, 建立动态模型,建立功能模型, 定义服务。
但是,正如前面已经多次强调指出过 的,分析不可能严格地按照预定顺序进行, 大型、复杂系统的模型需要反复构造多遍 才能建成。通常,先构造出模型的子集, 然后再逐渐扩充,直到完全、充分地理解 了整个问题,才能最终把模型建立起来。
Page 5
河1.2 三个子模型与五个层次
面向对象建模得到的模型包含系统的三个要素:
即静态结构(对象模型),交互次序(动态模型)和数据 变换(功能模型)。解决的问题不同,这三个子模型的重 要程度也不同: 几乎解决任何一个问题,都需要从客观世界实体及实体 间相互关系抽象出极有价值的对象模型; 当问题涉及交互作用和时序时(例如,用户界面及过程 控制等),动态模型是重要的; 解决运算量很大的问题(例如,高级语言编译、科学与 工程计算等),则涉及重要的功能模型。动态模型和功 能模型中都包含了对象模型中的操作(即服务或方法)。
软件工程与开发技术(西电第二版)第7章 面向对象技术总论
第7章 面向对象技术总论
在程序设计语言中,类是一个完整的、独立的、可重用 的,具有低耦合、高内聚特性的程序模块。类相当于一种自 定义数据类型,它类似于C语言中的结构体类型(C++本身就 可以使用strut关键字来定义类),不仅包含数据结构也包含 操作结构。数据类型作为程序语言中进行变量内存分配、类 型匹配、操作检查的基础,为程序的一致性和安全性提供了 重要的保证。因此,类概念的引入从类型角度进一步提高了 程序的安全性。
第7章 面向对象技术总论
7.2.2 对象及对象实例 现实世界中的具体事物就是对象或者对象实例,类则是
对象实例的结构抽象。 每个对象实例一般具有三方面的特性(亦称对象“三要
素”): (1) 确定的标识,能够被唯一地确认。 (2) 具有一定的属性,表示其性质或状态。 (3) 具有一定的行为能力或者操作能力,可给外界提供
第7章 面向对象技术总论
例如,客户如果想从ATM机中取钱,通常会按下取钱 按键,这实际上就是向ATM机发送了取钱消息,也是向 ATM机发送了取钱请求,ATM机会显示一个取钱界面,让 用户输入取款数额,这是通过ATM机的一个方法或者操作 实现的。用户输入取款金额后按下确定键,相当于又向 ATM机发送新的消息,导致ATM机的另一个方法的调用, 通常在该方法中又会向其他对象发送消息,例如该客户的账 户Account对象,通过调用该账户对象的draw()操作实现账 户上资金的更新。用户通过和ATM机一系列的请求/响应的 交互活动完成了执行系统的某个功能,如取钱。客户对象、 ATM对象、Account对象之间的消息交互见图7.6。
第7章 面向对象技术总论
如上所述,新一代的程序设计语言技术并不是简单地否 定上一代语言,而是在上一代语言的基础上增加新的程序结 构元素(函数、类),从而实现更复杂的程序结构。这种新的 程序元素更直观、更真实、更自然、更完整地抽象了现实世 界中的数据和处理(或者事物与概念),更好地抽象了程序中 的变量和代码,也进一步增强了程序的易读性、安全性、稳 定性和重用性,同时改变了系统的分析和设计方法。归根结 底,程序设计语言的发展就是程序结构以及建立在其基础上 的分析、设计方法的发展。
软件工程第7章
过程内聚:构件或操作的组合方式是,允许在调 用前面的构件或操作之后,马上调用后面的构件 或操作,即使两者之间没有数据进行传递。如果 一个模块内处理元素是相关的,而且必须按固定 的次序执行,那么这种内聚就叫做过程内聚。过 程内聚的模块内往往体现为有次序的流程。 通信内聚:指模块内所有处理元素都在同一个数 据结构上的操作。或指各处理元素使用相同的输 入数据或者产生相同的输出数据。
4.模块独立性 模块独立性是指每个模块只完成系统要求的独立 的子功能,并且与其它模块的联系最少,且接口 简单。 “高内聚、低耦合”是两个定性的度量标准。 (1)耦合性 耦合是对不同模块之间相互依赖程度的度量。 紧密耦合是指两个模块之间存在着很强的依赖关 系。 松散耦合是指两个模块之间存在一些较弱的依赖 关系。无耦合是指模块之间根本没有任何连接与 依赖关系。 模块之间联系越紧密,其耦合性越强,其独立性 就越差。模块间的耦合性从低到高可分为以下七 种类型,如图7-3所示:
(1) 控制抽象 计算机语言具备控制抽象的能力。计算机只理解 一些低级的操作,例如将字节从一个位置移动到 另一个位置,对两个字节进行连接。从机器指令 到汇编语言,再到高级语言,使你能在更高的层 次上进行抽象,以便处理问题,并且可以屏蔽不 同机器和指令集间的差异。 面向过程的设计通过清晰的控制流程和部件间的 接口,来实现对复杂的软件进行分解,达到降低 软件复杂度的目的。面向对象的设计同时进行数 据抽象和控制抽象,从而实现使数据和控制融为 一体,构成一个完整的对象。
2.模块化 模块就是指在程序中的数据说明、可执行语句等 程序对象的集合,或者是单独命名和编址的元素。 如高级语言中的过程,函数、子程序等。每个模 块可以完成一个特定的子功能,各个模块可以按 一定方法组装起来成为一个整体。 所谓模块化,就是解决一个复杂问题时,自顶向 下、逐步求精地把软件系统划分成若干模块的过 程。 划分模块并不是越多越好,因为这会增加模块之 间接口的工作量。所以划分模块的层次和数量应 该避免过多或过少 。
软件工程导论(第7章)
测试的正确定义:“为了发现程序中的错 误而执行程序的过程。”
7.2.2 软件测试准则
1)所有测试都应该能追溯到用户需求;
2)应该远在测试前就制定出测试计划;
3)把Pareto原理应用到软件测试中;Pareto原理 说明测试发现的错误中的80%很可能是由程序 中20%的模块造成的。
4)应该从“小规模”测试开始,并逐步进行“大 规模”测试;
USER32.DLL; GDI32.DLL; KERNEL32.DLL。
Windows消息机制:
1)基于消息的事件驱动 消息可以是由硬件发来的(存于系统队列),
也可以由Windows系统和应用程序发来(存于 程序队列中);
每一个Windows程序在不停的捕捉各种消息, 并进行处理;
每个窗口都必须有一个窗口函数,来负责消息 的判断与处理。
3)重要的执行路径 由于不可能进行穷尽测试,因此选择测试
路径是非常关键的。 4)出错处理通路 5)边界条件
7.3.2 代码审查
审查小组: 1)组长; 2)程序的设计者; 3)程序的编写者; 4)程序的测试者。
7.3.3 计算机测试
由于软件模块不是一个独立的系统,不能独 立运行,要依靠其他模块调用,或需要调用其 他模块。
1.模块测试 模块测试又称单元测试,它把每个模块作为
单独的实体来测试。 2.子系统测试
子系统测试是把经过单元测试的模块放在一 起形成一个子系统来测试。
3.系统测试 系统测试是把经过测试的子系统装配成一个完
整的系统来测试。 4.验收测试
验收测试把软件系统作为单一的实体进行测试 (利用用户的实际数据测试)。 5.平行运行
如PL/1、PASCAL、C、ADA等 3)专用语言 如APL、BLISS、FORTH、LISP、PROLOG等
软件工程考核知识点-第7章-软件测试
软件工程考核知识点-第7章-软件测试7.1 软件测试的目的及原则7.1.1 软件测试的目的(1)软件测试是为了发现错误而执行程序的过程。
(2)一个好的测试用例能够发现至今尚未发现的错误。
(3)一个成功的测试是发现了至今尚未发现的错误的测试。
因此,测试阶段的基本任务应该是根据软件开发各阶段的文档资料和程序的内部结构,精心设计一组“高产”的测试用例,利用这些实例执行程序,找出软件中潜在的各种错误和缺陷。
7.1.2软件测试的原则在软件测试中,应注意以下原则:(1)测试用例应由输入数据和预期的输出数据两部分组成。
这样便于对照检查,做到"有的放矢"。
(2)测试用例不仅选用合理的输入数据,还要选择不合理的输入数据。
这样能更多地发现错误,提高程序地可靠性。
对于不合理地输入数据,程序应拒绝接受,并给出相应提示。
(3)除了检查程序是否做了它应该做的事,还应该检查程序是否做了它不应该做的事。
例如程序正确打印出用户所需信息的同时还打印出用户并不需要的多余的信息。
(4)应制定测试计划并严格执行,排除随意性。
(5)长期保留测试用例。
测试用例的设计耗费很大的工作量,必须作为文档保存。
因为修改后的程序可能有新的错误,需要进行回归测试。
同时,为以后的维护提供方便。
(6)对发现错误较多的程序段,应进行更深入的测试。
有统计数字表明,一段程序中所发现的错误数越多,其中存在的错误概率也越大。
因为发现错误数多的程序段,其质量较差。
同时在修改错误过程中又容易引入新的错误。
(7)程序员避免测试自己的程序。
测试是一种"挑剔性"的行为,心理状态是测试自己程序的障碍。
另外,对需求规格说明的理解而引入的错误则更难发现。
因此应由别的人或另外的机构来测试程序员编写的程序会更客观,更有效。
7.2 测试方法软件测试方法一般分为两大类:动态测试方法与静态测试方法,而动态测试方法中又根据测试用例的设计方法不同,分为黑盒测试与白盒测试两类。
软件工程 第七章测验 测验答案 慕课答案 UOOC优课 课后练习 深圳大学
第七章测验一、单选题(共40.00分)1. 面向对象的动态模型中,每张状态图表示()的动态行为。
A. 某一个类B. 有关联的若干类C. 一系列事件D. 一系列状态正确答案:A2. 以下哪项不是类间关系?()A. 关联B. 继承C. 实现D. 通信正确答案:D3. 在建立动态模型的过程中,脚本是指系统在某一执行期间内出现的一系列()。
A. 事件B. 消息C. 动作D. 对象正确答案:A4. 大多数分析模型都不是一次完成的,必须进行()。
A. 多次回溯B. 多次迭代C. 多次评审正确答案:B二、多选题(共33.00分)1. 组成复杂问题(大型系统)对象模型的5个层次包括()。
A. 结构层B. 说明层C. 服务层D. 主题层正确答案:A C D2. 需求陈述的内容包括()。
A. 问题范围B. 功能需求C. 性能需求D. 应用环境及假设条件正确答案:A B C D3. 以下哪些工具可用于描述面向对象动态模型?()A. UML类图B. UML状态图C. UML顺序图D. UML活动图正确答案:B C D三、判断题(共27.00分)1. 顺序图描述对象之间的交互关系,重点描述对象间消息传递的时间顺序。
()A. 正确B. 错误2. 面向对象方法是以类作为最基本的元素,类是分析问题和解决问题的核心。
()A. 正确B. 错误正确答案:B3. 关联既可以描述问题域的静态结构,又可以描述瞬时事件。
()A. 正确B. 错误正确答案:B。
软件工程_第七章_面向数据流的设计方法
第七章面向数据流的设计方法面向数据流的设计方法,即通常所说的结构设计法(简称SD方法),是根据需求阶段对数据流的分析(一般用数据流图和数据字典表示)设计软件结构。
数据流图主要描绘信息在系统内部加工和流动的情况,面向数据流的设计方法根据数据流图的特性定义两种“映射”,这两种映射能机械地将数据流图转换为程序结构。
该方法的目标是为软件结构设计提供一个系统化的途径,使设计人员对软件有一个整体的认识。
本章所述技术用于软件的概要设计描述,包括模块、界面和数据结构的定义,这是所有后续开发工作的基础。
每种软件设计方法都有长处和不足,先用哪种方法首先应考虑它适用的范围。
任何软件系统都可以用数据流图表示,理论上,面向数据流的设计方法可用于任一种软件系统的开发。
然而,该方法对那些顺序处理信息且不含层次数据结构的系统最为有效,例如过程控制、复杂的数值分析过程、以及科学与工程方面的应用,等等。
当SD方法用于完全的数据处理时,即使系统中作用层次数据也同样行之有效。
从系统设计的角度出发,软件设计方法可以分为三大类。
第一类是根据系统的数据流进行设计,称为面向数据流的设计或者过程驱动的设计,以结构化设计方法为代表。
第二类是根据系统的数据结构进行设计,称为面向数据结构的设计或者数据驱动的设计,以LCP(程序逻辑构造)方法、Jackson 系统开发方法和数据结构化系统开发(DSSD)方法为代表。
第三类设计方法即面向对象的设计。
第一节基本概念和设计过程面向数据流设计方法是基于模块化、自顶向下细化、结构化程序设计等程序设计技术基础上发展起来的。
该方法实施的要点是:①建立数据流的类型。
②指明流的边界。
③将数据流图映射到程序结构。
④用“因子化”方法定义控制的层次结构。
⑤用设计测量和一些启发式规则对结构进行细化。
一、在系统结构图(SC)中的模块在系统结构图中不能再分解的底层模块为原子模块。
如果一个软件系统的全部实际加工(数据计算或处理)都由底层的原子模块来完成,而其他所有非原子模块仅仅执行控制或协调功能,这样的系统就是完全因子分解的系统。
自学考试软件工程第7章自测题及参考答案
第7章自测题及参考答案一、名词解释1. 软件测试2.黑盒法3.白盒法4.渐增式测试5.非渐增式测试6.调试二、填空题1.软件测试是为了_____而执行程序的过程。
2.运行被测程序的方法称为_______测试。
3.动态测试中,主要测试软件功能的方法称为______法。
4.选择测试用例,使得被测程序中每个判定的每个分支至少执行一次,这种逻辑覆盖标准称为_______。
5.要覆盖含有循环结构的所有路径是不可能的,一般通过限制_____来测试。
6.用等价类划分法设计测试用例时,如果被测程序的某个输入条件规定了取值范围,则可确定一个合理的等价类和_______。
7.凭经验或直觉推测程序中可能存在的错误而设计测试用例的方法是_______。
8.集成测试中的具体方法是______。
9.确认测试阶段的两项工作是______。
10.在单元测试中,测试一个模块时,需要设计_______。
三、选择题1.测试的关键问题是( )。
A.如何组织软件评审B.如何选择测试用例C.如何验证程序的正确性D.如何采用综合策略2.软件测试用例主要由输入数据和( )两部分组成。
A.测试计划B.测试规则C.预期输出结果D.以往测试记录分析3.成功的测试是指运行测试用例后( )。
A.未发现程序错误B.发现了程序错误C.证明程序正确D.改正了程序错误4.下列几种逻辑覆盖标准中,查错能力最强的是( )。
A.语句覆盖B.判定覆盖C.条件覆盖D.条件组合覆盖5.在黑盒测试中,着重检查输入条件组合的方法是( )。
A.等价类划分法B.边界值分析法C.错误推测法D.因果图法6.单元测试主要针对模块的几个基本特征进行测试,该阶段不能完成的测试是( )。
A.系统功能B.局部数据结构C.重要的执行路径D.错误处理7.软件测试过程中的集成测试主要是为了发现( )阶段的错误。
A.需求分析B.概要分析C.详细设计D.编码8.不属于白盒测试的技术是( )。
A.路径覆盖B.判定覆盖C.循环覆盖D.边界值分析9.集成测试时,能较早发现高层模块接口错误的测试方法为( )。
软件工程第7章习题
5. 软件测试用例主要由输入数据和( 成 A 测试计划 C 预期输出结果 B 测试规则
)两部分组
D 以往测试记录分析 答案: C )
6. 成功的测试是指运行测试用例后( A 未发现程序错误 C 证明程序正确
B 发现了程序错误 D 改正了程序错误 答案: B
7. 下列几种逻辑覆盖标准中, 查错能力最强的是( 答案: D
8. 在黑盒测试中, 着重检查输入条件组合的方法是 ( ) A 等价类划分法 C 错误推测法 B 边界值分析法 D 因果图法 )
)
A 语句覆盖 B 判定覆盖 C 条件覆盖 D 条件组合覆盖
答案: D 9. 软件测试过程中的集成测试主要是为了发现( 阶段的错误 A 需求分析 B 概要设计 C 详细设计 D 编码 答案: B
4. 在单元测试时, 需要为被测试模块设计( 答案: 驱动模块与桩模块 5. 在集成测试时有两种测试方法, 它们是( 答案: 渐增式和非渐增式 6. 软件测试是为了( )而执行程序的过程 )
)
答案: 发现错误 7. 运行被测试程序的方法称为( 答案: 动态 )测试
8. 动态测试中, 主要测试软件功能的方法称为( 答案: 黑盒
12. 集成测试中的具体方法是(
)
答案: 渐增式和非渐增式测试方法 二. 选择题 1. 软件测试中, 白盒法是通过分析程序的( 设计测试用例的 A 应用范围 B 内部逻辑 C 功能 答案: B 2 . 黑盒法是根据程序的( A 应用范围 B 内部逻辑 ) 来设计测试用例的 C 功能 D 输入数据 )来
D 输入数据
答案: C
3. 为了提高软件测试的效率, 应该(
A 随机地选取测试数据 B 取一切可能的输入数据作为测试数据 C 在完成编码以后制定软件的测试计划
软件工程 第7章--面向对象设计
§1. OOD准则
5、Cohesion:模块内各个元素彼此结合的紧密程度。 服务内聚(service cohesion):一个服务只完成一个功能。
类内聚(class cohesion):一个类只有一个用途,否则分 解之。
一般-特殊内聚(general-particular cohesion):
17
类构件
类构件:面向对象技术中的“类” 。类构件有3种 重用方式:
–实例重用 –继承重用 –多态重用 1. 可重用类构件应具备的特点 (1) 模块独立性强。具有单一、完整的功能,且经 过反复测试被确认是正确的。是一个不受或很少受 外界干扰的封装体,其内部实现在外面是不可见的。
18
(2) 具有高度可塑性。软构件的应用环境比集成电 路更广阔、更复杂。显然,要求一个软构件能满足 任何一个系统的设计需求是不现实的。因此,可重 用的软构件必须具有高度可裁剪性,必须提供为适 应特定需求而扩充或修改已有构件的机制,而且所 提供的机制必须使用起来非常简单方便。
对象 设计
面向对 象分析
人机界 面设计
任务管 理设计
数据管 理设计
4
§1. OOD准则
§1. OOD准则:优秀软件设计的一个重要特点是 容易维护
回顾:SD准则包括
Modularization Information hiding
Abstraction
Module independence
对于 OOD有类似的准则: 1、Module = Object
• Inheritance —— 无须改动原有代码
13
② 设计重用 —— 当移植系统时
§3. 软件重用
③ 分析重用 —— 当需求未变,而系统结构改变 时(例如将HDIS改为OO实现)
第7章软件工程全解PPT课件
D.9
11
7.2面向对象技术基础
• 考点:面向对象分析与设计的基本概念,包括对象,类, 消息,继承,多态等
• 一、基本概念 1.对象 2.消息 3.类 4.继承 5.多态 6.动态绑定
12
• 二、面向对象分析与设计基本概念 1.面向对象分析(OOA):建立待开发软件系统的模型 2.面向对象设计(OOD):定义系统构造蓝图,并根据系
• A.这三个对象所存储的数据一定是不同的 • B.这三个对象所存储的数据一定是相同的 • C.这三个对象一定具有相同的操作 • D.这三个对象无法共享数据 • 2.下列关于超类,子类,基类的叙述中,正确的是 A • A.子类是超类的特化 B.基类是超类的特化 • C.基类是子类的特化 D.超类是基类的特化
描述了谁将使用系统以及用户期望以什么方式与系统交 互。 序列图:描述了在一个用例或操作的执行过程中以时间顺 序组织的对象之间的交互活动 通信图:强调收发消息的对象之间的结构组织。
14
• 状态图:展现了一个状态机,由状态、转换、事件和活 动组成,用于建模时间如何改变对象的状态以及引起对 象从一个状态向另一个状态转换的事件。
3
7.1 软件工程和项目管理基础
➢考点:软件工程和软件生存周期的概念,软件开 发 项目管理的基础知识
➢一、软件的生存周期 可行性分析和项目开发计划; 需求分析 软件设计 编码 测试和维护
4
二、软件开发项目管理基础知识
➢ 1.成本估算 (1)自顶向下估算方法 (2)自底向上估算方法 (3)差别估算方法
_7iX7n3C0yKIn5eejUpBn4dVAPMttK8UcWRNKHAQneYpivigBd aVWD_c5d0foeYRW_0RwIWSuZ4aBHMLkQq • 3.加工逻辑(小说明) • 1.结构化语言 • 2.判定表 • 3.判定树
软件工程-第7章
1.程序内部的文档
所谓程序内部的文档包括恰当的标识符、适当的注解和程 序的视觉组织等。
标识符:含义鲜明的名字、缩写规则一致、为名字加注 解;
注解:正确性,简要描述模块的功能、主要算法、接口 特点、重要数据以及开发简史或解释包含这段代码的必 要性;
子系统测试和系统测试,都兼有检测和组装两重含义, 通常称为集成测试。
第7章 实现
7.2.4 测试步骤
28
7.2 软件测试基础
4.验收测试 验收测试把软件系统作为单一的实体进行测试,测试内
容与系统测试基本类似,但是它是在用户积极参与下进行的, 而且可能主要使用实际数据(系统将来要处理的信息)进行测 试。
7.1 编码
17
编码规范的意义:
➢促进团队合作 ➢减少bug处理 ➢降低维护成本 ➢有助于代码审查
7.1 编码
18
编码规范的原则:
➢方便交流和维护 ➢不影响编码的效率,符合大众习惯 ➢使代码更美观,阅读更方便 ➢使代码的逻辑更清晰,更易于理解
7.1 编码
代码开源网站 :
20
主要内容
7.1 编码 7.2 软件测试基础 7.3 单元测试 7.4 集成测试 7.5 确认测试 7.6 白盒测试技术 7.7 黑盒测试技术 7.8 调试 7.9 软件可靠性
视觉组织:适当的阶梯形式使程序的层次结构清晰明显。
第7章 实现
7.1.2 编码风格
7.1 编码
7.1.2.编码风格
要做到按照良好的编程风格进行编程,可以从以下几点入手。 1.版权和版本声明。 应该在每个代码文件的开头对代码的版权和版本 进行声明,主要内容有:
《实用软件工程》第7章 面向对象分析
21
划分主题
B.主题图 上述的主题划分的最终结果能够形成一个完整的对象类图和一个主题图。 主题图一般有如下3种表示方式。 • 展开方式
18
建立对象模型
复杂问题(大型系统)的对象模型 通常由下述5个层次组成:主题层(也称 为范畴层)、类与对象层、结构层、属 性层和服务层,如图所示。
上述5个层次对应着在面向对象分析 过程中建立对象模型的5项主要活动:划 分主题;找出类与对象;识别结构;定 义属性;定义服务。实际上五项活动没 有必要的完成顺序,设计时也不需要严 格遵守自顶向下原则。
12
面向对象分析原则
1.定义有实际意义的对象 特别要注意的是,一定要把在应用领域中有意义的、与所要解决的问题有关系的所有事物作为对象,
既不能遗漏,也不要定义无关对象。 2.模型的描述要规范、准确
强调实体的本质,忽略无关的属性。对象描述应尽量使用现在时态,陈述语句,以保证语义的清晰。 定义对象时还应该描述对象之间的关系及对象的背景信息 3.共享性
27
确定属性
例:多媒体商店销售系统
需要处理的文件:图像文件和声音文件,都拥有名称和唯一编码,作者信息和 格式信息,声音文件还包括文件时长(秒)。 功能:①添加新的媒体文件;
②通过编码查找需要的文件; ③删除指定文件; ④统计系统中文件的数量。
28
确定属性
分析过程:根据文件的信息,图像文件和声音文件的类都需要有属性:id-编码,author-作者, format-格式。为了方便处理,还可加入source-文件位置。由功能①③,应该有按参数构造和按编码 删除的两个方法。此外还有findByld-查找,count-查找两个方法。
第七章软件工程概述
1、软件工程
2、软件工程过程
软件工程过程是开发或维护软件及其相关产品的一系列活动。软件 工程过程规定了获取、供应、开发、操作和维护软件时,要实施的 过程、活动和任务。其目的是为各种人员提供一个公共的框架,以 便使用相同的语言进行交流。软件工程过程一般包括开发过程、管 理过程、供应过程、获取过程、操作过程、维护过程和支持过程等 七个方面。
2、原型模型
件项目开发而言的。许多软件开发项目由于人们对 软件需求的认识模糊,很难一次开发成功,返工再开发难 以避免。因此,人们对需开发的软件给出基本需求,作第 一次试验开发,其目标仅在于探索可行性和弄清需求,取 得有效的反馈信息,以支持软件的最终设计和实现。通常 我们把第一次实验性开发出的软件称为原型 (prototype)。这种开发模型可以减少由于需求不明给 开发工作带来的风险,有较好的效果。相对瀑布模型来说, 原型模型更符合人类认识真理的过程和思维,是目前较流 行的一种实用的软件开发方法。原型模型如图所示。
3、软件工程的生存周期
6.运行与维护 已交付的软件投入正式使用,便进入运行阶段。这一阶段
可能持续若干年甚至几 十年。软件在运行中可能由于多方面的原因,需要对它进
行修改。其原因可能有:运行中发现了软件中的错误需要 修正;为了适应变化了的软件工作环境,需做适当变更; 为了增强软件的功能需做变更等。
1.开发过程
开发过程就是开发者和机构为了定义和开发软件或服务所需的活动。 此过程包括需求、分析、设计、编码、集成、测试、软件安装和验 收等活动。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
软件维护的管理流程
软件维护申请报告 一般地,维护申请报告通常由申请维护的用户填写,是 维护工作的基础。维护申请报告一般包括:
遇到的错误及其描述(可从运行日志来);
当时的环境(输入、程序、其他条件)等。
软件修改报告 软件开发组织根据维护申请报告相应地做出软件修改报 告。软件修改报告应提交修改负责人,经批准后才能进 一步安排维护工作。 软件修改报告用于记录在维护期间对软件所作的每一次 修改。由直接进行修改和负责文档管理的人员共同填写。 软件修改报告一般包括:
(1)软件的可维护性可能极差,实在不值得去做;
(2)即使软件的可维护性比较好,但也只是治表不治本。 软件再工程干脆对已有软件进行全部或部分的改造,赋予 软件新的活力。
(2)软件再工程过程模型
正向工程
数据重构
信息库分析
文档重构
代码重构
逆向工程
信息库分析:软件公司维护的所有应用软件的基本信息,
包括应用软件的设计、开发及维护方面的数据。 文档重构:重新构建原本缺乏文档的应用系统的文档。 逆向工程: 软件的逆向工程是分析程序,力图在比源代码更高抽 象层次上建立程序表示的过程;是一个设计恢复(提取数据 结构、体系结构和程序设计结构)的过程。
公共子程序X内 含有: 全局变量Y, 全局数据结构Z
XHale Waihona Puke 所谓 波动效应是指当改变程序地一部
分而影响程序地其他部分时,就出现了 波动效应。
注:修改X,则改变Y和Z; 因此要改变A、B、C…W。 此时,波动效应就大。
③估计修改的影响
第三、重新验证、确认修改部分 修改少数代码和修改多数代码都应该重新验证和确认。 注意:
对于改变部分和未改变部分都要进行; 重新确认应该邀请用户参加;
重新验证和确认过程中发现的错误和错误类别,应该同从前的
测试结果进行比较,估计被损害的程度; 利用自动工具帮助重新确认过程。
(3)软件维护的管理
软件维护管理的重要性
软件维护管理的职能
①控制程序的改变:有效性、合理性、经济性 要进行监督和控制 ②程序的质量检查 按设计标准进行改变 ③安排维护计划 ④建立维护机构
正向工程
S-Designor
CDM
S-Designor
PDM
S-Designor
应用 数据库
反向工程 信息库
本讲小结
本讲主要介绍了教材中的第11章的内容。 软件维护是软件生命周期中的最后一个阶 段。软件能够成功地运行并能发挥其效能, 与软件维护工作是分不开的。 软件维护工作与软件开发工作同样重要。 可以说软件维护过程是一个再分析、再设 计、再编码、再测试、再确认的过程。 软件再工程技术既可以用于软件维护,也 可以用于再造软件。
②按计划改变程序 正确、有效地编写改变部分的代码; 消除任何不期望的副作用; 所谓副作用是指因修改软件而造成 的错误或其它不希望发生的情况。 有三种副作用:
修改代码的副作用 修改数据的副作用 修改文档的副作用
A
B
C
W
ABC…W共同使用Y,Z
控制程序改变的波动效应。
(2)软件维护的主要任务
第一、分析和理解现有系统
第二、修改系统
第三、重新验证、确认修改部分
第二、修改系统——最重要的维护工作
①设计程序的修改计划
设计如何改变程序的计划
在理解的基础上,从总体和全局的观点出发,提出修改计 划的方针与策略; 逐步把要改变的软件部分(如模块)分离出来; 仔细地研究每个要改变的和受影响的部分的内部细节。
软件工程
第七讲 软件维护与再工程
第七讲 软件维护与再工程
7.1 7.2 7.3 7.4 软件维护的类型与策略 软件可维护性的概念 软件维护的实施过程和管理 软件再工程
7.1 软件维护的类型与策略
(1)软件维护的基本概念
在软件运行/维护阶段对软件所进行的修改称为软件维护。 修改可能包括代码、文档、数据等多方面。
为满足维护申请表的要求所需要的工作量 要求修改的性质和范围
请求的优先次序
修改有关的数据
7.4 软件再工程Re-Engineering
(1)软件再工程的定义
将新技术和新工具应用于老的软件的一种较彻底的预防 性维护。
软件再工程的目的:
在商业上要提高产品的竞争力;在技术上要提高产品 的质量。但这种愿望无法靠软件的维护来实现,因为:
(2)软件维护的种类
纠错(改正)性维护(约占维护工作量的21%) 改正软件中的错误。 适应性维护(约占维护工作量的25%) 适应外部环境变化的修改。如硬件配置、软件配置、数 据环境(DB、存储方式等)。 完善性维护(约占维护工作量的50%) 在使用过程中,针对用户提出的新的功能与性能要求, 而修改和再开发软件,以扩充功能、增强性能、改进处 理效率、提高软件的可维护性。 预防性维护(约占维护工作量的4%) 为了提高软件的可维护性、可靠性,对软件和软件中的 某一部分重新进行设计、编制和测试。
代码重构:
从代码中导出遵从结构化程序设计思想的过程 设计。
数据重构:数据重构从理解现有数据结构开始,
再重新设计数据,包括数据标准化、数据命名合 理、文件格式转换、数据库格式转换等。
正向工程:它根据重构后软件的设计信息,改变
或重构现存软件,已达到改善其整体质量的目的。
软件再工程的例子 软件视图、信息库、综合、分解与变换
7.2 软件可维护性的概念
(1)软件可维护性
指纠正软件系统出现的错误和缺陷,以及为满足新的
要求进行修改、扩充或压缩的容易程度。
(2)影响可维护性的主要软件属性
可理解性 可测试性 可修改性 可靠性
可移植性
可使用性 效率
7.3 软件维护的实施过程和管理
(1)软件维护的工作流程
软件维护比软件开发更困难,需要更多的创造性
工作。
需要理解别人的程序 对程序的修改不能影响该程序的正确性和完整性 必须在较短的时间内完成 包括大量的需求分析、设计、测试等工作
软件维护的特点
维护活动限定在已有系统的框架内完成。一般
系统越老,维护越困难。 通常维护时间比开发时间长。但一项具体的维 护工作比该软件的开发时间短。 软件开发从无到有产生所有的测试数据,而维 护通常可以使用现有的测试数据进行回归测试。 有时需要产生新的测试数据,对软件修改及修 改后的影响进行必要的测试。