如果您刚刚被介绍给一个新项目,那么您要了解其工作原理的第一件事是什么?

您首先寻找设计吗?如果有设计,您在其中寻找什么?类图或部署图或序列图或其他内容?

还是您直接获取代码?如果是这样,您如何理解不同层如何相互作用?

有帮助吗?

解决方案

我从代码开始。单独的设计文档(如果有的话)可能是错误的或错误的。因此,我首先尝试追踪一些简单的流程。如果是WebApp,则可以是请求或一系列请求。完成此操作后,我将有一种骨架可以更加了解。然后,我可能会回去阅读设计或其他文档,但是那时,我有一些具体的东西可以将它们与它们联系起来并与之验证,因此我可以检测到Duff信息。或者我可能只是继续阅读代码或测试用例等。

其他提示

我将从更高的水平开始。如果有任何用户面向文档 - 用户手册或指南。失败了,然后查看需求规格,以便您对软件应该做什么有所了解。我会比看设计并尝试将其映射到代码文件上。希望这些以某种明智的方式构成到文件夹中。然后,我会选择一部分设计,然后进入文件以遵循代码流,而不会陷入细节。

我首先设置开发人员系统。我使用已记录的过程。这使猫可以从包中出来,了解文档与现实同步。

它还告诉我依赖性是什么。这很重要。

现在,我已经有了一个开发人员设置,(我在走时用更正标记了设置文档),我会构建一个版本。在这个阶段,我最终都会问问题。

现在它已经构建,我从用户手册中进行了介绍性练习。这大致告诉了我系统的真正作用。

现在,我有关于系统的部分线索,我阅读了设计文档,现在我认为这些文档与到目前为止的文档有多么错误。

一旦我了解了实际的行为文档,我就可以开始研究代码并查看真正的内容。他们从不排队,但我现在知道要相信多少。

然后,我查看“ todo”和“ fixme”评论的IDE输出。诸如“版本2.0中的修复”之类的东西也是Tip-Off的。

因此,这一切都是关于学习真实性的,正如人们指出的那样,单独的设计文档很少是最新的或正确的,但是它确实告诉您人们在某个时间点的想法。当然,这些人可能没有在审问周围。

我的偏爱是从设计开始,以获取项目的概述,并在钻入细节之前尝试了解其一些关键功能和/或结构。

总是设计。通过代码,值得浏览开发人员设置步骤(检查源,构建项目,进行任何配置更改),但是尝试从其代码中学习应用程序的结构是没有意义的。那只是告诉你 什么 结构不是 为什么 结构是或其他开发人员认为的亮点和坏点是架构的。您从白板图和与开发人员聊天的人。

对于一个复杂的软件,我将大致对其进行处理,就像是一个新的开发项目一样。从大思想,背景,范围,利益相关者开始。阅读一些用户文档,并了解其使用方式。如果可能(或适用),请对软件进行一些用户培训。然后开始研究需求和设计文档,以了解其在高水平上的工作方式。如果他们仍然在身边,请与设计师交谈。以不同的角度查看系统体系结构。从那里开始研究核心功能并查看一些代码,根据需要返回要求和设计。当您查看代码时,请运行该软件以在行动中查看。一直以来,请编译一些摘要文档以供将来参考 - 您拥有悬崖注释。分支,直到您对它们的工作原理和合适方式有一个很好的了解,但专注于您将要使用的零件。到目前为止,您对整个系统或至少适用于您的零件有了自上而下的了解。

当然,在现实世界中,您可能没有时间在必须开始弄脏手之前,尤其是在较大的项目上。但这就是如果我取决于我,我将如何做。

您应该在代码本身和任何设计文档之间来回工作。

  • 您可以从代码或设计开始,这并不重要。读取代码,直到您真正感到困惑,然后查看设计文档。或者,阅读设计文档以获取高级图片,然后查看代码以查看其外观。只要您使用代码,重复几乎无限期地重复。

  • 请注意,设计文档几乎总是过时的,并且在许多方面都不正确。但是,只要您牢记这些要点,过时的文档仍然可以帮助您在过去的某个时候了解作者的思想。许多高级问题和疑虑仍将有效,您很可能会更快地了解代码如何到达该代码的位置,如果您甚至对作者最初认为它将去的地方有些过时的图片去。

  • 当您通过代码和设计工作时,请创建自己的文档来描述您对当今代码的理解。也许这些文档是一个或两个简单的草图,也许它们是在Wiki中写的,也许它们是其他的。不要让它们太复杂:没有30页的文档。只需弄清楚您的想法,这将大大阐明自己的想法。

这取决于应用程序的类型。如果是一个以数据为中心的应用程序,我通常从数据库设计开始。如果它具有UI,则可以运行(或良好的屏幕设计),它们也可以很好地知道该应用程序的作用很快(我最多只在这里说几个小时)。之后,我开始研究代码,这将更有意义,因为我知道应用程序在做什么。

我从设计文档开始。特别是,规范 - 说明了所看事物的意图。

如果可能的话,我然后查看设计笔记和文档,以获得有关其完成方式的一般风味,有关人员的思维过程,风格和性质。

如果可能的话,我然后与从事它的人交谈 - 它做什么?如何?为什么?尸体被埋在哪里?

开发人员倾向于跳入代码:“让我向您展示此代码”。这对他们来说很好,但倾向于劫持我的需求 - 那就是了解高水平的高水平,从而为低水平的东西提供背景。

