📄 200603061756235.html
字号:
<P> 除了语言的二义性之外,主意不要使用行话,就是计算机术语。需求分析最重要的是和用户沟通,可是用户多半不是计算机的专业人士,如果在需求分析中使用了行话,就会造成用户理解上的困难。</P>
<P> 打个比方,如果你要做一个银行的信用卡系统,你就可以这样描述软件需求:银行的卡部管理信用卡,每张信用卡只属于一个帐户。信用卡有卡号、余额。一张信用卡有多笔的交易记录。</P>
<P> 完整:再也没有什么比软件开发接近完成是发现遗漏了一项需求更糟的事情了。需求的完整性是非常非常重要的,想象一下遗漏需求而不得不返工,这简直就是恶梦。可是令人遗憾的是,需求的遗漏是很经常发生的事情,不仅仅是你的问题,更多的问题发生在用户那里,他们不知道该做些什么。要做到需求的完整性是很艰难的一件事情,它涉及到需求分析过程的各方各面,贯穿了整个过程,从最初的计划制定到最后的需求评审。至于完整性的详细讨论,我们会在下面的章节中讨论,现在你只需要拼命的想象缺乏完整性的坏处,直到你出了一身的冷汗。出了吗?好,那我们继续。</P>
<P> 一致:一致性也是一个比较大的概念,很难用几句话讲清楚。还记得我们在开始的时候提到的需求的层次吗?简单的来说,就是用户需求必须和业务需求一致,功能需求必须和用户需求一致。严格的遵守不同层次间的一致性关系,就可以保证最后开发出来的软件系统不会偏离最初的实现目标。在实现过程中,我们还必须把一致性关系细化。比如说用户需求不能超出先前指定的范围。</P>
<P> 可测试:大家觉得一个项目的测试从什么时候开始呢?有人说从编码完成后开始。更清楚一点的说是编码的时候同时进行<a href="200602281036115.html" tppabs="http://www.itisedu.com/phrase/200602281036115.html" target="_new">单元测试</a>,编码完成后进行系统测试。这些都没有错。但是实际上测试是从需求分析过程就开始了。需求分析是测试计划的输入和参照。这就要求需求分析是可测试的。什么是可测试呢?“我们要用新的系统完成报表自动化处理”,你觉得这个需求是可测试的吗?当然不是,报表包括哪些?自动化处理的标准是什么?这些在需求中都没有说明。因此这项需求是无法测试的,就是不具有可测试性。说到这里,大家可能就会明白之前的需求的几项标准都是为了保证需求的可测试性的。事实就是这样,只有系统的所有需求是可以被测试的,才能够保证软件始终围绕着用户的需要,保证软件系统是成功的。</P>
<P><STRONG>五、软件需求过程</STRONG></P>
<P> 软件需求工程主要包括两个方面:需求开发和<a href="200603282323585.html" tppabs="http://www.itisedu.com/phrase/200603282323585.html" target="_new">需求管理</a>。</P>
<P> 需求开发可进一步分为:需求获取、需求分析、编写需求规格和需求验证四个阶段。各阶段说明如下:</P>
<P><STRONG> 需求获取阶段:</STRONG><BR> 这一阶段的核心任务就是确定三个层次的需求,对于业务层要强调明确业务总目标及使用范围,对于用户层,要强调明晰用户<a href="200603110944215.html" tppabs="http://www.itisedu.com/phrase/200603110944215.html" target="_new">工作流</a>程,对于功能层还要收集系统运行环境的限制等非功能性需求。不同的时间、不同的用户会由于不同的业务目标及使用范围而提出不尽相同的需求,同时由于没有约定提出方式也会有各不相同的表现形式。针对上述问题,首先要确定用户代表并对其在需求中的主次地位于以划分;其次要确定需求的整个开发过程,最后还要明确不同层次的需求要以约定的形式出具文档,以备双方的交流及问题检查。</P>
<P><STRONG> 需求分析阶段:</STRONG><BR> 这一阶段的核心任务就是确定并完善需求。初期阶段所获得的大量需求往往是不系统、不完整甚至个别需求是错误的、不必要的,只有通过提炼、分析和仔细审查需求,彼此沟通,采用适当的表现形式,比如绘制业务目标关联图、绘制功能结构示意图、编制数据字典、编写用户实例等,明白需求含义并找出其中的错误、遗漏或不足的地方,尤其是应采用特定符号标识需求优先级。</P>
<P><STRONG> 编写需求规格阶段:</STRONG><BR> 这一阶段的任务强调将已收集并做分析处理的需求经编制整理形成规范化的可视文档,即软件需求规格说明书。</P>
<P><STRONG> 需求验证阶段。</STRONG><BR> 本阶段是需求开发工作的最后阶段,要确定在第三阶段所编制的需求文档是否与预期结果一致,是否符合高质量需求的评价标准。这项工作可以通过评审来完成。评审可以根据用户代表的个人偏好、习惯予以审查需求,也可以遵循行业质量控制办法制定严格的步骤进行审查,这主要取决于项目的大小、需求及各个部分的重要程度。</P>
<P> 需求管理需要"建立并维护在软件工程中同客户达成的契约"。这种契约都包含在编写的需求规格说明与模型中。客户的接受仅是需求成功的一半,开发人员也必须能够接受他们,并真正把需求应用到产品中。</P>
<P> 通常的需求管理活动包括:<BR> 定义需求<a href="200603130850315.html" tppabs="http://www.itisedu.com/phrase/200603130850315.html" target="_new">基线</a>(迅速制定需求文档的主体)。<BR> 评审提出的需求变更、评估每项变更的可能影响从而决定是否实施它。<BR> 以一种可控制的方式将需求变更融入到项目中。<BR> 使当前的项目计划与需求一致。<BR> 估计变更需求所产生影响并在此基础上协商新的承诺(约定)。<BR> 让每项需求都能与其对应的设计、源代码和测试<a href="200604240937105.html" tppabs="http://www.itisedu.com/phrase/200604240937105.html" target="_new">用例</a>联系起来以实现跟踪。<BR> 在整个项目过程中跟踪需求状态从其变更情况。</P>
<P><STRONG>六、软件需求方法</STRONG></P>
<P> 软件需求分析方法大体分为如下四类:<a href="200602281749185.html" tppabs="http://www.itisedu.com/phrase/200602281749185.html" target="_new">结构化方法</a>、<a href="javascript:if(confirm('http://www.itisedu.com/phrase/200602281513385.html \n\nThis file was not retrieved by Teleport Pro, because it was unavailable, or its retrieval was aborted, or the project was stopped too soon. \n\nDo you want to open it from the server?'))window.location='http://www.itisedu.com/phrase/200602281513385.html'" tppabs="http://www.itisedu.com/phrase/200602281513385.html" target="_new">面向对象方法</a>、面向控制方法和面向数据方法。限于篇幅,本文将主要从结构化方法和<a href="200603101726185.html" tppabs="http://www.itisedu.com/phrase/200603101726185.html" target="_new">面向对象</a>方法以及<a href="200604231308415.html" tppabs="http://www.itisedu.com/phrase/200604231308415.html" target="_new">RUP</a>三个方面进行简要的探讨。</P>
<P><STRONG>1、<a href="javascript:if(confirm('http://www.itisedu.com/phrase/200604232156585.html \n\nThis file was not retrieved by Teleport Pro, because it was unavailable, or its retrieval was aborted, or the project was stopped too soon. \n\nDo you want to open it from the server?'))window.location='http://www.itisedu.com/phrase/200604232156585.html'" tppabs="http://www.itisedu.com/phrase/200604232156585.html" target="_new">结构化分析方法</a></STRONG></P>
<P> 结构化分折(Structured Analysis, <a href="javascript:if(confirm('http://www.itisedu.com/phrase/200604240907255.html \n\nThis file was not retrieved by Teleport Pro, because it was unavailable, or its retrieval was aborted, or the project was stopped too soon. \n\nDo you want to open it from the server?'))window.location='http://www.itisedu.com/phrase/200604240907255.html'" tppabs="http://www.itisedu.com/phrase/200604240907255.html" target="_new">SA</a>)方法是一种单纯的由顶向下逐步求精的功能分解方法。分析员首先用上下文图表(称为数据流图DFD)表示系统的所有输入/输出,然后反复地对系统求精,每次求精都表示成一更详细的DFD从而建立关于系统的一个DFD层次。为保存DFD中的这些信息,使用数据字典来存取相关的定义、结构及目的。SA方法是目前实际应用效力广泛的需求工程技术。它具有较好的分别、抽象能力,为开发小组找到了一种中间语言,易于软件人员所掌握。但它离应用领域尚有一定的距离,难以直接应用领域术民与软件设计也有一段不小的距离因而为开发小组的思想交流带来了一定的困难。</P>
<P><STRONG>2、<a href="javascript:if(confirm('http://www.itisedu.com/phrase/200604231254345.html \n\nThis file was not retrieved by Teleport Pro, because it was unavailable, or its retrieval was aborted, or the project was stopped too soon. \n\nDo you want to open it from the server?'))window.location='http://www.itisedu.com/phrase/200604231254345.html'" tppabs="http://www.itisedu.com/phrase/200604231254345.html" target="_new">面向对象分析</a>方法</STRONG></P>
<P> 面向<a href="200603090845215.html" tppabs="http://www.itisedu.com/phrase/200603090845215.html" target="_new">对象</a>(<a href="javascript:if(confirm('http://www.itisedu.com/phrase/200604231401015.html \n\nThis file was not retrieved by Teleport Pro, because it was unavailable, or its retrieval was aborted, or the project was stopped too soon. \n\nDo you want to open it from the server?'))window.location='http://www.itisedu.com/phrase/200604231401015.html'" tppabs="http://www.itisedu.com/phrase/200604231401015.html" target="_new">Object Oriented</a>, <a href="javascript:if(confirm('http://www.itisedu.com/phrase/200604231401365.html \n\nThis file was not retrieved by Teleport Pro, because it was unavailable, or its retrieval was aborted, or the project was stopped too soon. \n\nDo you want to open it from the server?'))window.location='http://www.itisedu.com/phrase/200604231401365.html'" tppabs="http://www.itisedu.com/phrase/200604231401365.html" target="_new">OO</a>)的方法把分析建立在系统对象以及对象间交互的基础之上,使得我们能以3个最基本的方法框架——对象及其属性、分类结构和集合结构来定义和沟通需求。面向对象的问题分析模型从3个侧面进行描述,即对象模型(对象的静态结构)、动态模型(对象相互作用的顺序)和功能模型(数据变换及功能依存关系)。需求工程的抽象原则、层次原则和分割原则同样适用于面向对象方法,即对象抽象与功能抽象原则是一样的,也是从高级到低级、从逻辑到物理,逐级细分.每一级抽象都重复对象建模(对象识别)一动态建模(事件识别)一功能建模(操作识别)的过程,直到每一个对象实例在物理(程序编码)上全部实现为止。</P>
<P> 面向对象需求分析(OORA)利用一些基本概念来建立相应模型,以表达目标系统的不同侧面。尽管不同的方法所采用的具体模型不尽相同,但都无外乎用如下五个基本模型来描述软件需求:</P>
<P> 整体—部分模型:该模型描述对象(类)是如何由简单的对象(类)构成的。将一个复杂对象(类)描述成一个由交互作用的若干对象(类)构成的结构的能力是OO途径的突出优点。该模型亦称聚合模型。</P>
<P> 分类模型:分类模型描述类之间的继承关系。与聚合关系不同,它说明的是一个类可以继承另一个或另一些类的成分,以实现类中成分的复用。</P>
<P> 类—对象模型:分析过程必须描述属于每个类的对象所具有的行为,这种行为描述的详细程度可以根据具体情况而定。既可以只说明行为的输入、输出和功能,也可以采用比较形式的途径来精确地描述其输入、输出及其相应的<a href="200603051002565.html" tppabs="http://www.itisedu.com/phrase/200603051002565.html" target="_new">类型</a>甚至使用伪码或小说明的形式来详细刻画。</P>
<P> 对象交互模型:一个面向对象的系统模型必须描述其中对象的交互方法。如前所述,对象交互是通过<a href="200603090938465.html" tppabs="http://www.itisedu.com/phrase/200603090938465.html" target="_new">消息</a>传递来实现的。事实人对象交互也可看作是对象行为之间的引用关系。因此,对象交互模型就要刻画对象之间的消息流。对应于不同的详细程度,有不同的消息流描述分析,分析人员应根据具体馆况而选择。一般地,一个详细的对象交互模型能够说明对象之间的消息及其流向,并且同时说明该消息将激活的对象及行为。一个不太详细的对象交互模型可以只说明对象之间有消息,并指明其流向即可。还有一种状况就是介于此两者之间。</P>
<P> 状态模型:在状态模型中,把一个对象看作是一个有限状态机,由一个状态到另一状态的转变称作状态转换。状态模型将对象的行为描述成其不同状态之间的通路。它也可以刻画动态系统中对象的创建和废除,并称由对象的创建到对象的废除状态之间的退路为对象的生存期。</P>
<P> 状态模型既可以用状态转换因的图形化手段,又可用决策表或称决策矩阵的形式来表。</P>
<P><STRONG>3、基于RUP的软件需求</STRONG></P>
<P> RUP(<a href="200604032121225.html" tppabs="http://www.itisedu.com/phrase/200604032121225.html" target="_new">Rational</a> Unified Process)是Rational公司开发和维护的过程产品。RUP是工程化的软件开发过程,它提供了在开发机构中分派任务和责任的纪律化方法。RUP不仅仅是一个简单的过程,而是一个通用的过程框架,可用于各种不同类型的软件系统、各种不同的应用领域、各种不同类型的组织、各种不同的功能级别以及各种不同的项目规模。RUP的突出特点可以由以下三个关键词来体现——用例驱动、以构架为中心、迭代和增量的。这些是RUP所特有的,也是同等重要的。构架提供了一种结构来指导迭代过程中的工作,而用例则确定了目标井驱动每次迭代的工作。</P>
<P> 进行需求分析的基础是要获得用户的需要,为了完成这一工作,必须建立业务模型,通过描述业务规则、业务逻辑,明确业务过程并对其进行规范、优化。对于一个系统,在建立业务模型时,应从3个方面来描述其特性:功能、行为、数据,对应于这些特性。</P>
<P><STRONG>4、软件需求方法的比较分析</STRONG></P>
<P> 基于上述分析可知,结构化分析方法与面向对象分析方法的区别主要体现在两个方面:</P>
<P> * 将系统分解成于系统的方式不同。前者将系统描述成一组交互作用的处理,后者则描述成一组交互作用的对象。<BR> * <a href="200604161433025.html" tppabs="http://www.itisedu.com/phrase/200604161433025.html" target="_new">子系统</a>之间的交互关系的描述方式不一样。前者加工之间的交互是通过不太精确的数据流来表示的,而后者对象之间通过消息传递交互关系。</P>
<P> 因此,面向对象软件需求分析的结果能更好地刻画现实世界,处理复杂问题,对象比过程更具有稳定性,便于维护与复用。<BR>(出处:<a href="200602271429302.html" tppabs="http://www.itisedu.com/phrase/200602271429302.html" target="_new">UML</a>软件工程,博客中国)</P>
<P><STRONG>七、软件需求说明书</STRONG></P>
<P><FONT face=Verdana> 软件需求说明书的编制是为了使用户和软件开发者双方对该软件的初始规定有一个共同的理解, 使之成为整个开发工作的基础。编制软件需求说明书的内容要求如下:</FONT></P>
<P><FONT face=Verdana> 1 引言</FONT></P>
<P><FONT face=Verdana> 1.1编写目的</FONT></P>
<P><FONT face=Verdana> 说明编写这份软件需求说明书的目的,指出预期的读者。</FONT></P>
<P><FONT face=Verdana> 1.2背景 </FONT></P>
<P><FONT face=Verdana> 说明: </FONT></P>
<P><FONT face=Verdana> a.待开发的软件系统的名称;<BR> b.本项目的任务提出者、开发者、用户及实现该软件的计算中心或计算机网络;<BR> C.该软件系统同其他系统或其他机构的基本的相互来往关系。 </FONT></P>
<P><FONT face=Verdana> 1.3定义</FONT></P>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -