分析/设计/代码三者间的关系——分析

分析/设计/代码三者的关系
软件的难以维护导致了软件危机,也促使了软件工程的发展。软件工程中一个重要的思想就是在编码前必须进行分析设计,而且分析设计的比重越来越大,其重要性已经超过了编码。
在实践中,又发现了一个新的问题,就是维持分析、设计、编码的统一。在我的前一个项目中,对此我有深刻的体会。而在网上也看到一篇文章,大意是讲C语言的发明者认为现在的软件工程过于庞大,有“过分设计”的趋向。
只有简单才“可维护”,所以我认为要维持三者的统一,这三者首先要简单。而要做到简单,明确它们的分工是必要的。
在分析、设计、编码中,我一般使用三个工具,分析用WORD(在少数情况下,会用VISIO辅助),设计用ROSE,编码用IDE。
分析时,我做了三个WORD模板,一个对USER CASE,一个对基础类(与业务无关,主要是程序框架,是快速搭建一个应用的基础),一个对功能。功能模板开始时我没有想到要做,但在做原型及试运行时,发现其是必要的,因为用户看到一个框架后,会提出一些具体的功能需求,这些需求可能并不对应某一个具体的USER CASE,或者会对应多个USER CASE。文档的内容非常简单,一般都在两页内。
现在,功能模板我还没有做好,另外,对于功能与USER CASE的关系我也没有头绪,是功能分析后直接进入设计呢还是将功能分配到USER CASE中?请诸位指教。

