文章目录
如何快速熟悉一個新的項目代碼?
方法一:
- 阅读开发文档 ,相关的文件
- 熟悉代码目录结构(如何熟悉目錄結構?有什麼技巧?)
- 使用工具建立工程代码(如Source Insight )看代码的时候,自行写注释,辅助记忆(如何使用工具?)
- 将一些重要函数、数据结构、变量、类等代码,复制粘贴到记事本中,以便随时查找(如何做記事本?)
- 把项目跑起来,看运行结果,单独调试某个功能模块等
- 加打印log看看代码是怎样跑的
- 写入一些bug,测试一下
- 借助软件工具或者命令行查找 find grep 等linux查找命令
方法二:
-
普通方法
-
通讀需求文檔,了解項目用途
一个企业级的项目,一定会保留一些相关文档吧!比如需求文档,设计文档,项目计划、软件使用说明书等,先通读这些文档,了解项目的用途、主要功能等。
-
熟悉開發工具、常用功能
每个公司用的开发环境都会有些不同,要熟悉新的开发环境,了解常用的功能、快捷键等
-
部署環境,把項目跑起來
了解开发环境后,就把相关的配置部署好,把项目跑起来。
把项目跑起来后可以快速地了解项目的用途和功能。
-
看項目結構
一般项目结构会体现系统结构上的层次,并根据经验和项目命名猜测作者的设计思想
-
展開項目目錄
根据经验和目录命名猜测作者的设计思想
-
瀏覽文件
根据文件名猜测文件功用,粗略看
-
選切入點
从入口点切入,走一遍业务逻辑,了解设计思路
-
嘗試添加功能或者修復bug
修改bug和添加功能是熟悉项目最好的方法。能做到时,基本熟悉这个项目的结构和逻辑了。
-
-
特殊方法
如何文档啥的没有,那就直接读代码。
- 从入口处找到顶层功能类、功能函数(如何找到入口?)
- 往下找基类、子函数,了解基类、子函数功能(非必要,暂不抠细节)
- 以此往复,理清功能模块位置和关系
- 这个过程也变相是逆构UML
- 最终理清代码
-
幾個關鍵點
- 3W(what? how? why?)
- 核心是什麼?
- 設計模式是什麼?
- 處理好主次矛盾是成功關鍵。
方法三:
- 拿到代码的时候,最好先看目录结构并找到配置文件
- 以自己的开发经验去判断大概的程序架构,理清楚是否为单点入口,
- 让把程序运行起来
- 没有数据库的情况下运行起来可能会错误很多,不过这些错误可以引导你对程序理解,对着错误提示,跟踪代码脉络,很容易就把整个系统拿上手了。
一个源码首先第一步不看代码,看结构,大致知道采用的是那种设计模式,例如函数式的还是mvc方式的,接下来从一个功能入手,先用firebug或者chrome的工具查看请求的url,以及请求url后web前端表现出来的,接下来,上面的模式用到了,去看url对于的方法吧,方法中必定会调用其他的方法,层层递进,分析下来,这个小功能的实现懂了吧,然后多多分析各个功能的实现,大致这个源码的结构熟悉了,那么带着前端的一些操作去摸索各个功能点的实现方法吧
1、拿到代码查看项目当中是否有readme这样的文件,如果没有查看是否有文档之类的
2、代码当中没有文档,那么就想你的同事或者其他人要这个框架的介绍或者资料
3、先请教别人这个框架的大体思路
4、自己独立去按照文档或者其他人说的思路去看代码
5、不懂的地方全部记录下面,一次行去问,有的时候很多问题在你看到后面的东西的时候就自然明白了
6、看懂了代码之后自己尝试着写一个,看自己的理解是否正确就这么多了。
方法四:建議和思維模式
-
要养成一个习惯, 经常花时间阅读别人编写的高品质代码.
-
要有选择地阅读代码, 同时, 还要有自己的目标. 您是想学习新的模式|编码风格|还是满足某些需求的方法.
-
要注意并重视代码中特殊的非功能性需求, 这些需求也许会导致特殊的实现风格.
-
在现有的代码上工作时, 请与作者和维护人员进行必要的协调, 以避免重复劳动或产生厌恶情绪.
-
请将从开放源码软件中得到的益处看作是一项贷款, 尽可能地寻找各种方式来回报开放源码社团.
-
多数情况下, 如果您想要了解"别人会如何完成这个功能呢?", 除了阅读代码以外, 没有更好的方法.
-
在寻找bug时, 请从问题的表现形式到问题的根源来分析代码. 不要沿着不相关的路径(误入歧途).
-
我们要充分利用调试器|编译器给出的警告或输出的符号代码|系统调用跟踪器|数据库结构化查询语言的日志机制|包转储工具和Windows的消息侦查程序, 定出的bug的位置.
-
当向系统中增加新功能时, 首先的任务就是找到实现类似特性的代码, 将它作为待实现功能的模板.
-
在移植代码或修改接口时, 您可以通过编译器直接定位出问题涉及的范围, 从而减少代码阅读的工作量.
-
进行重构时, 您从一个能够正常工作的系统开始做起, 希望确保结束时系统能够正常工作. 一套恰当的测试用例(test case)可以帮助您满足此项约束.
-
阅读代码寻找重构机会时, 先从系统的构架开始, 然后逐步细化, 能够获得最大的效益.
-
代码的可重用性是一个很诱人, 但难以理解与分离, 可以试着寻找粒度更大一些的包, 甚至其他代码.
-
在复查软件系统时, 要注意, 系统是由很多部分组成的, 不仅仅只是执行语句. 还要注意分析以下内容: 文件和目录结构|生成和配置过程|用户界面和系统的文档.
-
第一次分析一个程序时, main是一个好的起始点.
-
有时, 要想了解程序在某一方面的功能, 运行它可能比阅读源代码更为恰当.
-
在分析重要的程序时, 最好首先识别出重要的组成部分.
-
了解局部的命名约定, 利用它们来猜测变量和函数的功能用途.
-
当基于猜测修改代码时, 您应该设计能够验证最初假设的过程. 这个过程可能包括用编译器进行检查|引入断言|或者执行适当的测试用例.
-
理解了代码的某一部分, 可能帮助你理解余下的代码.
-
解决困难的代码要从容易的部分入手.
-
要养成遇到库元素就去阅读相关文档的习惯; 这将会增强您阅读和编写代码的能力.
-
代码阅读有许多可选择的策略: 自底向上和自顶向下的分析|应用试探法和检查注释和外部文档, 应该依据问题的需要尝试所有这些方法.
-
重新组织您控制的代码, 使之更为易读.
-
不需要为了效率, 牺牲代码的易读性.
-
创造性的代码布局可以用来提高代码的易读性.
-
在阅读您所控制的代码时, 要养成添加注释的习惯.
-
每次只分析一个控制结构, 将它的内容看作是一个黑盒.
-
使用保持含义不变的变换重新安排代码, 简化代码的推理工作.
閱讀項目代碼的步驟
-
把項目先運行起來
配置项目的运行环境可能是一件比较繁琐的事情,多多少少会遇到一些问题。但是在解决这些问题的过程中,可以让你对项目的技术路线有个大致的了解,例如所使用的开发框架、使用的库、数据库服务器等信息。
-
了解項目後端架構情況
-
深入項目,閱讀代碼
从被调用的接口入手,先看控制器的逻辑,再看被调用方法的功能,然后看sql语句,最后跟着sql语句去看看是对哪些表进行的操作。
-
閱讀項目代碼的四大原則
-
跑不起來的代碼不讀,用不到的代碼暫時不讀
-
以功能邏輯為主,不要死抓細節
-
虛心請教,學會提問
-
謹記筆記,多畫圖
对于整个系统而言,可以画一画系统的功能模块图,流程图等等;甚至可以先画图,再比照代码,看看自己理解的逻辑是否正确,这样整理成文档,有记不清的地方了还可以翻出来复习复习。
-
方法五:
- 绝大部分业务系统,不管它的后端是oracle、mysql、nosql还是内存数据库,也不管它前端是web、H5、Winform、Android还是IOS,它的核心功能都是由增删查改组成,然后通过通信、运算和人机交互串起来的,系统的复杂度只要体现在系统规模、性能、稳定性、业务流程、通信等方面(部分工具类、基础架构类系统可能不一样)。
- 绝大部分系统,不管是基于Java、.NET、C++还是NodeJS技术,都是遵循某种或几种设计模式分层进行开发的,最最常见的就是MVC了。那怎么快速熟悉新的项目呢?同样也是套路。
- 先搞清楚新的项目是搞什么的。几个简单问题:谁在用这个系统?用这个系统解决什么问题?用这个系统和不用这个系统的区别?根据这些问题去寻找答案。
- 弄清楚系统是怎么分层、分模块的。每层、每个模块都用到了哪些技术和框架,之间是怎么通信的。
- 把开发环境搭建起来,通过几个典型的功能弄清楚系统里面的增删查改、通信、用户交互是怎么实现的。最简单的方法是根据系统的分层,先从前端到数据库把代码疏通一下,搞不清楚的话打开debug模式一步一步的运行查看。
- 经过上面的3个步骤基本上可以了解到系统的大致功能,后面就可以重点关注那些没有用过的技术和组件,先搞清楚它的目的、背景、实现原理和功能列表,再照着文档做几个demo,增加熟悉度。
- 平常开发过程中如果遇到问题首先要相信:
- 绝大部分自己遇到的问题很多已经遇到过并解决了。
- 绝大部分自己遇到的问题在当前系统里面已经有答案了。
- 绝大部分自己遇到的问题在你用的框架和组件里面都有现成的解决方案。
- 对于老系统。
- 老系统其实满是宝藏,里面有很多你可以借鉴和学习的东西。
- 老系统也满是坑,一个看起来毫无关联的代码改了之后可能引发地震。
- 很多你看着不爽的代码其实都有道理。
- 不要在老系统里面继续挖坑。
- 看不懂的代码不要动。
- 在你力所能及的范围内让老系统变得更美好。