您如何在没有接受标准的情况下开发软件?


70

在没有接受标准的情况下,您如何在4-5个开发人员的团队中协作开发软件,而又不知道测试人员将针对哪些产品进行测试以及与多(2-3)个人充当产品所有者。

我们所拥有的只是一个粗略的“规范”,其中包含一些屏幕截图和一些要点。

我们被告知,这很容易,因此不需要这些东西。

我对如何进行一无所知。

附加信息

我们有一个艰难的截止日期。

客户是内部人员,理论上我们有产品所有者,但是至少有3个人测试该软件可能会使工作项失败,原因仅在于该工作项无法按他们认为的工作方式工作,并且对他们的预期或期望几乎没有透明度他们一直在测试直到失败为止。

产品负责人无法随时回答问题或提供反馈。没有定期安排的会议或与之通话,反馈可能需要几天的时间。

我可以理解,我们不能有一个完美的规范,但是我认为对于每个sprint中实际进行的工作都具有接受标准是“正常的”。


33
我会说,随心所欲地开发它。只要您愿意参加会议并演示您的产品如何与粗略的“规格”和屏幕截图匹配,我认为您还可以。当然,您可以随时向规范的创建者询问更多详细信息……
FrustratedWithFormsDesigner

10
基本上,这是自主开发或“牛仔编码”。开发人员填写详细信息。开发人员拥有多数控制权。基本上,您永远不会有正式的要求。开发,演示堆栈管理器,收集反馈,冲洗并重复。
乔恩·雷诺

11
产品负责人是否理解这是确保成本和时间不断增加的绝妙方法?非计算机科学家经常不了解编写清晰明了的规范的重要性。例如,美国政府改变对新军事硬件的期望时,经常会遇到类似问题。这是军事硬件经常超支且进度落后的几个原因之一。joelonsoftware.com/2000/10/02/…–
nickalh

35
“我们被告知这将很容易,因此不需要这些东西。...我们已经被规定了一个艰难的期限。...产品所有者不容易回答问题或提供反馈。没有定期安排的会议或与他们的通话,反馈可能需要几天的时间。” 你有我的同情。这些是“完全不知道写软件的工作原理。”的标志。
jpmc26 2015年

13
您已经为失败做好了准备。这是需要升级到管理的事情。如果没有严格的期限,则可以迭代直到成功。如果有利益相关者可以提供反馈,那么您可以进行足够快的迭代以(有可能)按时完成。同上,实际上具有合理的详​​细规格。但事情 已经给。这是您很好地要求老板将@ $$撤出火场的部分。
加里德·史密斯

Answers:


130

一个反复的过程将很好地做到这一点,没有详细的规格。

只需创建一个粗略的原型,征求客户的反馈,根据反馈进行更改,然后重复此过程,直到应用程序完成即可。

客户是否足够耐心地这样做,这是另一个问题。实际上,有些客户和开发人员更喜欢此过程。由于客户总是亲身实践,因此他(最终)将获得他想要的一切。

不用说,您不会以这种方式制定固定成本或固定时间的合同。


114
应该加上:“仅确保您每小时得到报酬”,而不是“仅在客户用尽了所有想法后才付款”。
布朗

22
另外还要确保记录客户的想法,因此至少要记录在某处的注释中。它可能不是正式的验收标准,但是当您尝试实际执行下一步时,它具有很多相关性
。– enderland

4
@Doc Brown:OP编辑添加了“客户是内部客户”-因此按小时付款希望不是问题。
sleske

8
+1在许多内部项目中都遵循了这一流程,因此发现它确实运作良好,而且总体上节省了时间。一个技巧是使迭代保持简短:一两个星期。
Bob Tway

13
我的经验是,当缺乏正式验收标准的原因是没人能确定他们真正想要什么时,这种方法就很好用。原型可以帮助他们形成意见,并且您接受要处理的任务还很不确定。但是,当原因是利益相关者没有时间思考/讨论/写下他们想要的东西,或者利益相关者出于政治原因而感到无法明确陈述的需求有冲突的需求时,这种方法就相当糟糕。然后,原型车将罐子踢倒,直到找到坚固的棍棒,一切都没有改善。
史蒂夫·杰索普

58

