以下内容摘自张海藩老师《软件工程导论》课件
目录
自动取款机(ATM)系统
需求陈述
某银行拟开发一个自动取款机系统,它是一个由自动取款机、中央计算机、分行计算机及柜员终端组成的网络系统。ATM和中央计算机由总行投资购买。
总行拥有多台ATM,分别设在全市各主要街道上。分行负责提供分行计算机和柜员终端。柜员终端设在分行营业厅及分行下属的各个储蓄所内。该系统的软件开发成本由各个分行分摊。
银行柜员使用柜员终端处理储户提交的储蓄事务。储户可以用现金或支票向自己拥有的某个账户内存款或开新账户。储户也可以从自己的账户中取款。通常,一个储户可能拥有多个账户。
柜员负责把储户提交的存款或取款事务输进柜员终端,接收储户交来的现金或支票,或付给储户现金。柜员终端与相应的分行计算机通信,分行计算机具体处理针对某个账户的事务并且维护账户。
拥有银行账户的储户有权申请领取现金兑换卡。使用现金兑换卡可以通过ATM访问自己的账户。目前仅限于用现金兑换卡在ATM上提取现金(即取款),或查询有关自己账户的信息(例如,某个指定账户上的余额)。将来可能还要求使用ATM办理转账、存款等事务。
所谓现金兑换卡就是一张特制的磁卡,上面有分行代码和卡号。分行代码唯一标识总行下属的一个分行,卡号确定了这张卡可以访问哪些账户。通常,一张卡可以访问储户的若干个账户,但是不一定能访问这个储户的全部账户。
每张现金兑换卡仅属于一个储户所有,但是,同一张卡可能有多个副本,因此,必须考虑同时在若干台ATM上使用同样的现金兑换卡的可能性。也就是说,系统应该能够处理并发的访问。
当用户把现金兑换卡插入ATM之后,ATM就与用户交互,以获取有关这次事务的信息,并与中央计算机交换关于事务的信息。
首先,ATM要求用户输入密码,接下来ATM把从这张卡上读到的信息以及用户输入的密码传给中央计算机,请求中央计算机核对这些信息并处理这次事务。
中央计算机根据卡上的分行代码确定这次事务与分行的对应关系,并且委托相应的分行计算机验证用户密码。
如果用户输入的密码是正确的,ATM就要求用户选择事务类型(取款、查询等)。当用户选择取款时,ATM请求用户输入取款额。最后,ATM从现金出口吐出现金,并且打印出账单交给用户。
建立功能模型
步骤:
1 识别外部执行者;
2 识别用例;
3 建立用例图;
4 补充用例描述:为建立对象模型和动态模型打基础。
系统功能模型
用例描述
建立对象模型
建立对象模型步骤(六个步骤):
# 确定分析类
分析模型中,分析类是概念层次上内容,类直接与应用逻辑相关,不关注技术实现。
1 找出候选分析类
边界类 控制类 实体类
1.1 确定边界类
通常,一参与者与一用例间交互或通信关联对应一边界类
边界类 说明
SetupForm 开新账户的操作界面
DepositForm 存款的操作界面
ATMWithdrawForm ATM用户取款的操作界面
ATMBalanceForm ATM查询余额的操作界面
ATMPasswordForm ATM改变密码的操作界面
TellerWithdrawForm Teller用户取款的操作界面
TellerBalanceForm Teller查询余额的操作界面
TellerPasswordForm Teller改变密码的操作界面
(5个用例和两个执行者构成8个)
1.2 识别控制类
控制类负责协调边界类和实体类,通常在现实世界没有对应的事物。 一般来说,一个用例对应一个控制类。
控制类 说明
SetupControl 负责执行开新账户
DepositControl 负责执行存款
WithdrawControl 负责执行取款
BalanceControl 负责执行查询余额
PasswordControl 负责执行改变密码
(5个用例5个控制类)
1.3 识别实体类
实体类通常是用例中的参与对象,对应着现实世界中“事物”
# 非正式分析法:需求陈述中名词。
例:用非正式分析法提取ATM系统中的实体类。
银行,自动取款机(ATM),系统,中央计算机,分行计算机,柜员终端,网络,总行,分行,软件,成本,市,街道,营业厅,储蓄所,柜员,储户,现金,支票,账户,事务,现金兑换卡,余额,磁卡,分行代码,卡号,用户,副本,信息,密码,类型,取款额,账单,访问
# ATM系统分析员根据领域知识或常识提取出隐含的类。
通信链路、事务日志
2 筛选出正确的类
2.1 冗余
储户与用户,现金兑换卡与磁卡及副本应去掉“用户”、“磁卡”、“副本”,保留“储户”和“现金兑换卡”。
2.2 无关
与本问题密切相关类放进目标系统,去掉“成本”、“市”、“街道”、“营业厅”、“储蓄所”。
2.3 笼统
银行(总行和分行)、系统、软件、信息、访问(事务)。
2.4 属性
现金、支票、取款额、账单、余额、分行代码、卡号、密码和类型。
2.5 操作
需求陈述中既作名词又作动词的词,慎重考虑是作类合适,还是作类中操作合适。
2.6 实现
事务日志、通信链路。
ATM系统筛选后的类:
银行,自动取款机(ATM),系统,中央计算机,分行计算机,柜员终端,网络,总行,分行,软件,成本,市,街道,营业厅,储蓄所,柜员,储户,现金,支票,账户,事务,现金兑换卡,余额,磁卡,分行代码,卡号,用户,副本,信息,密码,类型,取款额,账单,访问
ATM系统的实体分析类
# 确定类的关联
1 初步确定关联
动词或动词词组;
隐含关联;
与用户及领域专家讨论补充。
1.1 直接提取动词短语
ATM、中央计算机、分行计算机及柜员终端组成网络
总行拥有多台ATM
ATM设在主要街道上
分行提供分行计算机和柜员终端
柜员终端设在分行营业厅及储蓄所内
分行分摊软件开发成本
储户拥有账户
分行计算机处理针对账户的事务
分行计算机维护账户
柜员终端与分行计算机通信
柜员输入针对账户的事务
ATM与中央计算机交换关于事务的信息
中央计算机确定事务与分行的对应关系
ATM读现金兑换卡
ATM与用户交互
ATM吐出现金
ATM打印账单
系统处理并发的访问
1.2 需求陈述中隐含的关联
总行由各分行组成
分行保管账户
总行拥有中央计算机
系统维护事务日志
系统提供必要安全性
储户拥有现金兑换卡
1.3 根据问题域知识得出的关联
现金兑换卡访问账户
分行雇用柜员
2 筛选
2.1 已删去类之间关联
删掉某候选类,与这个类有关的关联也删去,或重新表达
已删去“系统”、“网络”、“市”、“街道”、“成本”、“软件”、“事务日志”、“现金”、“营业厅”、“储蓄所”、“账单”候选类,关联也应删去:
ATM、中央计算机、分行计算机及柜员终端组成网络
ATM设在主要街道上
分行分摊软件开发成本
系统提供必要安全性
系统维护事务日志
ATM吐出现金
ATM打印账单
柜员终端设在分行营业厅及储蓄所内
2.2 与问题无关或与实现密切相关的关联删去
“系统处理并发的访问”
2.3 瞬时事件
“ATM读现金兑换卡”“ATM与用户交互”
“中央计算机确定事务与分行对应关系”隐含“中央计算机与分行通信”
2.4 三元关联
三个或三个以上对象关联,可分解为二元关联或限定关联。
“柜员输入针对账户的事务”分解成“柜员输入事务”和“事务修改账户”
“ATM与中央计算机交换关于事务的信息”隐含“ATM与中央计算机通信”和“在ATM上输入事务”这两个二元关联
3 进一步完善
3.1 正名
"分行提供分行计算机和柜员终端"改为"分行拥有分行计算机"和"分行拥有柜员终端"。
3.2 分解
把“事务”分解成“远程事务”和“柜员事务”。
3.3 补充
需补充"柜员输入柜员事务"、"柜员事务输进柜员终端"、"在ATM上输入远程事务"和"远程事务由现金兑换卡授权"。
#划分主题
原始实体类图
划分主题后的实体类图
#确定属性
需求陈述中的名词
1 误把类当属性
独立存在更重要,则应为类。
2 误把链属性作为属性
属性要依赖某关联链存在,则为关联类的属性。
3 误把限定当属性
属性值固定下来可减少重数,则应为限定。
4 误把内部状态当属性
对象的非公开内部状态不作属性。
5 过于细化
忽略对大多数操作都没有影响的属性。
6 存在不一致属性
分解两个类。
加上属性的实体类图
(属性和类限定词的区别是什么?)
#识别继承
识别出继承关系的实体类图
#反复修改
1 分解“现金兑换卡”类
现金兑换卡有两独立功能:标志储户访问账号的权限;含有 分行代码和卡号的数据载体。(卡权限和现金兑换卡)
2“事务”由“更新”组成
更新包括取款、存款、查询。有自己属性(类型、金额),应独立存在。
3 合并“分行”和“分行计算机”
同理合并总行和总行计算机。
修改后的实体类图
建立动态模型
开发交互式系统,动态模型非常重要
步骤:
# 编写典型交互行为脚本
结合ATM系统的实例,介绍建立动态模型方法
脚本描述用户与目标系统间的一个或多个典型交互过程
1 正常情况脚本
ATM请储户插卡;储户插入一张现金兑换卡
ATM接受该卡并读它上面的分行代码和卡号
ATM要求储户输入密码;储户输入自己密码“1234”等数字
ATM请求总行验证卡号和密码;总行要求“39”号分行核对储户密码,通知ATM这张卡有效
ATM要求储户选择事务类型(取款、转账、查询等);储选择“取款”
ATM要求储户输入取款额;储户输人“880”
...
2 异常情况脚本
3 错误情况脚本
ATM请储户插卡;储户插入一张现金兑换卡
ATM接受该卡并读它上面的分行代码和卡号
ATM要求储户输入密码;储户误输入“8888”
ATM请求总行验证;总行向有关银行咨询后拒绝这张卡
ATM显示“密码错”,请用户重新输入密码;储户输入1234
ATM请总行验证后知道输入的密码正确
ATM请储户选择事务类型;储户选择“取款”
ATM询问用户取款额;储户不想取款,敲“取消”键
ATM退出现金兑换卡,请储户拿走;储户拿走
ATM请储户插卡
# 从脚本中提取事件及相关对象,用顺序图表达
从脚本提取所有外部事件,确定每类事件发送和接收对象。针对系统中的典型功能,画出顺序图
ATM用户取款顺序图
# 确定对象状态及状态间转换关系,用状态图描绘
用一张状态图描绘类的行为,集中考虑具有交互行为类。画出系统中重点类的状态图。
ATM类状态图
总行类状态图
分行类状态图