Sign in Get started
Improving Code Quality for Java
Projects
Kulbhushan Singhal Follow
Mar 8 · 5 min read
We’ve all seen the above image being mentioned in the context of code
quality. But what do we mean when we say that a particular piece of code
is good or bad?
What is Code Quality & Why it matters?
Great authors are known for writing books that tell a clear, compelling
story. They use tools like chapters, headings, and paragraphs to clearly
organize their thoughts and painlessly guide their reader. A developer’s
job is similar to that of an author, we simply use different jargon of
namespaces, classes, and methods. If authors don’t use their tools
effectively, then their work will be difficult for the readers to read and
understand whether it is a book or code.
Coming back to the topic of code quality, it is a set of desirable
characteristics that any piece of code should possess.
Reliability: Should work consistently without frequent crashes.
Consistent Code Style: Should follow consistent code style and
naming conventions applicable to the language
Maintainable: Should be easy to understand. Maintainable code is
easy to extend and add new functionality.
Well-tested: Code that has well-written tests tends to have fewer
bugs
Efficient: Should not use unnecessary resources to perform the
desired operations
Secure: Should prevent coding vulnerabilities like SQL injection
Lower Technical Debt: Having low technical debt allows teams to
move fast and develop new functionality without being slowed down
by low quality and non-maintainable code
The more of the above qualities that a code possesses, higher will be the
quality of the code. Based on Project/Client requirements some of the
above characteristics might not be required for the code.
It is extremely challenging to write high quality code when working
under delivery deadlines, but it matters if you’re thinking about the long
term maintainability of the code. Also, high quality code will help the
teams to maintain consistent delivery speed in the long term.
Based on my experience, below are a few things that have been highly
effective in improving and maintaining high-quality code in my projects.
. . .
Improving Code Quality using Static Code Analyzers
Compilers can catch and prevent syntactic issues, but they cannot detect
issues like
Inconsistent code structure
Things that the community might have identified based on experience
Code complexity
Static code analysis is a technique of examining the code before it is run.
There are tools that can do static analysis and they work by analyzing the
code against multiple coding rules. If some violations are found, these
tools can be integrated into the build tools like gradle, maven, etc to fail
the build.
Below are some tools that can be integrated into your projects with very
little efforts:
Checkstyle
Checkstyle is a static code analysis tool used in software development for
checking if Java source code complies with coding rules. The checks
performed by Checkstyle are mainly limited to the presentation of the
code. These checks do not confirm the correctness or completeness of
the code.
Using Checkstyle will ensure that a consistent coding style is followed by
the team developing the code making it easier to read and understand.
Below are some of the checks that can be performed using checkstyle:
Naming conventions of attributes and methods
The number of function parameters
Line lengths
The presence of mandatory headers like copyrights
The use of imports, and scope modifiers
The spaces between some characters
The practices of class construction
Multiple code complexity measurements
PMD
PMD (Programming Mistake Detector) is a static code analyzer that
reports on issues found within the application code.
PMD can help detect issues in the code that could cause issues when the
code is shipped to production.
Possible bugs — Empty try/catch/finally/switch blocks/eating original
exception and throwing a new one
Dead code — Unused local variables, parameters, and private
methods
Empty if/while statements
Overcomplicated expressions — Unnecessary if statements, for loops
that could be while loops
Suboptimal code — Wasteful String/StringBuffer usage
Classes with high Cyclomatic Complexity measurements
Incorrect BigDecimal Usage
CPD (Copy/Paste Detector)
CPD, as the name suggests, is a copy based detector that is extremely
efficient even for large codebases. It is written using Karp-Rabin string
matching algorithm.
It can be configured to detect duplication greater than a determined
number of tokens. Copy/Pasted code is undesirable as it makes the code
difficult to maintain and could lead to bugs in scenarios where some
change is made to one of the places and forgotten to be propagated at
other places.
. . .
Measuring Code Quality
Disclaimer: When a measure becomes a target, it ceases to be a good
measure
Code Coverage Metrics
Code Coverage is a metric that can be used to get some confidence about
the code. Having said that, be careful in choosing which tests are used to
measure the same. Not all tests from the test pyramid are the same.Tools
like JaCoCo can be used to figure out the code coverage.
Only unit tests should be considered when looking at the code coverage
metrics as unit tests are about testing whether the code does what the
developer intended it to do and those are the ones that are the fastest
ones in execution and deliver higher value.
There might be value in measuring the code coverage of integration
tests, but it should be considered as separate artifact and the reports
should not be combined with the unit test reports. Remember integration
tests are about making sure that all the components work together.
Using integration tests for increasing code coverage is like using a
sledge-hammer to crack open a nut.
Toxicity Chart
Toxicity Chart for some version of Hibernate. Source
Toxicity Chart as the name suggests is a way of figuring out the toxicity of
the code. This chart represents the toxicity of each class in the codebase
based on a toxicity score that is calculated based on a set of parameters
like file length, method length, cyclomatic complexity, nested statements
and many more. This chart can be shown to non-technical people like
business people, managers to help them understand the quality of code.
. . .
Reference Code
The Github repository at the link below contains a sample project with all
of the above-mentioned tools setup. It is structured as easy to pick and
choose which tools you require to integrate into your projects.
https://github.com/singhalkul/java-quality-checks
. . .
Maintaining code quality is a continuous process and cannot be done by
a single person on the team. It is the responsibility of entire team to make
sure that the code which is written is of high quality.
While the tools mentioned above will help make sure that some of the
code quality aspects are present in the code, it is not the only way.
Following extreme programming practices like pair programming, test-
driven development, code reviews, continuous integration should be
followed by teams to make sure that all the characteristics of high quality
code are present in the codebase.
Quality Java Sonar Sonarqube Gradle
270 claps
WRIT T EN BY
Kulbhushan Singhal Follow
Developer, Machine Learning Novice
inspiringbrilliance Follow
Writings from Sahaj Software focusing on complex problems
without complicating the solutions.
See responses (2)
More From Medium
Build a Bot to Get Workers and Create a Progressive T he Best Front-End
Noti cations for Concurrency in Ballerina Web App —A Quick Hacking Cheatsheets —
Available Delivery Slots Kevin Ho man Tutorial All in One Place
on Amazon Fresh Naveen Kumarasinghe in Indrek Lasn in Better
Bryan Gaikwad in Better Weekly Webtips Programming
Programming
Here’s Yet Another List Hunting Good Bugs with Setting up a Python + Transfer le from FT P
of Exciting Projects to only <HT ML> Postgres environment server to A S3 bucket
Build Ak1T 4 for Data Science using python
Indrek Lasn in Better Victoria Perez Mola in T he Kiran Kumbhar in Better
Programming Startup Programming
Discover Medium Make Medium yours Become a member
Welcome to a place where words matter. On Medium, smart Follow all the topics you care about, and we’ll deliver the Get unlimited access to the best stories on Medium — and
voices and original ideas take center stage - with no ads in best stories for you to your homepage and inbox. Explore support writers while you’re at it. Just $5/month. Upgrade
sight. Watch
About Help Legal