软件工程第九章(wang)
软件工程导论第9章
(3) 按照子类(或称为派生类)与父类(或称为基类)的 关系,把若干个对象类组成一个层次结构的系统 (也称为类等级)。在这种层次结构中,通常下层的 派生类具有和上层的基类相同的特性(包括数据和 方法),这种现象称为继承(inheritance)。但是,如 果在派生类中对某些特性又做了重新描述,则在派 生类中的这些特性将以新描述为准,也就是说,低 层的特性将屏蔽高层的同名特性。
面向对象方法基于构造问题领域的对象模型,以对 象为中心构造软件系统。它的基本作法是用对象模 拟问题领域中的实体,以对象间的联系刻画实体间 的联系。因为面向对象的软件系统的结构是根据问 题领域的模型建立起来的,而不是基于对系统应完 成的功能的分解,所以,当对系统的功能需求变化 时并不会引起软件结构的整体变化,往往仅需要作 一些局部性的修改。例如,从已有类派生出一些新 的子类以实现功能扩充或修改,增加或删除某些对 象等。总之,由于现实世界中的实体是相对稳定的, 因此,以对象为中心构造的软件系统也是比较稳定 的。
众所周知,软件系统本质上是信息处理系统。数据 和处理原本是密切相关的,把数据和处理人为地分 离成两个独立的部分,会增加软件开发的难度。与 传统方法相反,面向对象方法是一种以数据或信息 为主线,把数据和处理相结合的方法。面向对象方 法把对象作为由数据及可以施加在这些数据上的操 作所构成的统一体。对象与传统的数据有本质区别, 它不是被动地等待外界对它施加操作,相反,它是 进行处理的主体。必须发消息请求对象主动地执行 它的某些操作,处理它的私有数据,而不能从外界 直接对它的私有数据进行操作。
面向对象的软件技术为开发者提供了随着对某个应 用系统的认识逐步深入和具体化的过程,而逐步设 计和实现该系统的可能性,因为可以先设计出由抽 象类构成的系统框架,随着认识深入和具体化再逐 步派生出更具体的派生类。这样的开发过程符合人 们认识客观世界解决复杂问题时逐步深化的渐进过 程。
软件工程软件工程软件工程9
由于对象是类的实例,在进行分析和设计时,通常把注意力集中在类上,而不是具体的对象上。
9.2 概念
9.2.2 其它概念
9.2 概念
实例:实际上类是建立对象时使用的“样板”,按照这个样板所建立的一个个具体的对象,就是类的实际例子,通常称为实例。当使用“对象”这个术语时,既可以指一个具体的对象,也可以泛指一般的对象,但是,当使用“实例”这个术语时,必然是指一个具体的对象。
方法:调工资 (计算公式) 评职称 (步骤、条件)
李立,调工资(•••••• )
数 据 结 构
数 据 值
人事处向对象发消息
执行的 操作
方法体
类:教师
对象:李立
抽象 实例
抽象 实例
抽象 方法名(参数)
图9.7 对象、类和消息传递
9.2 概念
9.1.1 要点
9.1 概述
面向对象方法学的出发点和基本原则,是尽可能模拟人类习惯的思维方式,使开发软件的方法与过程尽可能接近人类认识世界解决问题的方法与过程,也就是使描述问题的问题空间(也称为问题域)与实现解法的解空间(也称为求解域)在结构上尽可能一致。 认为客观世界是由各种对象组成的,任何事物都是对象,复杂的对象可以由比较简单的对象以某种方式组合而成。 把所有对象都划分成各种对象类(简称为类,class),每个对象类都定义了一组数据和一组方法。 按照子类(或称为派生类)与父类(或称为基类)的关系,把若干个对象类组成一个层次结构的系统(也称为类等级)。 对象彼此之间仅能通过传递消息互相联系。
下面举一个在参数个数上不相同的重载函数的例子: #include <iostream> int min(int a, int b); int min(int a, int b, int c); int min(int a, int b, int c, int d); int main(void) { cout<<min(13, 5, 4, 9)<<endl; cout<<min(-2, 8, 0)<<endl; } int min(int a, int b) { return a<b?a:b; } int min(int a, int b, int c) { int t = min(a, b); return min(t,c); } int min(int a, int b, int c, int d) { int t1 = min(a, b); int t2 = min(c, d); return min(t1, t2); }
第九章软件工程面向对象实现
② 减小方法的规模 若某个方法规模过大(代码长度超过一页纸),即应将其分
解为几个更小的方法。 ③ 保持方法的一致性
一般而言,功能相似的方法应有一致的名字、参数特征(包括参数 个数、类型、次序)、返回值类型、使用条件及出错条件等。
同样,属性和关联也可分为公有和私有两大类,公有属性或关 联又可进一步设置为具有只读权限或只写权限两类。
3、提高健壮性
编写实现方法的代码时,既应考虑效率,也应考虑健壮性,通 常需要在健壮性与效率之间做适当的折衷。
作为软件不可忽视的质量指标。提高健壮性应遵守如下准则: ① 预防用户的操作错误
软件系统必须具有处理用户操作错误的能力。当用户在输入数据时发 生错误,不应该引起程序运行中断,更不应该造成“死机”。
若在执行过程中发现错误,仅返回执行状态。由于实现方法是自含式算法,相 对独立于具体应用,因此在其他应用系统中也可能重用它们。
为提高可重用性,在编程时不应将策略和实现放在同一个方法中,而应将算法 的核心部分放在一个单独的具体实现方法中。为此需要从策略方法中提取具体参 数,作为调用实现方法的变元。
⑤ 全面覆盖 若输入条件的各种组合都可能出现时,应针对所有组合写出方
2、提高可扩充性
上述提高可重用性的准则,也能提高程序的可扩充性。 此外,以下面向对象程序设计准则也有助于提高可扩充性。 ① 封装实现策略
将类的实现策略(包括描述属性的数据结构、修改属性的算法 等)封装起来,对外只提供公有的接口,否则将降低今后修改数 据结构或算法的自由度。 ② 避免用一个方法遍历多条关联链
软件工程第九章
9.4.2、再生工程 、
3. 软件再生工程的风险 软件再生工程是一种软件工程活动,它与 任何软件工程项目一样,可能遇到各种风 险 (1) 过程风险(2) 人员风险(3) 应用风险 (4) 技术风险(5) 工具风险(6) 策略风险
9.1.3、软件维护的特点 、
3. 维护的特点 --非结构化维护。因为只有源程序,而 文档很少或没有文档,维护活动只能从阅 读、理解、分析源程序开始 --结构化维护。用软件工程思想开发的 软件具有各个阶段的文档,对于理解和掌 握软件功能、性能、系统结构、数据结构、 系统接口和设计约束有很大的作用
9.1.3、软件维护的特点 、
9.4.2、再生工程 、
再生工程综合了逆向工程的分析和设计抽 象的特点,具有对程序数据、体系结构和 逻辑的重构能力。执行重构可生成一个设 计,它产生与原来程序相同的功能,但具 有比原来程序更高的质量。
9.4.2、再生工程 、
1. 实施软件再生工程的目的 软件再生工程能够帮助软件机构降低软件演化的 风险。 再生工程可帮助软件机构补偿软件的投资。 再生工程可使得软件易于进一步变更。。 再生工程有着广阔的市场,可以取得良好的社会 效益和经济效益。 再生工程是推动自动软件维护发展的动力,因此 研究再生工程有十分重要的意义
1. 建立明确的软件质量目标和优先级,这样做有 助于提高软件的质量,降低软件生存周期的费用 。 2. 使用提高软件质量的技术和工具 (1) 模块化 (2) 结构化程序设计 (3) 使用结构化程序设计技术,提高现有系统的 可维护性
9.3.3、提高软件可维护性的方法 、
软件工程讲义_第九章 构件级设计
传统观点
考虑ComputePageCost模块。该模块的目的在 于根据用户提供的规格说明来计算每页的印刷费用。 为了实现该功能需要以下数据:文档的页数,文档 的印刷份数,单面或者双面印刷,颜色,纸张大小。 这些数据通过该模块的接口传递给 ComputePageCost。ComputePageCost根据任 务量和复杂度,使用这些数据来决定一页的费用— —这是一个通过接口将所有数据传递给模块的功能。 每一页的费用与任务的大小成反比,与任务的复杂 度成正比。
什么是构件
通常来讲,构件是计算机软件中的一个模 块化的构造块。OMG UML规范将构件定 义为“系统中模块化的、可部署的和可替 换的部件,该部件封装了实现并暴露一系 列接口”。 构件存在于软件体系结构中,因而构件在 完成所建系统的需求和目标中起重要作用。 由于构件驻留于软件体系结构的内部,它 们必须与其他的构件和存在于软件边界以 外的实体进行通信和合作。
传统观点
在传统软件工程环境中,一个构件就是程序的 一个功能要素,程序由处理逻辑及实现处理逻辑 所需的内部数据结构以及能够保证构件被调用和 实现数据传递的接口构成。传统构件也被称为模 块,作为软件体系结构的一部分,它承担如下三 个重要角色之一:(1)控制构件,协调问题域中 所有其他构件的调用;(2)问题域构件,完成部分 或全部用户的需求;(3)基础设施构件,负责完成 问题域中所需相关处理的功能。
传统观点
图9-3给出了使用UML建模符号描述的构件级 设计。其中ComputePageCost模块通过调用 getJobData模块和数据库接口accessCostDB 来访问数据。接着,对ComputePageCost模 块进一步细化,给出算法和接口的细节描述。其 中算法的细节可以由图中显示的伪代码或者 UML活动图来表示。接口被表示为一组输入和 输出的数据对象或者数据项的集合。设计细化的 过程需要一直进行下去,直到能够提供指导构件 构造的足够细节为止。
软件工程九章面向对象方法学
4
2.软件重用程度很低 重用也称为再用或复用,是指同一事物不经修改或 稍加改动就多次重复使用。 软件重用是节约人力,提高软件生产率的重要途径。 结构分析、结构设计和结构程序设计(简写为 SA- SD-SP)技术,虽然给软件产业带来了巨大进步, 但却没能很好地解决软件 重用问题。 几乎每次开发一个新的软件系统时,都要针对这个 具体的系统作大量重复而又繁琐的工作。
14
原型法的基本思想: 首先建立一个能反映用户主要需求的原型系统,让 用户在计算机上运行、试用这个原型系统,通过实 践,了解未来系统的概貌,提出许多修改意见,根 据这些意见,快速修改原型系统,然后用户再次试 用修改后的原型系统„ 用户在试用原型系统的过程中,很容易判断它是否 真正满足自己的业务工作需要。 软件开发人员首先向用户提供一个“样品”(即原 型系统),用户经过试用向开发人员作出“反馈”。 通过“试用一反馈一修改”的多次反复,最终开发 出真正符合用户需要的应用系统,这就是用原型法 开发软件的优点。
7
出现问题的原因
1.僵化的设计模型 瀑布模型意味着在生命周期各阶段间存在着严格的 顺序性和依赖性。生命周期方法学特别强调预先定 义需求的重要性。 要求在着手进行具体的开发工作之前,必须通过需 求分析预先定义并“冻结”软件需求,然后再一步 一步地实现这些需求。
8
实践表明,在系统建立起来之前,往往很难仅仅 依靠分析就确定出一套完整、准确、一致、有效 的应用需求,这种预先定义需求的方法更不能适 应用户需求不断变化的情况: 预先定义需求的策略所作的假设,只对某些 软件成立,对于多数软件并不成立。人们为了 充实和细化他们的初步设想,通常需要经过在 某个能运行的系统上的实践过程。 项目参与者之间存在通信鸿沟 良好的通信和相互理解对于保证工程成功是至 关重要的。 各种文档,本质上是被动、静止的通信工具, 9 通过它们来理解一个动态系统是困难的。
高级软件工程(第九章)-软件体系结构()PPT课件
管道/过滤器结构
Ø 每个过滤器都是一个独立的个体元素,各个过滤器的状态互不 相关,非邻近过滤器不共享任何信息;
9 Ø 运行结果的正确性与各个过滤器运行的先后顺序无关。
管道/过滤器体系结构风格
➢管道/过滤器风格具有以下优点: ✓ 简单性,允许将系统的输入和输出看作是各个
过滤器行为的简单组合,独立的过滤器能够减 小构件之间的耦合程度; ✓ 系统具有可扩展性和可进化性,各个过滤器是 相互独立的,因此可以很容易地将新过滤器添 加到现有的系统之中,以扩展系统的业务处理 能力,原有过滤器可以很方便地被改进的过滤 器所替代;
➢软件体系结构表示系统的框架结构,用于从较高 的层次上来描述各部分之间的关系和接口,主要 包括:构件、构件性质和构件之间的关系。
➢不同系统的设计方案存在着许多共性问题,把这 些共性部分抽取出来,就形成了具有代表性的和 可广泛接受的体系结构风格。
4
几种典型的软件体系结构风格
➢软件体系结构风格也称为软件体系结构惯用模 式,是指不同系统所拥有的共同组织结构和语 义特征。
软件密集型系统的总体结构的语言,说明系统众
多构件之间的结构关系。
➢代表性的体系结构描述语言包括:
➢ Wright
➢ ACME
➢ Rapide
➢ ABC/ADL
➢ Darwin
➢ XYZ/ADL
➢ Unicon
➢ XADL
➢ 大部分结构描述语言都有构件、连接子、配置
等概念。
3
几种典型的软件体系结构风格
➢软件体系结构风格定义了用于系统描述的术语 表和一组用于指导系统构建的规则。
5
几种典型的软件体系结构风格
➢管道/过滤器风格 ➢数据共享风格 ➢客户机/服务器风格 ➢浏览器/服务器风格 ➢MVC体系结构风格
软件工程(第五版)--习题及答案---第九章
一、判断题1、(×)测试是为了验证该软件以正确地实现了用户的需求。
2、(√)发现错误多的程序模块,残留在模块中的错误也多。
3、(×)白盒测试法是根据程序的功能来设计测试用例的。
4、(×)黑盒法是根据程序的内部逻辑来设计测试用例的。
5、(√)确定测试计划是在需求分析阶段制定的。
6、(√)集成测试计划是在概要设计阶段制定的。
7、(√)单元测试是在编码阶段完成的。
8、(√)集成测试工作最好由不属于该软件开发组的软件设计人员承担。
9、(√)为了提高软件的测试效率,测试工作需要有测试工具的支持。
10、(×)在做程序的单元测试时,桩模块比驱动模块容易编写。
二、选择题1、测试用例是专门为了发现软件错误而设计的一组或多组数据,它由(C)组成。
A、测试输入数据B、预期的测试输出数据C、测试输入与预期的输出数据D、按照测试用例设计方法设计出的数据2、测试和调试最大的不同在于(A)。
A、操作者的心理状态不同B、它们的行为取向不同C、使用的工具不同D、运用的方法不同3、一个成功的测试是(B)。
A、发现错误B、发现至今尚未发现的错误C、没有发现错误D、证明发现不了错误4、白盒法和黑盒法最大的不同在于(A)。
A、测试用例设计方法不同B、测试的任务不同C、应用的测试阶段不同D、基于的知识集不同5、单元测试阶段主要涉及(D)的文档。
A、需求设计B、编码和详细设计C、详细设计D、概要设计6、检查软件产品是否符合需求定义的过程称为(A)。
A、确认测试B、集成测试C、验证测试D、验收测试7、软件调试的目的是(B)。
A、发现错误B、改正错误C、改善软件的性能D、挖掘软件的潜能8、进行软件测试的目的是(A)。
A、尽可能多地找出软件中的错误B、缩短软件的开发时间C、减少软件的维护成本D、证明程序没有缺陷9、选择一个适当的测试用例,用于测试下面的程序,能达到判定覆盖的是(C)。
A、B、D10、在进行单元测试时,常用的方法是(A)。
软件工程第9章
软件工程第9章
9.2.3
程序员在编写实现方法的代码时,既 应该考虑效率,也应该考虑健壮性。通常 需要在健壮性与效率之间做出适当的折衷。 必须认识到,对于任何一个实用软件来说, 健壮性都是不可忽略的质量指标。为提高
软件工程第9章
1. 2. 3. 4.
软件工程第9章
9.1 程序设计语言
9.1.1
选择编程语言的关键因素,是语言的 一致的表达能力、可重用性及可维护性。 从面向对象观点看来,能够更完整、更准 确地表达问题域语义的面向对象语言的语 法是非常重要的,因为这会带来下述几个
软件工程第9章
1. 一致的表示方法 2. 3.
软件工程第9章
9.1.2 面向对象语言的技术
软件工程第9章
最后,把系统作为一个整体来测试, 以发现软件需求中的错误。测试面向对象 软件的策略,与上述策略基本相同,但也
软件工程第9章
9.3.1 面向对象的单元测试
最小的可测试单元是封装起来的类和 对象。一个类可以包含一组不同的操作, 而一个特定的操作也可能存在于一组不同 的类中。因此,对于面向对象的软件来说,
软件工程第9章
5. 6. 7. 8. 9. 10.
软件工程第9章
9.1.3 选择面向对象语言
开发人员在选择面向对象语言时,还
软件工程第9章
1. 2. 3. 4.
软件工程第9章
9.2 程序设计风格
良好的程序设计风格对面向对象实现 来说尤其重要,不仅能明显减少维护或扩 充的开销,而且有助于在新项目中重用已
特点
一般说来,纯面向对象语言着重支持 面向对象方法研究和快速原型的实现,而 混合型面向对象语言的目标则是提高运行 速度和使传统程序员容易接受面向对象思 想。
软件工程导论(第9章)
与传统程序的“调用/返回”所不同的是,
对于传来的消息,对象可以返回相应的回答
信息,也可以不返回。
一个消息由三个部分组成:
1)接收信息的对象;
2)信息选择符(即消息名);
3)零个或多个变元(参数)。
如:MyCircle.Show(GREEN);
4、方法(Method)
方法,是对象所能执行的操作。
C++中把方法称为成员函数,如Circle类中
丈夫
结婚 图9.7 关联的角色 上图是一个递归关联的例子。
这种情况下,标明角色名有助于理解类图。
3)限定关联
目录
保存 被保存 普通关联 1…*
文件
目录
文件名
文件
图9.8 限定关联
利用限定词把一对多关系简化成了一对一关系。
4)关联类
队列 电梯控制器 4 电梯
*
按钮 图9.9 关联类示例
控制器对象和电梯对象之间的连接,对应着一个队列 (对象),它存储着控制器和电梯内部按钮的请求信息。
2)运算符重载 指同一运算符可以施加于不同类型的操作数 上面。当被操作数类型不同时,运算符的含义
是不同的。
编译时根据被操作数的类型,决定使用算符
的哪种语义。
另外,在实现一个类成员函数时,必须通过用类名
限定函数名来告诉编译器这个函数属于哪个类。
如,编写qput( )函数:
Void Queue :: qput (int i) { if (sloc = =100) {cout << “Queue if full” ; return; }
层次的类中,虚函数实现算法不同,在运行时根据
接收消息的对象所属于的类来决定执行虚函数的版 本,称为动态联编。
软件工程第9章软件维护
9.2 软件维护的过程
1. 维护组织 除大的软件公司外,通常的在软件维护工作方面,并不保
持一个正式的组织。在软件开发部门,确立一个非正式的维 护组织即非正式的维护管理员来负责维护工作却是绝对必要 的。
2、维护工作的流程
用户
修改过 的软件 确定更
改要求
维护
维护人员
纠错性
严重 评价错误 严重程度
或
不严重
进行问 题分析
理解分析程序
安排计划 修改程序
要求 确认维 或
安排改正
维护实施
护类型
完
适
性维护
人
测试程序
美 或应
员
低
性 评价优
先级
性
将改正错误列入计划 安
高 进行问 排
复审 交付使用
将安排好的工
或
题分析
的软件
作量列入计划
软件维护的工作流程图
3、维护工作的组织管理
软件维护工作不仅是技术性的,它还需要大量的管理 工作与之相配合,才能保证维护工作的质量。管理部门 应对提交的修改方案进行分析和审查,并对修改带来的 影响作充分的估计,对于不妥的修改予以撤销。需修改 主文档时,管理部门更应仔细审查。
完善性 维护
50%
纠错性 维护 25%
适应性 维护21%
纠错性维护 适应性维护 完善性维护 预防性维护
9.1 .3 软件维护的特性
1.时间长、工作量大、成本高 软件的维护过程是软件生存期中最长,并且相当困难的
阶段,软件维护的工作量占整个软件生存期的70%以上, 而且还在逐年增加。因此,如何减少软件维护的工作量, 降低软件维护的成本,就成为提高软件维护效率和质量的 关键。 2.维护的副作用 (1)修改代码的副作用。在修改源代码时,由于软件的内 在结构等原因,任何一个小的修改都可能引起的错误。因 此在修改时必须特别小心。
软件工程第九章
软件工程第九章在软件工程的领域中,第九章往往聚焦于特定的主题,这可能涵盖软件测试、项目管理、软件维护等关键方面。
软件测试在软件工程中扮演着至关重要的角色。
它就像是为软件进行的一场严格的体检,旨在发现软件中潜在的缺陷和问题。
有效的测试策略能够大大提高软件的质量和可靠性。
测试并非仅仅是在软件完成后进行的一次性活动,而是贯穿于整个软件开发周期的持续过程。
从最初的单元测试,针对软件的最小组成部分进行单独测试,到集成测试,将多个模块组合起来检验它们之间的交互是否正常,再到系统测试,对整个软件系统进行全面的检验,包括功能、性能、安全性等各个方面。
还有用户验收测试,确保软件满足用户的需求和期望。
每一种测试类型都有其特定的目标和方法,共同为软件的质量保驾护航。
项目管理在软件工程中也举足轻重。
项目经理需要制定详细的项目计划,明确项目的目标、范围、时间节点、资源需求等。
合理的任务分解和进度安排是项目成功的关键。
同时,项目管理还需要关注团队的沟通与协作。
一个高效的团队能够在面对各种挑战和变化时迅速做出响应,确保项目按计划推进。
风险管理也是项目管理的重要一环,需要提前识别可能出现的风险,并制定相应的应对措施,以降低风险对项目的影响。
资源管理同样不可忽视,包括人力、技术、设备等资源的合理分配和有效利用。
软件维护是确保软件在其生命周期内持续满足用户需求的重要环节。
随着时间的推移,用户需求可能会发生变化,技术环境也在不断演进,软件需要不断地进行更新和改进。
纠错性维护用于修复软件中出现的错误和故障;适应性维护使软件能够适应新的运行环境和技术条件;完善性维护则是对软件功能进行增强和优化,以提供更好的用户体验;预防性维护则是为了提前预防可能出现的问题,提高软件的可维护性和可靠性。
在实际的软件工程实践中,这三个方面(软件测试、项目管理、软件维护)相互关联、相互影响。
良好的项目管理能够为软件测试和维护提供有力的支持和保障。
比如,在项目规划阶段就充分考虑测试资源和时间的安排,能够确保测试工作的顺利进行。
软件工程第九章至十章
9.2 成本估计
成本估计
• 软件开发成本主要是指软件开发过程中所花费的工作 量及相应的代价,不包括原材料和能源的消耗,主要是人 的劳动消耗。软件产品不存在重复制造过程,软件开发成 本是以一次性开发过程所花费的代价来计算的。因此,软 件开发成本的估算,应该以从软件可行性研究、需求分析、 设计、编码、单元测试、组装测试到确认测试,即整个软 件开发过程所花费的代价作为依据。软件具有可见性差、 定量化难等特殊性,尤其对于一个大型的软件项目,由于 项目的复杂性,很难在项目完成前准确地估算出开发软件 所需要的工作量和费用。
成本估计
• 一种常用的成本估算方法是先估计完成项目所需的工 作量(人月数),然后根据每个人月的代价(金额)计算 软件的开发费用 开发费用=人月数×每个人月的代价 另一种方法是先估计软件的规模(通常指源代码行 数),然后根据每行源代码的平均开发费用(包括分析、 设计、编码、测试所花的费用),计算软件的开发费用 开发费用=源代码行数×每行平均费用 典型的成本估算模型有COCOMO模型和Putnam模型等。
质量管理体系及策略
• (2)对项目经理人员的要求 • 软件经理人员是工作的组织者,他的管理能力的强弱 是项目成败的关键。除一般的管理要求外,他还应具有以 下能力: • ①对用户提出的非技术性 • ②能说服用户放弃一些不切实际的要求,以保证合理的 要求得以满足。 • ③具有解决综合问题的能力。 • ④要懂得心理学。
质量管理体系及策略
• 1.组织原则 • 在建立项目组织时应注意以下原则: • (1)早落实责任。在软件项目工作的开始,要尽早指定 专人负责,使其有权进行管理,并对任务的完成全面负责。 • (2)减少接口。在软件开发过程中,人与人之间的交流 和联系是必不可少的,即存在着通信路径。一个组织的生 产效率因完成任务时存在的通信路径数目增多而降低。因 此,合理的人员分工和组织结构对提高软件开发效率是非 常重要的。 • (3)责权均衡。明确每个开发人员的权利和责任,开发 人员的责任不应该大于其拥有的权利。
《软件工程》 第09章
顺序结构
A
重复结构
A
选择结构
A
B
C
B
*
B
°
C
°
A seq B C A end
A select cond1 B A or cond2 C A end
A iter until (或while) cond B A end
ZLL
9.2.3 确定输入/输出数据的逻辑结构
BeiHua
类似于面向对象分析中对象的识别,Jackson方法针 对初步需求分析形成的用户需求描述进行语法分析。 名词及名词短语是潜在的实体。分析人员根据应用 问题的边界及自己的理解,决定对潜在实体的取舍。 通过分析形成逻辑结构。 【例9.1】一个正文文件由若干个记录所组成,每个记 录是一个字符串。要求统计每个记录中空格字符的 个数,以及文件中空格字符的总数。要求的输出数 据格式是,每复制一行输入字符串之后,另起一行 印出这个字符串中的空格数,最后印出文件中空格 的总个数。
ZLL
BeiHua
(1)分析并确定输入数据和输出数据的逻辑结构,并用Jackson图描绘这些数 据结构。 (2)找出输入数据结构与输出数据结构中有对应关系的数据元素,即有直接因 果关系者,它们在程序中可以一并处理。 (3)依据下述三条规则从数据结构图导出Jackson结构图。 ① 在Jackson结构图中,为有对应关系的每对数据元素画一个处理框,该框所 处层次取这两个数据元素在各自数据结构图中层次较低者。 ② 参照输入数据结构图中剩余的每个数据元素所处层次,在Jackson结构图的 相应层次上画一个处理框。 ③ 参照输出数据结构图中剩余的每个数据元素所处层次,在Jackson结构图的 相应层次上画一个处理框。 (4)列出所有操作和条件(包括分支和循环条件),并把它们分配到Jackson 结构图中。
软件工程第九章 软件过程.ppt
1) 管理过程 管理包括进度管理、成本管理、质 量管理、人员管理、资源管理、标准化管理。
谢谢你的关注
谢谢你的关注
17
管理的对象是进度、系统规模及工作量估算、 经费、组织机构、人员、风险、质量、作业和 环境配置等。主要活动有:过程实施准备,制 定计划,监控计划的实施,评审和评价计划的 完成程度,涉及到有关过程的产品管理、项目 管理和任务管理。
公共过程框架 框架活动 任务集合 工作任务 里程碑、交付物 SQA点
保护伞活动
谢谢你的关注
谢谢你的关注
6
9.1.3 软件过程的模型
软件工程过程模型的选择基于项目和应用的特点、 采用的方法和工具、要求的控制和需交付的产品。
所有的软件开发都可以看成是一个问题循环解决 过程,其中包括 4 个阶段: 1) 状态捕获: 描述事物的当前状态; 2) 问题定义: 标识需要解决的问题; 3) 技术开发: 利用某些技术来解决问题; 4) 方案综合: 导出最终结果(如文档、程序、数据、 新的事务功能、新的产品)。
3) 质量保证过程 这是一个为使软件过程和软件产 品符合规定需求,并按预定计划按时完成提供适 当保证的过程。主要活动有:过程实施准备,软 件产品的质量保证,软件过程的质量保证。
4) 验证过程 确定系统或软件的需求是否完备和正 确,以及每一阶段的软件产品是否达到前一阶段 对它的要求和条件。主要活动有:过程实施准备, 验证,合同验证,过程验证,需求验证,设计验 证,代码验证,集成验证,文档验证。
b) 工程 ENG (Engineering) 过程:这类过程包括 开发、系统与软件维护等 2 个过程。
c) 支持 SUP (Support) 过程:这类过程包括文档、 配置管理、质量保证、验证、确认、联合评审、 审计和问题解决等 8 个过程。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
2016年3月8日
9.4.1 类图的基本符号
3.定义服务
UML描述服务(操作)才的语法格式为: 可见性 操作名(参数表):返回值类型{性质串} 操作可见性的定义方法与属性相同 参数表是用逗号分隔的形式参数的序列。描述一个参数的 语法如下 参数名:类型名=默认值
21
2016年3月8日
9.4.2 表示关系的符号
在表示关联的直线两端可以写上重数(multiplicity),它表 示该类有多少个对象与对方的一个对象连接。重数的表示
方法通常有:
0…1 0…*或* 1+或1…* 1…15 3 表示0到1个对象 表示0到多个对象 表示1到多个对象 表示1到15个对象 表示3个对象
如果图中未明确标出关联的重数,则默认重数是1。
9.4.1 类图的基本符号
类图描述类及类与类之间的静态关系,类图是一种静态模型
定义类:UML中类的图形符号为长方形,分为类名、属性和服务 3个区域,如图所示
1. 定义类
类名是一类对象的名字。为类命名时应 遵循以下准则 使用标准术语 使用具有确切含义的名词
类名 属性
服务
表示类的图形符号
必要时用名词短语作名字
9
2016年3月8日
对象
9.2.1 对象
对象的基本特征
每个对象均有自己的惟一标识,从而区别于其他对象
对象之间通过消息进行通信 对象总是处于一定的状态 对象有若干种行为 对象的行为分为三类:创建新对象、与其他对象通信、
改变自身状态。
对象的状态只能被自身的行为所改变。
10
2016年3月8日
6
2016年3月8日
9.1.1 面向对象方法学的要点
面向对象的方法学可用下列方程描述
OO=objects +classes +inheritance +communication with messages
面向对象就是既使用对象又使用类和继承等机制,而且对象之
间仅能通过传递信息实现彼此通信。 也可以说,只有同时使用对象、类、继承和消息的方法,才是 真正面向对象的方法。
30
2016年3月8日
9.4.2 表示关系的符号
依赖和细化
依赖关系:是描述连个模型元素(类、用例等)之间的语
义连接关系 用带箭头的虚线连接有依赖关系的两个类 细化关系:用来协调不同阶段模型之间的关系,表示各个 开发阶段不同抽象层次的模型之间的相关性 细化的图示符号为一端为空心三角形的虚线
送给父类对象也可以发送给子类对象 重载
函数重载:指在同一作用域内的若干个参数特征不同的函数可以使
用相同的函数名 运算符重载:指同一个运算符可以施加于不同类型的操作数上面
16
2016年3月8日
9.3 面向对象建模
利用面向对象方法开发软件,需要建立3种形式的模型:
描述系统数据结构的对象模型
描述系统控制结构的动态模型
类图由类与类之间的关系组成
类与类之间通常有关联、泛化、依赖和细化等4种关系
关联:表示两个类的对象之间存在某种语义上的联系
(1)普通关联:最常见的关联关系。
其图示符号是连接两个类之间的直线 在表示关联的直线两端写上重数,表示该类有多少个对象 与对方的一个对象连接
22
2016年3月8日
9.4.2 表示关系的符号
7
2016年3月8日
9.1.2 面向对象方法学的优点
与人类习惯的思维方法一致 稳定性好
可重用性好
较易开发大型软件产品 可维护性好
8
2016年3月8日
9.2 面向对象的概念
9.2.1 对象
在解空间 (计算机系统) 中,对象的非严格记法:
<对象> ::= <接口,数据,行为>
接口 数据 通信消息 行为 接口
15
2016年3月8日
9.2.2 其他概念
其他概念(续)
属性:是类中定义的数据。类的每个实例都有自己的特有属性
封装:就是消息隐藏。把数据和实现操作的代码放在对象内部,
对外界隐藏对象的实现细节 继承:是子类自动地共享基类中定义的数据和方法的机制
多态性:指子类对象可以像父类那样使用,同样的消息既可以发
在解空间 (计算机系统) 中,对象是……
问题空间中的对象在计算机系统中的表示 封装了数据和行为的通信单位
4
2016年3月8日
9.1.1 面向对象方法学的要点
与传统方法相反,面向对象方法是一种以数据或信息为主
线,把数据和处理相结合的方法。
面向对象方法把对象作为由数据及可以施加在这些数据上 的操作所构成的统一体。 对象与传统的数据有本质区别,它不是被动地等待外界对 它施加操作,相反,它是进行处理的主体。 面向对象方法是一种新的思维方法,它是把程序看作是相 互协作而又彼此独立的对象的集合。 这样就减小了语义断层:系统中解空间对象可以直接模拟 问题空间的对象,解空间与问题空间的结构十分一致。
24
2016年3月8日
9.4.2 表示关系的符号
(3)限定关联 限定关联通常用在一对多或多对多的关联关系中,可以把模 型中的重数从一对多变成一对一,或从多对多简化为多对一 例如,某操作系统中一个目录下有许多文件,一个文件仅属 于一个目录,在一个目录内文件名确定了惟一一个文件。利用 限定词“文件名”表示了目录与文件之间的关系,可见,利用 限定词把一对多关系简化成了一对一关系
都是比较恰当的名字。
总之,名字应该是富于描述性的、简洁的而且无二义性的。
19
2016年3月8日
9.4.1 类图的基本符号
2.定义属性
UML描述属性的语法格式为: 可见性 属性名:类型名=初值{性质串} 属性的可见性(可访问性)有以下3种: 公有的(+)
私有的(-)
保护的(#) 属性名和类型名之间用冒号分隔,类型名和初值之间用等 号隔开。类型名表示该属性的数据类型 花括号括起来的性质串明确列出该属性所有可能的取值
31
2016年3月8日
9.5 动态模型
动态模型是基于时间共享而相互关联的一组状态图的集合
例如,一个课题组包含许多成员,每个成员又可以是另一 个课题组的成员,则课题组和成员之间是共享聚集关系。
一般聚集和共享聚集的图示符号,都是在表示关联关系的 直线末端紧挨着整体类的地方画一个空心菱形
28
2016年3月8日
9.4.2 表示关系的符号
组合聚集:若部分类隶属于整体类,部分与整体共存,则该聚
问题域:描述问题的问题空间
现实世界
实现域:实现解法的 解空间
领域知识 抽象
生成知识 设计知识 模拟 解空间 (计算机系统) 实现域
2016年3月8日
问题空间 问题域
3
9.1.1 面向对象方法学的要点
对象?(面向对象语言)
在问题空间中,对象是……
现实世界中存在的实体 所关心的抽象概念、规则、事件、或者具有明确边界 和意义的具体事物
集称为组合聚集(简称为组成)。 例如,在屏幕上打开一个窗口,它就由文本框、列表框、按钮和 菜单组成,一旦关闭了窗口,各个组成部分也同时消失,窗口和它 的组成部分之间存在着组合聚集关系。 下图是窗口的组成,组成关系用实心菱形表示。
29
2016年3月8日
9.4.2 表示关系的符号
泛化(继承):通用元素和具体元素之间的一种分类关系 泛化关系用一端为空心三角形的连线表示 普通泛化:与前讲过的继承基本相同 受限泛化:可以给泛化关系附加约束条件(多重、不相 交、完全和不完全4种约束)
25
2016年3月8日
9.4.2 表示关系的符号
(4)关联类
为了说明关联的性质可能需要一些附加信息。可以引入一个 关联类来记录这些信息。
关联中的每个连接与关联类的一个对象相联系。
关联类通过一条虚线与关联连接
26
2016年3月8日
9.4.2 表示关系的符号
聚集:是关联的特例,表示类与类之间的关系是整体与部 分的关系。
对象
状态:张三,30岁,计算机系,讲师,1000元 行为:提职称,调工资
类 (教师)
属性:姓名,年龄,系别,职称,工资 操作:提职称,调工资 方法 (指操作的具体代码实现)
实际上,类是创建对象的模板!
14
2016年3月8日
9.2.2 其他概念
实例:是由某个特定的类所描述的具体对象。
类是对一组对象的抽象,集中了该组对象的共同特性
在构造软件时,类实际上是具有特定功能的模块,其代s. 对象:静 vs. 动。
2016年3月8日
12
9.2.2 其他概念
类的两种图形记法
类名 属性: 操作 属性: 操作:
13
2016年3月8日
9.2.2 其他概念
23
2016年3月8日
9.4.2 表示关系的符号
(2) 关联的角色
在任何关联中都会涉及到参与此关联的对象所扮演的角色(即
起的作用),在某些情况下显式标明角色名有助于别人理解类图。 例如,下图是一个递归关联(即一个类与它本身有关联关系)。
一个人与另一个人结婚,必然一个人扮演丈夫的角色,另一个人
扮演妻子的角色。如果没有显式标出角色名,则意味着用类名作 为角色名。
9.2.1 对象
对象的特点
以数据为中心 对象是主动的 实现数据的封装 本质上具有并行性
模块独立性好
11
2016年3月8日
9.2.2 其他概念
类
在问题空间中……
类代表着具有类似性质的一组对象 类中的每一个对象即为类的不同实例 (instance)
在解空间 (计算机系统) 中……