标题: [讨论]软件开发模型与软件开发方法
threehair
荣誉斑竹
Rank: 14Rank: 14Rank: 14Rank: 14


UID 27
精华 78
积分 3034
帖子 5716
活跃指数 0
LU金币 2093 个
LU金条 0 个
阅读权限 200
注册 2003-9-17
 
发表于 2004-5-20 22:55  资料  个人空间  短消息  加为好友 
软件开发模型包括瀑布模型、喷泉模型、螺旋模型等等。
软件开发方法包括结构化开发、面向对象开发等等。
诸位在实际软件开发中,如何选择开发模型和开发方法。你觉得两者之间有联系么?
畅所欲言阿。 grin.gif rose.gifrose.gif





╭⌒╮ ╭⌒╮╭⌒╮
╱◥███◣╭╭ ⌒╮
︱田︱田   田|
关门,上锁,钥匙已生锈。
世事静方见,人情淡始长!
顶部
threehair
荣誉斑竹
Rank: 14Rank: 14Rank: 14Rank: 14


UID 27
精华 78
积分 3034
帖子 5716
活跃指数 0
LU金币 2093 个
LU金条 0 个
阅读权限 200
注册 2003-9-17
 
发表于 2004-5-21 09:21  资料  个人空间  短消息  加为好友 
今天找了一圈,发现无双以前在cu发起过一个关于生命周期的讨论。 grin.gif
http://www.chinaunix.net/jh/28/58783.html
大家继续阿 grin.gif





╭⌒╮ ╭⌒╮╭⌒╮
╱◥███◣╭╭ ⌒╮
︱田︱田   田|
关门,上锁,钥匙已生锈。
世事静方见,人情淡始长!
顶部
threehair
荣誉斑竹
Rank: 14Rank: 14Rank: 14Rank: 14


UID 27
精华 78
积分 3034
帖子 5716
活跃指数 0
LU金币 2093 个
LU金条 0 个
阅读权限 200
注册 2003-9-17
 
发表于 2004-5-21 09:55  资料  个人空间  短消息  加为好友 
倒。CAROL居然给置顶了 awkard.gif

无双的贴子很清楚的说明了瀑布、喷泉、演化这三种模型的特点
哦先说一下对瀑布模型的理解。抛砖引玉阿。 haha.gif


哦在实际开发中基本使用瀑布模型。因为最简单,也最适合哦的开发实际。

瀑布模型的各阶段是线性的。每个阶段一旦结束即可视作静态的。

瀑布模型的核心思想是将软件开发划分为若干阶段,按线性顺序执行。至于究竟要划分成多少个阶段、各阶段做什么,应该根据实际情况来定。比如通常我们划分为需求分析、总体设计、详细设计、实现、测试、部署、维护等阶段。

缺点是:
1、是一种理想话的线形模型,无法克服“变化”引发的问题。如果上一步做错了,下一步就会将错就错,直到产品做完了才知道不是用户所要的产品。
2、开发人员常常陷入“阻塞状态”,一部分组员不得不停下来等待别人把前头得活干完。

瀑布模型可以说是典型的纵向框架





╭⌒╮ ╭⌒╮╭⌒╮
╱◥███◣╭╭ ⌒╮
︱田︱田   田|
关门,上锁,钥匙已生锈。
世事静方见,人情淡始长!
顶部
carol
荣誉斑竹
Rank: 14Rank: 14Rank: 14Rank: 14
幻想懒王++


UID 1859
精华 66
积分 5135
帖子 9999
活跃指数 32
LU金币 2589 个
LU金条 0 个
阅读权限 200
注册 2003-11-7
 
发表于 2004-5-21 12:44  资料  个人空间  短消息  加为好友 
tongue.gif 把无双的贴子整理在这了

软件开发过程生命周期模型 讨论

生命周期 指软件开发全部过程、活动和任务的结构框架。软件开发包括需求、设计、编码和测试等阶段,有时也包括维护阶段。目前软件开发实践中使用的各种生命周期模型,都是下面这些基本组成部分的不同的排列与组合。

市场分析,可行性研究,与项目定义
需求分析
设计(概要设计和详细设计)
编码实现
测试
使用与维护

主要有以下几种模型:
1.瀑布模型(waterfall model)
2.演化模型(evolutionary model)
3.螺旋模型(spiral model)

每个模型都有自己的优缺点
我想就这个讨论一下

-------------------------------------------

二、瀑布模型
瀑布模型将软件生命周期的各项活动规定为依固定顺序联接的若干阶段工作,形如瀑布流水,最终得到软件产品。如图所示:

优点:
   a.强调开发的阶段性;
   b.强调早期计划及需求调查;
   c.强调产品测试。

缺点:
   a.依赖于早期进行的唯一一次需求调查,不能适应需求的变化;
   b.由于是单一流程,开发中的经验教训不能反馈应用于本产品的过程;
   c.风险往往迟至后期的开发阶段才显露,因而失去及早纠正的机会。

这是最早存在的开发模型,并且现在使用的也比较多

---------------------------------------------

瀑布模型的特点是首先是仔细的需求分析,开发组有步骤的制定一份功能(结构)说明,接着是概要设计,详细设计,然后才着手编码。编码结束后进行测试,然后才能发布软件。这看上去是很有逻辑的;只在理解后才开始构造。以这样严格的方式构造软件,工程师很明确每一步应该做什么。许多人提出了基本是基于这一模型的多种方法论;也有相当多的商业工具可以使这些步骤更机械化且不易出错。


