Only Software matters

Experiences in software development

Archive for the ‘quality’ Category

Mikado Method – Learn how to eliminate your techical debt

Posted by Patroklos Papapetrou on May 13, 2013


THE MIKADO METHOD

Save 50% on The Mikado Method and these other selected books. Just enter miklaunch50 in the Promotional Code box when you check out. Expires Tuesday, May 23. Only at manning.com.

The Mikado Method is a process for surfacing the dependencies in a codebase so that you can systematically eliminate technical debt. It gets its name from a simple game commonly known as “pick-up sticks,” in which you try to remove the Mikado stick without disturbing the others. The game is a great metaphor for eliminating technical debt by carefully extracting each intertwined dependency until you’re able to successfully resolve the central issue and move on.

The Mikado Method, a book by the creators of this process, presents a step-by-step system for identifying the scope and nature of your technical debt, mapping the key dependencies, and determining the safest way to approach the Mikado–your goal. A natural byproduct of this process is the Mikado Graph, a minimalistic, relevant, just-in-time roadmap and information radiator that reflects deep understanding of how your system works.

WHAT’S INSIDE

  • Understand your technical debt
  • Surface the dependencies in legacy systems
  • Isolate and resolve core concerns while creating minimal disruption
  • Create a roadmap for your changes

This book builds on agile processes, such as refachttps://onlysoftware.wordpress.com/wp-admin/post.php?post=478&action=edittoring, TDD, and rapid feedback. It requires no special hardware or software and can be practiced by both small and large teams.

You can also choose…

Posted in quality, software, technical debt | 1 Comment »

Sonar 2013 unofficial Survey results

Posted by Patroklos Papapetrou on February 16, 2013


The unofficial Sonar 2013 Survey has completed and you can find its results using the following link.https://dl.dropbox.com/u/16516393/SonarSurvey2013/SonarSurveyResults.rar

Thank you all of you who spend some time filling it.

Part of the survey is also presented below.

Countries

Image

Favorite IDE

Image

 

Which programming language you’d like to be supported in the future by Sonar

 

 

Image

 

Patroklos PAPAPETROU

Posted in quality, sonar | Tagged: , , | 3 Comments »

Sonar 2013 Community Survey

Posted by Patroklos Papapetrou on December 11, 2012


It’s time for the Sonar Community to vote for Sonar’s annual survey.
As last year there’s an unofficial survey with 10 Sonar questions regarding the user community.

You are all welcome to reply anonymously to 10 simple Sonar-related questions. I expect that you won’t need more than 5 minutes to complete it.
The survey will be open until 31 of January and the results will be published in a following post some days later.

Just click on the following link and send your responseshttp://www.surveymonkey.com/s/97WJ92G

Best Regards

Patroklos PAPAPETROU

 

 

Posted in quality, sonar | 3 Comments »

Fixing common Java security code violations in Sonar

Posted by Patroklos Papapetrou on September 21, 2012


This article aims to show you how to quickly fix the most common java security code violations. It assumes that you are familiar with the concept of code rules and violations and how Sonar reports on them. However, if you haven’t heard these terms before then you might take a look at Sonar Conceptsor the forthcoming book about Sonarfor a more detailed explanation.

To get an idea, during Sonar analysis, your project is scanned by many tools to ensure that the source code conforms with the rules you’ve created in your quality profile. Whenever a rule is violated… well a violation is raised. With Sonar you can track these violations with violations drilldown view or in the source code editor. There are hundreds of rules, categorized based on their importance. Ill try, in future posts, to cover as many as I can but for now let’s take a look at some common security rules / violations. There are two pairs of rules (all of them are ranked as critical in Sonar ) we are going to examine right now.

1. Array is Stored Directly ( PMD ) and Method returns internal array (PMD)

These violations appear in the cases when an internal Array is stored or returned directly from a method. The following example illustrates a simple class that violates these rules.

public class CalendarYear {
 private String[] months;
 public String[] getMonths() {
    return months;    
 }
 public void setMonths(String[] months) {
    this.months = months;
 }
}

To eliminate them you have to clone the Array before storing / returning it as shown in the following class implementation, so noone can modify or get the original data of your class but only a copy of them.

public class CalendarYear {
 private String[] months;
 public String[] getMonths() {
    return months.clone();    
 }
 public void setMonths(String[] months) {
    this.months = months.clone();
 }
}