如果您说的是正确的,并且说明还差得远,甚至无法开始使用(并且您对此评估很诚实),我建议您采取以下方法:

  1. 阅读草图和给出的“粗略”规范。
  2. 将您自己的规范写到足以使您能够编码的水平。您可能必须做出大量猜测。
  3. 向客户展示您的规格以供审查。注意他们喜欢的部分,并获得有关他们认为错了的部分的更多信息。
  4. 重复步骤2和3,直到您和客户同步。
  5. 您现在已经有了足够的规格。

如果您的客户说“这很容易”是对的,那么此练习应该只是小菜一碟。

如果您的客户错了,并且实际上需求中存在各种陷阱,那么您的规范草案将迅速说明问题并与他们沟通,指出他们错了(无需您指责或争论),因为这样做会就在他们面前并且很明显。同样,您的规范将成为解决这些歧义的绝佳讨论工具,并在您根据反馈的意见进行修改时将其作为关键决策的记录。


27
有时,您可以通过将规范称为“工作计划”(他们的非程序员的头脑认为这对项目具有友好性和有用性)来欺骗客户,而不是“规范”(对于客户而言)像这样对开发过程中参与的所有基本原理都怀有敌意的人,他们的非程序员大脑将其视为乏味的繁琐的文书工作,程序员无缘无故地使他们这样做。)
史蒂夫·杰索普

第二点,我建议您只为开发人员编写技术规范。否则,开发人员将无法开始他的工作。这样,您可以与业务团队就即将开发的工作性质进行并行协作。这样,开发团队和业务团队就可以彼此同步需求。
卡兰

3
your draft specification will quickly illustrate the problem and communicate to them that they were wrong (....) since it will be right in front of them and obvious-我想指出,意识到这一切有多么明显的客户正是您永远不会遇到这个问题的客户。或者,更简洁地说:解决方案意味着问题不存在(这是我在生活的各个领域越来越认识到的悖论)……
Radu Murzea

1
有些人永远不会“得到它”,但是根据我的经验,这通常可以帮助他们向您展示所需细节水平的示例,并向他们展示在需求满足时您可以做出的“错误”决策。暧昧。
John Wu,

18

产品负责人将原型交给您。递给他更好的(直到您完成)

听起来您已经获得了一个纸制原型,可以开始该项目。那不是一个糟糕的开始。我建议您通过提供逐步可用的原型,以相同的语言与业务所有者进行交流

您的原型应从纸张开始,移至数字样机,然后使用“真实”技术构建。

Treehouse为此提供了出色的指南,其结论是:

使用框架进行原型制作的奇妙之处在于,原型通常只是成为真正的网站,因为其结构和样式已经到位。如果要使用相同的框架,则无需从头开始重新创建网站。

您可能还希望提供正式的规范,尤其是如果您仍然担心因不良后果而受到指责时。但是您可能会从原型中获得更多反馈。

按时完成

请注意,您以后的工作将不会全部成为经典的“原型”,因为它们将不会是一次性的(或部分不会)。您在截止日期之前完成的最后一次,最有效的迭代。

截止日期是您定义的最明确的要求。有一些完整,连贯的东西可以按时交付。

与您的测试人员合作

如果这个松散的过程对您的公司来说是新事物,那么您的测试人员可能比您蒙受的损失更大,并且可能正在寻求的指导。您必须在此过程的早期获得一些时间。让他们的老板知道您正在尝试帮助他们提供有意义的测试而又没有收到正式的接受标准。

找出测试人员是否有需要提供的公司,例如可以“返回”的测试证明文档。

尝试测试优先设计

由于您没有正式的要求,因此要开发测试用例就可以提供一些结构。

使您对Test First设计和/或测试驱动的开发有所了解,并根据需要为测试人员提供有关过程的指导。对于这样的快速项目,您无需在此过程中成为专家。但是,使用经过验证的方法论将对您和您的测试人员产生良好的影响。

坚持标准,尤其是对于UI

您对外观没有任何要求,但确实有最后期限。使用其他人的设计工作来最小化创建专业外观工件所需的工作。

为您的网站选择一个标准UI,除非/直到定向,否则请不要自定义它。我不知道您正在开发什么平台,但是BootstrapGoogle Material Design是两个示例。

交流但不要纠缠

我建议每天发送一封电子邮件给产品所有者。仅在紧急情况下发送更多。

如有疑问,请描述如果没有得到指导,将如何进行。例如:

此应用程序的用户是否需要通过移动设备访问它?现在,我们假设这将是仅台式机/笔记本电脑的系统。

不要惊慌

