正如已经指出的那样,敏捷并不意味着很少或没有文档--"以可工作的软件为优先,而非全面的文档"。 我处理文档的方式几乎是颠倒过来的,考虑几乎所有东西都是文档的一部分(包括代码和单元测试作为技术规范)。 因此,描述业务/用户需求的故事(或您用于分配工作的其他机制)应该足够详细,以便由执行工作的团队进行估算;否则,它是不完整和模糊的。 此外,在我的实践中,如果故事(或其他任何内容)被估计需要超过一个工作日才能符合团队对“完成”的定义,那么它很可能会被分解(这种原子化然后编译最终导致相当广泛的文档,但不像不这样做那样假设很多未知数-并且可以引起非常有趣的重用和模式揭示)。
使用BDD风格需求的示例:
Given I am working on a document
When I select "Save As..."
Then a menu should appear allowing me to choose a name,
and a file type,
and a location in the file system,
and a file should be created in the file system
我们可能需要/想要添加UI元素来完成这个任务,例如菜单项、故事板、键盘快捷键等等(我们可能有多个关于“保存文件”的主题变化)。所有这些相关的文物都可以附加到基本的故事/需求上,从而得到更完整的文档。但是,只有将您实际实现的那些故事添加到您的软件网络版本的文档中。
在这里,事情变得有点颠倒,变得更加“敏捷”。在开发期间和开发后,重新审视记录的要求,并添加团队所做的更改/修改/改进(无需经过仅限于文档的CCB)。能够在不通过所有审核委员会等程序或在开发过程中发现文档某些方面不完整时将文档编辑/更新而不是将其抛回墙上,使我们能够适应未知因素-因此,敏捷。
这份文档应该具有某种形式的版本控制或历史记录,这样我们就可以描述我们所期望的系统,同时还可以描述实际实现的系统-注意到有关文档是定义完成的一部分的另一个答案/建议(我也这样做)。 (Wikis对此很有用;但是,完全集成的概念更加理想-例如,能够将票据与主干中的文件相关联在版本控制系统中会很好。)
总之,事先创建详尽的文档,这些文档不能在开发工作期间或不久之后进行修改,这将使您无法灵活适应未知因素。但是,参考《领先的精益软件开发》一书中提到的,如果政策不允许使用某些实践/流程,那么无论您说自己是精益(或scrum或敏捷),都没有关系。
确保您不过度详尽的一种方法-可能可以在此答案中使用此思维方式-只在需要时编写所需的内容(类似的概念存在于开发中)。另一个方法是让每个人都了解到您无需尝试并在前面找出所有问题(从瀑布到敏捷的最大转变)-我们将记录每个想法,它可能会或可能不会在发布中结束。最后,弃用(和删除)任何不再适用的内容...我曾经看过一份系统文档,当我审查该系统时,该文档的一半实际上不再适用于该系统。