2.Nonconstant string passed to execute method on an SQL statement (findbugs) andA prepared statement is generated from a nonconstant String (findbugs)

Both rules are related to database access when using JDBC libraries. Generally there are two ways to execute an SQL Commants via JDBC connection : Statement and PreparedStatement. There is a lot of discussion about pros and cons but it’s out of the scope of this post. Let’s see how the first violation is raised based on the following source code snippet.

Statement stmt = conn.createStatement();
String sqlCommand = "Select * FROM customers WHERE name = '" + custName + "'";
stmt.execute(sqlCommand);

You’ve already noticed that thesqlcommand parameter passed to execute method is dynamically created during run-time which is not acceptable by this rule. Similar situations causes the second violation.

String sqlCommand = "insert into customers (id, name) values (?, ?)";
Statement stmt = conn.prepareStatement(sqlCommand);

You can overcome this problems with three different ways. You can either useStringBuilder or String.formatmethod to create the values of the string variables. If applicable you can define the SQL Commands as Constant in class declaration, but it’s only for the case where the SQL command is not required to be changed in runtime. Let’s re-write the first code snippet using StringBuilder

Statement stmt = conn.createStatement();
stmt.execute(new StringBuilder("Select FROM customers WHERE name = '").
                         append(custName).
                         append("'").toString());

and using String.format

Statement stmt = conn.createStatement();
String sqlCommand = String.format("Select * from customers where name = '%s'", custName);
stmt.execute(sqlCommand);

For the second example you can just declare the sqlCommand as following

private static final SQLCOMMAND =insert into customers (id, name) values (?, ?)";

There are more security rules such as the blockerHardcoded constant database password but I assume that nobody is still hardcodes passwords in source code files…

In following articles I’m going to show you how to adhere to performance and bad practice rules. Until then I’m waiting for your comments or suggestions.

Posted in java, quality, software, sonar | Tagged: , , , | 10 Comments »

20 +2 Subjects Every Software Engineer Should Know … and the books you need

Posted by Patroklos Papapetrou on July 19, 2012


I recently read an extremely interesting and useful article about the 20 subjects that every software engineer should know or learn….
What is really cool is that it’s not restricted to products, languages but it describes generally accpepted technologies, methodologies and practices.
It applies both to junior and exeperienced software engineers. The former have a guideline about the fields that need to focus whereas the latter have the chance to re-evaluate their knowledge.
What’s missing, IMHO, is to give the reader a clue about which are the best book(s) related to these subjects so in this post I give my advices on that. Of course the list of books is not complete and it’s just my opinion based on my experience.

Hope you find it useful as well!

1. Object oriented analysis & design

2. Software quality factors

3. Data structures & algorithms: Basicdata structureslike array, list, stack, tree, map, set etc. and usefulalgorithmsare vital for software development. Their logical structure should be known.
6. Software processes and metrics
8. Operating systems basics
10. Network basics
13. Dependency management
15. ORM (Object relational mapping)
18. Internationalization (i18n)

Posted in agile, cdi, ci, continuous integration, java, quality, software, sonar, testing | 9 Comments »

5+1 Sonar Plugins you must not miss ( 2012 version )

Posted by Patroklos Papapetrou on January 1, 2012


This post is a revision of the original post, published last year and it covered Sonar version 2.8. Many months has passed and during this period the Sonar Team released four(4) new versions of the ultimate quality platform. The latest version ( 2.12 ) now includes JaCoCo in its core implementation and the existing plugin is now deprecated. Since I have included JaCoCo plugin in my previous post in top Sonar plugins I think it’s time to remove it and refine my list. So here is the 5+1 Sonar Plugins you must not miss for 2012!!

.I would like to clarify though some exceptions I have made prior to my final choice. I have excluded all plugins that have to do with additional languages and IDE to keep this post as much as objective I can. I have also excluded all commercial plugins for obvious reasons. After that assumptions I have limited my selections to the following categories :

  • Additional Metrics
  • Governance
  • Integration
  • Visualization / Reporting