我参与了许多不了解“需求”一词的人们的项目。大多数项目都是成功的。放手的产品所有者可以让您自由地构建出色的解决方案。

请注意,这些项目中的某些项目所有者无法讨好他们,他们躲在“我太忙了...”后面,以此为借口。但是大多数人对最终结果感到“高兴”。


未提及的一点是“硬期限”:重要的一点是,在该日期交付了一些东西,并且它的功能(通过了动作)仍然有效,即使没有铃铛,口哨声和更快的条纹也是如此。有了这个限制,@ Tim提出的所有其他观点都应该没问题
Philip Oakley

@PhilipOakley,感谢您的反馈。我补充了一点,即迭代原型制作过程应产生越来越可接受的“可交付成果”,以防止错过最后期限。让我知道是否有帮助。
蒂姆·格兰特

这是一个进步。甚至将“会议”更改为“会议”变得更加必要。然后,也许还添加以下声明:如果他们给定的日期中没有其他内容,则这成为关键要求,因此以下“注释”具有上下文。(通常,客户只关心时间和成本,其余的就是化妆品和时尚,我确定您知道;-)
Philip Oakley

10

项目是在达到确定性之前减少不确定性的行为

  • 一开始总是存在一定程度的不确定性。有时,需求中有些含糊。有时候,这是非常粗略的。您必须将工作作为工作的一部分。
  • 诀窍是迭代地减少这种不确定性(结合分析,设计和实现),完善用户案例并实现您的系统。
  • 测试用例/方案和验收标准必须以相同的方式阐明。它们将有助于减少有关质量和正确性的不确定性。
  • 最后,达到了足够的确定性:客户获得了满足其需求并且可以使用的经过测试的产品。

这就是逐步详细说明的原则:需求,标准和结果将逐步详细说明,客户也将通过参与开发过程来了解自己的期望和要求。

这有问题吗?

初始要求越粗略,不确定性越高,执行任务所需的时间也越长。因此,仅由谁来承担额外的工作以及由谁来承担费用的问题。

这两个问题的答案应该在合同中。或将进行谈判。客户必须接受其他参与(主要论点是“垃圾进,垃圾出”,尽管我强烈建议您以更外交的方式提出;-))


1
我喜欢第一句话。这样做的目的是客户可能:1)不确定他们想要什么,2)随心所欲,3)想要一些无法实现的事情。但是,如果这实际上是一个简单的项目,那么它就有很大的成功机会。

1
这是金。
布鲁诺·瓜迪亚

8

没有定期安排的会议 ”。那么,为什么不从安排定期会议开始呢?拥有多个产品所有者的事实本身就保证了您的项目将不容易,因为每个人都会有相互矛盾的要求,必须与在场的所有利益相关者亲自讨论。

另外,我真的,真的,真的建议您保留详细的决策日志。至少要写下某人已决定的所有内容,以及作出决定时的日期和在场人员清单。如果您可以写下原因,那么更好的决定是那样。不管是PC上的文件,Intranet Wiki中的页面还是桌面上的笔记本,都没有关系。日志保护了您和项目:当测试人员说某项“失败”时,您可以指出,与这些人决定的方式是这样,这不是您的问题,而是他们与测试人员之间的问题。如果这导致规格被更改,那就很好了,但是在这一点上,他们不能指望在他们所想到的任何截止日期前完成,否则他们必须将范围缩小。


8

一个没有明确要求,松散领导,没有完成定义(DoD),没有人愿意负责确保您拥有及时完成工作所需的信息并截止日期之前完成的项目是项目的秘诀失败。

迭代开发不是一个坏建议,但是它需要产品所有者和开发人员之间的密切合作。尝试通过说:“我们知道我们将要遇到的问题。”可以定期与谁联系,确保他们得到答复,从而不会延迟项目交付?与某人安排定期的时间,以检查进度并消除障碍。如果他们没有显示或拒绝,则应进行有礼貌的书面信函跟进,并记录延误或未答复的情况。如果没有产品所有者,请他们提供可以的代表。

同样,迭代开发的另一个标志是需求的改变需要时间表的改变。 如果您不能制定时间表,则不能承诺按时完成任务;如果您不知道需要做什么,则不能制定时间表。不用徒劳地索要规格,而是查看当前规格,记录您或团队对应如何运作的任何疑问,安排与产品所有者的讨论时间,并记录答案。完成后,您将根据他们的决定获得规格,然后可以让产品所有者同意(以书面形式)。规范的目的是消除歧义并创建DoD,这正是Q&A会话可以提供的功能。如果有人反对规范,请不要称其为规范。