瀑布模型各阶段的工作自顶向下从抽象到具体顺序进行。瀑布模型意味着在生命周期各阶段间存在着严格的顺序且相互依存。瀑布模型是早期软件设计的主要手段

瀑布模型依靠早期的需求分析,并且要求需求很明确
对于需求未定或是不断变化的软件不适合

现在这种模型一般用于做一些需求已明确的并很少变化的软件,不适于需求 不明确或是容易变化的软件(如你正在开发一个陌生的领域的软件,这时就不应该使用瀑布模型,但是如果你正在开发自己很熟悉领域的软件,就可以使用瀑布模型来加快开发速度)

由于需求已明确,所以不需要代码重构等方面的开销,因此效率较高

----------------------------------------------

三、演化模型

该模型主要针对事先不能完整定义需求的软件开发。用户可以给出待开发系统的核心需求,并且当看到核心需求实现后,能够有效地提出反馈,以支持系统的最终设计和实现。软件开发人员根据用户的需求,首先开发核心系统。当该核心系统投入运行后,用户试用之,完成他们的工作,并提出精化系统、增强系统能力的需求。软件开发人员根据用户的反馈,实施开发的迭代过程。第一迭代过程均由需求、设计、编码、测试、集成等阶段组成,为整个系统增加一个可定义的、可管理的子集。如图所示。

在开发模式上采取分批循环开发的办法,每循环开发一部分的功能,它们成为这个产品的原型的新增功能。于是,设计就不断地演化出新的系统。 实际上,这个模型可看作是重复执行的多个“瀑布模型”。

“演化模型”要求开发人员有能力把项目的产品需求分解为不同组,以便分批循环开发。这种分组并不是绝对随意性的,而是要根据功能的重要性及对总体设计的基础结构的影响而作出判断。有经验指出,每个开发循环以六周到八周为适当的长度。

优点:

a.任何功能一经开发就能进入测试以便验证是否符合产品需求。
b.帮助导引出高质量的产品要求。如果没有可能在一开始就弄清楚所有的产品需求,它们可以分批取得。而对于已提出的产品需求,则可根据对现阶段原型的试用而作出修改。
c.风险管理可以在早期就获得项目进程数据,可据此对后续的开发循环作出比较切实的估算。提供机会去采取早期预防措施,增加项目成功的机率。
d.大大有助于早期建立产品开发的配置管理,产品构建(build ),自动化测试,缺陷跟踪,文档管理。均衡整个开发过程的负荷。
e.开发中的经验教训能反馈应用于本产品的下一个循环过程,大大提高质量与效率。
f.如果风险管理发现资金或时间已超出可承受的程度,则可以决定调整后续的开发,或在一个适当的时刻结束开发,但仍然有一个具有部分功能的,可工作的产品。
g.心理上,开发人员早日见到产品的雏型,是一种鼓舞。
h.使用户可以在新的一批功能开发测试后,立即参加验证,以便提供非常有价值的反馈。
i.可使销售工作有可能提前进行,因为可以在产品开发的中后期取得包含了主要功能的产品原型去向客户作展示和试用。

缺点:

a.如果所有的产品需求在一开始并不完全弄清楚的话,会给总体设计带来困难及削弱产品设计的完整性,并因而影响产品性能的优化及产品的可维护性。
b.如果缺乏严格的过程管理的话,这个生命周期模型很可能退化为一种原始的无计划的“试-错-改”模式。
c.心理上,可能产生一种影响尽最大努力的想法,认为虽然不能完成全部功能,但还是造出了一个有部分功能的产品。
d.如果不加控制地让用户接触开发中尚未测试稳定的功能,可能对开发人员及用户都产生负面的影响。

-----------------------------------------------------

四、螺旋模型

瀑布模型与演化模型相结合,并加入两者所忽略的风险分析所建立的一种软件开发模型。该模型于1998年由美国TRW公司(B.W.Boehm)提出。软件项目风险的大小作为指引软件过程的一个重要因素,引入这一概念有可能使得软件开发被看作一种元模型,因为它能包容任何一个开发过程模型。

螺旋模型基本的做法是在“瀑布模型”的每一个开发阶段之前,引入非常严格的风险识别、风险分析和风险控制。直到采取了消除风险的措施之后,才开始计划下一阶段的开发工作。否则,项目就很可能被取消。

另外,如果有充足的把握判断遗留的风险已降低到一定的程度,项目管理人员可作出决定让余下的开发工作采用另外的生命周期模型,如“演化模型”,“瀑布模型”,或自定的混合模型。

优点:

   a.强调严格的全过程风险管理。
   b.强调各开发阶段的质量。
   c.提供机会检讨项目是否有价值继续下去。

缺点:

   a.引入非常严格的风险识别,风险分析,和风险控制,这对风险管理的技能水平提出了很高的要求。这需要人员,资金,和时间的投入。

-------------------------------------------------------

五、软件生命周期模型的选择
对于需求明确的项目,建议采用演化模型。

对于规模小,需求简单,功能单一的项目,建议采用瀑布模型。

其他项目,一般采用迭代模型。


ninja.gif 好,大家继续~ rose.gif