Sonar itself comes with a variety of features that cover most of the needs of a software development team. However I consider that the following plugins are essential, especially for those that have adapted or trying to adapt agile practices. To be honest it was very difficult to select only 6 plugins!!
1.Hudson / Jenkins plugin
Although Sonar analysis can be easily triggered from several build tools (maven, ant etc.) I strongly believe that its native integration with the most famous open source CI server makes itself an important part of the continuous integration / deployment practice. The configuration is extremely easy and as proposed the best practice is to trigger Sonar at night builds. Team members can track day by day software quality, automatically, without bothering when a new analysis should run.
2.Timeline Plugin (2012 new entry)
How many times have you needed to see how much your source code has improved (hopefully) in the last weeks or months? Have you ever tried to compare basic quality indeces in a single graph? Timeline plugin integrates Google Visualization Annotated TimeLine component at project level and provides a flexible way to historical data regarding sonar quality metrics. Moreover it adds version and date milestones on visualization graph by providing in depth details about the evolution of a software project. Extremely useful for all team members ( developers, architects, testers even managers ).
3.Useless Code Plugin
It may looks similar to the Sonar Core feature named Duplicate Code, but it adds some more metrics, which I think are very useful especially for large or legacy systems. In general it measures how many lines can be removed from your code. It reports what is the number of unused private methods that can be safely removed and the number of unused protected methods exist in the code that can be removed after some more careful code examination. Finally it provides some more details about code duplication informing how duplicate lines are formed (i.e. x blocks of y lines )
4.SIG Maintainability Model Plugin
This plugin, as its name implies is an implementation of the Software Improvement Group(SIG) Maintainability Model. It reports ranking – from — :(very bad) to ++ (very good) on the following base indicators:Analysability, Changeability, Stability and Testability. The core idea for this ranking is to measure a series of base metrics such as Lines of Code(LOC), Duplications,Unit Tests,Complexity and Unit Size. Each of these metrics is then accounted into some of the mentioned indicators and the final result is representing the overall maintainability of the project. We can see the results of this analysis in a graphical (spider) presentation with all four axes of the model. With a glance a this graph you have a global and detailed at the same time view of how easy is to change and maintain your codebase. For me it is the first index I check every morning and if something is not + or ++ then we definitely have done something wrong

5.Quality Index Plugin
Have you ever wanted to check a single number (indicator) and understand how healthy is your project? I am sure you have!! Well, the quality Index plugin is exactly what you are looking for. The plugin combines four weighted axes (complexity, coding violations, style violations, test coverage) of quality and produces a ranking between 0 (lowest) and 10(highest). Moreover it calculates a method complexity factor based on the complexity factor mentioned above. Have you ever tried to get a ranking of 10 with this plugin? I think it worths the effort!

6.Technical Debt Plugin
Last, but not least, the plugin that reports about the interest you have to pay as a developer, as a team, as a company. Technical debt is a term invented by Ward Cunningham to remind us that if we don’t pay our interest from time to time, then it is for sure that eventually this will make our software unmaintainable and hard to add new features or even find the root cause of defect. The plugin, which has a very powerful configuration, represents technical debt in four dimensions.

  • Debt Ratio : The percentage of current technical debt to the maximum possible technical debt.
  • Cost to reimburse : Cost in your currency to pay all interest and clean up your code
  • Work to reimburse : Same as above measured in man days.
  • Breakdown : Distribution to the following axes: Duplication, Violations, Complexity, Coverage, Documentation and Design

Be sure that you check its measures to avoid find yourself in bad situation like spaghetti code

I am pretty sure that there are plenty of interesting Sonar plugins so please feel free to post your comments with your list of them.

Posted in quality, software, sonar | 3 Comments »

Best Agile Practices Blog Articles during September 2011

Posted by Patroklos Papapetrou on October 3, 2011


For September I have chosen to present a personal collection of articles that address / discuss one or more agile practices. Estimation, CI, Continuous Delivery and much more. Enjoy!.

4 Values of the Innovative Team
What does it take to have team be successful in an innovation? All teams operate with a set of values, usually implicitly. In this post,Paul Boos discusses the 4 primary values that a innovative team will exhibit and according to him, these values are what allow a team to be creative in constructing and implementing an innovation.
http://agilescout.com/4-values-of-the-innovative-team

Estimating a full backlog based on a sample of it
My favorite article for last month. See how easy it is to have a full backlog estimation just by estimating only a portion of the total user stories. Mike Cohn offered to all agile practicioners another excellent post.
http://blog.mountaingoatsoftware.com/estimating-a-full-backlog-based-on-a-sample

