在软件工程中,需求分析指的是在建立一个新的或改变一个现存的电脑系统时描写新系统的目的、范围和定义时所要做的所有的工作。需求分析是软件工程中的一个关键过程。
在这个过程中,系统分析员和软件工程师确定顾客的需要。只有在确定了这些需要后他们才能够分析和寻求新系统的解决方法。在软件工程的历史中,很长时间里人们一直认为需求分析是整个软件工程中最简单的一个步骤,但在过去十年中越来越多的人认识到它是整个过程中最关键的一个过程。假如在需求分析时分析者们未能正确地认识到顾客的需要的话,那么最后的软件实际上不可能达到顾客的需要,或者软件无法在规定的时间里完工。
目录
1 挑战
1.1 主要困难
1.2 持有关键信息的人
1.3 软件开发者
1.4 解决方法
2 主要技术
2.1 采访持重要信息的人
2.2 需求工作会
2.3 将需求列成合同式的文件
2.4 原型(Prototype)
2.5 用例(Use Case)
2.6 确认持关键信息者
挑战
顺利地完成需求分析是一个艰巨的挑战。首先要确认所有持有关键信息的人本身就不容易,然后还要从这些人获得可用的信息,把这些信息转化为清晰的和完整的形式。同时分析者还要考虑到可能的限制。
除此之外他们还要考虑一个项目的
·是否可行
·是否在规定的时间里可以完成
·价格上是否负担得起
·是否合法
·是否符合道德
一个新项目开始的时候人们往往还非常兴奋,往往试图轻视需求分析的必要性。但对过去项目的分析证明一个彻底的和无情的需求分析可以降低一个项目的耗费和降低其技术风险。
主要困难
随着工程师越来越对需求分析的重视今天我们对需求分析的主要困难也理解得比较清楚: 需求分析需要由有充分的经验、技术知识和语言技巧的专家来完成;顾客一开始所提出的需要往往不完全、太乐观以及过分受老的系统或过程的影响;使用复杂的工具和不同的技术来进行需求分析往往会打消获得一个完整的和细致的结果的希望。
持有关键信息的人
顾客有可能防止需求分析顺利进行有以下几种可能性:
·顾客不明白他自己需要什么
·顾客不愿将他们的需要固定在一系列写在纸上的条例中
·在价格和时间确定后顾客坚持要求新的需要
·分析者与顾客的通讯太缓慢
·顾客不参加回顾或无法参加回顾
·顾客缺乏技术上的知识
·顾客缺乏对软件开发的知识
软件开发者
但是软件开发者也有他们的责任。由于软件开发者收钱来开发他们的软件,他们的责任就更加不可推脱了。由软件开发者导致的困难有:
·软件工程师与他们的顾客往往使用不同的词汇。有时他们以为互相之间完全达成协议,但是在展示最终结果时却发现并非如此。开发者有义务克服这个困难,他们拿了顾客的钱,因此有这个义务。
·软件开发者往往喜欢将顾客的需要改变得能使它们符合一个已存在的系统或模式,而不愿按照顾客的需要来发展一个新的系统。
·需求分析往往是由程序员完成的,而不是由作业分析员完成的。程序员往往缺乏理解实际事物的运行过程和商业过程的技巧。
解决方法
解决这些困难的一个方法是使用专业的作业或系统分析员,这些专业人员通过专门训练来填补商业和电脑世界之间的鸿沟的。这个方法可以达到一定的效果,但从顾客方面来说要找到相应的有类似技巧的人就相当困难了。此外今天为需求分析所使用的方法依然还有很大的缺陷,它们还不够有效。
1990年代以来新的技术有制作原型、统一建模语言、用例和敏捷软件开发等方法。