zoukankan      html  css  js  c++  java
  • Rose实例:构造银行业务模型[转]

    作者:Richard Felsinger 著,盖九宇 译    本文选自:UMLChina  2002年11月07日
     

    前面的文章中,我们从Rational Rose开始,启动并建立了一个类图。今天我们的任务就是要通过BankAPP实例来了解如何用Rose构造业务模型。

    业务企业模型


    业务前景,目标,组织-分别提供

    业务事件[UML信号事件-指定的激励表格或文档]和过程(UML 用例)

    过程名 参与者 事件/输入 转换 事件/输出 约束 描述 引用 联系点
    WithdrawFromAccount Customer,Teller,BankDB WithdrawRequest UpdateAccount WithdrawRecord        





    [译注:Customer:客户;Teller:出纳员 ;withdraw:取款;account:账户;BankDB:银行数据库]

    Business Actors, Business Workers,业务实体(问题域实体)

    业务参与者(UML 参与者) 业务员(UML 参与者) 业务实体(UML 类)
    Customer Teller Account,SavingsAccount,CheckingAccount





    [译注:saving:储蓄;checking:支票]

    业务规则目录

    规则标识符 参与者,实体,过程 描述:IF条件..then 动作 区域 引用 联系点(Point of Contact)
    ValidAccount Account If AccountNum 有效,then Acccount 有效      



    业务接口(指定操作集)-由架构师提供



    业务模式目录-参见《Business Modeling with UML》(Eriksson 和Penker 著)。

    业务术语-待完备

    业务系统体系结构-由架构师提供



    需求模型


    需求BankApp应该管理支票和存款账户的存款和取款。将来(还要提供)查询,转账,透支,等等从TellerGUI 到BankApp的输入/输出: sAcctNum, nDeposit, nWithdraw,sText。从BankApp 到BankDB的输入/输出: sAcctNum, nDeposit, nWithdraw.

    需求可追踪性表需求号,名称,引用,用例名,UML元素,测试用例,描述,职责。

    需求可追踪性表(部分)


    需求编号 需求名 引用 用例名 UML元素 测试实例 描述 职责
    1.1 DepositToSavingsAccount   DepositToSavingsAccount BankPkg      
    1.2 DepositToCheckingAccount   DepositToCheckingAccount BankPkg      
    1.3 WithdrawFromSavingAccount   WithdrawFromSavingAccount BankPkg      
    1.4 WithdrawFromCheckingAccount   WithdrawFromCheckingAccount BankPkg      



    需求-用例图-所有用例




    Rose用例图在浏览器窗口,选择Use Case View;Main Use CaseDiagram;在图上放置参与者,用例,关系[Rose单向关联(Unidirectional Association)],泛化;选择每一个参与者-单击鼠标右键键入参与者的操作;选择Tools-Check Model;选择File-Save.

    需求-高级别协作图[环境图(Context Diagram)]




    Rose高级别协作图:在浏览器窗口,选择Use Case View;选择Browse-Interaction Diagram(交互图)-Use Case View- ;选择Collaboration Diagram;键入图名;在图上放置对象表示参与者;双击每个对象,然后从下拉列表中选择参与者名;在图的中央放置一个对象以表示系统;双击对象,键入系统名;选择Rose Object Link (对象连接符)并且在参与者和系统之间拖曳;选择Rose 文本框TextBox"ABC" ,键入传递的对象/数据;选择Tools-Check Model;选择File-Save。

    需求-用例增量

    增量1:支票和储蓄账户的存款和取款

    增量2:查询和转账

    增量3:透支

    每个增量内进行迭代:乐观的,正常的,悲观的

    需求用例规约名称,触发器,输入参数,输出返回值,出现的前置条件/异常,出现的(raised)后置条件/异常,基本的/乐观场景,替代性可选的/悲观的场景,业务规则,测试实例。

    WithdrawFromCheckingAccount用例的用例规约

    用例名:WithdrawFromCheckingAccount

    触发器: WithdrawFromCheckingAccount

    输入参数: sAcctNum, nWithdraw

    输出返回值: sText

    前置条件: ValidAccount = true and nWithdraw <= nCurrentBalance

    出现的前置条件异常: 待定的

    描述/转换: nCurrentBalance = nCurrentBalance - nWithdraw

    后置条件: nCurrentBalance < nOldBalance

    后置条件异常:无

    相关用例: Generalization, Includes, Extends/Extension Point: 无

    基本场景/乐观场景: Text(文本) - 待定;Diagram(图) -见 WithdrawFromCheckingAccount乐观场景顺序图

    替代性可选场景/被动场景:Text -待定;Diagram -见WithdrawFromCheckingAccount 活动图

    业务规则: ValidAccountRule, AdequateBalanceRule

    测试实例:1 - 乐观的:输入: sAcctNum - BGates001, nWithdraw - 100, nCurrentBalance - 1000 Conditions: None, 输出:"BGates001 withdraw $100 OK and recorded";2 ...待定

    输入/输出表单:

    WithdrawFromCheckingAccount用例的输入/输出表单

    Withdraw Request Form(取款需求表单)

    Customer Account Number(客户账号)__________

    Withdraw Amount(取款数量) ________

    Button-Submit(提交按钮) Button-Clear(清除按钮)

    Withdraw Response Form(取款响应窗体)

    Customer Account Number __________

    Withdraw Amount __________

    Status (状态) ________________________

    Button-OK(OK 按钮)

    需求-顺序图WithdrawFromCheckingAccount - 乐观场景



    注:getApp的第一笔事务需要达到应用程序的最高级别

    Rose 顺序图:在浏览器窗口,选择Use Case View;选择 Use Case Diagram;选择一个用例;选择Browse-Interaction Diagram-Use Case View- ;选择Sequence Diagram;键入图名,例如WithdrawFromCheckingAccount-OptiminticScenario;在图上放置对象以表示参与者;双击每个对象,然后从下拉列表中选择参与者名;

    在图的中央放置一个对象以表示系统;双击对象,从下拉列表中键入系统名;选择Rose Object Link (对象连接符),在参与者和系统之间拖曳;选择Tools-Check Model;选择File-Save .

    4-WithdrawFromCheckingAccount用例-所有场景的需求活动图



    注:getApp的第一笔事务需要达到应用程序的最高级别

    Rose状态-活动图: 在浏览器窗口,选择Use Case View;

    选择Use Case Diagram 显示图;

    选择一个用例;选择Browse - State Diagram;

    如果"State Diagram" 是灰色,则返回到用例图并重新选择一个用例;

    在图上放置活动状态(activity states);通过在两个状态之间拖曳,放置转移;

    选择Tools-Check Model;

    选择File-Save 。

    需求-产品性能:高可靠性,10个并发的用户,2秒响应时间。


    需求/分析-高阶概念模型(HOCM--High Order Concept Model)

    外部参与者:TellerGUI,BankDB.内部实体(Internal Entities): BankApp, Account, CheckingAccount, SavingsAccount



    Rose高级别概念模型图: 推荐使用铅笔和纸做HOCM。作为替代,创建不含属性和操作的Rose类图。

    分析模型-草图



    分析类图 - 最简结构



    Rose类图: 见〈使用Rational Rose〉

    分析包图




    Rose包图:在浏览器窗口选择Logical View;选择Browse-Class Diagram-Logical View- 。输入包图名;在图上放置包;从工具条中选择依赖箭头然后从源包到目的包拖曳,放置依赖关系。在浏览器中,拖动每个类到适当的包;选择Tools-Check Model;选择File-Save。

    分析 WithdrawFromCheckingAccount顺序图-乐观场景



    注:getApp的第一笔事务需要达到应用程序的最高级别

    Rose顺序图:见〈使用Rational Rose〉

    8- 分析Account类的状态图



    Rose 状态-活动图:在浏览器窗口,选择Use Case View;选择Use Case Diagram 显示;选择一个用例;选择Browse - State Diagram;如果 "State Diagram" 是灰色,则返回到用例图并重新选择一个用例;在图上放置活动状态(activity states);通过在两个状态之间拖曳,放置转移;选择Tools-Check Model;选择File-Save .

    分析-复杂操作:待定的-每一个操作的活动图 和/或操作规约:名称,输入,前置条件/异常,转换,后置条件/异常,业务规则,描述。

    Rose规约: 显示类图;选择一个类;按鼠标右键显示Specification Dialog Box;选择一个标签,例如Operations;双击一个操作;填写操作信息;选择 Tools - Check Model;选择File - Save.


    设计模型 - 编码的基础



    设计过程环境:Linux 6.2版, GNU C++ 6.2版, C++ 标准库,CORBA 3

    设计潜在模式

    企业级:基于分布式CORBA,具有公共接口的组件

    系统(组件到组件):分层,会话-实体(Session - Entity),回调(Callbacks),发行者-订阅者(Publisher - Subscriber)

    组件:应用-文档,控制器-实体-边界,虚包(Facade)

    类设计:UML, Factory(工厂),事务

    JAVA 语言:Java Bean, Enterprise Java Bean, Servlet, RMI

    设计包图



    设计类图 说明类型和参数-目标是完成编码



    注:CheckingAccount和SavingsAccount 提供多态操作的实现。

    设计顺序图WithdrawFromCheckingAccount - 乐观场景

    注:getApp的第一笔事务需要达到应用程序的最高级别

    设计协作图WithdrawFromCheckingAccount - 乐观场景



    在Rational Rose中打开顺序图,按F5 自动创建协作图。

    设计CheckingAccount类withdraw()操作的操作规约

    用例名: withdraw

    触发:withdraw

    输入参数: nWithdraw : int

    输出返回值: boolean

    前置条件: nWithdraw <= nCurrentBalance

    出现的前置条件/异常: exInsuffientFunds

    描述/转换: nCurrentBalance = nCurrentBalance - nWithdraw

    后置条件: nCurrentBalance < priorCurrentBalance

    后置条件异常: exIncorrectBalance

    基本/乐观场景 :见WithdrawFromCheckingAccount 顺序图

    替代性场景/悲观场景:见WithdrawFromCheckingAccount 活动图

    业务规则:ValidAccountRule, AdequateBalanceRule

    设计异常类(exception classes)异常超类(操作:Exception()/Exception(string);异常子类:exInsufiicientFunds [操作 :exInsufiicientFunds()、exInsufiicientFunds(string)];exIncorrectBalance[操作:exIncorrectBalance()、exIncorrectBalance(string)]。

    设计 CheckingAccount 类的状态图



     

    实施模型(Implementation Models)



    实施模型

    设计过程环境

    实施组件图



    实施文件(Implementation Files): TellerGUI.exe, BankApp.exe, BankDB.exe

    组件接口选择:

    1) BankApp具有单接口 IbankApp,其所有操作都是公有的(exposed)

    2) BankApp暴露(exposes) IBankApp, ICheckingAccount, & ISavingAccount 接口

    3) BankApp暴露(exposes) IBankApp, IWithdraw, IDeposit, ICheckingAccount, & ISavingAccount 接口

    CORBA IDL/C++ 需要对接口进行描述

    Rose 组件图:在浏览器窗口,选择Component View;,将"Main"重命名为"Component View";双击图名显示该图;在图上放置组件和依赖关系(从client组件到supplier组件拖曳);在浏览器中把每个类拖到相应的组件中;选择Tools-Check Model;选择File-Save.

    实施部署图



    Rose 部署图:在浏览器窗口选择Deployment View;双击以显示该图;在图上放置节点和关系;选择Tools-Check Model;选择File-Save.

    
    //使用CORBA的 BankApp系统的接口
    




    
    //Sample IDL Interface Code(IDL 接口代码样本)
    module BankApp {
    interface IBankApp {
      exception exInsuffientFunds;
      IBankApp getApp();
      boolean depositToCheckingAccount (in string sAcctNum, in int nDeposit)  ;
      boolean depositToSavingAccount (in string sAcctNum, in int nDeposit)  ;
      boolean withdrawFromCheckingAccount (in string sAcctNum, in int nWithdraw)raises
    (exInsuffientFunds);
      boolean withdrawFromSavingAccount (in string sAcctNum, in int nWithdraw) raises
    (exInsuffientFunds);
    };};
    //Sample Java Interface Code Using Remote Method Invocation
    //(使用RMI 的Java接口样本)
    import java.rmi.*;
    package BankApp;
    public interface IBankApp extends java.rmi.Remote {
    boolean depositToCheckingAccount (String sAcctNum, int nDeposit) throws 
    java.rmi.RemoteException ;
    boolean depositToSavingAccount (String sAcctNum, int nDeposit) throws 
    java.rmi.RemoteException ;
    boolean withdrawFromCheckingAccount (String sAcctNum, int nWithdraw) throws
    java.rmi.RemoteException;
    boolean withdrawFromSavingAccount (String sAcctNum, int nWithdraw) throws
    java.rmi.RemoteException;
    }
    //Sample Microsoft IDL Interface Code for COM - Simplified
    //(Microsoft IDL 的COM接口编码样本-简化版)
    library BankAppLib {
    dispinterface IBankApp {
    IBankApp getApp();
    boolean depositToCheckingAccount (BSTR sAcctNum, int nDeposit) ;
    boolean depositToSavingAccount (BSTR sAcctNum, int nDeposit) ;
    boolean withdrawFromCheckingAccount (BSTR sAcctNum, int nWithdraw);
    boolean withdrawFromSavingAccount (BSTR sAcctNum, int nWithdraw);
    };
    coclass BankApp {
    dispinterface IBankApp;
    }; };
    //Sample SOAP (Simple Object Access Protocol) SDL (Service Description Language) 
    with XML -Incomplete
    //包含XML 的SOAP SDL样本-不完全
    <?xml version='1.0'?>
    <serviceDescription name='BankApp'
    xmlns='urn:schemas-xmlsoap-org:sdl.2000-01-25'
    xmlns:dt='http://www.w3.org/1999/XMLSchema'
    xmlns:IBankApp='IBankApp'>
    <import namespace='IBankApp' location='#IBankApp'/>
    <soap xmlns='urn:schemas-xmlsoap-org:soap-sdl-2000-01-25'>
    <interface name='IBankApp'>
    <requestResponse name='WithdrawFromCheckingAccount'>
    <request ref='IBankApp:WithdrawFromCheckingAccount'/>
    <response ref='IBankApp:WithdrawFromCheckingAccountResponse'/>
    </requestResponse>
    </interface>
    <service>
    <addresses>
    <address uri='http://myserver/IBankApp.asp'/>
    </addresses>
    <implements name='IBankApp'/>
    </service>
    </soap>
    <IBankApp:schema id='IBankApp' targetNamespace='IBankApp'
    xmlns='http://www.w3.org/1999/XMLSchema'>
    <element name='WithdrawFromCheckingAccount'>
    </element>
    <element name='WithdrawFromCheckingAccountResponse'>
    <type>
    <element name='return' type='dt:boolean'/>
    </type>
    </element>
    </IBankApp:schema>
    </serviceDescription>
    


    构建



    编码/命名标准;接口代码-CORBA IDL;C++代码;CASE 工具脚本/定制报告的VBA /代码生成

    Rose代码生成-需要Rose 专业版或企业版. 见Help Topic Code Generation(帮助主题-Code Generation)。


    步骤:

    1 - 检查模型;

    2 - 创建组件;

    3 - 映射/分配类到组件;

    4 - 设定代码生成特性;

    5 - 选择一个类、组件或包

    6 - 生成代码;

    7 - 检查生成的代码。

    Rose 逆工程-需要Rose 专业版或企业版. 见Help Topic- Reverse Engineering. 使用模型更新工具(Model Update Tool)。

    测试



    整个系统/集成测试-所有组件/子系统;组件测试-每个组件;单元测试-每个类。

    测试实例规约:

    测试实例名(Test Use Case Name):

    用例名(Use Case Name):

    用例场景名(Use Case Scenario Name):

    触发器(Trigger):

    输入参数(Input Parameters):

    输出返回值(Output Return):

    前置条件(Precondition):

    出现的前置条件异常(Precondition Exception Raised):

    描述/转换(Description/Transformation):

    后置条件(Postcondition):

    后置条件异常(Postcondition Exception):

    注释(Comments):

    VII - 建模和构造其他组件

    TellerGUI Forms(表单);BankDB Tables(表): tblWithdraw, tblDeposit, tblSavingAccount, tblCheckingAccount

    翻译说明

    1. CASE :计算机辅助软件工程,以下直接使用英文缩写。

    2. test case :在软件工程中一般翻译为"测试用例",为了跟use case(用例)相区别,本译文用"测试实例"替换

    3. harness: 在《面向对象系统的测试》(Robert V.Binder 著 华庆一等著)中译为"测试装置",是指由测试驱动器和其他支持测试执行的工具组成的系统(如桩、测试实例、测试驱动器等)

    参考文献

    1.《UML参考手册》 James Rumbaugh,Ivar Jacobson,Grady Booch 著,姚淑珍,唐发根等译)

    2.《统一软件开发过程》 Ivar Jacobson,Grady Booch ,James Rumbaugh 著,周伯生、冯学民、樊东平译。

      

  • 相关阅读:
    go语言简述
    树莓派基础
    电信专用名词
    无线linux应用及配置--wifi配置
    udev简述
    什么是物联网网关?物联网网关具备什么功能?_转
    FTDI通用转USB芯片简述
    Spring实现文件的上传下载
    (转)JVM——内存管理和垃圾回收
    (转)JVM——自定义类加载器
  • 原文地址:https://www.cnblogs.com/alamps/p/1439072.html
Copyright © 2011-2022 走看看