The value of stable teams
Forget about multi-tasking. Forget about multi-project assignments. Bring your team members together and make them last ( forever!!! )
http://www.allaboutagile.com/the-value-of-stable-teams

Agile is NOT a game of perfect
Agile isnt about perfection; its about bringing value to your organization and to your customers in the most cost-effective, team-centric, transparent way.

http://blogs.versionone.com/agile_management/2011/09/27/agile-is-not-a-game-of-perfect

How does QA fit in?
Do you have a separated department of testers. How can they work smoothly in an agile team? Or even better… how can they be a part of that team?

http://agileconsortium.blogspot.com/2011/09/how-does-qa-fit-in.html


How to introduce a Test-Driven Mindset
Test Driven Development is considered to be one of the most difficult agile practices to adopt and that is because is primarly a mindset problem and not a technology or tools issue. This post, by Mike Caspar, presents an excellent approach on how you can introduce a TDD mindset in an agile team
http://www.agileadvice.com/2011/09/07/uncategorized/how-to-introduce-a-test-driven-mindset

Continuous Deployment is Continuous Business Improvement
Why it is extremely important to achieve continuous deployment. It’s not about technology… it’s about business improvement

http://blog.recursivity.com/post/9992942239/continuous-deployment-continuous-business-improvement

Continuous Delivery – Why you don’t really “get it”?
Are you sure you understand what CI is?

http://www.urbancode.com/blogs/anthillpro-blog/2011/09/07/continuous_integration_why_you_dont_really_get_it.html

Feel free to add any article you found interesting in the list

Posted in agile, continuous integration, quality, software, testing | 1 Comment »

Best Java Testing Articles during Summer 2011

Posted by Patroklos Papapetrou on August 31, 2011


Starting from today I will try to post every month or so , a list of articles that cover a specific topic and were initially posted during the last month.

For the beginning I the selected topic is Testing and covers not only August but also July. Enjoy!!

5 reasons to write tests for you code
If you are not yet convinced about the necessity of testing your code then this article is your last chance
http://masternerd.lucianocheng.com/5-reasons-for-testing-masternerdposterouscom

Unit Testing for Java EE
Think testing Java EE applications is difficult, inconvenient, or too complex? Learn why this isn’t the case and how do unit testing efficiently in this article.Unit testing and mocking of Java EE 6 (CDI, JPA and EJB) applications.
http://www.oracle.com/technetwork/articles/java/unittesting-455385.html

Why testing code for thread safety is flawed
A blog for testing thread-safety code and the problems behind that.
http://vanillajava.blogspot.com/2011/08/why-testing-code-for-thread-safety-is.html

Test Driven: It is the mindset not the tool!
Interersting point of view on how you have to approach TDD.
http://blog.jonasbandi.net/2011/08/test-driven-it-is-mindset-not-tool.html

DBUnit Express Tips – Setup Simplification and Custom Data File Convention
Simple Guide for DBUnit Express. If you plan to perform Database Unit testing then drop an eye on this post
http://theholyjava.wordpress.com/2011/08/05/dbunit-express-tips-setup-simplificatio-custom-data-file-convention

Good Unit Test Check List
Are you writing Unit Tests? Then check this list if you are on the correct path.
http://jbrieu.info/leblog/2011/good-unit-test-checklist/

Unit Tests are better than excellent specification
Excellentspecifications= Very refined exhaustive view of futurepotentialfeatures
Good unit tests
= Very refined exhaustive view ofactualfeatures
http://jbrieu.info/leblog/2011/test-culture-episode-6-unit-tests-are-better-than-excellent-specifications/

What is the cost of Unit Tests
Simple blog showing how much you earn by writing unit tests instead of running manual tests or debugging your application
http://jbrieu.info/leblog/2011/test-culture-episode-12-cost-of-unit-test/

UDIAS – The five levels of an ideal agile testing strategy
The UDIAS (unit, database, integration, acceptance, stress) testing strategy is probably not a silver bullet, but it covers all the different layers and views of an application. The time needed to set running all the above build jobs is significantly large but the ROI of investment worth the effort. I dont think that there is something more important in a system under development / maintenance than an automated testing plan.
https://onlysoftware.wordpress.com/2011/07/24/the-5-levels-of-agile-testing

 

Posted in agile, quality, software, testing | 1 Comment »

5+1 Sonar Plugins you must not miss

Posted by Patroklos Papapetrou on July 10, 2011


