——对用例模型及其应用的一次有益的探讨
前言:这是一次对用例模型的探讨。怎样建立用例模型,怎样编写用例说明,它与需求规格说明书有什么区别,它能替代需求规格说明书吗?也许在这里可以找到你要的答案。
进入软件业稍微久一点儿的人恐怕都不会陌生,软件开发的最初阶段都是谈需求、写需求规格说明书。需求规格说明书是与客户最终确认到纸上的,非常正式的公文。软件开发应当做什么,做成什么样子,什么东西不做,项目范围有多宽,需求规格说明书都是白纸黑字写得清清楚楚,谁都无法抵赖。所以,需求规格说明书一直都是软件项目开发合同的重要附件,地位相当重要。
但是,随着RUP的引入,人们开始困惑了。在RUP中没有需求规格说明书,而是为用例模型所替代。现在,一些信息化走在比较前列的公司,都纷纷要求按照RUP统一过程进行开发,我们也开始尝试使用用例模型来替代需求规格说明书。然而,相信一些关于用例模型的几个重要问题一直困惑着不少人(当然也包括我):用例模型与需求规格说明书的区别在哪里?用例模型的优势在哪里?用例模型能替代需求规格说明书吗?围绕着这几个问题我们进行一次用例模型的探讨之旅吧。
在开始我的探讨之旅之前,我们最好能带上一个问题去探讨:
用例模型与需求规格说明书的区别在哪里?
看到这个问题,你也许会非常不屑一顾,认为这个问题不值一提。确实,在编写格式上,用例模型与需求规格说明书的差别显而易见。但是,从更深层次来讨论,你会发现,这个问题并不是那么简单。有些人由于对用例模型的肤浅认识,将用例模型当成需求规格说明书来写,格式虽说是用例模型的格式,内容却不是用例模型的内容,换汤不换药,反倒弄巧成拙,让人困惑。需求规格说明书是面向过程时代的产物,因此它的核心就是按照面向过程的设计思想编写需求;用例模型是面向对象分析/设计的产物,因此它的核心思想就是OOA/D(面向对象分析/设计)。我认为,把握这一点实在太重要了。明白了它,才能明白用例模型应当怎样设计,才能明白它与需求规格说明书的区别,才能明白其作用和优势在何处。下面,我们看看用例模型应当怎么设计。
如何建立用例模型
一些初学者认为,用例模型就是画张用例图。其实这是错误的,用例模型包括用例图、用例说明,有时还要辅之一些简单的行动图、状态图和序列图。用例图采用图形的方式,形象生动地展现了用例、参与者和系统边界之间的关系。而用例说明,是对用例、参与者和系统边界进行的详细描述。在描述过程中,还可以对一些关键的流程,以及这些流程中关键类的状态变化,使用行动图、状态图和序列图进行图形化地展现。
一.用例图
用例图是建立用例模型的开始。用例模型的建立过程通常都是:先画用例图,然后对用例图编写用例说明。在编写用例说明的时候,对一些复杂的、认为有必要的地方,绘制行动图、状态图和序列图,方便阅读者理解。用例图关注的是三部分内容:用例、参与者和系统边界。
1.用例
用例就是一个用来描述参与者如何使用系统来实现其目标的一组场景的集合。这句话听起来比较抽象,但我通常都把它暂时理解为功能中的模块(虽然这并不严密,但更加实用)。用例强调的是一组场景,在这组场景不多但相互之间存在功能上的共性,就像一个大功能模块下的多个子模块。这组场景中的每一个,又分别形成一个个子用例。子用例再细分,又可以再形成各自的子用例。用例分析就是这样由粗到细的逐步细分,从而形成一系统的用例图。用例图分析到多细,应当由业务需求的情况决定。分得过粗,就不足以说清楚业务的相关细节,或者使一张用例图信息过多,影响人们的理解;分得过细,不仅会增加工作量,还会丢失许多用例间的相互关系,得不偿失。总之,较为复杂的部分细一些,简单的部分粗一些,保证每个用例图都保持强烈的相关性,指导日后的功能划分。
同时,用例强调的是参与者与系统功能的交互,用例就是系统的功能,而参与者可以暂时理解为使用系统的人。因此,大多数用例都对应着一个或数个参与者(但部分从用例中包含着的子用例,或扩展出来的扩展用例没有参与者)。
用例与用例之间通常有两种关系:包含与扩展。包含关系表示一种从属关系,即子用例是主用例中相对独立的、必须调用的一部分功能。在用例分析中,我们应当将多个用例都共有的、相对独立的功能提取出来形成一个子用例,为日后代码复用提供有力保障。扩展关系表示一个功能是对另一个功能的扩展,即被扩展功能不一定调用扩展功能,但扩展功能是对被扩展功能的加强与延伸。在绘制用例关系时,包含关系应绘制成从主用例指向子用例的虚线箭头,并标注为“include”,表示主用例包含子用例;扩展关系应绘制成从扩展用例指向被扩展用例的虚线箭头,并标注为“extend”,表示扩展用例是对被扩展用例的扩展。虚线箭头在UML中代表的是一种依赖关系,即客户元素了解供应者,并且供应者的变化会影响到客户元素(依赖是从客户元素指向供应者的)。

