`
beyondyuefei
  • 浏览: 13154 次
  • 性别: Icon_minigender_1
  • 来自: 福州
文章分类
社区版块
存档分类
最新评论

本人对于“用例”的一些理解和总结

 
阅读更多

不知道大家有没和我类似的感觉,就是在做开发的时候,经常看到需求文档里的用例2字,或者听到关于用例的谈话,或者测试用例之类的,一般的感觉就是用例就是一个需求功能点,也没去太在意,这里我想自己做个对于用例的总结。

我不想过于刻板的去讨论用例的概念,这里先从一个例子入手,比如我问你:请在30秒内说出尽可能多的筷子,勺子和盘子的相同点与不同点。

不知道大家是否有种感觉,就是脑子里似乎都知道,但是要一下子通盘考虑的说出来,却一时间不知如何下手 ?其实这个问题没有标准答案,看似简单的问题反映了我们是否习惯以抽象的方法去看待和理解事物,这里的每一个相同点和不同点都可以来自一个抽象角度。例如:从用途的角度去抽象时,它们的相同点可能是3者都是餐具,不同点是筷子是用于夹的,勺子是用于舀的,盘子是用于盛的;从使用方法的角度去抽象时,它们的相同点可能是3者都是需要用手拿的,不同点是拿的方式不同;还可以从其它抽象角度得出不同的结果。

在软件项目中,当我们自己试图去分析需求,面对大量的需求资料时,是否觉得无从下手呢 ? 这时与其说是分析能力不足,不如说是自己还没有找到明确的抽象角度!面向对象和面向过程的不同就是面向过程希望你通盘考虑,这时人脑需要考虑的信息量就变得很大,使得自己大脑发晕或一时反映不过来,问题变得复杂化;而面向对象希望你通过抽象从而以不同的角度来把问题分解成小块,从而使得问题简单化,回想下刚刚的筷子,勺子和盘子的例子就知道啦。

具体来说,在做需求分析的时候,首要目标不是通盘考虑,不是要弄清楚业务是如何一步一步完成的,而是要明确有多少个参与者?每个参与者的目标是什么 ? 参与者的目标就是我们的抽象角度,与分析一个个复杂的业务流程相比,单独分析参与者的一个个目标要简单的多,参与者的目标就是一个用例,这也就是为什么用例会成为建模的方法的原因之一。

用例是一种把现实世界的需求捕获下来的方法,需求里包含客户对这个系统的各种各样的愿望。我们要描述一个系统的功能性需求,就是要找到对这个系统有愿望的人,让他们来说明他们想要在这个系统里做的事,想要的结果。如果所有对系统有愿望的人要做的事情都找全了,也就是问题领域的抽象角度都找出来了,那么系统的功能性需求就确定了。接下来的工作就是实现用例,一旦用例都实现了,那么问题领域也就解决了,这就是用例驱动开发的原理。其他的分析,设计,测试等都是由用例来驱动的,一个用例就是一个开发单元,设计单元,测试单元。

和用例紧密相连的是 参与者和边界,这3者的关系非常紧密;另外用例粒度的把握也非常重要,这些方面的讨论可以参考我的上一篇文章《面向对象案例分析实战》,这里就不展开细说了。

我个人认为建模同样是用例驱动的,因为寻找用例的过程,就是确定参与者的过程,同时绘制出用例实现的活动图,确定用例规则。那么现实世界就可以映射到业务模型中来了。因为不管是任何行业,无论什么业务,其本质无非是由人,事,物,规则组成的。人是中心,人要做事,做事产生物,做事要遵守规则。人驱动系统,事体现过程,物记录结果,规则是控制。建立模型就是要弄明白有什么人做什么事,什么事产生什么物,中间有什么规则,再把人,事,物,规则之间的关系定义出来,模型也就出来了。

UML 采用参与者对应现实世界的人,用例对应参与者的业务目标,业务场景对应规则,业务对象对应物。人,事,物,规则就这样在描述用例的过程中被模型化了,于是现实世界就转化成了业务模型,这也是面向对象分析方法的第一步--现实世界映射到了对象世界。

接下来的分析过程超出了本文的讨论范围,可以参考我的上一篇文章《面向对象案例分析实战》。大家如果对用例还有其他理解和看法,欢迎一起讨论和指点。

分享到:
评论

相关推荐

    一个完整的白盒测试用例

    总的来说,白盒测试是一个系统化的过程,包括理解程序逻辑、设计全面的测试用例、执行测试和记录结果。通过对所有独立路径的覆盖,可以提高发现潜在问题的概率,从而提升软件的质量和可靠性。在实际工作中,这一步骤...

    该项目是本人学习后上传的源代码以及课程笔记..zip

    课程笔记通常包括了作者在学习过程中对关键概念、算法、设计模式的理解和总结。这些笔记可能以文本形式存在,比如Markdown文件或Word文档,也可能包含图表、流程图等视觉辅助工具。学习笔记的价值在于它们提供了对...

    zoj 3464 Rugby Football测试数据(本人生成的)

    对于像 Rugby Football 这样的问题,正确的测试数据尤为重要,因为这类题目通常涉及到复杂的逻辑处理和大量的数值计算。 #### 三、测试数据内容分析 给定的部分内容为一系列数字,这些数字可能是测试用例的具体...

    Java深度历险(java高级篇)

    尤其是在“package与import机制”这一章节中,作者通过对各种奇怪的用例进行测试,归纳出了自己对于Java编译器工作方式的理解,最终与源代码阅读得到的结论不谋而合,展现出作者的洞察力和研究精神。 ### 跨越开发...

    自己做的计算器

    总结来说,这个“自己做的计算器”项目是一个初学者的编程练习,它涵盖了基本的编程概念,如变量、条件语句、循环和函数调用。通过分析和学习这个项目,其他初学者可以了解一个简单的软件开发流程,同时也能提升自己...

    UML宿舍楼管理系统报告

    ### UML宿舍楼管理系统知识点概览 #### 一、课程设计背景与目标 - **UML语言基础**:UML(Unified ...通过这样的学习过程,学生能够更深入地理解UML建模的重要性和实用性,为未来的软件开发工作打下坚实的基础。

    软件工程基础试卷及答案

    4. 设计模式是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性。组合设计模式的应用是将多个对象组合成一个对象,以...

    2021-2022收藏的精品资料测试体系建设计划(1).docx

    - **文档标准化**:与相关部门合作制定统一的文档模板和编制指南,涵盖测试计划、测试用例、测试报告等多种文档类型,确保文档内容的规范性和一致性。 - **代码审查**:测试人员参与代码审查工作,依据软件开发规范...

    zimbra-ldap-password:Zimbra 的密码更改插件

    总结来说,Zimbra LDAP密码更改插件是Zimbra协作套件中一个重要的组成部分,它使用Java编程语言实现,提供了一个安全、便捷的途径供用户修改密码,同时也满足了管理员对于系统安全性和审计的需求。通过理解和掌握这...

    Oracle SQL高级编程(资深Oracle专家力作,OakTable团队推荐)--随书源代码

    作者通过总结各自多年的软件开发和教学培训经验,与大家分享了掌握Oracle SQL所独有的丰富功能的技巧所在,内容涵盖SQL执行、联结、集合、分析函数、子句、事务处理等多个方面。读者可以学习到以下几个方面的技巧:...

    Activiti6.0教程例子下载

    2. RepositoryService:Activiti中每一个不同版本的业务流程的定义都需要使用一些定义文件,部署文件和支持数据(例如BPMN2.0 XML文件,表单定义文件,流程定义图像文件等),这些文件都存储在Activiti内建的...

Global site tag (gtag.js) - Google Analytics