论文参考文献

首页 » 常识 » 问答 » 腾讯软件工程师是怎样写设计文档的
TUhjnbcbe - 2022/10/16 8:58:00
阿勒泰市 http://bbs.aletaizx.com

1、设计文档是什么?

设计文档是软件工程设计中的重要组成部分,是对一个技术问题的解决方案的系统性描述。设计文档的目的,是阐明设计的总体思想和设计中考虑的权衡点。

作为一名软件工程师,我们的工作本质不仅仅是编写程序代码,而是解决真正的问题。因此,相比最终的程序代码,文字形式的设计文档,在早期能够更加简明扼要地传达信息,便于让读者理解问题,找到解决方案。

除了作为系统设计的最初体现,设计文档在软件工程的开发周期中起到下面重要作用:

通过设计文档,我们可以:

在可以低成本迭代的时候,尽早发现设计中的问题。

设计左移,代价左移,快速失败(failfast)。

在团队中对设计达成一致。

设计的本质是取舍(tradeoff)。几乎所有的架构设计决策都会被挑战,原因之一是:读者并非对所有的取舍都知晓,且与作者达成共识。在设计文档中清晰地列出取舍,有利于帮助读者了解(并认可)你的决策思路,减少被挑战的可能。

将资深工程师的经验和思想扩展到整个团队,帮助团队成长。

作为作者,可以供资浅工程师学习。

作为读者,可以审核资浅工程师的设计并提供建议。

形成团队软件设计的一致方式,沉淀团队/公司技术积累。

企业的生命力在于知识价值的积累。

2、什么时候需要设计文档?

本身撰写设计文档是需要编写成本的。如果问题的解决方案非常清晰,没有明确的取舍,设计文档中基本都是实现描述,则应该省略设计文档而直接实现。换言之,如果编写设计文档的时间主要消耗在“写”而不是在“思考”上,则这个设计文档可省略。

当你考虑编写一个设计文档时,想一想以下这几点:

软件的规模是否较大,值得付出额外的编写评审设计文档的时间来降低失败的风险?

高级工程师无法确保CR每一份代码,让他们参与设计评审是否回报更高?

软件设计决策是模糊的,甚至有争议。有必要围绕设计文档在组织上达成共识?

是否需要通过设计文档强调项目交叉问题,如隐私性(Privacy)、安全性(Security)、日志记录?是否有必要写一份文档来对有关遗留系统的设计问题提供高层次的分析?

如果以上的问题的答案为“是”,那么设计文档可能是开始你的下一个软件项目的绝佳方法。

3、设计文档要怎么写?

在考虑通过用设计文档解决问题,开始着手准备设计文档前,需要厘清设计文档易混淆的三个概念,它们也是创作设计文档的根基。一旦出现偏差,我们认真撰写的文档很有可能完全不可用,在纠正偏差时也会出现大量工作返工,造成资源的浪费。所以,撰写设计文档前需要搞清楚这些前提!

3.1撰写设计文档的三个前提前提一:设计文档的读写比最高

实现代码、系统接口、设计文档,读写比(内容被所有人阅读花费的时间:内容写作花费的时间)是逐步上升的。通常,设计文档供阅读的时间往往远多于写的时间。因此,编写设计文档时就更多考虑读者的体验而非作者的体验。为提升设计可读性的时间非常值得投资。

前提二:设计文档不是文学写作

设计文档的目的是为了沟通设计,而不是为了自我表达。把精力放在如何清晰、简洁地表达,而非放在文采上。

前提三:设计文档为谁而写

首先先了解你的读者是谁?在良好的文档分享文化下,读者不应该只是你的TL以及该设计文档的实施者,你的设计文档实际读者的范围往往大得多。在不确定的时候,经验做法是,假设的读者群体为:公司内部的、有一定工程经验的、但对该系统的上下文只有初步了解的软件工程师。

通常,设计文档的范围越大,假定的受众群也会更大。这意味着受众对目标系统的平均了解程度更低,也就意味着设计文档往往需要:

更加详细的背景介绍。

更少使用内部术语或缩写。

更多阐述设计思路、取舍,更少解释具体实现细节。

其次,考虑读者喜欢如何阅读?大部分读者不会逐字逐句阅读你的设计文档。大家都很忙,通常只会扫描大体结构,然后阅读(或者跳读)自己感兴趣的部分。读者喜欢“故事”。将内容以故事的结构呈现最容易被接受,即使我们并不是需要讲述一个传统的打怪升级的故事。虽然故事内容各有不同,但大部分故事都遵循一些基本的范式。例如,约瑟夫·坎伯总结提出全世界大部分神话故事都符合“英雄之旅”--“启程、启蒙、归程”三幕--这个模式。

对于设计文档/科技论文写作,通用安全的选择是WritingScience所介绍的OCAR故事结构。

Opening:开场,背景介绍

Challenge:挑战,所要解决的问题

Action:行动,执行的实验/设计/...

Resolution:结果

设计文档通常遵循特定的组织结构,我们可以将每一个结构对应到OCAR的不同部分,以此讲述故事。

最后,辩证看待设计文档可读性。设计文档可读性vs.代码可读性都称作可读性,两者有些共通之处:

文档着重强调的内容应该是并非显而易见的事项:

没有绝对的正确答案:没有完美的代码,也没有完美的设计文档。

不同的读者对可读性的理解有细微的不同,可读性是主观的。

在实践中,我们追求让更多(而非所有)读者更顺畅地阅读设计文档。

不要为完美主义付出过重代码。平衡可读性与时间成本。

我们的目标是有意识地提高文档写作/代码水平。高质量的写作是一种习惯。提高水平的方法有:

多读他人优秀的设计文档。

评审(Designdocreview/Codereview)有益。

设计文档评审往往主要

1
查看完整版本: 腾讯软件工程师是怎样写设计文档的