它使用大量的大脑力量来查看少量代码,从完整的上下文中,并理解任何有意义的内容。因此,如果可能的话,让开发人员谈论原理,结构,单位,模块,无论所有这些都会欣赏任务。

只有这样,值得尝试进入代码。

在大型方案中,查看代码就像查看一个完整的0和1的页面。有意义,但需要很长时间才能弄清楚。获得外观的风味以及哪些部分有意义,有助于缩小搜索空间。

话虽如此 - 当没有doco,没有人和只有代码时,只能查看代码。

在这种情况下,我通常不会尝试通过缓慢的深度阅读来理解它,我会快速通过,浏览所有内容。有时,这只是打开文件,然后按下页面键。通过这样做,您可以对大局获得惊人的欣赏。 (在某些情况下,我什至会串起可执行文件并拖动这些文件,寻找签名和模式。在过去的20年中,这真是富有成果。)

我从测试开始。如果单位测试和集成测试的编写良好,他们描述了用例。如果它们写得不好,或者根本没有写(可悲的是,在很大程度上是这种情况),我从代码中的入口点开始,并与设计匹配。

然后,我将为每种用例编写测试,这是在调查入口点后您发现的树发现的,以探测代码并使用代码覆盖范围实用程序以查看我缺少的内容。这些测试确切地告诉我代码的工作原理。

我总是尝试为我所看的东西增加价值;编写测试,清理代码,重构大型(20多行)功能。

我发现,仅创建文档不会为代码添加任何实际值,因为它从未与代码交互。

好吧,什么是“设计”?读书人? UML图?您可以中途执行设计文档(大多数),您不能中途编码

任何设计都将成为一个 观点, ,而代码是 事实

当我无法理解代码的推理时,我只会参考辅助文档

阅读代码是开发人员的重要技能。您现在不妨学习它,无论如何,您将在职业生涯中看到太多有用的文档

然后,我查看开发人员的读数,Todo和ChangElog。如果我不明白为什么要编写软件,如何编写软件以及它的去向...我不使用它。

首先设计,然后是代码,如果您愿意,请自上而下,因此我了解我必须工作的每个级别上的上下文。

但是,如果我必须做一个非常具体的更改,例如修复报告或计算,我就去看代码。

更具体地说,我的“设计第一”方法是:

我从De Domain模型开始,如果没有一个模型,如果没有一个模型,则我至少要建立一个基本的模型(一个好的起点是数据模型)。它定义了应用程序的“格式”和对象(类)之间的关系。

它通过放置图片“处理哪些对象”。

然后,我寻找用例模型来找出应用程序“完成了什么过程”,尽管如果是一个,则我更喜欢一个过程映射,以显示进程的序列。

之后,我应该对应用程序有一个很好的图片,然后我可以设计更改。

顺便说一句,上述答案是在业务应用程序的背景下。

代码不在。首先了解该项目的概述当然是个好主意 什么 确实如此。但是,如果您的任务是要详细了解该项目的工作原理,那么至少对我来说,查看代码就像是在拼图看拼图拼图,只是在您查看的每个班级时,您都在添加另一个拼图拼图。如果代码结构良好,您可以看到从类的名称中形成的模式,而无需调查类要做什么。在许多情况下,您可以从代码中获得提示和线索,这将进一步帮助您。

最后,您会发现该程序的作用是一个不可判断的想法,一个完整的拼图拼图。文档可能不完整或不准确,但代码永远不会说明。所有这些都可以做到,而无需弄清楚每种方法的作用。并非每个人都可以通过这种方式了解一个项目,但是如果您经常这样做,那么您可以在几个小时的学习中获得中型应用程序的要旨。尽管我想这一切都取决于偏好。

  1. 应用的功能目的
  2. 应用程序的功能范围和流动与他与其他客户的其他系统链接。

在看到最关键的模块/应用点的代码之后:查看代码,我可以验证设计的优点。

例子:

您必须从事有关财务报告的网络应用程序的应用程序管理。

  1. 我问并阅读有关目的的文档:必须报告哪些数据?谁使用此应用程序?
  2. 什么是链接系统?有任何接收或将数据发送给任何人的截止日期吗?如果此系统降低了其他哪些申请或停止的损失,其他部门还损坏了哪些部门?

在阅读有关该消息的代码,启动和结束应用程序(对于DB中的可能锁定)之后,创建数据的主过程必须报告什么用供应和注入的客户存储区域中的天然气库存计算;次要过程是计算此数据之前计算的数据)

既不代码或设计。我喜欢与利益相关者和最终用户交谈,并从他们的角度了解其工作原理。一旦我可以从他们的脑海中创建一张图片,我将快速查看技术设计,然后介绍代码。

我将首先使用设计,然后同时代码。这非常重要,因为每个项目都不同。您需要提出一个计划和高水平的流程工作流程从A到Z,然后才能同时处理代码。每个决定都要记录下来,以便/正在开发代码的其他团队(或您自己)都知道最新更新以及已确认的内容。

如果有一个良好的高级设计文档,我将使用它。它必须简洁明了。如果太冗长或过时的日期,我将前往代码。

当然,这取决于项目,不是吗?通过文档可以更好地了解一个极其复杂或多面的项目(如果文档足够稳定。)

我认为,单个简单的模块或简单的应用程序几乎总是在代码级别上最好地接近。

每种情况都没有正确的答案!

许可以下: CC-BY-SA归因
scroll top