顶部
threehair
荣誉斑竹
Rank: 14Rank: 14Rank: 14Rank: 14


UID 27
精华 78
积分 3034
帖子 5716
活跃指数 0
LU金币 2093 个
LU金条 0 个
阅读权限 200
注册 2003-9-17
 
发表于 2004-5-23 14:26  资料  个人空间  短消息  加为好友 
在上贴中已经介绍的几种主要的软件开发模型。至于软件开发方法比较多。大家也比较熟悉。哦的观点如下:
1 在软件开发中未必一定是单一的开发模型
2 开发模型是项目的框架。开发方法是项目的实施。开发模型和开发方法还是有一些联系的。选择恰当的开发模型和开发方法配合,可以相得益彰。

选择以瀑布模型和螺旋模型为代表的开发模型和以结构化和面向对象为代表的开发方法为例。
瀑布模型是一个纵向的线性过程。每个阶段泾渭分明。
螺旋模型是处理变更的好办法。它的阶段划分不象瀑布模型那么明确。各个阶段可以不断追加。

结构化方法从系统的功能入手,系统分为各个功能模块,是一个横向的过程
面向对象从处理的对象入手,以对象为中心描述系统。通过不断的原型开发和不断完善,最终实现系统。

综上所述

如以瀑布模型和结构化方法结合,用结构化方法规划系统框架,在每个模块中再利用瀑布模型不断细化,这种纵横交错的办法可以很好的发挥两者的固有优点,保持清晰的框架。

但是以上方法结合的前提是项目不发生变更。一旦发生变更,框架必定被打乱。这时候采用的开发模型当然是螺旋模型,至于开发方法,如果选择面向对象这种易变更、易维护的开发方法,两者结合,以大螺旋带动小螺旋,保持各自的灵活性和高效率,效果应该很好。

假设瀑布模型结合面向对象方法,又或者螺旋模型结合结构化方法,是不是有以上效果或者是否制约各自的性能呢?

以上都是哦的假设,软件开发中也未必一定就是使用以上的模型和方法。
大家说说自己的想法吧。畅所欲言,不要哦一个人唱独角戏 ninja.gif





╭⌒╮ ╭⌒╮╭⌒╮
╱◥███◣╭╭ ⌒╮
︱田︱田   田|
关门,上锁,钥匙已生锈。
世事静方见,人情淡始长!
顶部
threehair
荣誉斑竹
Rank: 14Rank: 14Rank: 14Rank: 14


UID 27
精华 78
积分 3034
帖子 5716
活跃指数 0
LU金币 2093 个
LU金条 0 个
阅读权限 200
注册 2003-9-17
 
发表于 2004-5-24 09:35  资料  个人空间  短消息  加为好友 
原型方法论

---关于软件原型方法若干问题的讨论

撰写:Blueski
日期:2003-3-14

关键字:原型,尊重客户,原型评价,可视化,变更成本,开发团队蓝图

1 引子

太多了!终于签下合同-->得到了“正式”的客户提供的“需求书”的几片纸-->凭借自己的理解立即投入开发-->“木已成舟”,生米终于熬成粥-->用户拒绝接受?-->艰难地修改,反复修改,开发人员厌倦了,而用户对系统用之无味,弃之可惜,遂成鸡肋。-->由此后期收款遥遥无期,软件公司不再和用户保持沟通-->互相埋怨,扯皮由此而生。或者,一个项目拆成为多期,从而收取一部分款项,而很多的开发都作废。这样的案例真是何其多也!
究其主要原因,与其说是没有搞定关键客户,或者项目管理不当,不如说是没有帮助客户解决其问题,对客户真正的需求研究不够。实际上,原型方法是解决此类问题、确保项目成功的最佳途径。

我在写此文的同时,也试图寻找资料,不知道是本就没有,还是自己所不幸而未找到。看来原型并没有明确的标准,而目前不同软件公司的理解和做法各不相同也就不奇怪了。但从软件过程的角度来考察,原型法仍有着通用的优化的做法。本文试图从作者的实践经验出发,对原型方法进行思考与探讨。
另外,本文是发散型的,在研究原型的同时,也讨论了原型相关的内容。原型本质上有些象是抛砖引玉,而本文也旨在抛砖引玉,但无意于一概地论定什么。

2 什么是原型

2.1 原型的定义

原型(prototype)即把系统主要功能和接口通过快速开发制作为“软件样机”,以可视化的形式展现给用户,及时征求用户意见,从而明确无误地确定用户需求。同时,原型也可用于征求内部意见,作为分析和设计的接口之一,可方便于沟通。

2.2 原型的主要价值

原型法主要价值是可视化,强化沟通,降低风险,节省后期变更成本,提高项目成功率。一般来说,采用原型法后可以改进需求质量;虽然投入了较多先期的时间,但可以显著减少后期变更的时间;原型投入的人力成本代价并不大,但可以节省后期成本;对于较大型的软件来说,原型系统可以成为开发团队的蓝图;另外,原型通过充分和客户交流,还可以提高客户满意度。

2.3 基本要求

对原型的基本要求包括:

* 体现主要的功能;
* 提供基本的界面风格;
* 展示比较模糊的部分,以便于确认或进一步明确,防患于未然。
* 原型最好是可运行的,至少在各主要功能模块之间能够建立相互连接。

2.4 处理方法

