1、第一章*1、软件危机是指在计算机软件的(开发)和(维护过程)中遇到的一系列严重问题。2、软件危机主要的典型表现:(1)对软件开发成本和进度的估计不准确(2)用户对“已完成的”软件系统不满意的现象经常发生(3)软件产品的质量往往靠不住(4)软件常常是不可维护的(5)软件通常没有适当的文档资料(6)软件成本在计算机系统总成本中所占的比例逐年上升(7)软件开发生产率提高的速度,既跟不上硬件发展的速度,也远远跟不上计算机应用迅速普及深入的趋势3、软件危机产生的原因原因一:软件本身的特点原因二:软件开发与维护的方法不正确4、消除软件危机的途径(1)对计算机软件应当有一个正确的认识;(2)应当有组织、有计
2、划、通过严格的管理手段进行软件的开发;(3)及时总结软件开发的成功技术和方法并加以推广;(4)开发和使用更好的软件工具;总之,为了解决软件危机,既要有技术措施,又要有必要的组织管理措施。*5、什么是软件工程?软件工程是研究软件生产的一门学科。它采用工程的概念、原理、技术和方法来开发和维护软件,把经过时间考验而证明正确的管理技术和当前能够得到的最好的技术方法结合起来,以达到经济地开发出高质量的软件并有效的维护它的目的。6、软件工程的基本原理(1)用分阶段的生命周期计划严格管理(2)坚持进行阶段评审(3)实行严格的产品控制(4)采用现代程序设计技术(5)结果应能清楚的审查(6)开发小组的人员应该少
3、而精(7)承认不断改进软件工程实践的必要性第二章*1、软件生命周期分为哪几个阶段?软件生命周期由软件定义、软件开发和运行维护 3 个时期组成。软件定义包括:问题定义、可行性研究、需求分析。软件开发包括:概要设计、详细设计、编码和单元测试、综合测试 或 设计与实现*2、各阶段应该完成的基本任务及提交什么文档(1)问题定义:确定要解决的问题是什么。 问题定义的书面报告(2)可行性研究:确定是否有解决办法。 可行性研究报告(3)需求分析:为了解决问题,目标系统必须做什么。 需求分析规格说明书(4)概要设计:确定如何解决这些问题。 概要设计说明书(5)详细设计:确定如何具体实现这个系统。 详细设计说明
4、书(6)编码:写出正确的,容易理解、容易维护的程序模块。 源程序文档(7)测试:通过各种类型的测试使软件达到预期的要求。 软件测试报告(8)软件维护:通过各种必要的维护活动使系统持久的满足用户的需求。软件维护报告*3、瀑布模型:瀑布模型是将软件生存周期的各项活动规定为按固定顺序而连接的若干阶段工作,形如瀑布流水,最终得到软件产品。 快速原型模型:快速原型模型第一步是快速建立一个能反映用户主要需求的原型系统,让用户在计算机上试用它,用户试用后提出修改意见,开发人员按照用户的意见快速的修改原型系统,然后再请用户使用直到开发出客户满意的软件产品。增量模型:把软件产品作为一系列的增量构建来设计,编码,
5、集成和测试。螺旋模型:将瀑布模型和快速原型模型结合起来,将软件过程划分为若干个开发回线,每一个回线表示开发过程的一个阶段。喷泉模型:喷泉模型是一种以用户需求为动力,以对象作为驱动的模型,适合于面向对象的开发方法。(1)瀑布模型的优缺点:瀑布模型的优点可以强迫开发人员采用规范的方法;严格规定了每个阶段必须提交的文档;要求每个阶段交出的所有产品都必须经过质量保证小组的仔细验证。瀑布模型的缺点在软件开发的初期阶段就要求做出正确、全面、完整的需求分析对许多应用软件来说是极其困难的。在需求分析阶段,当需求确定后,无法及时验证需求是否正确、完整。作为整体开发的瀑布模型,由于不支持产品的演化,缺乏灵活性,对
6、开发过程中很难发现的错误,只有在最终产品运行时才能暴露出来,从而使软件产品难以维护。瀑布模型适用的场合瀑布模型一般适用于功能、性能明确、完整、无重大变化的软件系统的开发。例如操作系统、编译系统、数据库管理系统等系统软件的开发。应用有一定的局限性。(2)快速原型模型适用的场合原型模型比瀑布模型更符合人们认识事物的过程和规律,是一种较实用的开发框架。它适合于那些不能预先确切定义需求的软件系统的开发,更适合于那些项目组成员(包括分析员、设计员、程序员和用户)不能很好交流或通信有困难的情况。(3)增量模型的优点能在较短时间内向用户提交可完成部分工作的产品。逐步增加产品功能可以使用户有较充裕的时间学习和
7、适应新产品,从而减少一个全新的软件可能给客户组织带来的冲击。增量模型的缺点在把每个新的增量构件集成到现有软件体系结构中时,必须不破坏原来已经开发出的产品。此外,必须把软件的体系结构设计的便于按照这种方式进行扩充,向现有产品中加入新构件的过程必须简单、方便,这就意味着需要更精心的设计。(4)螺旋模型的优点对可选方案和约束条件的强调有利于已有软件的重用,也有助于把软件质量作为软件开发的一个重要目标。减少了过多测试或测试不足所带来的风险。在螺旋模型中维护只是模型的另一个周期,在维护和开发之间并没有本质区别。螺旋模型的缺点如果每次迭代的效率不高,致使迭代次数过多,将会增加成本并推迟提交时间。使用该模型
8、需要有相当丰富的风险评估经验和专门知识,要求开发队伍水平较高。螺旋模型适用的场合支持需求不明确、特别是大型软件系统的开发,并支持面向规格说明、面向过程、面向对象等多种软件开发方法,是一种具有广阔前景的模型。(5)喷泉模型的优点 喷泉模型不像瀑布模型那样,需要分析活动结束后才开始设计活动,设计活动结束后才开始编码活动。该模型的各个阶段没有明显的界限,开发人员可以同步进行开发。其优点是可以提高软件项目开发效率,节省开发时间,适应于面向对象的软件开发过程。 喷泉模型的缺点 由于喷泉模型在各个开发阶段是重叠的,因此在开发过程中需要大量的开发人员,因此不利于项目的管理。此外这种模型要求严格管理文档,使得
9、审核的难度加大,尤其是面对可能随时加入各种信息、需求与资料的情况。 *4、喷泉模型是典型的面向对象生命周期模型。采用瀑布模型或快速原型模型开发软件时,目标都是一次就把一个满足需求的产品提交给用户。增量模型则与之相反,它分批地逐步向用户提交产品,每次提交一个满足用户需求子集的可运行的产品5、Rational 统一过程(RUP)是由 Rational 软件公司推出的一个软件开发过程框架。6、极限编程:把好的开发实践运用到极致。7、能力成熟度模型(CMM):有助于软件开发组织建立一个有规律的、成熟的软件过程。第三章*1、数据流图(DFD):是一种图形化技术,它描绘信息流和数据从输入移动到输出的过程中
10、所经受的变换。数据流图 描绘系统的逻辑模型,是结构化系统分析的主要工具。顶层 DFD 确定系统边界。*2、数据字典:所有与数据流图相关的数据元素的有组织的列表,并且包含了对这些数据与元素的精确、严格的定义,从而使得用户和系统分析员双方对输入、输出、 存储的成分甚至中间计算结果有共同的理解。3、分析模型包括:数据模型、功能模型、行为模型。分析模型的核心是“数据字典” ,它描述软件使用或产生的所有数据对象。4、创建“数据流图”的两个目的:(1)指出当数据在软件系统中移动时怎么被变换(2)描绘变换数据流的功能和子功能。5、56 页计算及习题 1、2、5第四章*1、模块是由边界元素限定的相邻的程序元素
11、(如数据说明,可执行的语句)的序列,而且有一个总体标识符来代表它。2、67 页 图 4.23、抽象:抽出事物的本质特性而暂时不考虑它们的细节。4、逐步求精:为了能集中精力解决主要问题而尽量推迟对问题细节的考虑。5、信息隐藏:每个模块的实施细节对于其他模块来说是隐蔽的。*6、耦合:对一个软件结构内不同模块之间互连程度的度量。内聚:一个模块内各个元素彼此结合的紧密程度的度量。7、按内聚性由弱到强排列,内聚可分为:偶然内聚、逻辑内聚、时间内聚、过程内聚、 通信内聚、顺序内聚及功能内聚。按耦合性由高到低排列,耦合可分为:内容耦合、公共耦合、外部耦合、控制耦合、标记耦合、数据耦合以及非直接耦合。一个设计
12、良好的软件系统应具有高内聚、低耦合的特征。在结构化程序设计中,模块划分的原则是:模块内具有高内聚度,模块间具有低耦合度。8、启发规则(1)改进软件结构提高模块独立性(2)模块规模应该适中(3)深度、宽度、扇出和扇入都应适当(4)模块的作用域应该在控制域之内(5)力争降低模块接口的复杂程度(6)设计单入单出口的模块(7)模块功能应该可以预测*9、表示软件结构的图形工具包括:层次图、HIPO 图、结构图。10、变换流:由输入、变换(或处理) 、输出三部分组成。事物流:某个加工将它的输入流分离成许多发散的数据流,形成许多加工路径,并根据输入选择其中一个路径来执行。*11、4.9 节会画图 习题 11
13、、13第五章1、编码包括:选择程序设计语言、编码风格。2、测试是为了发现程序中的错误而执行程序的过程好的测试方案是极可能发现迄今为止尚未发现的错误的测试方案成功的测试是发现了迄今为止尚未发现的错误的测试*3、测试:为了发现软件中的错误而执行程序的过程*4、白盒测试:白盒法测试把测试对象看作一个透明的盒子,也就是了解程序内部结构和处理过程,以检查处理过程的细节为基础,对程序中尽可能多的逻辑路径进行测试,检验内部控制结构和数据结构是否有错,实际的运行状态与预期的状态是否一致。黑盒测试:黑盒测试法把被测试对象看成是一个黑盒子,完全不考虑程序的内部结构和处理过程,只在软件接口处进行测试,依据需求规格说
14、明书,检查程序是否满足功能要求。5、测试发现的错误中的 80%很可能是由程序中 20%的模块造成的。*6、逻辑覆盖是设计白盒测试方案的一种技术。测试方案包括具体的测试目的(如要测试的具体功能) ,应该输入测试数据和预期的输出结果。*7、 白盒法有下列几种覆盖标准(会测试数据取值,知道流程图)语句覆盖:选择足够的测试用例,使得程序中每一个语句至少都能被执行一次。判定覆盖:使设计的测试用例保证程序中每个判断的每个取值分支(T 或 F)至少经历一次。条件覆盖:设计的测试用例保证程序中每个判断的每个条件的可能取值至少执行一次。判断/条件覆盖:设计足够的测试用例,使判断中每个条件的所有可能取值至少执行一
15、次,同时每个判断的所有可能取值分支至少执行一次。条件组合覆盖:选取足够多的测试数据,使得每个判定表达式中条件的各种可能组合 都至少出现一次。覆盖的强度依次是(发现错误的能力):语句覆盖判定覆盖条件覆盖判断/条件覆盖条件组合覆盖*8、黑盒测试的方法及应用:等价划分、边界值分析、错误推测。(1)等价划分它将输入数据域按有效的或无效的(也称合理的或不合理的)划分成若干个等价类,测试每个等价类的代表值就等于对该类其他值的测试。使用这一方法时,完全不考虑程序的内部结构,只依据程序的规格说明来设计测试用例。使用这一方法设计测试用例要经历划分等价类(列出等价类表)和选取测试用例两步。(2)边界值分析经验表明
16、:程序往往在处理边界情况时发生错误 。边界情况指输入等价类和输出等价类边界上的情况。使用边界值分析法设计测试用例时,一般与等价类划分结合起来,将测试边界情况作为重点目标,选取正好等于、刚刚大于或刚刚小于边界值的测试数据。(3)错误推测错误推测法:根据经验或直觉推测程序中可能存在的各种错误,从而有针对性地编写检查这些错误的测试用例。9、软件测试过程一般按 4 个步骤进行:单元测试、集成测试、确认测试和系统测试。了解各阶段测试什么,确认什么?a) 单元测试单元测试的内容:模块接口、局部数据结构、重要的执行路径、错误处理、边界测试单元测试的目的在于发现各模块内部可能存在的各种差错。单元测试又称模块测
17、试、逻辑测试或结构测试。测试的方法一般采用白盒法。单元测试需要从程序的内部结构出发设计测试用例,以路径覆盖为最佳准则,且系统内多个模块可以并行地进行测试。模块并不是一个独立的程序,在考虑测试模块时,同时要考虑它和外界的联系,用一些辅助模块去模拟与被测模块相联系的其它模块。b) 集成测试集成测试,也叫组装测试或联合测试。在单元测试的基础上,将所有模块按照设计要求(如根据结构图组装成为子系统或系统,进行集成测试。实践表明,一些模块虽然能够单独地工作,但并不能保证连接起来也能正常的工作。程序在某些局部反映不出来的问题,在全局上很可能暴露出来,影响功能的实现。集成测试常用方法:非渐增式测试和渐增式测试
18、i. 非渐增式测试:首先对每个模块分别进行单元测试,然后再把所有模块按设计要求组装在一起,再进行整体测试,也称为一次性组装测试。ii. 渐增式测试:逐个把未经过测试的模块组装到已经测试过的模块上去,进行集成测试。每加入一个新模块进行一次集成测试,重复此过程直至程序组装完毕。1. 自顶向下集成:自顶向下集成是构造程序结构的一种增量式方式。它从主控模块开始,按照软件的控制层次结构,以深度优先或广度优先的策略,逐步把各个模块集成在一次。该方法不需要写驱动模块,只需编写桩模块。2. 自底向上集成:自底向上集成是从软件结构最底层的模块开始组装测试,因测试到较高层模块时,所需的下层模块功能均已具备,所以该
19、方法仅需编写驱动模块,不需编写桩模块。c) 确认测试确认测试又称有效性测试。任务是验证软件的功能和性能及其它特性是否与用户的要求一致。对软件的功能和性能要求在软件需求规格说明书中已经明确规定。它包含的信息就是软件确认测试的基础。确认测试阶段有两项工作:有效性测试测试、软件配置审查。d) 系统测试系统测试,是将通过确认测试的软件,作为整个基于计算机系统的一个元素,与计算机硬件、外设、某些支持软件、数据和人员等其它系统元素结合在一起,在实际运行环境下,对计算机系统进行一系列的组装测试和确认测试。系统测试的目的在于通过与系统的需求定义作比较,发现软件与系统的定义不符合或与之矛盾的地方。测试类型:功能
20、测试、性能测试、压力测试、安全性测试、恢复测试、安装测试。*10、软件可靠性:程序在给定的时间间隔内,按照规格说明书的规定成功运行的概率。软件可用性:程序在给定的时间点,按照规格说明书的规定,成功运行的概率。可靠性和可用性之间的主要差别是:可靠性意味着在 0 到 t 这段时间间隔内系统没有失效,而可用性只意味着在时刻 t,系统是正常运行的。一般说来,对于任何其故障是可以修复的系统,都应该同时使用可靠性和可用性衡量它的优劣程度。11、了解 134 页几个公式 习题 4(3) 、9、10、11第六章1、面向对象方法的四个要点(1)认为客观世界是由各种对象组成的,任何事物都是对象;复杂的对象可以由比
21、较简单的对象以某种方式组合而成(2)把所有对象都划分成各种对象类(简称为类 Class) ,每个对象类都定义了一组数据和一组方法(3)按照子类(或称为派生类)与父类(或称为基类)的关系,把若干个对象类组成一个层次结构的系统(也称为类等级)(4)对象彼此之间仅能通过传递消息互相联系面向对象=对象+类+继承+通信*2、对象:对象是具有相同状态的一组操作的集合。*3、类:类是对具有相同属性和行为的一个或多个对象的描述,通常在这种描述中也包括了对怎么创建该类的新对象的说明。封装:封装就是把某个事物包起来,使外界不知道该事物的具体内容。继承:继承是子类自动地共享基类中定义的数据和方法的机制。4、一个典型
22、的软件系统组合了三方面的内容:它使用数据结构(对象模型) ,执行操作(动态模型) ,并且完成数据值的变化(功能模型) 。对象模型始终是最重要的、最根本的、最核心的。功能模型由一组数据流图组成。*5、面向对象开发过程中三种模型:对象模型、动态模型、功能模型。6、属性的可见性(可访问性)通常分为三种:公有的(public) 、私有的(private) 、保护的(protected)分别用加号(+) 、减号(-) 、井号(#)表示。7、知道 158 页常用符号(画图用) (关联、聚集、泛化)8、功能模型由一组数据流图组成。第七章1、面向对象分析(OOA)的关键就是识别出对象与类,并分析它们之间的关系
23、,最终建立对象模型、动态模型和功能模型。2、分析工作主要包括:理解、表达、验证。3、面向对象分析,就是抽取和整理用户需求并建立问题域精确模型的过程。4、对象模型的五个层次:主题层(范畴层) 、类与对象层、结构层、属性层、服务层。面向对象开发过程中三种模型:对象模型、动态模型、功能模型。见图 7.1 166 页5、会画类图6、建立对象模型(1)确定类与对象(2)确定关联(3)划分主题(4)确定属性(5)识别继承关系(6)反复修改7、筛选出正确的类与对象(依据标准如下)(1) 冗余如果两个类表达了同样的信息,则应该保留在此问题域中最富于描述力的名称。(2) 无关现实世界中存在许多对象,不能把它们都
24、纳入到系统中去,仅需要把与本问题密切相关的类与对象放进目标系统中。有些类在其他问题中可能很重要,但与当 前要解决的问题无关,同样也应该把它们删掉。(3) 笼统在需求陈述中常常使用一些笼统的、泛指的名词,虽然在初步分析时把它们作为候选的类与对象列出来了,是,要么系统无须记忆有关它们的信息,要么在需求陈述中有更明确更具体的名词对应它们所暗示的事务,因此,通常把这些笼统的或模糊的类去掉。(4) 属性在需求陈述中有些名词实际上描述的是其他对象的属性,应该把这些名词从候选类与对象中去掉。当然, 如果某个性质具有很强的独立性,则应把它作为类而不是作为属性。(5) 操作在需求陈述中有时可能使用一些既可作为名
25、词,又可作为动词的词,应该慎重考虑它们在本问题中的含 义,以便正确地决定把它们作为类还是作为类中定义的操作。(6) 实现在分析阶段不应该过早地考虑怎样实现目标系统。因此,应该去掉仅和实现有关的候选的类与对象。在设 计和实现阶段,这些类与对象可能是重要的,但在分析阶段过早地考虑它们反而会分散我们的注意力。8、确定属性(选择属性时的常见几种情况)(1)误把对象当做属性(2)误把关联类的属性当做一般对象的属性(3)把限定误当成属性(4)误把内部状态当成属性(5)过于细化的分析阶段应该忽略那些对大多数操作都没有影响的属性(6)存在不一致的属性9、建立动态模型步骤:(1)编写典型交互行为的脚本(2)从脚
26、本中提取出事件(3)排列事件发生的次序(4)比较各个对象的状态图*10、脚本:指系统在某一执行期间内出现的一系列事件。编写脚本时,首先编写正常情况的脚本,然后考虑出错的情况。11、了解事件跟踪图、状态图 180、182 页第八章1、优秀设计:就是权衡了各种因素,从而使得系统在整个生命周期中的总开销最小的设计。优秀设计的一个重要特点就是容易维护。2、人类解决复杂问题是普遍采用的策略是“分而治之,各个击破” 。3、面向对象设计模型四个组成部分:(1)问题域子系统通过面向对象分析所得出的问题域精确模型,为设计问题域子系统奠定了良好的基础,建立了完整的框架。只要可能,就应该保持面向对象分析所建立的问题
27、域结构。通常, 面向对象设计仅需从实现角度对问题域模型作一些补充或修改,主要是增添、合并或 分解类 对象、属性及服务,调整继承关系等。当问题域子系统过分复杂庞大时, 应该把它进一步分解成若干个更小的子系统。(2)人-机交互子系统设计人-机交互界面的准则遵循下列准则有助于设计出让用户满意的人-机交互界面。 1. 一致性使用一致的术语,一致的步骤,一致的动作2. 减少步骤应使用户为做某件事情而需敲击键盘的次数、点按鼠标的次数、或者下拉菜单的 距离,都减至最少。还应使得技术水平不同的用户,为获得有意义的结果所需使 用的时间都减至最少。特别应该为熟练用户提供简捷的操作方法(例如,热键)。 3. 及时提
28、供反馈信息每当用户等待系统完成一项工作时,系统都应该向用户提供有意义的、及时的反 馈信息,以便用户能够知道系统目前已经完成该项工作的多大比例。4. 提供撤消命令人在与系统交互的过程中难免会犯错误,因此,应该提供“撤消(undo)”命令, 以便用户及时撤消错误动作,消除错误动作造成的后果。5. 无须记忆不应该要求用户记住在某个窗口中显示的信息,然后再用到另一个窗口中,这是 软件系统的责任而不是用户的任务。此外,在设计人-机交互部分时应该力求达到下述目标:用户在使用该系统时用于 思考人-机交互方法所花费的时间减至最少,而用于做他实际想做的工作所用的时 间达到最大值。更理想的情况是,人-机交互界面能
29、够增强用户的能力。6. 易学人-机交互界面应该易学易用,应该提供联机参考资料,以便用户在遇到困难时可 随时参阅。7. 富有吸引力人-机交互界面不仅应该方便、高效,还应该使人在使用时感到心情愉快,能够从 中获得乐趣,从而吸引人去使用它。(3)任务管理子系统分析并发性通过面向对象分析建立起来的动态模型,是分析并发性的主要依据。如果两个对象彼此间不存在交互,或者它们同时接受事件,则这两个对象在本质上是并发的。设计任务管理子系统常见的任务有事件驱动型任务、时钟驱动型任务、优先任务、关键任务和协调任务等。 设计任务管理子系统,包括确定各类任务并把任务分配给适当的硬件或软件去执行。 1. 确定事件驱动型任
30、务某些任务是由事件驱动的,这类任务可能主要完成通信工作。2. 确定时钟驱动型任务某些任务每隔一定时间间隔就被触发以执行某些处理,例如,某些设备需要周期性 地获得数据;某些人-机接口、子系统、任务、处理器或其他系统也可能需要周期性 地通信。在这些场合往往需要使用时钟驱动型任务。3. 确定优先任务优先任务可以满足高优先级或低优先级的处理需求。 高优先级:某些服务具有很高的优先级,为了在严格限定的时间内完成这种服务,可能需要把这类服务分离成独立的任务。 低优先级:与高优先级相反,有些服务是低优先级的,属于低优先级处理(通常指那些背景处理)。设计时可能用额外的任务把这样的处理分离出来4. 确定关键任务
31、关键任务是有关系统成功或失败的关键处理,这类处理通常都有严格的可靠性要求。在设计过程中可能用额外的任务把这样的关键处理分离出来,以满足高可靠性处理的要求。对高可靠性处理应该精心设计和编码,并且应该严格测试。5. 确定协调任务当系统中存在三个以上任务时,就应该增加一个任务,用它作为协调任务。6. 尽量减少任务数必须仔细分析和选择每个确实需要的任务。应该使系统中包含的任务数尽量少。7. 确定资源需求使用多处理器或固件,主要是为了满足高性能的需求。设计者必须通过计算系统载荷(即每秒处理的业务数及处理一个业务所花费的时间),来估算所需要的 CPU(或其他固件)的处理能力。(4)数据管理子系统数据管理子
32、系统是系统存储或检索对象的基本设施,它建立在某种数据存储管理系统之上,并且隔离了数据存储管理模式(文件、关系数据库或面向对象数据库)的影响。第九章1、面向对象语言:纯面向对象的语言(Smalltalk,Eiffel),混合型面向对象语言(C+)2、两种管理内存的方法:(1)有语言的运行机制自动管理内存,即提供自动回收“垃圾 ”的机制(2)有程序员编写释放内存的代码3、测试策略:(1)面向对象的单元测试(2)面向对象的集成测试(3)面向对象的确认测试4、简单了解 设计测试用例 227 页第十章1、统一建模语言(UML)2、UML 组成:视图(view) 、图(diagram) 、模型元素(mod
33、el element) 、通用机制(general mechanism);3、UML 的主要内容可以用五类图(9 种图形)来定义:(重点前三类)(1)用例图(use-case diagram)(2)静态图(static diagram):有类图(class diagram)和对象图(object diagram)(3)行为图(behavior diagram):状态图(state diagram)和活动图(activity diagram)(4)交互图(interactive diagram):顺序图(sequence diagram)协作图(collaboration diagram)(5)
34、实现图(implementation diagram):构件图(component diagram) 部署图(deployment diagram)4、第一类是用例图,从用户角度描述系统功能,并指出各功能的操作者。第二类是静态图(Static diagram),包括类图、对象图和包图。其中类图描述系统中类的静态结构。不仅定义系统中的类,表示类之间的联系如关联、依赖、聚合等,也 包括类的内部结构(类的属性和操作)。类图描述的是一种静态关系,在系统的整个生 命周期都是有效的。对象图是类图的实例,几乎使用与类图完全相同的标识。他们的 不同点在于对象图显示类的多个对象实例,而不是实际的类。一个对象图是
35、类图的一 个实例。由于对象存在生命周期,因此对象图只能在系统某一时间段存在。包由包或 类组成,表示包与包之间的关系。包图用于描述系统的分层结构。第三类是行为图(Behavior diagram)描述系统的动态模型和组成对象间的交互关系。 其中状态图描述类的对象所有可能的状态以及事件发生时状态的转移条件。通常状态 图是对类图的补充。在实用上并不需要为所有的类画状态图,仅为那些有多个状 态其行为受外界环境的影响并且发生改变的类画状态图。而活动图描述满足用例 要求所要进行的活动以及活动间的约束关系,有利于识别并行活动。5、UML 的最终用途-为不同领域的人提供统一的交流语言。6、UML 的重要性在于
36、,表示方法的标准化有效地促进了不同背景的人的交流,有效地促进了软件分析、设计、编码和测试人员的相互理解。7、UML 适用于软件开发的全过程(1)需求分析:可以用用例来捕获用户的需求。(2)分析:分析阶段主要关心问题域中的基本概念(如抽象、类、对象等)和机制,需要识别这些类以及它们相互间的关系,可以用 UML 的逻辑视图和动态视图来描述。(3)设计:设计阶段用和分析阶段类似的方式使用 UML。(4)构造(编码):这个阶段的任务是把来自设计阶段的类转换成某种面向对象程序设计语言的代码。(5)测试:UML 模型作为测试阶段的依据,不同的测试小组使用不同的 UML 图作为他们工作的依据。单元测试使用类图和类规格说明书;集成测试使用构件图和协作图;系统测试使用用例图来验证系统行为;8、UML 的静态建模机制包括用例(use case)图、类图、对象图、包等。9、会画用例图、类图 237、239、241 页 10、创建用例模型的工作包括:定义系统,寻找行为者和用例、描述用例、定义用例之间的关系、确认模型。其中,寻找行为者和用例是关键。