要求收集

时间:2008-08-26 22:31:13

标签: requirements-management

您如何进行需求收集阶段?有没有人有一套很好的指导方针或提示可供遵循?问利益相关者有哪些好问题?

我目前正在开发一个新项目,并且有许多未知数。我正在提出一系列问题要求利益相关者。但是,我无法帮助,但感到我错过了一些东西或忘记提出一个关键问题。

20 个答案:

答案 0 :(得分:20)

见下面的强制性漫画......

一般情况下,我尝试了解客户/客户尝试使用他们想要构建的应用程序模拟的业务模型。我们正在建造一个美化的表格处理器吗?我们是否在单个应用程序中从多个源检索数据以节省时间?我们正在进行某种整合吗?

一旦建立了一般业务模型,我就会转到应用程序的“必须”和“必须”,以指示我可以检索哪些数据,谁可以执行哪些功能等。

通常,如果您可以让客户解释他们的模型或工作流程,您可以从那里移动并找到其他关键问题。

我总是确保以某种形式提出的一个问题是“做X时你必须要做的最棘手/最烦人的事情。通常,这个问题的答案揭示了你最疯狂的商业/数据规则必须实施。

希望这有帮助!

enter image description here

答案 1 :(得分:20)

你几乎肯定会遗漏一些东西。可能很多事情。别担心,没关系。即使你记得所有事情并涵盖了所有基础,利益相关者也无法在没有任何参考点的情况下为您提供非常好的,明确的要求。做这种事情的最好方法是现在就从他们那里得到你能得到的东西,然后拿出来并给他们一些反应。它可以是纸质原型,模型,软件版本0.1,等等。然后他们可以开始告诉你他们真正想要的是什么。

答案 2 :(得分:12)

Steve Yegge说话很有趣,但是要弄清楚其他人的要求是什么,所以我会把他的文章带上一点点盐。

由于沟通的方式有效,需求收集非常困难。它是一个四步过程,每一步都是有损的。

  • 我脑子里有个主意
  • 我把它变成了文字和图片
  • 您解释图片和文字
  • 您在自己的脑海中描绘了一幅关于我原始想法的图像

人类通过他们可爱的瑕疵以令人担忧的频率悲惨地失败。

敏捷在促进迭代开发方面做得很好。将早期版本发布到客户端对于确定哪些功能最重要(0.1 - 0.5 ish中包含哪些功能)很重要,有助于使您在应用程序的工作方式上保持正确的轨道并快速识别隐藏的功能你错过。

两个主要问题场景是比例的两端:

  • 没有关于你正在做什么的怪异线索 - 得到一些领域专家
  • 有太多要求 - 功能坑。 - 问题,剔除(优先顺序;))功能和使用迭代开发

Yegge指出,领域专家对于产生良好的要求至关重要,因为他们了解业务并且已经开展工作。他们可以帮助确定客户的核心愿望,并帮助解释他们的员工如何使用该系统以及对员工重要的内容。 替代方案和补充包括尝试自己完成工作以进入思维模式或偶尔在现场安排客户工作人员,尽管后者不太可能发生。

特征坑是另一方面,大多数都是失败的政府IT项目。太多,太快,没有足够的思考或应用现实主义(但你认为他们只有大约四年的时间让自己感觉很重要?)。这里的目标是找出客户真正想要的东西。 只要您努力使核心组件正确,高效且无错误的客户端通常可以容忍丢失的功能,只要它们最终到达,这些功能会在以后的货件中到达。这是迭代开发真正有用的地方。

请记住将客户关于程序的概念以及他们希望程序实现的想法分开。 一些客户可以通过以应用程序功能的形式传达他们的需求来制造混淆,这些功能可能很难想象,或者被他们认为需要的更简单的功能所取代。虽然我并不主张将客户称为白痴或不听他们,但我觉得值得永远问为什么他们希望某个特定功能达到其潜在目的。

请记住,在任何一种情况下,根除满足客户核心需求的最快途径并将您置于一个既能从关系中获利的场景也势在必行。

答案 3 :(得分:8)

哇,从哪里开始?

首先,有一些知识应该对某些项目进行分析,但这实际上取决于你为谁做的建设。换句话说,如果您正在为财富100强公司修改企业应用程序,构建iPhone应用程序或向个人网页添加功能,那么它将产生重大影响。

其次,有不同的要求。

  • 目标:用户想要完成什么?
  • 功能:用户需要做些什么才能达到目标? (想想达到目标的步骤)
  • 非功能性:您的程序需要执行哪些约束? (想想10个与10k同时用户,增长,备份等)。
  • 业务规则:您必须满足哪些动态限制? (想想计算,定义,法律问题等)。