原型的处理方法基本上有2种不同类型,即抛弃型和演化型(不同的软件工程书籍称发不同,实质意义则类似)。可以抛弃原型,在取得的明确需求基础上重新开始设计与开发;也可在原型的基础上继续开发。一般小项目不采用抛弃型原型,否则成本和代价似乎会偏高。

2.5 表达工具

原型的表达工具可以有很多,如果是演化型的原型,当然优先选用软件本身的开发工具。否则还可以应用各种快速显示的工具,例如,HTML,Powerpoint等等,只要能够充分而形象地表达就可以了。
根据笔者的经验,在原型系统中,可以采用一些与常规不同的做法,例如,可以在界面上比较显著的地方写明当前模块或界面的主要目的,由哪些角色操作,能解决其什么问题。这么做可以使得用户或开发团队成员一开始就有非常清楚的概念;又如,对于决策分析,你可以直接把一些分析结果画成图,并且配上一些文字说明,这样可以避免输入大量初始数据,等等。

3 原型在软件过程的地位

软件的根本目的是实现用户的需求,提供用户日常使用,解决用户工作中有所不便的问题,提高其工作效率,改进质量,加强管理控制,最终直接或间接地提高其效益。因此软件开发本质上就是需求的处理和实现,而软件原型对需求确定来说具有非常重要的意义。原型方法包括2个基本过程,即原型制作和原型评价。

如果从需求角度看软件过程,我们不妨可以把软件过程这样划分:

3.1 需求收集和分析

搜集需求得到需求说明书,了解软件要做什么,做成什么样,解决用户什么问题。
这时候软件公司以书面文档方式提出,例如需求问询表等。

3.2 提供原型并进行评价

制定原型开发计划,根据用户需求及不确定的高风险部分进行原型开发,在内部进行原型评价,请客户进行原型评价,以保证确实反映了用户的真正想法。

3.3 实现需求

当前的软件开发过程常常采用迭代方式进行开发,逐步求精,以降低风险和成本。对迭代的次数,每次迭代的里程碑,要实现的目标,及可提交的成果必须有可验证的清晰的计划。项目管理是一种艺术,迭代规划及里程碑定义都是一种挑战、一种艺术,但项目管理不在本文讨论范围。

3.4 需求变更

需求变更是正常的,也是难免的,应允许用户和开发团队自身对需求进行变更。变更处理的关键在于跟踪和控制,如何使产生的影响应得到控制,这属于配置管理的内容,也不在本文讨论范围。

原型在软件过程中的定位如下图所示:

user posted image
图1 软件原型的定位

实际上我们可以把原型看得更为广义一些。任何用户或者内部演示的材料,都可以看作为原型。例如,如果你的产品是某种通用的或者行业解决方案,虽然你其实还没有产品,但先做出一个原型,再加一个漂亮的白皮书,就可以在市场上进行预销售了。

对于抛弃型和演化型原型来说,也不是绝对的。演化型原型中必然会不断抛弃一些内容,而抛弃型原型,尽管在完成历史使命后不再使用,但很多思想以及部分设计还是可以继承的。

4 原型方法的一般过程

基于原型方法在整个需求过程中的地位,我们需要把原型法和需求处理放在一起进行讨论。采用原型法的一般过程如下图所示:

user posted image
图2:原型法的处理过程

在上图中已经清楚地描述了原型的处理过程,值得一提的是,原型不仅用于给用户或者最终用户进行评议,同时完全可以在公司内部组织评议,看看我们周围吧,多数程序员对技术的兴趣远远高于对需求的兴趣,因此其对系统的理解并不会比市场人员或者项目经理理解的深多少。这里的公司内部人员角色可以包括很多,系统分析员/程序员自身、项目经理、部门经理、用户代表、领域专家、测试人员等等,不同的角色往往会在其不同立场对系统提出中肯的意见来。
另外值得注意的是界面设计的引入。我们认为将界面风格在原型阶段即进行基本确定是一种优化的做法,因为软件前期对界面的确定可以避免后期开发时对界面进行统一调整所带来的不必要的成本花费,良好的界面也可以使客户增加对系统的好感,当然,但愿用户不要只是欣赏界面而忽略了他们对系统功能的思考。要知道,如果仅仅是让用户看到美观的界面,那么整个原型几乎是白做了。


5 使用原型方法的相关问题探讨

5.1 为什么要采用原型法?

原型对一个项目取得成功具有重要的意义。俗话说:隔行如隔山,实际上软件公司很难保证其制作的软件正好就是用户所需要的,用户也很难一次性把其真实的要求完全提交,开始阶段提出的往往只是对系统的期望,和比较模糊的设想而已。而原型系统为用户提供了一个靶子,看着原型系统,用户往往就能进一步提出他们的真正想法。显然软件公司明确用户需求的最佳方式就是为用户提供原型并由用户进行评价。
也许,跳过原型可以节省时间和前期成本,但你应该注意到,跳过原型的话,后期变更的成本会明显增加。

5.2 为什么在需求说明书之外需要原型?