Sonar, to my humble opinion, is the leading system to help developer teams track,manage and eventually enhance the overall quality of their code and obviously their software products/projects. To be honest, this is not a post to describe either Sonar features or the necessity of a tool for every developer that respect his time and efforts. If you want to read such analysis you can see my related post To Sonar or Not to Sonar. In this article I briefly present 5+1 plugins that every Sonar Installation should have them. I would like to clarify though some exceptions I have made prior to my final choice. I have excluded all plugins that have to do with additional languages and IDE to keep this post as much as objective I can. I have also excluded all commercial plugins for obvious reasons. After that assumptions I have limited my selections to the following categories :
  • Additional Metrics
  • Governance
  • Integration
  • Visualization / Reporting
Sonar itself comes with a variety of features that cover most of the needs of a software development team. However I consider that the following plugins are essential, especially for those that have adapted or trying to adapt agile practices. To be honest it was very difficult to select only 6 plugins!!
1.Hudson / Jenkins plugin
Although Sonar analysis can be easily triggered from several build tools (maven, ant etc.) I strongly believe that its native integration with the most famous open source CI server makes itself an important part of the continuous integration / deployment practice. The configuration is extremely easy and as proposed the best practice is to trigger Sonar at night builds. Team members can track day by day software quality, automatically, without bothering when a new analysis should run.
2.Jacoco Plugin
Unit Test results, with drill down analysis, line and branch coverage, running and failed tests are features implemented in Sonar core and cover in depth all aspects of unit testing practice. But, as there is always a ‘but’, what about Integration tests? What if we want to have separated measures about unit and integration tests? Here comes JaCoCo plugin to save our time and money. Although JaCoCo is an alternative to Cobertura (default Sonar coverage tool ), it may be properly configured to display metrics only for Integration Tests. There is a great article that explains in details how we can use it and get the same analysis ( as for Unit Tests ) for Integration Tests.
3.Useless Code Plugin
It may looks similar to the Sonar Core feature named Duplicate Code, but it adds some more metrics, which I think are very useful especially for large or legacy systems. In general it measures how many lines can be removed from your code. It reports what is the number of unused private methods that can be safely removed and the number of unused protected methods exist in the code that can be removed after some more careful code examination. Finally it provides some more details about code duplication informing how duplicate lines are formed (i.e. x blocks of y lines )
4.SIG Maintainability Model Plugin

This plugin, as its name implies is an implementation of the Software Improvement Group(SIG) Maintainability Model. It reports ranking – from — :(very bad) to ++ (very good) on the following base indicators:Analysability, Changeability, Stability and Testability. The core idea for this ranking is to measure a series of base metrics such as Lines of Code(LOC), Duplications,Unit Tests,Complexity and Unit Size. Each of these metrics is then accounted into some of the mentioned indicators and the final result is representing the overall maintainability of the project. We can see the results of this analysis in a graphical (spider) presentation with all four axes of the model. With a glance a this graph you have a global and detailed at the same time view of how easy is to change and maintain your codebase. For me it is the first index I check every morning and if something is not + or ++ then we definitely have done something wrong

5.Quality Index Plugin
Have you ever wanted to check a single number (indicator) and understand how healthy is your project? I am sure you have!! Well, the quality Index plugin is exactly what you are looking for. The plugin combines four weighted axes (complexity, coding violations, style violations, test coverage) of quality and produces a ranking between 0 (lowest) and 10(highest). Moreover it calculates a method complexity factor based on the complexity factor mentioned above. Have you ever tried to get a ranking of 10 with this plugin? I think it worths the effort!

6.Technical Debt Plugin
Last, but not least, the plugin that reports about the interest you have to pay as a developer, as a team, as a company. Technical debt is a term invented by Ward Cunningham to remind us that if we don’t pay our interest from time to time, then it is for sure that eventually this will make our software unmaintainable and hard to add new features or even find the root cause of defect. The plugin, which has a very powerful configuration, represents technical debt in four dimensions.

  • Debt Ratio : The percentage of current technical debt to the maximum possible technical debt.
  • Cost to reimburse : Cost in your currency to pay all interest and clean up your code
  • Work to reimburse : Same as above measured in man days.
  • Breakdown : Distribution to the following axes: Duplication, Violations, Complexity, Coverage, Documentation and Design

Be sure that you check its measures to avoid find yourself in bad situation like spaghetti code

