1. Discuss the importance of maintaining the quality of the code, explaining the different aspects of the code quality
It is an open source web-based tool, extending its coverage to more than 20 languages, and also allows a number of plugins
Coverity
Coverity Scan is an open source cloud-based tool. It works for projects written using C, C++, Java C# or JavaScript. This tool provides a very detailed and clear description of the issues which helps in faster resolution. A good choice if you are looking for an open source tool
Code Compare
CodCode Compare – is a file and folder comparison and merge tool. Over 70,000 users actively use Code Compare while resolving merge conflicts and deploying source code changes. Code Compare is a free compare tool designed to compare and merge differing files and folders. Code Compare integrates with all popular source control systems: TFS, SVN, Git, Mercurial, and Perforce. Code Compare is shipped both as a standalone file diff tool and a Visual Studio extension.
Key features:
GAMMA
Gamma is an intelligent software analytics platform, developed by Acellere. It supports developers and teams in building higher quality software in less time, by speeding up code reviews.
It automatically prioritizes hotspots in the code and provides clear visualizations. With its multi-vector diagnostic technology, it analyses software from multiple lenses, including software design, and enables companies to manage and improve their software quality transparently.
Package managers are charged with the task of finding, installing, maintaining or uninstalling software packages upon the user's command. Typical functions of a package management system include:
Apache’s Ant is an open source Java library and command-line tool used for automating software build processes. It’s primarily used for building Java applications. Created in 2000, Ant is the original build tool in the Java space that’s still being used today. You’ll probably want to include Ivy with it if you want any dependency management capabilities.When to use it: If you want nearly total control over how your build tool runs and are willing to put in the extra effort to get that.Price: free
Pros:
Cons:
Maven
Apache’s Maven is a build automation tool primarily for Java projects, and is the most popular choice for Java developers today by the usage numbers. Unlike Apache Ant, it uses conventions for the build procedure, and only exceptions need to be written down.When to use it: If you want the de facto tool and plugin repository. If you’re running anything unusual with your other tools, Maven will support it. Well suited for large enterprises due to its very fast build speed.
Price: free
Pros:
Cons:
Gradle is an open source build automation system. With version 1.0 released in 2012, Gradle aims to “combine the power and flexibility of Ant with the dependency management and conventions of Maven into a more effective way to build.” Its build scripts are written in Groovy, not XML, which creates a host of different advantages and disadvantages compared to Ant or Maven. Despite being a newer tool in this space, it’s seen widespread adoption.When to use it: Gradle is designed for multi-project environments and incremental builds. It’s good if you’re comfortable with Groovy or are willing to get there. It’s also great for personal projects and SMBs.
Price: free
Pros:
Cons:
When you're making code in a project you will have to make sure others can comprehend what you're typing, someone who's less competent in programming may not understand in your group so you can just make the code usable so everyone can check and use the code.
So to conclude, the quality of code is as important to a programmer as the quality of food is to a chef, because you'll have others testing and tasting the code, others consuming and using it and etc. so you must make it have high quality code that can be understood by other systems and humans alike and also make it so that later down the line it is easy to fix and maintain
- Readability, consistency — how easy it is to read and understand sections of the code; this includes code clarity, simplicity, and documentation.
- Predictability, reliability, and robustness — software behavior should be predictable, and not prone to hidden bugs.
- Maintainability and extensibility — fixing, updating and improving software should be as simple as possible, not inherently complex.
Poor quality code can be usually caused by:
- There is no function documentation, no comment lines, and no apparent coding standard is followed (seen, for example, in the usage of curly brackets and empty lines).
- The complexity is relatively high due to the number of different actions and processes (DB queries, view/output, and business logic), multiple nesting levels.
- There is an inconsistency in the ways to perform output and variable interpolation.
- The code is simple and self-explanatory.
- Different logic sections are separated by empty lines.
- There are few nesting/indentation levels, with early return statements.
- There are proper design considerations (separation of responsibilities by different objects/classes).
- Due to the high code quality and clarity, the class/method should be easy to test and maintain, with low effort; the probability of bugs occurring should also be extremely low.
2. Explain different approaches and measurements used to measure the quality of code
- Weighted Micro Function Points
- Halstead Complexity Measures
- CyclomaticComplexity
- Lines of code
- Lines of code per method
3. Identify and compare some available tools to maintain the code quality
SonarQube