1)眼见为实,文字具有歧义性,不同的人理解都不相同;
2)最终用户往往在看到一套可运行的系统的基础上,才可能提出其真实的意见,如果到最终提交时才看到这样的系统就为时太晚。这也是以前无数软件开发留下的教训;
3)便于发现问题,及时纠正;
4)便于进一步展开,并取得用户的细节需求;
5)体现原型的其它功能:便于公司内部如经理、市场部等对软件提出意见,便于开发人员对整个产品达成统一认识,等等。对内部人员来说,同样地,一套形象的原型也远胜过一堆专业术语文字;也就是说,原型对软件公司内部也十分重要。这些评价工作无形之中改进了项目质量。

5.3 原型方法有什么风险?

任何方法都是有利有弊,在我们可以探讨一下原型方法可能存在的风险。以下是一般软件公司所担心的风险:需要付出前期进度和人力成本;由于程序员对问题的不了解而效率低下,受客户牵制而在原型上反复修改;因为仓促设计而做不利于进一步在其基础上继续开发;由于过早展示原型给客户,使得客户可能提高其期望值,并提出更多离谱的要求,等等。

值得一提的是原型方法的主要价值之一就是尽早揭示软件中可能存在的风险及不确定因素,尤其是关于用户需求一致性方面的风险。

5.4 原型方法和其它方法或过程的关系如何,是否一致?

生命周期法中并不包括原型,或者说没有明确提供原型的概念和定义。原型可以认为是需求分析中的一个子部分。另外,应该说原型方法是对生命周期法的有益补充和完善。
RUP中是最优化的统一软件过程,但RUP中似乎没有提到原型,RUP的核心过程是在迭代中精化。我个人的见解是,原型非常类似于第一次迭代的过程和结果。实际上,如果把原型看作为第一轮交付的成果,那么原型的很多不利之处,诸如花费前期成本等等,这些担心都将变得不复存在。
XP方法对原型非常推崇,这是因为XP方法非常强调需求的重要性,甚至要求客户参与开发过程。但原型方法和XP也有区别。XP是分批交付,先做一个几个功能点的版本,完成后再每个开发周期往上面加其它功能点,而原型法一般要求做出比较完整,能覆盖主要功能点的粗略的版本。XP方法仁者见仁,智者见智,不一而举。

5.5 如何避免项目团队做原型的时候出现部分人员闲置?

在项目管理中,对人力资源的调配应和项目进展相匹配。实际上在用户接触到原型制作的同时,可以进行项目计划、架构设计、技术培训以及技术难点攻关等等。
如果从广义上理解原型的话,架构设计者甚至可以设计出一种用户开发团队使用的所谓框架原型,包含了主要的设计成分、模板和示例。
比较理想的结果是,当原型完成后,需求分析、架构设计和界面风格设计都趋于完成,从这一点可以看到,原型方法可以作为快速软件开发的重要手段。

5.6 如果避免项目在原型上停滞不前?

应使用有经验的开发人员,避免因为程序员不熟悉业务而延误进度;不要在界面设计上犹豫不决而占据时间;如果用户对原型提出了很多意见,其中部分比较明确的意见可以在开发过程中进行实现;和客户的交流应该简洁明了,而不是似是而非;另外,原型方法在项目过程中占据的时间应该在项目计划中保留出来,而不仅仅是隐含在需求调研与分析的一个部分。

5.7 如何避免用户看了原型后漫无边际地提要求?

首先,应该充分尊重客户,想想其它行业的服务质量吧。有没有听说过这样的说法,项目管理也是客户满意度的管理;软件是一种对客户的关怀,等等。确实,客户提出的思路可能和你已经形成的思路不同,一下子打乱了你的思路,也许项目经理并不介意,但这确是让设计者特别心烦的事情。如果确有把握,或者你可以不做到原型中去。有时候,即使原型很完美,用户也会额外地提出一些意见,这也是人之常情。但不管怎样,你不能认为用户根本不懂软件,让他们到时用就行了,抱这样想法的多半会付出代价。

其次应该进行坦诚协商,多数用户其实都是通情达理的。如果你在签订合同时答应满足任何要求,而此时又无法忍受用户的要求,那么孰是孰非应是题外之意了。一般来说,比较合理的做法可以通过增加费用、延长进度或者把需求实现分阶段来提交,以保持工作的延续性。对有些软件,尤其是信息管理系统来说,客户的实施时间其实并不是主要的,客户最需要的不是及时,而是合用。

其实,客户有着很多种类型,确实,个别客户会参考同类产品来提要求,极个别用户并不真正懂得计算机技术而对技术路线、技术手段等提出其意见,等等。但我们为什么还可以反过来想一下,如果是等到软件全部提交的时候,这部分用户仍有会提出同样的意见。提早暴露并解决分歧,对双方睹是有利的。如果软件公司明知可能存在矛盾,仍然先做好,然后等到用户提出反对后,再提出补充收费,如果喜欢,也无话可说。

总之,原型应本着对软件需求的基本理解来做,这样才能预防不一致性的发生。尤其应该针对不清楚的地方制作原型,从而尽量暴露问题,引发用户的联想,不能回避问题,掩盖问题(以免用户提出太多的想法),很多问题虽然一时掩盖了,但最终还是要发生的。

5.8 如何避免在原型基础上继续开发时的可维护性降低?

问题是这样的,制作原型时常希望快速提供原型,往往不及对软件结构或者数据库进行细致设计。所以在此基础上继续设计和开发的话,有必要在开发前先进行调整。同时,在设计原型前就有必要确定,该原型是要抛弃的,还是要演化要继承的。对于要演化的原型,其设计不能过于粗略,显然这直接影响到今后的开发成本。

