RSS
热门关键字:  项目经理  分析师  中间件  报名费  CEO
当前位置 :| 主页>系统分析>常用工具>





Rose实例:构造银行业务模型

来源: 作者: 时间:2005-03-01 点击:
通过BankAPP实例来了解如何用Rose构造业务模型。

业务企业模型


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

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





[译注: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元素,测试用例,描述,职责。

需求可追踪性表(部分)




需求-用例图-所有用例




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 著,周伯生、冯学民、樊东平译。
需求编号 需求名 引用 用例名 UML元素 测试实例 描述 职责
1.1 DepositToSavingsAccount   DepositToSavingsAccount BankPkg      
1.2 DepositToCheckingAccount   DepositToCheckingAccount BankPkg      
1.3 WithdrawFromSavingAccount   WithdrawFromSavingAccount BankPkg      
1.4 WithdrawFromCheckingAccount   WithdrawFromCheckingAccount BankPkg      
过程名 参与者 事件/输入 转换 事件/输出 约束 描述 引用 联系点
WithdrawFromAccount Customer,Teller,BankDB WithdrawRequest UpdateAccount WithdrawRecord        




最新评论共有 0 位网友发表了评论
发表评论
评论内容:不能超过250字,需审核,请自觉遵守互联网相关政策法规。
用户名: 密码:
匿名?
注册
企业电子商务
赞助商