开发之前需要哪些文档

程序员和项目经理有时认为“文档驱动的开发”是指在开发过程中在代码中添加大量注释或与文档编写者紧密合作。 那是因为很难想象编写文档之后开发将如何进行 ,因为肯定要等到实际编写文档后才能进行文档开发。

传统上,将文档视为一种新闻工作。 为文档编写者提供了一些软件,他们将其带入实验室并对其戳戳并进行生产,直到他们弄清一切为止,然后将其写下来,以供他人阅读。

这错过了当开发人员一个晚上闲着喝咖啡,鼓吹一个应用程序的想法时自然发生的最重要的过程。 开发人员可能没有意识到这一点,但是随着这个想法的形成,已经有一种文档在发生。 想法并不会完全按照完整的蓝图绘制成完整的结构,准备挂接到单独的代码行上。 想法逐渐发生。

代码可以说是一种艺术形式,因此这是艺术世界中的一个类比。

静物画代表物理世界中的某些事物。 但是静物艺术首先是从抽象的形状开始,然后被精炼成可识别的东西,然后添加纹理,着色等等。

这个过程可以称为自我记录,因为在绘画生命周期的每个阶段,您都可以快照了解绘画的进展情况。

塞斯·肯隆( CC0)

在代码中,这些快照可能是git commits加上非常好的注释。 虽然这对于以后加入并想了解代码库的哪个部分负责哪个任务的其他编码人员来说非常有用,但是对于一般的最终用户而言,它通常没有用。

在静物类比中,这意味着尽管绘画的自我证明对有抱负的艺术家可能有用,但对目标受众没有多大帮助。

绘画的最终用户文档实际上是最终的结果:绘画时画家看到的东西是绘画要捕捉的完全实现的图像。 如果绘画的“最终用户”曾经想以最真实的形式理解绘画的主题,则最终用户指的是实际的物理对象。

信不信由你,代码也是如此。 唯一的区别是所记录的应用程序尚不存在。 但这几乎不意味着您无法像实际记录那样对其进行记录。

编写所需应用程序的文档

坐下来编写应用程序时,您会对应用程序打算做什么有所了解。 我将以trashy实用程序为例,因为它的范围很窄:


Trashy is a command-line trash bin. 

通常这正是开发人员开始的地方,但是,如果您练习文档驱动的开发,那么主页或用户手册就在这里开始,并且在您坐下来编写代码之前就发生了。

如果您唯一的任务说明是“编写命令行垃圾桶”,那么您的代码可能会朝着首先碰到您的方向发展。 您可能知道或可能不了解Free Desktop垃圾回收规范,因此您可能一开始并不考虑遵循其计划。 您可能已经知道有一个垃圾回收机制,因此您的代码的第一次迭代可能只是将文件转储到用户已建立的垃圾回收箱中,而无需考虑应该伴随它的相关元数据。

但是,如果您先坐下来记录下来,就会被迫考虑细节。 例如,将其想象为垃圾分类文档的初稿:

Trashy is a command-line trash bin.

trash foo   : moves foo to system trash
trash empty : empties system trash


它已经比原始概念更强大,因为它还提供了一种清空垃圾箱的机制,而不仅仅是向其发送文件。 唯一的原因是,记录用户与您的应用程序交互方式的行为迫使您从用户的角度考虑该应用程序。

这是绘画某些东西与将其实际悬挂在画廊墙上以供其他人查看之间的区别的干run。

以文档为框架

当您继续为命令行垃圾应用程序编写文档时,最终您会想到其他“显而易见的”期望,即您作为用户而不是开发人员对这种工具具有期望。 您会想到一些约定,例如能够列出垃圾箱中当前有哪些文件,甚至还可以还原错误地移至垃圾箱的文件(这可能会导致您进入Free Desktop垃圾规范,这将使您了解将文件移至垃圾箱时应与文件一起写入的元数据)。

更好的是,您的文档现在是您的伪代码。 您的应用程序开发已经从编写第一次修订时就被扔掉的代码变成了可以在其基础上构建代码的框架:

while [ True ] ; do
# trash --help: print a help message
if [ "$1" = "--help" -o "$1" = "-h" ] ; then
echo " "
echo "trash [--empty|--list|--restore|--version] foo"
echo " "
exit
# trash --list: list files in trash
elif [ "$1" = "--list" -o "$1" = "-l" ] ; then
list
shift 1
# trash --version: print version
elif [ "$1" = "--version" -o "$1" = "-w" -o "$1" = "--which" ] ; then
version
shift 1
# trash --empty
elif [ "$1" = "--empty" -o "$1" = "-e" -o "$1" = "--pitch" ] ; then
empty
# trash --restore: restore a file to original location
elif [ "$1" = "--restore" -o "$1" = "-r" ] ; then
RESTORE = 1
shift 1
# trashy foo: moves foo to trash
else
break
fi
done