封装性是面向对象设计的重要思想之一。而实现封装的前提之一,就是要对需求进行整理的基础上加以功能划分,使具有强烈相关性的功能划分在一起,只有少量接口与外界交互。用例分析,从一开始就对原始需求进行了功能划分,将相关功能划分到一起,将共有功能提取出来,标志出功能间的依赖与非依赖关系(包含表示的是一种依赖关系,而扩展表示的是一种非依赖关系)。这是一种OOA/D,它为日后的OO设计提供了强有力地支持。而这些都是需求规格说明书所不具有,或者不完全具体的功能。
2.参与者
现在再来说说参与者。参与者给大家最直观的认识就是操作这个系统的那些人,但更准确的说应当是操作这个系统的那些角色。用例模型要求我们描述清楚系统中的每一个场景的每一步操作,操作者是谁。同时,我们关注的这个操作者并不是某个具体的人,而是一群有着相同职责的人,即角色。用例模型中对参与者的分析,为我们之后在开发过程中,进行功能、角色、用户的划分提供了依据。
用例模型中的参与者,除了表示操作系统的人,还表示处于系统边界之外,与系统边界内的用例有关联的其它系统。因此,只有定义好一个系统的边界,才能定义哪些是这个系统内的用例,哪些是这个系统内外的参与者。用例模型对本系统与其它系统相互关联的分析,为我们日后开发过程中,为其它系统提供接口,或与其它系统进行接口,提供了依据。
参与者之间的关系只有一种——继承关系,表示功能职责上的继承。譬如,通常软件系统中都有“普通操作者”,代表的是进入系统的所有用户都应当具有的功能。而软件系统又有很多“特殊职能者”,他们除了具有普通操作者的功能外,还有自己独特的功能。在这里,“特殊职能者”是对“普通操作者”的继承,继承了“普通操作者”的所有功能。然而,“特殊职能者”又有“普通操作者”不具备的,自己独特的功能。

参与者与用例之间是一种关联关系,即实线表示。通常,参与者与用例之间的关系不用定义导航关系(即画出箭头),但部分UML的书籍也定义了这种导航关系。如果参与者要使用用例,则箭头从参与者指向用例;如果参与者要接受用例提供的数据或查询结果,则箭头从用例指向参与者。

用例分析将参与者放到了一个十分显著的位置,同时还关注的参与者的期望(即“涉众利益”,在后面详细描述),这也是需求规格说明书所不具有的。
3.系统边界
系统边界是一个软件系统需要处理的整个问题空间的范围。一个软件系统不可能处理所有问题,我们必须得给它定义这个问题空间的范围。哪些是我们这个软件可以处理的,哪些则是我们这个软件不能处理的,也就是项目管理中所说的项目范围。与需求规格说明书相比,用例分析通过图形的方式,更加明确地定义出了项目范围,以及与其它系统之间的关系,使其更加清楚明了。
相关文章:
《 谈谈用例模型的那些事儿 之 用例说明 》
《 谈谈用例模型的那些事儿 之 注意什么 》

- 描述: 包含与扩展
- 大小: 57.1 KB

- 描述: 参与者的继承关系
- 大小: 11.1 KB