Coverity Scan is an open source cloud-based tool. It works for projects written using C, C++, Java C# or JavaScript. This tool provides a very detailed and clear description of the issues which helps in faster resolution. A good choice if you are looking for an open source tool

CodCode Compare – is a file and folder comparison and merge tool. Over 70,000 users actively use Code Compare while resolving merge conflicts and deploying source code changes. Code Compare is a free compare tool designed to compare and merge differing files and folders. Code Compare integrates with all popular source control systems: TFS, SVN, Git, Mercurial, and Perforce. Code Compare is shipped both as a standalone file diff tool and a Visual Studio extension.

Key features:
- Text Comparison and Merging
- Semantic Source Code Comparison
- Folder Comparison
- Visual Studio Integration
- Version Control Integration and moree Compare
Gamma is an intelligent software analytics platform, developed by Acellere. It supports developers and teams in building higher quality software in less time, by speeding up code reviews.
It automatically prioritizes hotspots in the code and provides clear visualizations. With its multi-vector diagnostic technology, it analyses software from multiple lenses, including software design, and enables companies to manage and improve their software quality transparently.
4. Discuss the need for dependency/package management tools in software development?
Package managers automate the process of installing, upgrading, configuring, and removing computer programs from an operating system in a consistent manner. A package manager deals with ‘packages’ – distributions of software and data in archive files. Packages contain metadata, such as the software’s name, its purpose, version number, checksum and a list of dependencies necessary for the software to run properly. Upon installation, metadata is stored in a local package database. Package managers typically maintain a database of software dependencies and version information to prevent software mismatches and missing prerequisites. They work closely with software repositories, binary repository managers and app stores.
5. Explain the role of dependency/package management tools in software development
A software package is an archive file containing a computer program as well as necessary metadata for its deployment. The computer program can be in source code that has to be compiled and built first.Package metadata include package description, package version, and dependencies (other packages that need to be installed beforehand).Package managers are charged with the task of finding, installing, maintaining or uninstalling software packages upon the user's command. Typical functions of a package management system include:
- Working with file archivers to extract package archives
- Ensuring the integrity and authenticity of the package by verifying their digital certificates and checksums
- Looking up, downloading, installing or updating existing software from a software repository or app store
- Grouping packages by function to reduce user confusion
- Managing dependencies to ensure a package is installed with all packages it requires, thus avoiding "dependency hell"
6. Compare and contrast different dependency/package management tools used in industry
Maven
A repository in Maven holds build artifacts and dependencies of varying types.
There are exactly two types of repositories: local and remote. The local repository is a directory on the computer where Maven runs. It caches remote downloads and contains temporary build artifacts that you have not yet released
Yum
Yum is an automatic updater and package installer/remover for rpm systems. It automatically computes dependencies and figures out what things should occur to install packages. It makes it easier to maintain groups of machines without having to manually update each one using rpm. Yum has a plugin interface for adding simple features. Yum can also be used from other python programs via its module inteface.
NuGet
NuGet is the package manager for the Microsoft development platform including .NET. The open-source NuGet client tools provide users with the ability to produce and consume packages in a similar fashion to RedHat's yum, but with a software development focus. The central package repository for NuGet is known as the NuGet Gallery and is used by all package authors and consumers
Chocolatey
Chocolatey is a package manager for Windows. Designed as a decentralized framework for quickly installing applications and tools, it is built on the NuGet infrastructure and uses PowerShell to deliver packages. Chocolatey packages can be used independently, but also integrate with configuration managers like SCCM, Puppet and Chef.
7. What is a build tool? Indicate the significance of using a build tool in large scale software development, distinguishing it from small scale software development
What does Build Tool mean?
Build tools are programs that automate the creation of executable applications from source code. Building incorporates compiling, linking and packaging the code into a usable or executable form. In small projects, developers will often manually invoke the build process. This is not practical for larger projects, where it is very hard to keep track of what needs to be built, in what sequence and what dependencies there are in the building process. Using an automation tool allows the build process to be more consistent.
8. Explain the role of build automation in build tools indicating the need for build automation
BUILD AUTOMATION. Build Automation is the process of scripting and automating the retrieval of software code from a repository, compiling it into a binary artifact, executing automated functional tests, and publishing it into a shared and centralized repository
9. Compare and contrast different build tools used in industry
AntApache’s Ant is an open source Java library and command-line tool used for automating software build processes. It’s primarily used for building Java applications. Created in 2000, Ant is the original build tool in the Java space that’s still being used today. You’ll probably want to include Ivy with it if you want any dependency management capabilities.When to use it: If you want nearly total control over how your build tool runs and are willing to put in the extra effort to get that.Price: free
Pros:
- XML base means it works well with automatic tools.
- Once up and running, Ant gives you nearly full control over how things happen.
- Rich plugin ecosystem opens up a lot of possibilities, and it’s easy to create custom plugins if what you need isn’t available.
- Solid and extensive documentation.
Cons:
- XML base means less customization capabilities.
- Ant makes you do pretty much everything your self, which can be daunting.
- Build scripts are often very different, which makes understanding other projects difficult.
- As an old established tool, the community is fairly dead.
Maven
Apache’s Maven is a build automation tool primarily for Java projects, and is the most popular choice for Java developers today by the usage numbers. Unlike Apache Ant, it uses conventions for the build procedure, and only exceptions need to be written down.When to use it: If you want the de facto tool and plugin repository. If you’re running anything unusual with your other tools, Maven will support it. Well suited for large enterprises due to its very fast build speed.
Price: free
Pros:
- Extensive ecosystem for plugins.
- Common structure between builds makes understanding other projects easy.
- Full support for almost any CI, app server, or IDE tool.
Cons:
- Lots of download requirements for dependencies and plugins.
- Up and down documentation quality.
- Community is largely quiet.
- Customization is weak.
Gradle is an open source build automation system. With version 1.0 released in 2012, Gradle aims to “combine the power and flexibility of Ant with the dependency management and conventions of Maven into a more effective way to build.” Its build scripts are written in Groovy, not XML, which creates a host of different advantages and disadvantages compared to Ant or Maven. Despite being a newer tool in this space, it’s seen widespread adoption.When to use it: Gradle is designed for multi-project environments and incremental builds. It’s good if you’re comfortable with Groovy or are willing to get there. It’s also great for personal projects and SMBs.
Price: free
Pros:
- DSL base means you have a more customizable and streamlined tool.
- No required build script boilerplate makes for a simpler experience.
- Excellent documentation and active community. For example, Gradleware is a company designed around facilitating the adoption and use of Gradle through consultancy and other guidance.
- It’s simple to create custom plugins.
Cons:
- DSL base means you have a less straightforward and standardized tool.
- As the new kid on the block, the ecosystem for plugins and the like is less developed.
- As a newer tool, its support for CI tools and app servers isn’t as fleshed out as Maven or Ant
10. Explain the build life cycle, using an example (java, .net, etc…)
JAVA
- validate: validate the project is correct and all necessary information is available.
- compile: compile the source code of the project.
- test: test the compiled source code using a suitable unit testing framework. These tests should not require the code be packaged or deployed.
- package: take the compiled code and package it in its distributable format, such as a JAR.
- integration-test: process and deploy the package if necessary into an environment where integration tests can be run.
- verify: run any checks to verify the package is valid and meets quality criteria.
- install: install the package into the local repository, for use as a dependency in other projects locally.
- deploy: done in an integration or release environment, copies the final package to the remote repository for sharing with other developers and projects.
.NET
- Page request: The page request occurs before the page life cycle begins. When the page is requested by a user, ASP.NET determines whether the page needs to be parsed and compiled (therefore beginning the life of a page), or whether a cached version of the page can be sent in response without running the page.
- Start: In the start stage, page properties such as Request and Response are set. At this stage, the page also determines whether the request is a postback or a new request and sets the IsPostBack property. The page also sets the UICulture property.
- Initialization: During page initialization, controls on the page are available and each control's UniqueID property is set. A master page and themes are also applied to the page if applicable. If the current request is a postback, the postback data has not yet been loaded and control property values have not been restored to the values from view state.
- Load: During load, if the current request is a postback, control properties are loaded with information recovered from view state and control state.
- Postback event handling: If the request is a postback, control event handlers are called. After that, the Validate method of all validator controls is called, which sets the IsValid property of individual validator controls and of the page. (There is an exception to this sequence: the handler for the event that caused validation is called after validation.)
- Rendering: Before rendering, view state is saved for the page and all controls. During the rendering stage, the page calls the Render method for each control, providing a text writer that writes its output to the OutputStream object of the page's Response property.
- Unload: The Unload event is raised after the page has been fully rendered, sent to the client, and is ready to be discarded. At this point, page properties such as Response and Request are unloaded and cleanup is performed.
11. What is Maven, a dependency/package management tool or a build tool or something more?
At first glance Maven can appear to be many things, but in a nutshell Maven is an attempt to apply patterns to a project's build infrastructure in order to promote comprehension and productivity by providing a clear path in the use of best practices. Maven is essentially a project management and comprehension tool and as such provides a way to help with managing:
- Builds
- Documentation
- Reporting
- Dependencies
- SCMs
- Releases
- Distribution
If you want more background information on Maven you can check out The Philosophy of Maven and The History of Maven. Now let's move on to how you, the user, can benefit from using Maven
12. Discuss how Maven uses conventions over configurations, explaining Maven’s approach to manage the configurations
Convention over Configuration
Maven uses Convention over Configuration, which means developers are not required to create build process themselves.
Developers do not have to mention each and every configuration detail. Maven provides sensible default behavior for projects. When a Maven project is created, Maven creates default project structure. Developer is only required to place files accordingly and he/she need not to define any configuration in pom.xml.
13. Discuss the terms build phases, build life cycle, build profile, and build goal in Maven
Maven Phase
A Maven phase represents a stage in the Maven build lifecycle. Each phase is responsible for a specific task.
Build Profile
A Build profile is a set of configuration values, which can be used to set or override default values of Maven build. Using a build profile, you can customize build for different environments such as Production v/s Development environments.
Profiles are specified in pom.xml file using its activeProfiles/profiles elements and are triggered in variety of ways. Profiles modify the POM at build time, and are used to give parameters different target environments (for example, the path of the database server in the development, testing, and production environments).
Build Lifecycle
The Maven build follows a specific life cycle to deploy and distribute the target project.
There are three built-in life cycles:
- default: the main life cycle as it’s responsible for project deployment
- clean: to clean the project and remove all files generated by the previous build
- site: to create the project’s site documentation
On the other hand, clean life cycle consists of 3 phases, while the site lifecycle is made up of 4 phases
Maven Goal
Each phase is a sequence of goals, and each goal is responsible for a specific task.
When we run a phase – all goals bound to this phase are executed in order
14. Discuss with examples, how Maven manages dependency/packages and build life cycle
Maven manages dependency/packages
Dependency management is a core feature of Maven. Managing dependencies for multi-module projects and applications that consist of hundreds of modules is possible. Maven helps a great deal in defining, creating, and maintaining reproducible builds with well-defined classpaths and library versions.
Maven build life cycle
A Build Lifecycle is a sequence of tasks we used to build a software. For example, compile, test, test more, package and publish or deploy are all tasks we need to do to build a software.
A Maven build lifecycle is a sequence of phases we need to go through in order to finishing building the software
15. Identify and discuss some other contemporary tools and practices widely used in the software industry
Wrike
it offers a load of useful features including task management, task prioritization, real-time newsfeed, interactive timeline (Gantt chart), and workload management. These tools help both distributed and co-located project teams to work speedily and efficiently. With this solution, your team can schedule, discuss, and prioritize their tasks, and track progress in real time.
Monday.com
Monday.com is one of the leading collaboration and communication software for teams that syncs all information in a single, accessible hub, empowering agents and team members to make important decisions together. Its standout capability is streamlining contribution, helping teams and departments work and collaborate in the most efficient manner. Monday.com allows you to assemble and display progress data in a logical and understandable manner, enabling team members to keep track of projects and common tasks
ProjectManager
ProjectManager is an award-winning online project management tool designed to provide efficiency in project planning, budgeting, scheduling, execution, and reporting. One of the most trusted project management systems in the market today, this tool can help you successfully implement and complete any small or big projects, with either short- or long-term durations.
This platform essentially focuses and provides effective tools on the three major parts of a project—planning, monitoring, and reporting—plus a wide array of advanced add-on features. With ProjectManager, you can create and manage tasks via the cloud, and allows tasks to be updated by your team members even when they’re on-the-go. It also features real-time dashboards, automated emails, and quick report generation.