当他们告诉你这会很简单时,不要相信任何人。有时候它确实听起来很简单,并且我可能相信(如果(且仅))我足够了解产品所有者,以完全相信需求确实像他们所说的那样简单,而且我所遵循的规格提供的内容不言自明(如果没有,我安排一次问答环节并记录下来)。从操作的角度来看,我遇到过很多情况,从简单的角度讲很难做到从开发的角度来看,或者您认为自己已经完全完成,并且听到了绝望的话(“哦,顺便说一句,我们忘记了……”)。示例...“您所要做的就是从文档存储库中读取这些PDF文件,”在验收测试过程中,结果变成“哦,我们忘记了其中的某些内容是以完全不一致的方式横向读取的,并且有些人定义了错误的页面大小,有些人需要附加这三个页面,我们都需要它们显示相同的页面。这真的很容易修复,对吧?”

关键是,这可能真的很容易,快速会议可以确认这一点,使您可以记录所有假设并确认它们是正确和正确的。我确实建议站起来,以消除您编写符合他们期望的工作代码所遇到的障碍,因为无论您是否踩脚趾,无论如何最终都会有人不满意。如果您坚持要回答问题并激怒某人,当您按时交付符合要求的优质产品时,他们会忘记它。如果您无法得到澄清并且不发表意见,那么没有人会记得他们告诉过您不要对它们进行调试。


3

没有规格,您就有团队合作精神。敏捷。

坐在PO上,充实一个/一些小的开始故事。“我们将只提供这个屏幕,只有这个按钮会'bing!'。” 安顿一些AC。讲故事。 演示的故事。原来按钮应该是红色的。提出错误或新故事。传递会发出砰砰声的按钮。等等。

协同指定并交付经常展示的小的垂直切片。

如果客户不会以这种方式与您合作,请寻找出路。


-1

正如您所概述的,我已经花了一些工作来做项目。只要PO知道您正在做出哪些设计决定以及为什么必须做出决定,您就可以了。另一方面,如果他们不理解设计决策,则需要至少按下它们以获取书面的用户接受测试文档。


-2

在开始编写代码之前,您需要一个详细的,可验证的规范。这是事实,没有解决之道。

如果没有其他人愿意编写该规范,则开发人员必须编写它。因此您得到的规格不完整。您将其变成一个完整的规范(这意味着“除非有人告诉我,否则这就是我要实现的”)。您将该规范交给利益相关者,并给他们机会修改规范。只是一次修改规格的机会-不能通过说“我不喜欢这种方式”来取消规格说明。那时,这是您的规范,或者他们可以提供其他规范,但不能删除该规范。

从您的同事那里快速回顾一下,这可能会改善规格,这是一个好主意。但是无论如何,您都有一个规范,您可以相应地编写代码,测试人员也可以相应地进行测试。您已经完成了自己的工作:您已制定并实施了一个规范。如果规格不是客户想要的,那么这就是产品所有者或客户的责任,他们不愿意编写一个好的规格。


6
“在开始编写代码之前,您需要一个详细的,可验证的规范。这是事实,而且没有解决之道。”我和我的同事在很多项目上都做到了这一点,我们取得了很多成功,但很少失败。您的主张不是绝对的。
whatsisname

1
@whatsisname同意。我也以这种方式编写代码。当任务具有探索性时,就会发生这种情况。现在,没有规范的编码存在弊端,但是有时候它们比说您无法实现目标更容易被接受。
Cort Ammon

1
@whatsisname,可以改善措词,但基本的道理是,您必须先了解请求的内容才能完成请求 如果我只是说“用Java写一个程序”,那么您就不可能编写该程序。您可以对程序应该做什么做出自己的想法(换句话说,发明自己的目标,然后实现它),但这完全不可能实现包括您在内的任何人都未曾说过的目标。这适用于任何大小的请求;在您可以做,生产和/或展示它们之前,必须先了解他们的需求。
通配符

就是说...为了理解和满足请求实际需要的详细程度可能会被高估。它也可能被低估。对此的唯一解决方案是通信。
通配符

@Wildcard:是的,我认为措词可能会获得批准。您要说的是让人想起芝诺悖论,但吸引力不那么大。
whatsisname
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.