- 描述: 参与者与用例的关系
- 大小: 7.3 KB
分享到:
相关推荐
用例图用于可视化这些交互,帮助团队理解系统的边界和主要参与者。在实际开发中,明确和准确地定义用例是确保项目成功的关键。 3. 领域模型:领域模型是从业务领域中抽象出来的概念模型,它反映了业务的核心逻辑和...
scratch少儿编程逻辑思维游戏源码-超级马力欧兄弟.zip
scratch少儿编程逻辑思维游戏源码-城堡躲避.zip
内容概要:本文探讨了基于气动力学的导弹姿态控制技术,并详细介绍了其MATLAB仿真方法。文章首先阐述了气动力学的基本概念以及其在导弹设计中的重要性,随后讲解了导弹姿态控制系统的构成,包括传感器、控制器和执行器的功能。接下来,重点介绍了如何利用MATLAB进行导弹飞行过程和姿态控制的仿真,包括建立导弹模型、设定环境参数、编写仿真代码等步骤。最后,通过仿真展示了气动力学在提升导弹飞行稳定性、机动性和作战效能方面的重要作用,并对未来的研究方向进行了展望。 适合人群:航空航天工程领域的研究人员、导弹系统设计师、从事飞行器控制研究的专业人士。 使用场景及目标:适用于希望深入了解导弹姿态控制原理及其仿真的专业人士,旨在提高导弹飞行性能和作战能力。 其他说明:文中提供的MATLAB代码仅为简化的示例,实际应用时需考虑更多复杂的因素和算法。
scratch少儿编程逻辑思维游戏源码-电镀盒子.zip
内容概要:本文详细介绍了DSP28335与STM32F407在电源逆变系统中的锁相环(PLL)程序应用。首先概述了锁相环的基本概念及其在逆变系统中的重要性,然后深入探讨了DSP28335锁相环程序的特点和功能,如正弦波锁定、频率和相位跟踪、全桥逆变等功能。接着阐述了具体的实现步骤,包括系统配置、PLL算法选择、滤波器设计、正弦波生成与输出,最后进行了性能分析,强调了该程序在提高系统性能、稳定性和效率方面的优势。 适合人群:从事电力电子、嵌入式系统开发的技术人员,特别是对锁相环和逆变系统感兴趣的工程师。 使用场景及目标:适用于需要深入了解锁相环在电源逆变系统中应用的研发人员,旨在帮助他们掌握PLL的工作原理、实现方法及其优化技巧,以提高逆变系统的性能和可靠性。 其他说明:文中提供的技术细节和实现方法有助于读者更好地理解和应用锁相环技术,特别是在高频、高精度的逆变场合。
scratch少儿编程逻辑思维游戏源码-Shape Smasher.zip
少儿编程scratch项目源代码文件案例素材-审美乌托邦.zip
少儿编程scratch项目源代码文件案例素材-潜水艇.zip
scratch少儿编程逻辑思维游戏源码-3D忍者.zip
内容概要:本文介绍了基于EMD-ARMA的组合风光出力预测方法,详细阐述了经验模态分解(EMD)和自回归移动平均(ARMA)模型的应用步骤。首先,通过EMD将原始发电数据分解为多个本征模态函数(IMF),然后用ARMA模型对各IMF分量进行建模和预测,最后将预测结果叠加重构,获得最终的风光功率预测值。文中还提供了简化的Python代码示例,帮助读者理解和实现该方法。 适合人群:从事新能源研究和技术开发的专业人士,尤其是对风光发电预测感兴趣的科研人员和工程师。 使用场景及目标:适用于需要提高风光发电预测精度的项目,旨在通过先进的数学模型优化电力调度和资源配置。 其他说明:本文提供的代码示例仅用于教学目的,实际应用中需根据具体情况调整和完善。此外,建议在实践中参考更多专业文献和寻求专家意见以确保预测模型的准确性和可靠性。
scratch少儿编程逻辑思维游戏源码-宝石消消乐.zip
少儿编程scratch项目源代码文件案例素材-染色奔跑.zip
内容概要:本文详细介绍了使用Comsol仿真软件绘制超构表面光子晶体动量空间拓扑荷识别图的方法。首先简述了超构表面光子晶体的基本概念及其重要性,然后逐步讲解了如何在Comsol中建立模型、设置仿真参数并运行仿真,最终生成动量空间拓扑荷识别图。文中还附有简单代码示例,帮助读者更好地理解整个流程。最后对所学内容进行了总结,并展望了未来的研究方向。 适合人群:对光学、物理学以及仿真软件感兴趣的科研人员和技术爱好者。 使用场景及目标:适用于希望深入了解光子在超构表面光子晶体中传播特性的研究人员,旨在提高他们对该领域的认识水平,促进相关科学研究的发展。 阅读建议:由于涉及较多专业术语和复杂概念,在阅读时建议先掌握基本理论知识,并结合实际案例进行练习,以便更好地消化吸收文中内容。
内容概要:本文介绍了一种结合卷积神经网络(CNN)、长短时记忆网络(LSTM)以及SE注意力机制的混合模型用于时序数据分类预测的方法,并提供了具体的MATLAB实现方法。文中详细解释了模型的工作流程,从卷积层的空间特征提取开始,经过SE注意力模块对特征进行加权处理,再到LSTM层的时间序列建模,最终完成分类任务。此外,还讨论了一些优化技巧,如数据预处理、动态学习率设置、特征压缩等,以提高模型性能。 适合人群:有一定机器学习基础的研究人员和技术开发者,特别是那些从事医疗健康、工业监控等领域时序数据分析工作的专业人士。 使用场景及目标:适用于需要高效处理复杂时序数据的应用场合,如医疗诊断、工业设备状态监测等。主要目的是为了改善传统单一模型在特征利用方面的局限性,提供一种更加精准有效的解决方案。 其他说明:文中提供的代码片段可以直接应用于实际项目中,只需根据具体情况调整参数配置和数据格式。同时提醒使用者关注数据预处理步骤,确保输入数据的质量和一致性对于获得良好结果至关重要。
scratch少儿编程逻辑思维游戏源码-超级摇摆小猫.zip
scratch少儿编程逻辑思维游戏源码-奔跑吧!糖豆人.zip
内容概要:本文档详细介绍了旋翼无人机(UAV)的动力学建模方法,重点在于六自由度模型的构建。首先定义了一个简化的四旋翼无人机动力学类,涵盖了质量、惯性矩阵、重力加速度等基本物理参数,并实现了推力矩阵的计算,用于将电机转速转化为推力和力矩。接着讨论了姿态更新过程中四元数的作用,提供了四元数更新的具体实现方式,强调了归一化操作的重要性。此外,还探讨了传感器噪声对飞行控制系统的影响,提出了一个较为真实的陀螺仪噪声模型,考虑到了随机游走特性和低通滤波效果。最后给出了一个简易的数值积分循环示例,展示了如何利用上述模型进行仿真。 适用人群:从事无人机研究、开发的技术人员,尤其是对飞行器动力学建模感兴趣的工程师。 使用场景及目标:适用于希望深入了解无人机内部工作原理的研究者和技术开发者,旨在帮助他们掌握从理论到实践的关键步骤,包括但不限于动力学建模、姿态控制、传感器误差补偿等方面的知识。 其他说明:文中提供的代码片段均为简化版本,实际应用中可根据具体需求调整参数设置和算法细节。同时推荐使用专业数学库来提高代码效率和准确性。
少儿编程scratch项目源代码文件案例素材-女巫.zip
内容概要:本文详细介绍了基于FPGA的数据采集系统,重点讨论了如何将其与多种关键技术集成,以提升数据采集和处理的效率与稳定性。首先,阐述了FPGA数据采集系统的特性及其重要性。接着,分别介绍了RTL8211千兆以太网控制器的应用,用于实现数据的快速传输;SD卡存储解决方案,确保数据的持久化保存;AD7606数模转换技术,保障信号的精准转换;最后,讲解了串口通信软件程序的设计与实现,促进不同设备间的通信。通过这些技术的集成,实现了对各类信号的实时采集、处理和传输。 适合人群:从事嵌入式系统开发的技术人员,尤其是对FPGA数据采集系统感兴趣的工程师和技术爱好者。 使用场景及目标:适用于需要高性能数据采集和处理的场合,如工业自动化、科研实验、环境监测等领域。目标是帮助技术人员理解和掌握如何利用FPGA搭建高效的多技术集成数据采集系统。 其他说明:文中不仅提供了理论介绍,还涉及实际应用案例和技术细节,有助于读者深入理解各组件的工作原理及其协同工作的机制。