6 小结

原型方法是可视化的方法,已成为快速软件开发常用的手段。软件公司或部门一旦得到了原型方法的回报,就会坚持使用。原型不是绝对必要,但非常有意义。





╭⌒╮ ╭⌒╮╭⌒╮
╱◥███◣╭╭ ⌒╮
︱田︱田   田|
关门,上锁,钥匙已生锈。
世事静方见,人情淡始长!
顶部
threehair
荣誉斑竹
Rank: 14Rank: 14Rank: 14Rank: 14


UID 27
精华 78
积分 3034
帖子 5716
活跃指数 0
LU金币 2093 个
LU金条 0 个
阅读权限 200
注册 2003-9-17
 
发表于 2004-5-24 09:41  资料  个人空间  短消息  加为好友 
采用简化原型法进行需求分析

苏子林 翟金刚 yesky  

2003年10月24日


1 前言

  需求分析阶段是管理信息系统(MIS)开发最重要的阶段。MIS开发的需求阶段首先是了解和澄清用户的需求,然后严格地定义被开发的软件系统的需求规格说明书[1]。常用的软件需求分析方法有面向数据流的结构化分析方法、面向数据结构的Jackson方法、面向对象的方法和原型法等。原型法由于改变了系统的分析、设计和实现三个顺序阶段的观点[2],改变了传统的自顶向下的开发模式,降低了软件需求的风险,因此得到了广泛的应用,特别是在致力于某一领域MIS开发的软件公司,如致力于电力MIS开发的公司。但作者在长期的MIS需求分析过程中,发现原型法有以下缺陷:  

  1)原型的设计和修改工作量大,增加了系统的开发成本;

  2)由于用户不关心或不理解原型的概念和实现,而且存在较大期望,使得与实际系统差别较大的原型增加了需求分析人员与用户的交流难度;无论是水平原型,还是垂直原型都不能反映实际系统的全貌;

  3)软件需求主要包括:功能需求、界面需求、性能需求、环境需求、可靠性需求、安全保密需求、资源使用需求、软件成本消耗与开发进度需求和目标需求[3]。原型法中的原型难以表达软件的后七项需求;

  4)原型法强调用户和开发人员不断对原型进行不断修改和补充,直到用户感到满意为止。在时间紧和任务重的大型MIS项目中,这种情况实际难以保证,特别是在用户单位和开发单位距离较远时。

  本文结合管理信息系统项目实施的实践,提出一种新的需求分析方法-简化原型法。这种方法根据数据库应用的特点,将需求分析分为两个阶段,并简化了作为需求分析工具的系统原型。

2 简化原型法需求分析的第一个阶段

  管理信息系统属于数据库应用。数据库应用需求分析应该围绕数据,而不是功能展开,因此应该首先解决"有什么",然后再明确"做什么"[4]。第一个阶段就是要解决"有什么",即由项目经理与用户进行协商,确定系统的技术协议,因此可以称为技术协议阶段。技术协议需要开发方的项目经理与用户单位的技术主管签字并盖章,并以合同附件的形式存在。技术协议的主要内容有:系统的边界、系统处理的业务、与其它系统的接口、工程的进度控制、培训安排和技术服务承诺。

2.1 系统的边界

  系统的边界规定系统覆盖的作业范围,主要有地理边界(规定系统运行的部门、分支单位等)、操作员范围(规定操作系统的所有操作员身份、分布和大致权限)和业务范围(规定系统处理的业务,对于不处理的边沿业务特别明确指出)。

2.2 系统处理的业务

  系统处理的业务涵盖系统处理的所有业务,包括各种业务的描述、数据来源、实现要求。但是业务规定不要求过细,可以对应实际系统中的一个模块。如:电力MIS中输电设施管理子系统中的线路设备管理,不详细描述线路设备管理中的所有功能。

2.3 与其它系统的接口

  与其它系统的接口明确规定接口的系统、功能和实施单位。在接口的实施单位中明确是由开发方完成,还是由开发方协助第三方完成。

2.4 工程的进度控制

  工程的进度控制规定工程的开始、结束日期和具体工程项目的名称、完成时间、地点、完成标志及责任分工。具体项目一般包括:采购设备到达现场、采购设备安装调试、完成网络布线、开发准备阶段、业务需求调查、系统分析和设计、软件编制、现场调试、数据准备及录入、功能确认、试运行和系统验收。责任分工规定双方对于具体项目的工作内容和配合方式。在配合方式中规定人员组织方式、人员素质要求、提供的设备和场所。完成标志规定具体项目完成提供的文件名称和要求,如:网络布线验收报告和硬件设备验收报告等。

2.5 培训安排

  训包括操作员和系统维护人员的培训。培训安排包括每种培训的人员数量、培训内容、培训时间、地点、组织方式和教材,并规定教员和学员的素质要求,及培训后学员达到的水平。

3 简化原型法需求分析的第二个阶段

  如果说第一个阶段解决"有什么"的问题,那么第二个阶段解决"做什么"的问题。主要工作有需求调查准备、到用户单位进行需求调查分析和进行需求评审。