# more code here...


作为路线图的文档

这是一个简化的示例,但是对于较大的项目,原理甚至更为重要,并且文档通常来自于同时也是开发人员的人。 结果是开发周期更加集中,因为开发人员没有朝着模糊的应用程序概念进发,而是朝着确切说明应用程序应如何工作的特定蓝图进行编码。 虚构应用程序的文档中已经映射了每个菜单,每个按钮,每个上下文菜单。 开发人员所需要做的就是填写代码。

敏捷之路战士

如果所有这些听起来都非常明确和僵化,请不要假设使用文档驱动开发并不能应对敏捷挑战。 敏捷的开发方法需要用户和利益相关者的反馈,以指导下一步的发展方向。 文档不会改变这一点。 实际上,在最佳的文档驱动的开发环境中,文档本身与源代码完全相同。 它与其余源一起提交到同一存储库,并且在进行其他任何操作之前先进行更新。

实际上,将文档视为错误报告和功能请求的第一层是一种很好的保护项目免受UI蠕动的方法。 当用户要求一个看似无害的UI更改(肯定是其他几个看似无害的更改的集合)时,UI可以Swift开始承载委员会设计的经典标记。 这是因为,如果程序员添加请求的所有内容而没有通过具有全局视野的人员来审查它,则实际上是这样。

使用文档作为正在进行的设计过程的一部分是有意义的。 这是便宜的原型。 五个bug要求在主面板上一个新按钮意味着一个干净的一键式启动面板,等同于六个按钮使一次最小且干净的板块杂乱无章。 但是,如果先记录并审查了起始面板,他们就不会将其从打印页面上移开。

就像编码一样,文档并不是在应用程序生命周期的早期完成的一次性过程。 您的项目文档是与代码相同的有效文档,并且会不断更新和修订以反映开发计划项目的当前状态。

一致性

文档往往会在应用程序的工作方式上产生一致性,因为内部逻辑已事先被很好地映射。

在应用程序开发的第一周内,将一个函数编码为单击按钮很容易,然后在UI上的空间非常宝贵的第八周,将同样重要的功能分配给晦涩的右键单击菜单。

当您为尚不存在的内容编写文档时,很难做到这一点。 这在文档编制阶段都是虚构的,因此您将看到在为一个任务提供按钮但隐藏相关任务时违反逻辑。 如果要修复它,只需花费一段很短的时间就可以很快地改写它,这与在多个文件中更改几个代码块完全不同,并且有可能重新制作您已经花费了数周的整个UI完善。 当您只是在记录文档时,您可以编写任何您想要的东西; 这是一种低成本的维修,最终为开发人员提供了更好,更智能的蓝图。

立即试用文档

关于文档驱动的开发,最大的好处可能是没有进入障碍。 任何非编码人员都可以为不存在的应用程序发明文档,这非常有用。 我在电影行业和教育领域编写的应用程序都是我以外的人设计的。 当然,仍然有来回的用户测试和完善,这些东西在纸上看起来不错,但最终并未像设计者所希望的那样顺利地进行,但远不及没有设计者的情况。 可以肯定的是,有时候非编码人员梦dream以求的东西超出了范围,必须被卷入其中,但有时这会导致开发人员学习一些新的技巧,以使某些以前无法想象的东西真正起作用。

无论您是开发人员,还是只是有一些好主意的用户,请坐下来并翻阅一些您想看到的应用程序的文档。 或者,为您认为可能更好的现有应用程序版本编写一些文档。 它会在多大程度上影响您对软件,直观设计和开发的思考方式,您会感到惊讶。

翻译自: https://opensource.com/article/17/8/doc-driven-development

开发之前需要哪些文档

