1、第六章 面向对象的设计n面向对象的设计模型面向对象的设计模型n系统设计系统设计n对象设计对象设计n领域对象设计领域对象设计面向对象设计的任务面向对象设计的任务n面向对象设计的任务面向对象设计的任务 n系统设计 n系统整体结构的设计 n对象设计 n对OOA模型中类/对象模型的具体化和细化 n消息设计 n从对象-关系模型,设计出消息模型 n设计模型复审面向对象设计责 任 设计消息设计类及对象设计子系统设计属性、操作、协作者对象-行为模型对象-关系模型类/对象模型使用实例系统设计过程 划分子系统;确定需要并发运行的子系统并为它们分配处理器;描述子系统之间的通信;确定系统资源的管理和控制;确定人机交互
2、构件;选择实现数据管理和任务管理的基本策略。四种主要子系统n问题域子系统n人机交互子系统n任务管理子系统n数据管理子系统划分子系统n划分原则n模块化、功能独立、信息隐藏n同一个子系统的类拥有共同特性n同一个子系统的类具有共同目的n同一个子系统的类提供相似服务n同一个子系统的类间相对高耦合n子系统标准n有明确的借口,与其他子系统通信n一般类只和子系统内部的其它类协作处理并发操作n并发的对象(子系统)n同时n异步n作用于同一事件n处理n将并发子系统分配到不同处理器n将并发子系统分配到同一处理器n系统提供同步控制描述子系统间的通信n子系统协作模型n客户/服务器n端对端请求客户子系统contract服
3、务器子系统peersubsystempeersubsystem请求请求人机交互设计n分类分析用户特点,设计不同界面n增加用户界面专用的类和对象n利用快速原型演示,改进界面设计任务管理设计n策略n确定任务的特征n定义一个协调者任务和与之关联的对象n集成其它任务和协调者n步骤n识别由事件驱动和时间驱动的任务n识别关键性任务、任务优先级和任务管理类n定义任务n必要时扩充有关任务的类和对象数据管理设计n解决对象数据的存储和检索n数据管理设计n定义数据格式n与所使用的数据存储管理模式相关n设计相应的操作n说明对象及所属类和对象如何存储自己对象设计对象设计 设计模型对象数据结构算法消息传递控制分析模型类属
4、性方法关系行为对象描述n对象描述n协议描述:一组消息和对消息的注释 n实现描述:对对象接收到某个消息后所执行的操作的实现细节的描述 n算法设计 n程序构件与接口 n对象间的接口和对象的整体结构 领域对象的设计n设计目的支持软件复用n设计内容n调整需求n复用已有的组件n引入父类,分组管理领域类n添加一般化类以建立协议n调整OOA模型n设计复审n设计模板第七章 统一建模语言UMLnUML简介n静态建模n动态建模n物理架构建模nRUPUMLnUnified Modeling Languagen近10年来OOSE最重要的成果n贡献者:Grady Booch,Ivar Jacobson,Jin Rumb
5、aughn中文网站nhttp:/nhttp:/UML的组成nUML的模型元素n表示模型中的某个概念n表示模型元素之间的关系nUML的元模型结构n元元模型层n元模型层n模型层n用户模型层nUML模型UML模型n图n静态图n动态图n视图n用例视图n逻辑视图n并发视图n构件视图n部署视图UML的特点n统一标准n面向对象n表达能力强大n可视化UML的应用n用于描述系统开发的不同类型于不同阶段n从需求分析到软件设计到软件测试及维护n可视化问题描述,帮助理解问题n帮助建立各阶段的文档n获取和交流有关应用问题求解的知识n辅助构建系统静态建模n用例模型n用例图表示n从最终用户的角度描述系统功能n类和对象模型n
6、类图和对象图表示类图Class Diagram学生姓名:string学号:string书书名:string价格:real 1购买 0.*属于对象图Object Diagram王平:学生姓名:王平学号:020106英语:书书名:英语价格:26.5数学:书书名:数学价格:21.8对象间关系n关联关系(Association)n聚集关系(Aggregation)n泛化关系(Generalization)n依赖关系(Dependency)n细化关系(Refinement)包图子系统A子系统D子系统B子系统C子系统E子系统F动态建模n状态图(State Diagram)n时序图(Sequence Dia
7、gram)n协作图(Collaboration Diagram)n活动图(Activity Diagram)消息同步消息异步消息简单消息状态图State Diagram超时到达上楼上楼到达上楼到达在底楼向上移动向底楼移动向下移动空闲打印机就绪打印文件时序图(Sequence Diagram)打印机忙保存文件打印文件打印文件计算机打印服务器打印队列计算机协作图(Collaboration Diagram)打印机忙保存文件打印机就绪打印文件打印文件计算机打印队列打印服务器打印机活动图Activity DiagramDisk freeDisk full显示磁盘满显示在打印删去显示信息建立打印文件Wi
8、n.printAll()printer.print()物理架构建模n逻辑架构和物理架构n逻辑架构n物理架构n构件图n配置图RUP基于UML的统一建模过程第八章 编码和语言选择编码和语言选择 n编码的目的编码的目的n编码的风格编码的风格n编码使用的语言编码使用的语言编码的目的 编码模块的过程性描述一一一源程序(不可执行的)(可执行的)n 编码的过程n熟悉所选语言的功能和程序开发环境 n仔细阅读设计文档详细设计 n弄清要编码的模块的外部接口与内部过程 编码的风格n追求“聪明”和“技巧”-提倡“简明”和“直接”n使用标准的控制结构 n清晰的前提下求取效率 n.Make it right before
9、 you make it faster.n.Make it clear before you make it faster.n.Keep it right when you make it faster.n(求快不忘保持程序正确)n.Keep it simple to make it faster.n(保持程序简单以求快)n.dont sacrifice clarity for“efficiency”.n(书写清楚,不要为“效率”牺牲清楚)源程序的文档化(code documentation)n有意义的变量名称 n适当的注释 n标准的书写格式n用分层缩进的写法显示嵌套结构的层次;n在注释段的周
10、围加上边框;n在注释段与程序段、以及不同程序段之间插入空行;n每行只写一条语句;n书写表达式时,适当使用空格或圆括号等作隔离符;程序设计语言的发展面向机器的语言高级语言(第3代)甚高级语言机器语言(第1代)汇编语言(第2代)结构语言基础语言面向对象语言第4代语言语言的选择n选择编码语言的标准 n应用领域 n算法与计算复杂性 n数据结构的复杂性 n效率的考虑 适用各类应用领域的语言 年代应用领域主要语言其他语言 20世纪60年代 商业COBOLAssembler科学计算FORTRANALGOL、BASIC、APL系统AssemblerForth人工智能LISPSNOBOL 现代商业COBOL、C
11、+、Java、电子表格C、PL/1科学计算FORTRAN、C、C+JavaBASIC系统C、C+、JavaAda、Modula人工智能LISP、Prolog 第九章 软件测试 n测试的基本概念 n黑盒测试 n白盒测试 n测试用例设计 n多模块程序的测试策略 n面向对象系统的测试 测试的基本概念测试的基本概念 n测试(testing)的目的与任务 n目的:发现程序的错误 n任务:通过执行程序,暴露潜在的错误 n纠错(debugging)的目的与任务 n目的:定位和纠正错误 n任务:消除软件故障,保证程序的可靠运行 测试的特性测试的特性 n挑剔性 n抱着为证明程序有错的目的去测试 n复杂性 n设计
12、合适的测试用例 n不彻底性 nDijkstra 一句名言:“程序测试只能证明错误的存在,但不能证明错误不存在”n经济性测试的种类测试的种类 n静态分析(不执行程序)n静态分析器n代码复审(Code Review)n动态分析(执行程序)n黑盒测试n测试程序功能n白盒测试n测试程序结构测试的文档测试的文档 n测试计划 n测试项目的名称n各项测试的目的、步骤和进度n测试用例的设计 n测试报告n测试项目名称n实测结果与期望结果的比较n发现的问题n测试达到的效果 黑盒测试黑盒测试 n等价分类法等价分类法(equivalence partitioning)n把输入数据的可能值划分为若干等价类 n有效等价类
13、和无效等价类n每一无效等价类至少需要一个测试用例 n例子 某工厂公开招工,规定报名者年龄应在16周岁至35周岁之间(到2002年3月30日止)即出生年月不在上述范围内,将拒绝接受,并显示“年龄不合格”等出错信息。“出生年月”的等价分类 输入数据有效等价类无效等价类出生年月6位数字字符 有非数字字符少于6个数字符多于6个数字符对应数值在196702198603之间198603月份对应数值在112之间等于“0”12黑盒测试黑盒测试n边界值分析法边界值分析法(boundary value boundary value analysis)analysis)n使被测程序在边界值及其附近运行,从而更有效地
14、暴露程序中潜藏的错误 n错误猜测法错误猜测法(error guessing)error guessing)n猜测被测程序在哪些地方容易出错 n针对可能的薄弱环节来设计测试用例 白盒测试白盒测试 n逻辑复盖测试法逻辑复盖测试法(logic coverage logic coverage testing)testing)n用流程图来设计测试用例 n逻辑复盖测试的5种标准发现错误的能力 弱 强语句覆盖每条语句至少执行一次判定覆盖每一判定的每个分支至少执行一次条件覆盖每一判定中的每个条件,分别按“真”、“假”至少各执行一次判定/条件覆盖同时满足判定复盖和条件复盖的要求条件组合覆盖求出判定中所有条件的各
15、种可能组合值,每一可能的条件组合至少执行一次白盒测试白盒测试n路径测试法路径测试法(path testing)path testing)n着眼于程序执行路径的测试方法 n程序图(program graph)n点覆盖n边覆盖n路径覆盖测试用例设计n黑盒测试用例设计n三角形分类程序n见教材p205n白盒测试用例设计n学生成绩查询程序n见教材p208软件的纠错n纠错的策略n试凑法n跟踪法n推理法n常用的纠错技术n插入打印语句n设置断点n掩蔽部分程序n蛮力纠错技术多模块程序的测试策略多模块程序的测试策略 n测试的层次性测试的层次性 n单元(模块)测试(unit testing)n综合(集成)测试(in
16、tegration testing)n确认测试(validation testing)n系统测试(system testing)n程序错误的类型程序错误的类型 n语法错误 n结构性错误 n功能性错误 n接口错误 单元测试单元测试 n目的 n通过模块测试,使其代码达到模块说明书的需求 n任务 n(1)对模块代码进行编译,发现并纠正其语法错误;n(2)进行静态分析,验证模块结构及其内部调用序列是否正确;n(3)确定模块的测试策略,并据此设计一组测试用例和必要的测试软件;n(4)用选定的测试用例对模块进行测试,直至满足测试终止标准为止;n(5)编制单元测试报告。单元测试n实施步骤n编译n静态分析器检
17、查n代码评审n动态测试n测试驱动模块n测试桩模块集成测试集成测试 n目的 n将经过单元测试的模块逐步组装成具有良好一致性的完整的程序 n任务 n制订集成测试实施策略 n确定集成测试的实施步骤,设计测试用例 n逐一地添加模块,进行测试集成测试集成测试n策略与步骤策略与步骤 n自顶向下测试 n先广后深实施步骤 n先深后广实施步骤 n由底向上测试 n混合方式测试(sandwich testing)n对上层模块采取自顶向下测试 n对关键模块或子系统采取由底向上测试 确认测试确认测试 n目的 n确认组装好的程序是否满足(SRS)的要求n任务n有效性测试(黑盒测试)n配置复审(confinguration
18、 review)n验收测试专用n alpha与beta测试通用系统测试系统测试 n目的 n软件安装到系统中以后,能否与系统的其余部分协调运行 n任务n测试是否与硬件协调运行n测试是否和原来就有的其它软件协调运行 n测试是否完成SRS对它的要求 终止测试的标准n规定测试策略和应达标准n规定至少要查出的错误数量面向对象系统的测试面向对象系统的测试 nOO软件的测试策略 nOO软件测试用例设计 OO软件的测试策略nOO软件的单元测试 n全面地测试类和对象所封装的属性和操纵这些属性的操作的整体 n发现类的所有操作中存在的问题 n与其他的类协同工作时可能出现的错误 nOO软件的集成测试 n基于黑盒方法的
19、集成测试 n基于线程的测试(thread-based testing)n基于使用(use-based)的测试 OO软件的测试策略nOO软件的确认测试和系统测试n采用传统的黑盒法 nOOA阶段的用例所描述的用户交互进行测试n导出OO系统测试的测试用例 n对象行为模型n时序图等 n模拟用户实际使用环境 OO软件测试用例设计软件测试用例设计 n(1)每个测试用例都要有一个唯一的标识,并与被测试的一个或几个类相关联起来;n(2)每个测试用例都要陈述测试的目的;(3)对每个测试用例要有相应的测试步骤,包括被测对象的特定状态、所使用的消息和操作、可能产生的错误、测试需要的外部环境等 OO概念对测试用例设计
20、的影响 n继承的成员函数需要测试 n子类的测试用例可以参照父类 n类测试用例设计 n基于故障的测试用例设计n基于用例的测试用例设计n类间测试用例设计 n类关系模型 n类行为模型 第十章第十章 软件复软件复用用软件复用的基本概念软件复用的基本概念领域工程领域工程 基于构件的开发基于构件的开发 面向对象与软件复用面向对象与软件复用 小结小结 软件复用的基本概念软件复用的基本概念 n软件复用的定义软件复用的定义 软件复用的重要性软件复用的重要性 n软件复用的目的是能更快、更好、成本更低地生产软件制品。n一般地说,在软件开发中采用复用构件可以比从头开发这个软件更加容易。软件复用的粒度软件复用的粒度 n
21、按照可复用的粒度,软件制品从小到大分为以下几类:n源代码复用n软件体系结构复用n应用程序生成器n领域特定的软件体系结构的复用领域工程领域工程n所谓的“领域”,指的是一组具有相似或相近软件需求的应用系统所覆盖的功能区域。n通过领域分析(domain analysis)找出最优复用,对它们进行设计和构造,形成为可复用构件,进而建立大规模的软件构件仓库的过程,就是领域工程。横向复用和纵向复用横向复用和纵向复用 n横向复用是指复用不同应用领域中的软件元素。n纵向复用是指在一类具有较多公共性的应用领域之间进行软部品复用。领域分析用户需求软件开发与构件开发目标软件确认可复用构件库检索理解领域分析领域分析
22、n定义n领域分析是在特定应用领域寻找最优复用,以公共对象、类、子集合和框架等形式进行标识、分析和规约。n目标n是获得领域分析模型 领域分析的输入和输出 建造可复用构件建造可复用构件 n创建领域构件的设计框架n 标准数据n 标准接口协议n 程序模板构件模型 建立可复用构件库建立可复用构件库 n三种分类模式 n枚举分类 n门面分类 n属性-值分类 基于构件的开发基于构件的开发 n构件集成模型构件集成模型n应用系统工程应用系统工程面向对象与软件复用面向对象与软件复用 nOOOO方法对软件复用的支持方法对软件复用的支持n复用技术对复用技术对OOOO方法的支持方法的支持小结小结n软件复用是在软件开发中避
23、免重复劳动的解决方案。n通过软件复用,可以提高软件开发的效率和质量。软件复用研究被视为解决软件危机,提高软件生产效率和质量的现实可行的途径。第十一章 软件维护n软件维护的种类 n软件可维护性 n软件维护的实施 n软件维护的管理 n软件再工程 软件维护的种类n完善性维护(perfective maintenance)n适应性维护(adaptive maintenance)n纠错性维护(corrective maintenance)n预防性维护(preventive maintenance)软件可维护性(maintainability)n影响可维护性的软件属性影响可维护性的软件属性 n可理解性(u
24、nderstandability)n可修改性(modifiability)n可测试性(testability)n对可维护性的定量度量 n提高可维护性的途径提高可维护性的途径 n提供完整和一致的文档 n采用现代化的开发方法 软件维护的实施 不严重 维护人员纠错 严重名单测试*已修改 适应 维护人 *的软件员名单 已修改完善高的配置 批准交付低用户的配置 开发项目表 严重性评价错误分析优先度评价维护过程配置复审问题分析区分类型纠错项目表维护的副作用维护的副作用 n修改编码的副作用 n修改数据的副作用 n修改文档的副作用 软件维护的管理软件维护的管理 n维护的机构与人员维护的机构与人员 n维护时期的配置管理维护时期的配置管理 n配置管理数据库 n版本控制 n变动控制n维护管理文档维护管理文档 n维护日志 n维护申请摘要报告和维护趋势图 n维护费用的估算维护费用的估算 软件再工程软件再工程 正向工程信息库分析文档重构逆向工程代码重构数据重构逆向工程重构代码提取抽象求精简化“脏的”源代码干净的源代码初始的设计说明最终的设计说明处理界面数据库软件重构n代码重构n应用最新的设计和实现技术n修改老系统的代码n提高可维护性n数据重构n不改变系统结构