3.1 需求调查准备

  需求调查准备工作,在系统的技术协议签订后,严格依照技术协议进行,主要有向用户单位发放业务调查表、建立需求分析文档原型和建立系统简化原型。业务调查表在系统的技术协议签订后,立即通过传真发送到用户单位,要求用户单位在需求调查人员到达现场之前完成。业务调查表内容包括:具体业务的名称、上级业务、下级业务、发生条件、处理的数据和详细流程(处理岗位、处理方式和审核细节等)。需求分析文档原型是根据技术协议编写的需求分析说明书原型,它的格式与标准的需求分析说明书相同。其中的状态迁移图和各种表证单书等不明确的内容,采用相似系统的或由系统分析人员根据技术协议和以往经验设计。

  系统的简化模型根据技术协议的要求,仿照相似系统设计。简化模型采用可视化的数据库编程语言设计,一般采用数据库应用开发人员熟悉的PowerBuilder(PB)或Delphi。简化模型的主要设计要求有:1)充分考虑系统的设计与实现,不得与实际系统脱节;2)尽量仿真实际系统的操作界面,与实际系统的操作过程完全相同;3)可以单机安装运行,不与实际数据库连接;4)演示数据的存储可以通过文本文件、单机的数据库或PB外部数据源的数据窗口;5)对于界面中容易误解或难以理解的操作,在功能帮助按钮中给出说明;6)界面中难以实现或工作量很大的功能,以标注方式详细说明;7)运行稳定,并比实际系统对硬件要求低。

3.2 需求调查分析

  需求调查分析在确认需求调查准备的三项工作完成后,由开发单位的系统分析人员到用户单位进行。系统分析人员与用户单位安排的业务主管共同讨论业务调查表和系统简化原型,并不断修改完善系统简化原型和文档原型,最终形成共识,并要求业务主管在需求分析说明书上签字。最终系统简化原型和源代码留在用户现场,便于系统的操作员进一步理解分析,直到最终掌握;而且有利于提出进一步的改进意见。改进意见可以随时通过邮件或传真直接发到开发单位,或由用户单位的系统维护人员修改简化原型后,随时发到开发单位,从而便于开发人员及时修改系统的设计和编码。

3.3 进行需求评审

  需求评审一般由用户单位组织,评审团成员由同行专家、系统分析、设计和测试人员组成。评审的依据不仅有需求分析说明书,还有系统简化原型;同时在评审过程中,系统简化原型不断进行优化。评审的目标是要求需求分析说明书具有正确性、可行性、必要性、具有优先级属性、可验证性和无二义性[5]。需求评审报告作为对需求分析的补充和修正,由双方负责人签字,以需求分析说明书附件的形式存在,同样指导下一步的系统设计工作。

4 几点说明

1、此方法适合各种MIS工程的需求分析,特别适合致力于某一领域MIS开发的软件公司。采用此方法,开发同类项目越多,需求分析工作的效率越高。

2、在需求分析过程中,由于需要设计系统简化原型和文档原型,并充分考虑到系统的设计与实现,因此与其它需求分析方法向比,提高了对需求分析人员的要求。在实际工作中,一般由资深的软件分析和设计人员进行。

3、此方法不仅适合MIS软件工程,同样适合其它大型软件工程。

4、由于需求分析工作本身的难度和重要性,此方法同样要求用户单位和需求分析人员对需求分析所有工作内容,引起足够重视;科学安排需求分析工作步骤,某些步骤可以同时进行;所有工作步骤不得应负或疏忽。

5 结束语
  目前简化原型法已经在多个电力MIS工程中应用,大大提高了需求分析的工作效率。实践证明,简化原型法具有以下特点:1)简化的系统原型开发工作量大大降低,修改和补充方便;2)简化原型大大缩短了需求分析人员与业务主管之间的距离,便于交流;并大大加强了需求分析人员与业务主管对系统的认识,有利于发现和解决问题;3)简化原型的设计提前考虑了系统的设计与实现,大大降低了软件工程的风险;4)简化原型增加了系统操作员对实际系统的认识,大大简化了工程实施后系统的操作培训;5)简化原型可以直接指导工程的设计和编码,便于系统开发的组织。这种方法也可以用于其它软件工程,对于其它需求分析方法的改革也具有指导意义。





╭⌒╮ ╭⌒╮╭⌒╮
╱◥███◣╭╭ ⌒╮
︱田︱田   田|
关门,上锁,钥匙已生锈。
世事静方见,人情淡始长!
顶部
carol
荣誉斑竹
Rank: 14Rank: 14Rank: 14Rank: 14
幻想懒王++


UID 1859
精华 66
积分 5135
帖子 9999
活跃指数 32
LU金币 2589 个
LU金条 0 个
阅读权限 200
注册 2003-11-7
 
发表于 2004-5-24 11:29  资料  个人空间  短消息  加为好友 
你先唱,唱得好就有人来一起唱了 sleep.gif

顶部
threehair
荣誉斑竹
Rank: 14Rank: 14Rank: 14Rank: 14


UID 27
精华 78
积分 3034
帖子 5716
活跃指数 0
LU金币 2093 个
LU金条 0 个
阅读权限 200
注册 2003-9-17
 
发表于 2004-5-24 11:50  资料  个人空间  短消息  加为好友 
QUOTE(carol @ 2004-05-24 11:29:39)
你先唱,唱得好就有人来一起唱了 sleep.gif

一个人唱不好玩。哦只有三斧头。