开发之前需要哪些文档_为什么在开发之前总是应该做文档相关推荐

  1. 开发详细设计文档_郑州APP开发:开发前,进行详细设计有没有必要?

    郑州燚轩软件科技有限公司● 点击蓝字关注我们 ● 一般进行软件开发 的人都知道,在进行郑州APP开发时,项目流程主要包括需求分析.概要设计.详细设计.编码和测试 ,那么在其中有了概要设计的情况下,为什 ...

  2. 软件项目文档_什么是软件项目的好的文档?

    软件项目文档 开放地理空间(OSGeo)基金会最近参加了Google的第一个文档季节 ,其中Google赞助了高级技术作家为开源项目做出贡献. OSGeo是大约50个地理空间开源项目的总括组织. 多年 ...

  3. virtualbox中文技术文档_随笔--西门子STEP7中如何寻找技术文档

    西门子STEP7软件支持的编程语言除了常用的LAD/FBD/STL,还有SCL/GRAPH等,应该说除了LAD/STL之外,SCL和GRAPH也是比较常用的,至少对我个人来说是这样,但是每种指令在不同 ...

  4. 苹果手机怎么编辑word文档_多人协同编辑一份Word文档用修订功能就对了

    在职场中我们难免会遇到需要与同事协同编辑一份文档的情况 那么如何清晰不混乱地协同编辑呢? 如下图所示,相信不少人在协同编辑文档时都是这样做的,用各种颜色字和括号,写明自己想编辑的内容及要修改的点.一旦 ...

  5. python如何读取公共盘的文档_如何使用 Sphinx 给 Python 代码写文档 | Linux 中国

    最好将文档作为开发过程的一部分.Sphinx 加上 Tox,让文档可以轻松书写,并且外观漂亮.-- Moshe Zadka Python 代码可以在源码中包含文档.这种方式默认依靠 docstring ...

  6. swagger api文档_带有Swagger的Spring Rest API –公开文档

    swagger api文档 创建API文档后,将其提供给涉众很重要. 在理想情况下,此发布的文档将足够灵活以解决任何最后的更改,并且易于分发(就成本以及完成此操作所需的时间而言). 为了使之成为可能, ...

  7. 人人开源项目文档_为什么图对于您的开源项目文档至关重要

    人人开源项目文档 如果您曾经在GitHub上访问过一个项目(例如),目的是了解它如何适合更大的系统,那么您会发现找到一两个图(或从中轻松找到)时会感到宽慰. )的初始目标网页. 这是一篇有关架构重要性 ...

  8. 苹果手机怎么编辑word文档_原创首发:编辑和修改PDF文档,将PDF转换为WORD技巧...

    在之前的文章中介绍了如何将图片合成为PDF文档,今天将为大家介绍下如何编辑和修改PDF文档,以及将PDF转换为WORD的技巧. 使用到工具Adobe Acrobat 编辑和修改PDF 文档 方法1.使 ...

  9. swagger api文档_带有Swagger的Spring Rest API –创建文档

    swagger api文档 使REST API易于使用的真正关键是好的文档. 但是,即使您的文档做得很好,您也需要设置公司流程的权利以正确,及时地发布它. 确保利益相关者按时收到是一回事,但是您也要负 ...

最新文章

  1. CVPR 2020 | 用机器学习打造计数君,谷歌RepNet可自动计数视频重复片段
  2. 如何在Git历史记录中grep(搜索)已提交的代码
  3. 剑指offer:写一个函数,求两个整数之和,要求在函数体内不得使用+、-、*、/四则运算符号。
  4. [JavaWeb-Tomcat]web服务器软件_Tomcat介绍
  5. 3种常见的Class级别的错误
  6. [Linux] undefined reference to `itoa'
  7. xmind 拖拽_GitHub - xdsnet/jsxMind: 基于jsmind 改写的jsxmind插件
  8. 小程序用php还是java_微信小程序用php开发的可以吗
  9. ubuntu系统安装记录
  10. 【canvas 太阳系的动画】
  11. 网页 游戏服务器连接超时,连接游戏服务器超时怎么解决
  12. php求圆的周长面积,c语言实现输入圆的半径计算圆的面积_后端开发
  13. 阿里云CDN和全站加速区别在哪?使用有感
  14. Sublime Text 3 配置python开发环境遇见的问题
  15. 微信小程序获取当前系统时间以及判断周几
  16. 迅捷画图怎样绘制出有创意的思维导图
  17. java 分页简单使用
  18. MACD抓妖神器 通达信指标公式 副图 源码 无加密 无未来
  19. 如何构建Pebble应用程序
  20. RS485接口电路设计

热门文章

  1. wkhtmltopdf的介绍与使用
  2. spring编程式事务
  3. Django 知识点回顾
  4. 轻松掌握Redux-Action使用方法
  5. Android 启动过程简析(一)之 init 进程
  6. RedHat5 升级OpenSSH服务
  7. django生成文件txt、pdf(在生成 PDF 文件之前,需要安装 ReportLab 库)
  8. [Z]用subcaption包排版子图(表)与图(表)格式设置
  9. 修正TiAnlogDisplay显示的问题
  10. WINDOWS下VIM配置