[630 byte] By [tile_kite-风中的瓦片] at [2008-6-2]
# 1
将功能分配到USER CASE中可能更重要!
xzh19977-xzh at 2007-10-30 > top of Msdn China Tech,软件工程/管理,开发方法...
# 2
究竟三者如何分配要看项目的性质、规模和时间要求而定,如果规模不大或时间要求紧,则分析和设计相对简化(但注意,不是没有),反之需要比较周密的分析和设计,这里没有所谓“过分设计”的问题,分析、设计的复杂度代表了问题的复杂度,需求分析表示“要做什么”,系统分析、设计表示“怎么做”,编码是实现,这3者的复杂度都是由用户的需求确定的,如果问题很复杂,不可能再不弄清“做什么”“怎么做”的情况下就开始“实现”。
首先要明确系统的使用者和所有与系统交互的角色,这些是Actor。
然后确定所有为Actor可见的系统功能,这些是use case。
对这些use case要明确定义它们的流程和规约。
由use case 的功能分组可以组织为不同的package,这些包可以作为以后划分子系统的依据。
然后综合用户需求的描述和use case中的事件流,识别出问题域中的对象,这是面向对象的分析。
对这些对象要细化到属性、方法、对象之间的关系、用必要的协作图/序列图来展示对象之间的责任和交互关系。
根据要实现的诸如持久化、通信、并发控制等要求对对象进行分组,这些是分组是分析机制。
将系统划分为子系统,并根据所用的技术平台进行分层,考虑实现技术的要求,更新分析类。
根据分析机制,在实现技术的语境中添加相应的类来实现分析机制,这就是设计机制,比如持久化机制用文件系统或db来实现。
然后是编码。
mach-照虎画猫 at 2007-10-30 > top of Msdn China Tech,软件工程/管理,开发方法...
# 3
mach:
在现实中我遇到了这样一个问题,当一个原型出来后,给用户(领导层)演示,用户在权限控制上提出了很多要求.其中一项是所有的操作都要有记录到日志里面.这样万一有什么问题时,可以很快的追查根源.
这个问题好象并不能放入任何一个USE CASE中,因为它涉及了很多USE CASE.
而如果要追究为什么会出现这个问题,我认为是因为我们的需求没做好.其实这个问题并不是第一次提出,只是当时没有认真对待.
现在我该如何去做呢?
tile_kite-风中的瓦片 at 2007-10-30 > top of Msdn China Tech,软件工程/管理,开发方法...
# 4
可以把记日志作为一个抽象的use case
别的use case include这个用例,uml里有关于这样的问题的解决方法。
mach-照虎画猫 at 2007-10-30 > top of Msdn China Tech,软件工程/管理,开发方法...
# 5
谢谢mach,这确实是个好方法.只是对这种USE CASE的分析可能与普通的USE CASE就有不同了.
另外,考虑一种最复杂的情况,还是记日志这个例子.如果用户要求针对不同的USE CASE,其记日志的业务规则不同.比如说,对某些USE CASE只需要记录操作人就可以了.但一些特别重要的USE CASE还要记录操作的机器,这种情况如何处理?
tile_kite-风中的瓦片 at 2007-10-30 > top of Msdn China Tech,软件工程/管理,开发方法...
# 6
其实这样的用法是用例分析中很常用的,一些公共的功能只要通过包含就可以了,不必要逐一声明。
可以在use case的事件流说明中区分这两种方法(说明什么情况要纪录操作人,什么情况要纪录机器),也可以使用俩个不同的use case来实现这个逻辑,究竟用哪中方法要看你的具体情况了。
不知道我这样说能不能帮助你。
mach-照虎画猫 at 2007-10-30 > top of Msdn China Tech,软件工程/管理,开发方法...
# 7
各位真是高人,大受启发啊。继续学习中...
ai_daoluan-捣乱 at 2007-10-30 > top of Msdn China Tech,软件工程/管理,开发方法...
# 8
mach:
我想我可能已经明白你的意思了.
你的回答其实已经解决了我的问题,我之所以举那个比较复杂的例子是我想到了维护的问题.当时我认为如果我们需求做得好的话,记日志应该是体现在不同的USE CASE中的,而现在增加一个USE CASE来专门处理这个问题,就带来了保持两个USE CASE同步的问题.维护的工作量又大了.
现在想想也没有增加维护工作量,只要在一个USE CASE中的描述中加一句话"记录日志,具体见记录日志USE CASE",就行了.而具体如何记录,只在记录日志USE CASE中体现.不知道我这样的理解对不对?
tile_kite-风中的瓦片 at 2007-10-30 > top of Msdn China Tech,软件工程/管理,开发方法...
# 9
bingo!当然可以这样,其实UML是一种开发式的语言(其实是有些东西他也描述不清楚,所以有了specification里的document),你可以用语言描述你要表达的任何意思,只要能让别人看懂就行了.
mach-照虎画猫 at 2007-10-30 > top of Msdn China Tech,软件工程/管理,开发方法...
# 10
sign
kissfire-kissfire at 2007-10-30 > top of Msdn China Tech,软件工程/管理,开发方法...
# 11
mach:
很想知道你对我的分析过程是怎么看的.更想知道你的分析过程是怎么样的*_*
比如,对一个USE CASE,你是如何进行分析的,分哪些阶段,都用了哪些工具?
tile_kite-风中的瓦片 at 2007-10-30 > top of Msdn China Tech,软件工程/管理,开发方法...
# 12
对于需求分析,首先要做的并不是use case分析,首先要了解你的客户,包括它的组织机构、业务流程、业务中的数据,比如各种单据等,还要考察它的现有系统(如果有的话),由此形成对客户的了解,之后是获取用户的需求,将这些需求整理成文档,一开始的获取需求肯定是粗略的,用它们可以形成类似与RUP中的vision文档,之后开始进行Use case分析,把这些需求的feature整理为use case,并尝试充实其中的事件流,如果项目时间允许的话,要同时开发UI原型,以UI原型和use case中的描述作为与用户进一步沟通的工具,直到最后双方达成共识。
mach-照虎画猫 at 2007-10-30 > top of Msdn China Tech,软件工程/管理,开发方法...
# 13
你能讲讲普通的USE CASE(用户驱动)与上面我们讲过的功能性的USE CASE(被其它USE CASE包含),这两者分析时有哪些区别吗?
tile_kite-风中的瓦片 at 2007-10-30 > top of Msdn China Tech,软件工程/管理,开发方法...
# 14
你说的情况基本可以用普通的用例方法来描述。
一般来说每个用户可见的功能应该被理解为一个use case
的确有不能用use case描述的需求,但不是你上面说的这种情况,比如性能要求、安全性、稳定性等,这些要靠补充的文档来描述。
mach-照虎画猫 at 2007-10-30 > top of Msdn China Tech,软件工程/管理,开发方法...
# 15
谢谢mach
学习中...
tile_kite-风中的瓦片 at 2007-10-30 > top of Msdn China Tech,软件工程/管理,开发方法...
# 16
rup的关键概念之一就是用例驱动,这在rup中是很重要的,整个分析设计工作都是围绕用历来做的,举例如下:
1.定义了一个用例“支付订单”
2.分析阶段发现有以下分析类:Order、OrderItem、Bill,这3个分析类相互协作实现了用例“支付订单”,则创建用例实现“支付订单”,在用例实现中用协作图/序列图表示上述概念,同时在用例实现中3个类的协作也可以用来确定它们要实现的方法。
4.设计阶段扩展了分析类,可能会增加以下这些类:OrderDao、OrderItemDao、BillDao,用更新过的设计类模型创建设计模型中的用例实现“支付订单”
mach-照虎画猫 at 2007-10-30 > top of Msdn China Tech,软件工程/管理,开发方法...