第三,最有效地收集需求的方法,然后获得对它们的反馈(你会做什么,对吧?)就是使用模型。用户案例和用户案例是用户需要执行的操作的模型。流程模型是需要发生的事情的另一个版本。系统图只是程序不同部分如何交互的另一个模型。良好的数据建模将定义业务概念,并向您显示程序中发生的输入,输出和更改。模型(并且比我列出的更多)确实是您列出的关注点的关键。一些好的模型将捕捉需求,并从模型中确定您的需求。

第四,获得反馈。我知道我已经提到了这一点,但是你不会在第一时间把事情做好,所以要回答客户的需求。

尽管我很欣赏要求以及驱动它们的模型,但用户通常不了解所有要求的后果。持续的沟通以及审查和反馈的机会将使用户更好地了解您所提供的内容。此外,他们将根据他们所看到的内容完善他们的理解。除非您为政府工作,否则迭代和/或原型是有帮助的。

答案 4 :(得分:6)

首先收集之前开始编码的要求。根据您的项目生命周期,您可以在收集设计时开始设计,但如果没有它们,您就不应该开始编码。

要求是一套精心编写的文档,可以保护客户和您自己。永远别忘了。如果没有要求那么它就没有付款(因此它需要正式的变更请求),如果它存在则必须实施并且必须正常工作。

要求必须是可测试的。如果无法测试要求,则不是必需的。这意味着“系统”

要求必须具体。这意味着声明“系统用户界面应易于使用”并不是一个正确的要求。

为了实际“收集”您需要的要求,首先要确保您了解业务模型。客户会用自己的语言告诉你他们想要什么,理解它并在正确的背景下解释它是你的工作。

在制定要求时与客户会面。用您自己的话语向客户描述它们,并确保您和客户在要求中具有相同的概念。

要求需要简洁,可测试的示例,但要跟踪会议,图表,疑问中出现的所有其他事情,并尝试保留每次会议的记录。

如果您可以使用增量生命周期,那么您将能够改善一些不良收集的需求。

答案 5 :(得分:3)

Steve Yegge认为那是wrong question to ask。如果你收集要求已经太晚了,你的项目就注定要失败。

答案 6 :(得分:3)

你永远不会问太多或“愚蠢”的问题。您提出的问题越多,您收到的答案就越多。

答案 7 :(得分:2)

  1. 关于目的,范围,经营环境,规模等的高层讨论

  2. 试听系统的单段描述,将其敲除

  3. 模拟用户界面

  4. 正式化已知要求

  5. 现在使用越来越多的功能原型和更多详细信息,在3到4之间进行迭代。随时编写测试。在您拥有功能性软件和完整,客观,可测试的需求规范之前,请执行此操作。

  6. 那是梦想。现实情况通常是经过几次迭代后,每个人都会头脑清醒并编码,直到还有一个月的时间进行测试。

答案 8 :(得分:1)

这里有一些很棒的想法。以下是我一直想要记住的一些需求收集原则:

了解用户与客户之间的区别。 批准闪亮项目的企业主通常是客户。然而,一个毁灭性的错误是将它们混淆为用户的倾向。客户通常是认识到您的产品需求的人,但用户是实际使用该解决方案的人(并且很可能稍后会抱怨您的产品不符合要求)。 去一个以上的人

因为我们都是人类,我们往往不记得每一个令人难以忍受的细节。当您与更多人交谈并进行交叉核对时,您会增加发现错过要求的可能性。

避免特价 当用户要求非常具体的东西时,要小心。始终质疑偏见,看看这是否真的能让你的产品变得更好。

<强>原型 不要等到发布后向用户显示您拥有的内容。做频繁的原型(你甚至可以称之为测试版)并在整个开发过程中获得持续的反馈。您可能会在执行此操作时找到更多要求。

答案 9 :(得分:1)

答案 10 :(得分:1)