I am pretty sure that there are plenty of interesting Sonar plugins so please feel free to post your comments with your list of them.

Posted in open source, quality, software, sonar | Tagged: , , , | 4 Comments »

To Sonar or Not to Sonar ?

Posted by Patroklos Papapetrou on May 19, 2011


To Sonar or not to Sonar?

This is the first question that a project/product manager, team leader, software department director, customer, developer, ui designer, architect, tester or whatever role/title exists in a development team should answer. This is not a simple question about using an additional quality tool to help you with software development by providing some statistics. I suppose we all have plenty of them installed. This is not a simple question to see how much you care about the total lines of code and their test coverage or to find which classes have the most violations. There is no competition and no prize about that! It is the only question that you ought to answer in order to show how much you care, how much you REALLY care about the overall quality of your software. If you already use Sonar, then you should probably already know the answer and feel free to read our experience. On the other hand if you have never used Sonar or even heard about it, then this is your chance to find out how this little (but great) piece of software have changed our lives (as developers) and enhance our products.

I am an employee of a relatively small software development company, located in Thessaloniki, Northern Greece. There are about 25 developers currently working in small teams. The last 1 翻 years I am in charge of a team composed by 8 members. We are responsible for the maintenance of 5-6 systems (products) and in the meanwhile we have completed a project for one of our customers. Currently we are working on two new products. Since last May (2010) we are using Sonar and here is my little fairy tale about it.

Can I describe our development life before Sonar with a simple word? Of course I can!! Darkness. We had no idea of the situation in our code. We run no unit tests. We did not know whether the design and architecture of our systems allowed significant additions of new features or important changes, which made us very apprehensive about any refactoring attempt. Violations; Security flaws; what the heck are these? Duplicate Code? God bless copy paste. Analyzability, Testability, Stability, Changeability were terms we believed that we needed to look-up in a Chinese dictionary to find out their meaning. Bugs were discovered late in the development lifecycle causing some red-alert situations and releases seemed to be some kind of middle-age dragons that our support and test department had to fight before they come out to our customers. And then some kind of a miracle happened. I cannot remember how I reached Sonar website, but right now I am quite sure that, those 10 minutes needed to read some of Sonar features, changed my development life.

Without any second thought I downloaded it and in a couple of minutes it was installed in my personal computer. Full of excitement I configured it to be integrated with Maven and Jenkins (Hudson at that time) and after a couple of minutes I was starring at my screen in front of my first ever Sonar analysis. I admit that my initial feeling was an extreme disappointment regarding the quality of our existent product but as soon as I realized the possibilities of this unknown to me software tool, I was absolutely stimulated about our new life. Immediately I showed it to my team, shortly explaining them, the different metrics and what do they mean about our project, about the QUALITY of our software. A new era has begun. Today, almost one year later, Sonar tracks all our projects through nightly builds analysis. Every morning the whole team checks the project dashboard, and the differential views, especially from last analysis, and from last stable version. We have configured thresholds for the metrics we count the most, so whenever a build is out of the accepted limits, it is broken. We handle these builds just like all broken builds. It is our first priority to fix a sonar-broken build and to restore the required quality. Before we begin a refactoring task we always study our Sonar analysis related metrics to find out signs of poor design or architecture. We continuously strive to be focused on every aspect of software quality from the first day of the project and without any doubt; Sonar is the best ally we could ever hard. My favorite views are Treemap and motion Chart? I love to see my bubbles changing colors and moving towards perfection. I love to see my tree getting green from red. With a single view I can figure out which components need our further attention. Its easy! Just pick up the red big-ones and start cleaning up your code!!

Our new product releases are much more stable. From dragons are transformed to butterflies. Trust and confidence in our team has significantly grown. We feel no fear when we have to add some new functionality or modify existing features. In other words, this is our Sonar life! The new version, 2.8, is already out there and I cannot wait to try some of its new features like quality profile comparison and manual reviews. I would be also very happy if we could purchase the SQALE plugin. Come on Sonar guys I am sure you can do a better pricing for this kind of plugins.

I cant imagine my development life without Sonar. sometimes wonder how we and our code could breathe some months ago. Sonar gave us the missing oxygen. I have answered my question to myself. I have chosen light instead of darkness. its your turn now!

Posted in quality, sonar | 6 Comments »

 
%d bloggers like this: