1理解用例用例是黑盒?白盒?用例是相邻系统与系统的交互。涉众代表/用户与系统直接交互的对象其他计算机系统(“参与者”)外部事件(如:满足特定时间)……21.抽象层次是面向对象方法中极其重要且非常难以把握的技巧;2.要想建立好模型,就需学会站在不同的抽象层次考虑问题。3.抽象层次越高,被屏蔽(或者说封装)的信息也就越多,信息量越少也就越容易理解和处理。抽象层次3统一过程一般抽象层次41.什么时候选择什么样的层次以及总共抽象多少层?------用例粒度2.抽象层次与边界的选择总是相生相伴------边界抽象层次相关的问题51.一切都是对象;2.对象都是独立的;3.对象都具有原子性;4.对象都是可抽象的;5.对象都有层次性。对象分析方法62.参与者(actor):定义:actor是在系统之外与系统交互的某人或某事物。如图所示:UML核心元素参与者位于边界之外;参与者可以非人。7发现参与者:参与者的一个重要来源是涉众,从涉众中找出那些直接对系统发出动作,或直接从系统中接收反馈的涉众。在查找参与者的过程中,可以询问以下问题以帮助确定参与者:谁负责提供、使用或删除信息?谁将使用此功能?谁对某个特定功能感兴趣?在组织中的什么地方使用系统?谁负责支持和维护系统?系统有哪些外部资源?其他还有哪些系统将需要与该系统进行交互?UML核心元素8参与者一定是直接并且主动地向系统发出动作并获得反馈的,否则就不是参与者。UML核心元素9业务主角(busunessactor):是参与者的一个构造类型,特别用于定义业务的参与者,在需求阶段使用。业务主角是与业务系统有着交互的人和事物,他们用来确定业务范围。业务主角的特殊性在于它针对的是业务人员而非计算机用户。业务工人(businessworker):处于系统边界内,被动地参与了业务的执行过程。业务工人不是参与者。UML核心元素10参与者与其他成员的关系参与者与涉众(项目干系人、相关方):参与者是涉众代表,他们的要求就是系统需求的来源;参与者与用户(user):用户是系统的使用者。用户是参与者的代表,或者说是参与者的实例或代理。并非所有的参与者都是用户。参与者与角色(role):角色是参与者的职责,角色是一个抽象的概念,从众多参与者的职责中抽象出相同的那一部分,将其命名形成一个角色。一个角色代表了系统的一类职责。由于一个用户可以代理多个参与者,因此一个用户可以拥有多个职责,也就是可以被指定多个角色。UML核心元素11参与者、涉众、和角色的关系UML核心元素123.用例(UseCase)基本概念:官方文档对用例是这样定义的:用例定义了一组用例实例,其中每个实例都是系统所执行的一系列操作,这些操作生成特定主角可以观测的值。一个完整的用例定义由参与者、前置条件、场景、后置条件构成。如图所示:UML核心元素13用例的特征:用例是相对独立的。UML核心元素14用例的特征:用例的执行结果对参与者来说是可观测的和有意义的。UML核心元素15用例的特征:这件事必须由一个参与者发起。不存在没有参与者的用例,用例不应该自动启动。UML核心元素16用例的特征:用例必然是以动宾短语形式出现的。UML核心元素17用例的特征:一个用例就是一个需求单元、分析单元、设计单元、开发单元、测试单元。下图展示了用例如何驱动软件开发活动。UML核心元素18一个大系统和一个很小的系统用例粒度会有较大差别。不论粒度如何选择,必须把握的原则是在同一个需求阶段,所有用例的粒度应该是同一个量级的。用例粒度的大小不是从用例包含的步骤的多少来判断的,粒度与边界有关。UML核心元素19用例的获得:发现用例的前提条件是发现参与者。获取用例的准备工作:UML核心元素参与者是位于系统边界之外的;参与者对系统有着明确的期望和明确的回报要求;参与者的期望和回报要求在系统边界之内。20用例的获得:可以通过以下问题引导业务代表:您对系统有什么期望?您打算在这个系统里做些什么事情?您做这件事的目的是什么?您做完这件事情有一个什么样的结果?在此过程中需要确保:一个明确的有效的目标才是一个用例的来源。一个真实的目标应当完备地表达主角的期望。一个有效的目标应当在系统边界内,由主角发动,并具有明确的后果。UML核心元素21用例与功能22用例与功能这个事物是什么?这个事物能做什么?人们能够用这个事物做什么?23理解用例与功能练习请分别从功能角度和用例角度出发描述我们所熟悉的电视。从功能角度出发,对电视的描述是能开关,能显示节目,可以调频道,可以调声音,以上四者是独立的;从用例角度出发,对电视的描述是有一个人要观看电视节目的用例,要完成这个用例,第一步需要先打开开关,调到自己喜欢的频道,如果声音不合适,可以调节一下,以上三者是因人的需求而相关起来的。24UML核心元素———用例如何理解目标与步骤的误区?假设邮局是一个目标系统,作为寄信人这样一个参与者,对邮局有着寄信的愿望。以完整目标作为用例:25UML核心元素———用例如何理解目标与步骤的误区?假设邮局是一个目标系统,作为寄信人这样一个参与者,对邮局有着寄信的愿望。如果以完成这个完整目标的步骤作为用例:26例:有这样一个需求:“客户提出要建立的系统界面很友好,在每个页面上都要有操作提示。”不存在没有参与者的用例27例:“每天自动统计网页访问量,生成统计报表,并发送至管理员信箱。”这个需求的参与者是谁?参与者可以非人28UML核心元素———边界边界在UML图符里的定义只是一个简单的矩形框,矩形框的四个边决定了边界的内外。边界本质上是面向对象方法的一个很重要的概念,与封装的概念师出同源。系统边界是看不到的,与其说是系统边界,倒不如说是需求的集合。29UML核心元素———边界边界决定视界边界决定抽象层次灵活使用边界边界是无形的30事件驱动的用例现在我们讨论将工作划分为用例的万无一失的方法,并继续探索构建最好产品之路。31项目启动业务事件清单网罗知识风险承担者上下文范围编写规格说明书为需求作原型潜在需求32预测和调度道路除冰的工作气象站气象预报局道路工程热像图提供者卡车车库33如何发现最合适的用例?一、理解工作•我们今天研究的任何领域的工作都有太大而难于理解的趋势。•当我们说“工作”的时候,并不是仅仅指计算机系统,不管是现有系统还是期望的系统。我们指的是开展业务的整个系统。•因为该工作的范围很大,如果试图从整体上来处理它,不仅是我们这些作为系统分析师和设计者的人不能理解该工作,我们的顾客和用户也会没有机会来向我们解释工作。•通过发现工作更小的、更专门的部分,我们有更好的机会来发现用户,用户是这部分工作的专家。34如何发现最合适的用例?•我们需要将工作划分为小一些的部分。出于需求收集和系统分析的需要,我们寻找符合以下条件的部分:是“自然的”部分---它们是工作的明显的部分;与工作的其他部分的连接数目最少;有一个明确定义的范围;有一些规则来定义它们的范围;有可以描述和量化的边界;可以使用业务专家熟悉的名称来命名,业务专家指客户、顾客和用户;它们的存在可以很容易地确定;用户知道;我们可以确定一个或多个用户,他们是这部分工作的专家。35如何发现最合适的用例?二、用例和它们的范围•这个工作的范围必须包括预期的参与者和他要做的工作,也包括工作的相邻系统的知识。在我们为工作建立了一个令人满意的范围之后,再将它分解为较小的部分。从这些部分中我们来确定用例。我们可以采取以下步骤:首先,建立工作的范围。确定围绕工作的相邻系统。确定工作与相邻系统之间的联系。从联系开始,识别影响工作的业务事件。研究对业务事件的响应。确定组织对事件能作出的最好响应。确定产品在响应中的角色。确定产品的用例。针对每个用例导出需求。36如何发现最合适的用例?三、工作•工作是客户的业务活动。•不管这种活动是什么---不管它是商务的、科学的、工程的,或其他形式的------我们打算构建自动化产品将是一个有助于工作的工具。•问:为了理解工作,从哪里入手?•答:首先必须知道它与外界是怎样联系的。•问:展示工作与外界联系最有用的方法是什么?•答:展示工作与外界联系的最方便、最有用的方法是使用一个上下文范围图。37预测和调度道路除冰的工作气象站气象预报局道路工程热像图提供者卡车车库经验法则:工作上下文范围包括了所有允许你改变的东西,以及一些你不能改变的东西。38如何发现最合适的用例?三、工作------外界•相邻系统是与我们的工作相连的世界的一部分。•问:我们为什么要对相邻系统感兴趣?•答:因为它们常常作为我们的工作提供服务的顾客,或者它们提供我们的工作所需的服务。通过上下文范围图中建立起来的联系,你可以看到这一点。通过这些联系,相邻系统对工作产生重要影响。•经验法则:你从越远的地方来看期望的自动化系统,就越可能发现产品的有用之处。39如何发现最合适的用例?四、业务事件•业务对事件做出响应。•我们将对每个事件的响应视为要研究的一个工作单元。•通常,业务事件的响应是通过数据流的到达来触发的。喂,我们新修了一条道路,我们在路上放了一个气象站,道路坐标是……工作道路工程改变的道路40如何发现最合适的用例?四、业务事件•时间性的业务事件通过时间流逝来触发------是时候该我们的工作来做某些事情了。工作卡车车库又到了为卡车车库产生除冰调度计划的时间道路除冰调度计划41如何发现最合适的用例?五、发现业务事件•我们已经知道,业务事件是针对工作所发生的一些事情。•问:如何发现对工作都发生了哪些业务事件?•答:如果针对工作发生了某事,工作必然会接受到它发生的通知。这表明在外界(记住:事件是在工作范围之外的发生的)和工作之间必然存在某种形式的交流。在时间触发事件的情况中,也存在一种交流,但这次是从工作流向外界的信息。(如果工作做了一些事情,却没有任何人或外界系统,这是意义不大的。)•问:寻找工作与外界之间交流的地方在哪里?•答:上下文范围图42预测和调度道路除冰的工作气象站气象预报局道路工程热像图提供者卡车车库请注意连接相邻系统与工作的数据流。43请注意连接相邻系统与工作的数据流。事件名称输入和输出数据流1、气象站传送读数气象站读数(入)2、气象局预报天气区域气象报告(入)3、道路工程师通知改变的道路改变的道路(入)4、道路工程师安装了新的气象站新的气象站(入)5、道路工程师改变了气象站改变的气象站(入)6、到了测试气象站的时间失效的气象站告警(出)7、卡车车库改变了卡车卡车改变(入)修订的除冰调度计划(出)8、到了检测结冰道路的时间道路除冰调度计划(出)9、卡车处理了一条道路已处理的道路(入)10、卡车车库报告卡车出问题卡车故障(入)修订的除冰调度计划(出)11、到了监控道路除冰的时间对没处理的道路进行提醒(出)44如何发现最合适的用例?六、工作对事件的响应•针对每个业务事件,有一个预先计划的对它的响应,即无论在什么时候业务事件发生所要进行的工作。•对一个业务事件的响应是持续的。为什么?•答:它包括了所有工作要完成的事情,直到从逻辑上来说无事可做为止------所有的处理已经完成,所有要存储的数据已被存储,所有的相邻系统已经通知到。相邻系统处理过程处理过程处理过程存储的数据存储的数据工作边界45如何发现最合适的用例?七、相邻系统的角色•相邻系统是为工作提供信息和服务或从工作接收信息和服务的系统。一个相邻系统可能是一个组织、一个人、一种技术,或三者的组合。•相邻系统是业务事件的顾客方。•当你研究对事件的响应时,请考虑相邻系统希望从事件中得到什么?扮演的角色或可能潜在的角色是什么?相邻系统的技术能力如何?是否有能力与该产品进行交互?它是人吗?它是否具备某种交互技术能力?从相邻系统的角度来看,期望的成果是什么?从工作的角度来看,期望的成果是什么?46如何发现最合适的用例?七、相邻系统的角色•你要构建的产品很大程度上是由相邻系统决定的。显然我们要理解