我一直在使用思维导图(如工作分解结构)来帮助收集需求并定义未知数(#1项目杀手)。从高层开始,向下走。您需要与赞助商,用户和开发团队合作,以确保您获得所有角度,不要错过任何东西。如果没有他们的参与,你不可能期望知道他们想要的全部范围......你 - 作为项目经理/学士 - 需要让他们参与(最重要的工作)。

答案 11 :(得分:1)

  • 阅读敏捷宣言 - 工作软件是软件项目成功的唯一衡量标准
  • 熟悉敏捷软件实践 - 学习Scrum,精益编程,xp等 - 这将为您节省大量时间,不仅可以满足需求,还可以节省整个软件开发生命周期。
  • 定期与客户讨论,特别是未来的用户和关键用户
  • 确保您与了解问题域的人员交谈 - 例如该领域的专家
  • 在会谈中记笔记
  • 每次CONVERSATION之后写一份官方要求清单并提交批准。后来很难反驳所有商定的文件
  • 确保您的客户大致知道实施“很高兴”要求的时间和金钱的大致费用
  • 确保从一开始就将要求标记为“必须拥有”,“应该拥有”和“很高兴”,确保客户了解这些类型之间的差异
  • 将所有文档集成到最新和最终需求分析中(或当前的迭代或您使用的敏捷编程周期......)
  • 请记住,需求会在软件生命周期中发生变化,因此收集是一回事,但管理和实施另一个
  • 亲吻 - 尽量保持简单
  • 还研究未来系统所处的环境 - 传统或周边系统的技术限制越来越多,因为公司不愿意将他们投入的资金投入垃圾几十年,即使在现代20岁的代码是垃圾......

答案 12 :(得分:1)

与软件开发过程的大多数阶段一样,它的迭代效果最好。

首先找出您的用户是谁 - XYZ部门,

然后找出他们适合组织的地方 - Z部门的一部分,

然后找出他们一般性的做法 - 管理现金

然后以具体的方式 - 从收费中收取现金,并检查直至欺诈。

然后你就可以和他们说话了。

询问他们想要解决的问题 - 你会得到一个答案,就像用鲨鱼技术的OCR编写竹子系统一样。

忽略这个答案,并提出更多问题,以找出真正的问题是什么 - 他们无法阅读直至清单来调和现金。

与用户达成真正的解决方案 - 获得更好的墨带供应商 - 或将电子收银机连接到网络并将日志上传到中央服务器。

然后详细说明他们将如何衡量项目的成功。

然后,只有提出并同意一套详细的要求。

答案 13 :(得分:1)

答案 14 :(得分:1)

在与利益相关者/用户/任何人交谈之前,请确保您能够以有用且持久的方式记下所收集的信息。

  • 使用录音机,如果对方没问题且信息太大。
  • 如果你听到一些重要的事情并且你需要一些合理的时间来写下来,你有两个选择:让对方等一下,或者告别那些宝贵的信息。你不记得它,问任何神经科学家。
  • 如果您发现某点需要更深入的审核或者您需要一些您刚才听到的文档,请确保您与其他人一起承诺发送该文档或安排另一个具有更具体目的的会议。永远不要说“我会记得要求那个xls文件”因为在大多数情况下你不会。
  • 会议结束后不久,总结一下您的所有笔记,录音和新想法。简单总结一下。为承诺创建有效的提醒。
  • 再次,在会议结束后,是理解为什么你刚刚举行的聚会不如你在会议结束时所想的那样正确的时候。那时你将能够为另一次会议提出许多有意义的问题。

我知道这个问题是在会前的角度,但请注意,您可以在会议开始之前处理这些问题,最后进行一次非常有用,完整和高质量的聚会。

答案 15 :(得分:0)

我最近开始使用International Institute of Business Analysts组织(IIBA)定义的概念,标准和模板。

他们有一个非常好的BOK(知识书),可以从他们的网站下载。他们也有证书。

答案 16 :(得分:0)

我写了一篇关于我使用的方法的博客文章:

http://pm4web.blogspot.com/2008/10/needs-analysis-for-business-websites.html

基本上:在建立网站之前询问客户的问题。

我应该添加此问卷表仅面向基本的网站构建 - 就像商业网站一样。如果你在谈论基于网络的软件,完全不同的故事。虽然其中一些仍然是相关的(例如与外观有关的问题)。

  • LM

答案 17 :(得分:0)

需求工程学是一门艺术,有很多不同的方法,你必须根据你的项目和所涉及的利益相关者来定制。一个好的起点是Karl Wiegers的需求工程:

http://www.amazon.com/Software-Requirements-Second-Pro-Best-Practices/dp/0735618798/ref=pd_bbs_sr_2?ie=UTF8&s=books&qid=1234910330&sr=8-2

和需求工程过程,可能包括许多步骤,例如:

  • 启发 - 作为与业务讨论的基础
  • 分析和描述 - 用于开发人员的技术说明
  • 详细说明,澄清,验证和谈判 - 进一步完善要求

此外,有许多方法可以记录要求(用例,原型,规格,建模语言)。每个都有其优点和缺点。例如,原型非常适合从业务和想法讨论中获取想法。

我通常发现编写一组用例并包括线框原型可以很好地识别一组初始需求。从那时起,这是一个与技术人员和业务人员合作的持续过程,以进一步阐明和详细说明需求。跟踪最初达成的协议并跟踪其他要求对于避免范围蔓延至关重要。根据断铁三角(http://www.ambysoft.com/essays/brokenTriangle.html),谈判在各方之间也起了一定作用。

答案 18 :(得分:0)

IMO最重要的第一步是建立一个特定领域词汇的独裁者。当您的客户说“订单”时,他的意思是什么?他从客户那里收到的东西或他送给供应商的东西?或者两者兼而有之?

在利益相关者的业务中找到关键字,并让他们解释这些关键词,直到您理解其在流程中的含义。如果没有这个,你将很难尝试理解这些要求。

答案 19 :(得分:0)

我更愿意尽可能简单,直接和彻底地保持我的需求收集过程。您可以在此博客文章中下载我用作项目模板的示例文档:http://allthingscs.blogspot.com/2011/03/documenting-software-architectural.html