DEV Community

Cover image for Don't let that huge codebase scare you! Tips and tools to make sense of other people's code

Don't let that huge codebase scare you! Tips and tools to make sense of other people's code

Mohammadjavad Raadi on May 19, 2019

Image: Cherlat.com, Getty Images/iStockphoto There comes a time in every developer's life when they start a new job, join a development team or ...
Collapse
 
alistairjevans profile image
Alistair Evans

Personally, if I'm landed in front an application I haven't seen before and is complex, I like to get a debugger attached, put a breakpoint in the main method (or a controller action method) and then just step line by line, inspecting what changes and where the code goes.

It can take a while, but it means you are getting the literal truth of what the program does.

This approach particularly helps with badly laid-out code or 'lightly commented' code.

Collapse
 
bernardbaker profile image
Bernard Baker

I think a debugger is a defacto tool. Combining the awk / feel solutions with a debugger has a genuine benefit for everyone.

Collapse
 
mjraadi profile image
Mohammadjavad Raadi

Thanks for sharing. I too find myself doing this every so often.

Collapse
 
learnbyexample profile image
Sundeep

congrats on finding the bug and helping resolve it! I want to start doing it too, I've reported issues, but haven't tried to fix the code, just need to take that first step

also, consider using ripgrep instead of ack, it will be much faster, see blog.burntsushi.net/ripgrep/ for details

slightly off-topic: I published a book on "GNU grep and ripgrep" last week, it is still free for few more hours, so check it out if you are interested:

Collapse
 
mjraadi profile image
Mohammadjavad Raadi

Thanks, I appreciate the time and effort you put into publishing this book and providing for free.

Collapse
 
bhupesh profile image
Bhupesh Varshney 👾 • Edited

Is there any advice you would give
If there is no kind of Documentation available not even readme 🤯😪

Collapse
 
nickytonline profile image
Nick Taylor • Edited

You can always help with documentation. It may mean you need to dig deeper in the codebase, but the documentation that you add will help future developers, including yourself. 😉 I wrote about this earlier this year.

Collapse
 
ssimontis profile image
Scott Simontis

Static analysis tools can be a huge help. You can get a pretty good idea of where most of the code is being tied together via dependencies, which files are most volatile (# of commits vs lines of file), easily reformat things to your preferred style, and generate dependency diagrams. I have been using Jetbrains Resharper for years as a C# developer and recently used NDepend on an architectural assessment, where it was a huge help.

Collapse
 
hatsrumandcode profile image
Chris Mathurin

ReSharper and NDepends are both great tools! I would recommend a tool like ReSharper to every Devs. It's also a great way to learn about best practices and enforce standards.

Thread Thread
 
ssimontis profile image
Scott Simontis

My only complaint with ReSharper (besides resource usage, but that's largely on Microsoft for VS still being a 32-bit app) is the amount of options available. You can spend hours trying to get your coding style set up, and the documentation explaining what some of the options are or why they matter is pretty poor. I wish they had some presets that would let you start off with a common coding style instead of having to tinker around so much.

I feel like there is so much more ReSharper can do that I don't know about, but their documentation seems to be slipping. I have experienced very poor interactions with JB customer service as of late and I hope they can resolve that.

Thread Thread
 
hatsrumandcode profile image
Chris Mathurin

I know what you mean. It does take a lot of resources, especially for very big codebases. The code templates I think can get as complex as you get, but it does have some basic formatting built in. It would be great if they did include more built-in templates for styles and best practices. The newer version of Visual Studio seems to include more and more of the features that usually were only found in ReSharper.

Collapse
 
mjraadi profile image
Mohammadjavad Raadi

Reading the commit messages for the files you're working on and the units tests(if there are any) could potentially help you understand the code better.

Collapse
 
bhupesh profile image
Bhupesh Varshney 👾 • Edited

Well in my case I was handed over the code which was not documented & didn't used any kind of version control

Guess, I will die

Anyway I figured out the things to change & it worked

Thread Thread
 
mjraadi profile image
Mohammadjavad Raadi

Oh boy, I totally get what you went through. Glad you worked that out.

Collapse
 
adam_cyclones profile image
Adam Crockett 🌀

Find in files... That is all 🤣

Collapse
 
hubertjakubiak profile image
Hubert Jakubiak

Shift + CMD + F - my favourite shortcut in Sublime 😂

Collapse
 
ianrathbone profile image
Ian Rathbone

Great read! 😀

One of the things I find myself doing, depending on the codebase is to look for the tests OR write some tests around the code.

I like tests that express some of the business requirements and show any thought patterns and logic that have formed the rules around what the code should and should not be doing.

Sometimes it's nicer if there are no tests at all so I can experiment more and see the boundaries myself.

Either way tests are so valuable!!

Collapse
 
akashdesarda profile image
Akash Desarda

Ack really seems interesting, it will save lots of effort

Collapse
 
bernardbaker profile image
Bernard Baker

You're article just saved me a life times worth of "where is that file".

I'll employ its use in my next source code venture.

Collapse
 
mjraadi profile image
Mohammadjavad Raadi

Glad it helped. 🙂

Collapse
 
cryptonkid profile image
cryptonkid

Adding to all the above points and comments one can even use the tools like eclipse to search in all the code bases (should be imported into a comman workplace). Use find in all the files. I generally import the project on eclipse and search based on the keyword. I also use git history to search through the comments with the key words. One can even use JIRA to search for the story or task which has keyword.
My personal startergy is use
1) jira first to find all the story and tasks
2) then use the commit ids to look into the files that got checked in.
3) look into the eclipse to find out the files.
4) Do the static code flow.
5) Put debug point then to find the correct flow.

Collapse
 
sebbdk profile image
Sebastian Vargr • Edited

Docs' are for suckers!

Reading the source and implementing a bunch of methods that are still in flux, or intended as private, and then weeping when they break is the way to go! :D