╭⌒╮ ╭⌒╮╭⌒╮
╱◥███◣╭╭ ⌒╮
︱田︱田   田|
关门,上锁,钥匙已生锈。
世事静方见,人情淡始长!
顶部
[广告] 记录自己的思想火花,留住每日的技术积累,尽在拥有属于自己独立域名的博客。
threehair
荣誉斑竹
Rank: 14Rank: 14Rank: 14Rank: 14


UID 27
精华 78
积分 3034
帖子 5716
活跃指数 0
LU金币 2093 个
LU金条 0 个
阅读权限 200
注册 2003-9-17
 
发表于 2004-5-24 22:22  资料  个人空间  短消息  加为好友 





╭⌒╮ ╭⌒╮╭⌒╮
╱◥███◣╭╭ ⌒╮
︱田︱田   田|
关门,上锁,钥匙已生锈。
世事静方见,人情淡始长!
顶部
[广告] 论坛新开 【DB2产品家族】 【投资理财】 【行业应用】 板块
threehair
荣誉斑竹
Rank: 14Rank: 14Rank: 14Rank: 14


UID 27
精华 78
积分 3034
帖子 5716
活跃指数 0
LU金币 2093 个
LU金条 0 个
阅读权限 200
注册 2003-9-17
 
发表于 2004-5-27 09:51  资料  个人空间  短消息  加为好友 
user posted image
迭代式模型

迭代式模型是RUP推荐的周期模型,也是我们在这个系列文章讨论的基础。在RUP中,迭代被定义为:迭代包括产生产品发布(稳定、可执行的产品版本)的全部开发活动和要使用该发布必需的所有其他外围元素。所以,在某种程度上,开发迭代是一次完整地经过所有工作流程的过程:(至少包括)需求工作流程、分析设计工作流程、实施工作流程和测试工作流程。实质上,它类似小型的瀑布式项目。RUP认为,所有的阶段(需求及其它)都可以细分为迭代。每一次的迭代都会产生一个可以发布的产品,这个产品是最终产品的一个子集。迭代的思想如上图所示。

迭代和瀑布的最大的差别就在于风险的暴露时间上。"任何项目都会涉及到一定的风险。如果能在生命周期中尽早确保避免了风险,那么您的计划自然会更趋精确。有许多风险直到已准备集成系统时才被发现。不管开发团队经验如何,都绝不可能预知所有的风险。"(RUP)二者的区别如下图所示:

user posted image
由于瀑布模型的特点(文档是主体),很多的问题在最后才会暴露出来,为了解决这些问题的风险是巨大的。"在迭代式生命周期中,您需要根据主要风险列表选择要在迭代中开发的新的增量内容。每次迭代完成时都会生成一个经过测试的可执行文件,这样就可以核实是否已经降低了目标风险。"(RUP)

---------选自林星《需求的实践(2)--能力和过程 》
http://www-900.ibm.com/developerWorks/cn/l...rt2/index.shtml





╭⌒╮ ╭⌒╮╭⌒╮
╱◥███◣╭╭ ⌒╮
︱田︱田   田|
关门,上锁,钥匙已生锈。
世事静方见,人情淡始长!
顶部
[广告] 论坛新开 【DB2产品家族】 【投资理财】 【行业应用】 板块
threehair
荣誉斑竹
Rank: 14Rank: 14Rank: 14Rank: 14


UID 27
精华 78
积分 3034
帖子 5716
活跃指数 0
LU金币 2093 个
LU金条 0 个
阅读权限 200
注册 2003-9-17
 
发表于 2004-5-27 09:54  资料  个人空间  短消息  加为好友 
快速原型(Rapid Prototype)模型是我喜欢采用的另一种模型。快速原型模型在功能上等价于产品的一个子集。注意,这里说的是功能上。瀑布模型的缺点就在于不够直观,快速原型法就解决了这个问题。一般来说,根据客户的需要在很短的时间内解决用户最迫切需要,完成一个可以演示的产品。这个产品只是实现部分的功能(最重要的)。它最重要的目的是为了确定用户的真正需求。在我的经验中,这种方法非常的有效,原先对计算机没有丝毫概念的用户在你的原型面前往往口若悬河,有些观点让你都觉得非常的吃惊。在得到用户的需求之后,原型将被抛弃。因为原型开发的速度很快,设计方面是几乎没有考虑的,如果保留原型的话,在随后的开发中会为此付出极大的代价。至于保留原型方面,也是有一种叫做增量模型是这么做的,但这种模型并不为大家所接受,不在我们的讨论之内。

---------选自林星《需求的实践(2)--能力和过程 》
http://www-900.ibm.com/developerWorks/cn/l...rt2/index.shtml





╭⌒╮ ╭⌒╮╭⌒╮
╱◥███◣╭╭ ⌒╮
︱田︱田   田|
关门,上锁,钥匙已生锈。
世事静方见,人情淡始长!
顶部
[广告] 论坛新开 【DB2产品家族】 【投资理财】 【行业应用】 板块
 



当前时区 GMT+8, 现在时间是 2008-7-9 16:12
乐悠LoveUnix论坛-京ICP备05005823号

Thanks to Discuz!  © 2001-2007    Power by LoveUnix.net
Processed in 0.058278 second(s), 6 queries , Gzip enabled

清除 Cookies - 联系我们 - 乐悠LoveUnix - Archiver - WAP