如何理解现有项目

时间:2010-05-20 09:09:52

标签: architecture dns

我是一名实习开发人员,现在已经编写.NET应用程序大约一年了。我所做的大部分工作都涉及从头开始构建新的应用程序(主要是Web应用程序),并且我或多或少地完全控制了软件设计。

然而,这是一次很棒的经历,作为一名实习开发人员,我对我所采取的方法是否最好的信心是最小的。理想情况下,我希望与更有经验的开发人员合作(我发现这是我学到的最好的)然而在我为开发人员工作的公司中,他们往往孤立地工作(对我来说是一件非常遗憾的事)。

最近我决定了解更多关于经验丰富的开发人员如何处理他们的设计的好方法可能是探索一些开源项目。我发现自己对我看过的项目有点不知所措。凭借我的经验,我很难理解我所面对的代码体系。

我的问题是模糊的。开发人员如何处理理解新的中型到大型项目的任务。我发现自己倒了许多代码,并努力看到树木。在任何时候,我都觉得我能理解系统的一小部分但却看不出它是如何组合在一起的。其他人有这种感觉吗?如果是这样,您采取什么方法来理解项目?您对如何学习设计最佳实践有任何其他建议吗?

非常感谢任何建议。谢谢。

6 个答案:

答案 0 :(得分:10)

这是一个非常有趣的问题。我也想知道其他开发者是如何做到这一点的。到目前为止,我没有特别的顺序使用这些可能性:

  • 阅读源代码,它的优势在于它始终是最新的。它也是 最艰巨的任务,但这是可能的。
  • 阅读单元测试(如果可用),它们通常显示类,库或框架的预期用途。
  • 重构部分源代码。当您提高源代码的质量时,您可以增加对代码的理解,或者如果您确切知道它的作用,我应该说您只能改进源代码。
  • 调试应用程序,在使用调试器时逐步执行程序。
  • 使用NDepends,JDepends,Lattix,Visual Studio等工具对应用程序的体系结构或设计进行反向工程,并以此为出发点。
  • 阅读文档。任何使您能够理解应用程序的文档(用户文档,设计文档或体系结构文档)都可以。
  • 与布鲁诺说的原始开发者沟通也是一个不错的选择。

答案 1 :(得分:6)

在深入研究您从未研究过的任何项目的源代码之前,需要考虑以下一些好的步骤。

第一步 - 尝试了解项目的目的(如果可能的话,请先了解低级别的概述),并接受测试人员的帮助。

第二步 - 在进入代码之前,尝试在您的理解上设计一个非常高级别的项目。(不要花太多时间在这上面,只是在非常高的水平)。

第3步 - 执行项目并查看流程,它将使您更清楚地了解功能设计。

第4步 - 看看项目的结构,它将给出一个非常基本的架构概念,如三层,两层等。

第5步 - 再次以调试模式执行程序,并尝试了解模块和类级别的技术流程。意味着哪个模块包含业务逻辑,写入数据访问逻辑的位置也试图理解这些模块的输入和输出。

第6步 - 请注意您的理解以供将来参考。

第7步 - 再次在调试模式下执行应用程序,这次了解类的用途及其包含的方法。在调试模式下执行应用程序的不同功能,每次都按照控件的位置进行操作,查看该类的类和所有方法,并尝试将其与您正在执行的功能相关联,例如 - 如果您选择了一个页面的帐户'并填写条目并提交。(你知道它将为你打开一个新帐户 - 只需在调试模式下按照控件查看所涉及的类,并尝试了解他们的方法然后在这个周期结束时你我会从技术上了解很多关于开户的事情。 对不同的功能应用相同的过程。

干杯!

答案 2 :(得分:2)

<强>沟通

我经常会请开发人员概述一下我感兴趣的项目或任何项目模块。到目前为止,我还没有发现任何比与相关开发人员沟通更好的事情。现有的代码库。他们不仅可以为您提供项目和代码的概述,还可以推荐可能值得关注的任何可用文档(例如类图)。

答案 3 :(得分:2)

你应该一直在寻找更好的方法。那就是它的核心,就是你要让自己变得更好。总是问“必须有更好的方法”是一件好事 - 但不要让它瘫痪你。设置时间去尝试一些东西,如果你没有到达任何地方,抛弃它,走另一条路。

您信任的人,您可以反省意见的人以及您可以关注的社区会有什么变化。我一直都这么做,有一小部分曾与我合作过的人,在我知道的地方比我更好,并且不介意告诉我“不,不好,你应该这样做(其他一些想法) )”。你已经在这里发布了一些东西: - )

关于项目 - 每次我接近已经存在的项目时,不是我的,编写它的人不在,代码是旧的,文档稀疏等等,我倾向于专注于一件事和一件事。不要试图理解整个系统,这是不现实的,不要太担心你的改变是否是完美的解决方案/解决方案/什么 - 随着时间的推移会出现并随着你改进和理解更多而变得明显。知道你不知道的事情并且不遗余力,一次学习一个频道。当你不得不回到2003年的数据集时,即使知道大量的技巧和酷事也并不意味着很多。

你提到人们非常喜欢......这太糟糕了,因为开发任何东西都需要很多人互相交谈。我建议询问你是否可以将程序与其中一个对系统有很多了解的程序配对。如果那个人找借口或者说“他们不能”找到那些愿意的人。

答案 4 :(得分:2)

问我在开始旅程时问自己。首先,它需要大量的耐心和时间,具体取决于项目的规模。 以下是我今天要了解现有项目的情况,我工作的项目主要是以数据库为中心,这个列表不一定是开源项目,也不是工作场所项目

  1. 创建数据库的ER图(如果它是关系数据库)
  2. 创建一个ER关系表,其中列出了所有表的关系 (这是一个sql查询http://blog.sqlauthority.com/2006/11/01/sql-server-query-to-display-foreign-key-relationships-and-name-of-the-constraint-for-each-table-in-database/
  3. 使用上面的工作表创建视图以逻辑方式对表进行分组并查看结果。这有助于理解应用程序背后的架构和数据
  4. 在项目中布置层和组件的图
  5. 了解流程的顺序图和数据流程图
  6. 对于上述内容,您需要使用visual studio
  7. 等工具调试应用程序
  8. 用于在代码中隐藏链的方法的类图和参考映射(可以使用像Resharper这样的工具)
  9. 功能规范(或编写您自己的项目故事)和用例图(了解业务需求)
  10. 重构一小部分以更好地理解代码
  11. 与开发者或社区或企业交谈

答案 5 :(得分:0)

1)文档(如果有) 2)彻底检查代码 3)从其他人拉取请求 4)单元测试用例5)与同事交谈,并尽可能调试不同的流程