{"id":18576,"date":"2016-07-06T21:46:24","date_gmt":"2016-07-06T14:46:24","guid":{"rendered":"https:\/\/blogs.msdn.microsoft.com\/visualstudioalm\/?p=18576"},"modified":"2019-02-14T17:33:51","modified_gmt":"2019-02-15T01:33:51","slug":"managing-technical-debt-planning-update-2016q3","status":"publish","type":"post","link":"https:\/\/devblogs.microsoft.com\/devops\/managing-technical-debt-planning-update-2016q3\/","title":{"rendered":"Managing Technical Debt planning update &#8211; 2016Q3"},"content":{"rendered":"<p>[Nov 2016: Added a status Update with links on details for what was done]<\/p>\n<p>&nbsp;<\/p>\n<p>Back in January, I shared with you our <a href=\"https:\/\/blogs.msdn.microsoft.com\/visualstudioalm\/2016\/01\/11\/sonarqube-integration-update-and-2016h1-plans\/\">SonarQube integration Update and plans<\/a> for the first half of 2016. I\u2019ve just updated that blog post to ensure that all the links were added to the <a href=\"https:\/\/blogs.msdn.microsoft.com\/visualstudioalm\/tag\/managing-technical-debt\/\">individual blog posts<\/a> for the features we have delivered over these last 6 months.<\/p>\n<p>With the <a href=\"https:\/\/www.visualstudio.com\/en-us\/news\/release-archive-vso\">Visual Studio Team Services Features Timeline<\/a> being updated, I can now share what we are planning for the next three months. But first, let\u2019s take a step back and look at what has been achieved so far. Some of these features were produced with our partners SonarSource and the Microsoft ALM Rangers<\/p>\n<h3>Retrospective \u2013 SonarQube integration with .Net<\/h3>\n<p>We are mostly done with the integration of SonarQube with MSBuild projects, especially for C# (SonarSource is still working on improving the experience for VB and C++)<\/p>\n<p>You can easily setup continuous integration <b>builds in Team Services and TFS<\/b> by adding two MSBuild tasks to your build definition (one before the build, and the other after the tests). With recent versions of SonarQube, you can request the status of quality gates in the build summary. Then, if those fail you will get insights on the reason for this failure. You can also request to <a href=\"https:\/\/blogs.msdn.microsoft.com\/visualstudioalm\/2016\/02\/11\/use-sonarqube-quality-gates-to-control-your-visual-studio-team-services-builds\/#failing_the_build\">break the build when the quality gates fail<\/a>.<\/p>\n<p><a href=\"https:\/\/devblogs.microsoft.com\/wp-content\/uploads\/sites\/6\/2019\/05\/clip_image0021.jpg\"><img decoding=\"async\" width=\"608\" height=\"366\" title=\"clip_image002\" style=\"padding-top: 0px;padding-left: 0px;padding-right: 0px;border-width: 0px\" alt=\"clip_image002\" src=\"https:\/\/devblogs.microsoft.com\/devops\/wp-content\/uploads\/sites\/6\/2016\/07\/clip_image002_thumb.jpg\" border=\"0\" \/><\/a><\/p>\n<p>In any case you will get a link from the build summary to the SonarQube projects to dig more into the details, and understand diffs and trends and aggregated metrics.<\/p>\n<p><a href=\"https:\/\/devblogs.microsoft.com\/wp-content\/uploads\/sites\/6\/2019\/05\/clip_image0042.png\"><img decoding=\"async\" width=\"337\" height=\"209\" title=\"clip_image004\" style=\"padding-top: 0px;padding-left: 0px;padding-right: 0px;border-width: 0px\" alt=\"clip_image004\" src=\"https:\/\/devblogs.microsoft.com\/devops\/wp-content\/uploads\/sites\/6\/2016\/07\/clip_image004_thumb1.png\" border=\"0\" \/><\/a><\/p>\n<p>Picking-up the issues during a continuous integration build means issues are not discovered until after check-in. To prevent this you can request <a href=\"https:\/\/blogs.msdn.microsoft.com\/visualstudioalm\/2016\/06\/02\/sonarqube-code-analysis-issues-integration-into-pull-requests\/\">SonarQube code analysis during pull requests<\/a>, based on a baseline established during continuous integration. SonarQube, acts as a code reviewer adding comments on issues in modified code. This works for any language supported by SonarQube, not only C# and VB (the picture below illustrate pull request with static analysis on JavaScript code)<\/p>\n<p><a href=\"https:\/\/devblogs.microsoft.com\/wp-content\/uploads\/sites\/6\/2019\/05\/clip_image0051.png\"><img decoding=\"async\" width=\"633\" height=\"283\" title=\"clip_image005\" style=\"padding-top: 0px;padding-left: 0px;padding-right: 0px;border-width: 0px\" alt=\"clip_image005\" src=\"https:\/\/devblogs.microsoft.com\/devops\/wp-content\/uploads\/sites\/6\/2016\/07\/clip_image005_thumb1.png\" border=\"0\" \/><\/a><\/p>\n<p>In the .Net managed languages world, Roslyn analyzers (which enable developers to be notified of static analysis issues as they type), are increasingly important to help controlling technical debt. Therefore, we have enabled Roslyn analyzers authors and SonarQube administrators to create SonarQube plug-ins for Roslyn analyzers using the <a href=\"https:\/\/blogs.msdn.microsoft.com\/visualstudioalm\/2016\/03\/17\/sonarqube-sdk-to-build-plugins-for-roslyn-analyzers-released\/\">SonarQube Roslyn SDK<\/a>. If such plug-ins are present in SonarQube, the corresponding Roslyn analyzer is provisioned as a NuGet package and configured (rulesets will be generated from Quality Profiles) <a href=\"https:\/\/blogs.msdn.microsoft.com\/visualstudioalm\/2016\/02\/18\/sonarqube-scanner-for-msbuild-v2-0-released-support-for-third-party-roslyn-analyzers\/\">during the continuous integration or pull request build<\/a><\/p>\n<p>Finally, if you are working in C# and VB, and are using Roslyn analyzers, you might want your definition of quality in the IDE (Roslyn analyzers nuget packages and rulesets) to match your definition of quality in SonarQube (quality profile). Therefore, we have produced a <a href=\"https:\/\/blogs.msdn.microsoft.com\/visualstudioalm\/2016\/03\/17\/bind-a-visual-studio-solution-to-a-sonarqube-project-provisions-and-configures-roslyn-analyzers\/\">connected mode in SonarLint for VisualStudio<\/a>, which enables this consistency by provisioning and configuring NuGet packages for Roslyn analyzers in projects in a Visual Studio solution based on the SonarQube quality profile. It <a href=\"https:\/\/blogs.msdn.microsoft.com\/visualstudioalm\/2016\/05\/11\/sonarlint-2-2-for-visual-studio-improves-the-connected-mode\/\">notifies<\/a> you when your quality definition changes in SonarQube and helps developers to <a href=\"https:\/\/blogs.msdn.microsoft.com\/visualstudioalm\/2016\/04\/18\/sonarlint-for-visualstudio-2-1-released-brings-consistency-with-msbuild-navigation-to-sonarqube-and-notifications\/\">navigate<\/a> to the bigger picture in SonarQube.<\/p>\n<p>Build tasks, and pull request with static analysis have already been available in Team Services and will be available with the same level of completion (rich build summary) in TFS \u201cDev15\u201d.<\/p>\n<h3>SonarQube support in the Maven and Gradle build tasks will be equivalent to that for MsBuild<\/h3>\n<p>Over the past months, we have also started enabling Maven and <a href=\"https:\/\/blogs.msdn.microsoft.com\/visualstudioalm\/2016\/06\/15\/the-gradle-build-task-now-supports-sonarqube-analysis\/\">Gradle<\/a> build tasks to perform a SonarQube analysis by checking a checkbox. But the build summary is not as nice yet as for MSBuild, in particular, as until recently we did not produce a build summary section for the SonarQube analysis. Also we have not yet enabled pull request with Code Analysis for the Java tasks. In the coming months we are going to enable parity of experience between the MSBuild and the Java build tasks.<\/p>\n<p><span style=\"background-color: #00ff00\">Status<\/span>: Done<span style=\"background-color: #00ff00\"><\/span>. See\u00a0 <a href=\"https:\/\/blogs.msdn.microsoft.com\/visualstudioalm\/2016\/06\/15\/the-gradle-build-task-now-supports-sonarqube-analysis\/\">The Gradle build task now supports SonarQube analysis<\/a> and <a href=\"https:\/\/blogs.msdn.microsoft.com\/visualstudioalm\/2016\/10\/12\/maven-and-gradle-build-tasks-support-powerful-code-analysis-tools\/\">Maven and Gradle build tasks support powerful code analysis tools<\/a><\/p>\n<h3>Broadening support for static analysis tools<\/h3>\n<p>We have also started adding support for standalone Java static analysis tools which don\u2019t require a server. So far, <a href=\"https:\/\/blogs.msdn.microsoft.com\/visualstudioalm\/2016\/06\/15\/the-maven-build-task-now-supports-pmd-analysis-out-of-the-box\/\">PMD analysis is integrated out of the box<\/a> in the Maven task. We are working on enabling PMD in Gradle and, based on your feedback, we may integrate more tools such as CheckStyle and FindBugs.<\/p>\n<p><span style=\"background-color: #00ff00\">Status<\/span>: Done. See <a href=\"https:\/\/blogs.msdn.microsoft.com\/visualstudioalm\/2016\/10\/12\/maven-and-gradle-build-tasks-support-powerful-code-analysis-tools\/\">Maven and Gradle build tasks support powerful code analysis tools<\/a><\/p>\n<h3>A dashboard widget for SonarQube analysis builds<\/h3>\n<p>Many of you have requested a dashboard widget for SonarQube. We will produce a widget showing the quality gate status (and reasons for failure if this is the case) as of the last static analysis build of a given build definition. This will work both for MSBuild and Java builds.<\/p>\n<p><span style=\"background-color: #ffff00\">Status<\/span>: On SonarSource\u2019s <a href=\"https:\/\/jira.sonarsource.com\/browse\/MMF-498\">backlog<\/a><\/p>\n<h3>Secure installations of SonarQube in Azure<\/h3>\n<p>We\u2019ve been working with the ALM Rangers to develop the <a href=\"https:\/\/blogs.msdn.microsoft.com\/visualstudioalmrangers\/2016\/03\/29\/azure-active-directory-aad-authentication-plug-in-for-sonarqube\/\">Azure Active Directory SonarQube plug-in<\/a>. Currently the ALM Rangers are working on producing an Azure Resource Manager template to deploy a secure installation of SonarQube in Azure.<\/p>\n<p><span style=\"background-color: #00ff00\">Status<\/span>: A first un-secured installation of SonarQube in Azure was done. See <a href=\"https:\/\/blogs.msdn.microsoft.com\/visualstudioalmrangers\/2016\/10\/06\/easily-deploy-sonarqube-server-in-azure\/\">Easily deploy SonarQube Server in Azure<\/a>. Working on securing it.<\/p>\n<h3>Security \u2013 you consider that this is also part of technical debt<\/h3>\n<p>You have told us that security flaws are an important aspect of technical debt. SonarQube has a few rules about security, and this number will increase with time. But we are also working with other partners in the domain of security and technical debt in general to produce more extensions for Team Services and TFS. We\u2019ll update you when these offerings become available in the Visual Studio Team Services marketplace.<\/p>\n<p><span style=\"background-color: #00ff00\">Status<\/span>: In Progress. See <a href=\"https:\/\/channel9.msdn.com\/Events\/Connect\/2016\/168\">Security in Your Continuous Integration Pipeline<\/a> (on demand video by Sam Guckenheimer), as well as the following article in the MSDN Magazine about <a href=\"https:\/\/msdn.microsoft.com\/en-us\/magazine\/mt790188.aspx\">Rugged DevOps<\/a>. More partners will propose extensions.<\/p>\n<h3>Introducing architecture dependency validation as part of technical debt<\/h3>\n<p>Finally, you have also told us that you consider that architecture flaws are an important part of technical debt. We are working on improving the dependency validation experience in Visual Studio Enterprise, by providing live validation for C# and VB. We\u2019ll also enable these architectural issues to be taken into account in SonarQube through a SonarQube .NET dependency validation plug-in.<\/p>\n<p><span style=\"background-color: #00ff00\">Status<\/span>: Done. See <a href=\"https:\/\/blogs.msdn.microsoft.com\/visualstudioalm\/2016\/11\/30\/live-dependency-validation-in-visual-studio-2017\">Live Dependency Validation in Visual Studio 2017<\/a><\/p>\n<p>We look forward to hearing from you. Please send us your feedback either by asking some questions on this blog post, or proposing suggestions on what you would like us to do next, for instance from <a href=\"http:\/\/visualstudio.uservoice.com\/\"><span style=\"color: #0072c6\">User Voice<\/span><\/a><\/p>\n<p>Thank you!<\/p>\n","protected":false},"excerpt":{"rendered":"<p>[Nov 2016: Added a status Update with links on details for what was done] &nbsp; Back in January, I shared with you our SonarQube integration Update and plans for the first half of 2016. I\u2019ve just updated that blog post to ensure that all the links were added to the individual blog posts for the [&hellip;]<\/p>\n","protected":false},"author":112,"featured_media":45953,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[253,229,1,249],"tags":[],"class_list":["post-18576","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-azure-devops-server","category-community","category-devops","category-open-source"],"acf":[],"blog_post_summary":"<p>[Nov 2016: Added a status Update with links on details for what was done] &nbsp; Back in January, I shared with you our SonarQube integration Update and plans for the first half of 2016. I\u2019ve just updated that blog post to ensure that all the links were added to the individual blog posts for the [&hellip;]<\/p>\n","_links":{"self":[{"href":"https:\/\/devblogs.microsoft.com\/devops\/wp-json\/wp\/v2\/posts\/18576","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/devblogs.microsoft.com\/devops\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/devblogs.microsoft.com\/devops\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/devops\/wp-json\/wp\/v2\/users\/112"}],"replies":[{"embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/devops\/wp-json\/wp\/v2\/comments?post=18576"}],"version-history":[{"count":0,"href":"https:\/\/devblogs.microsoft.com\/devops\/wp-json\/wp\/v2\/posts\/18576\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/devops\/wp-json\/wp\/v2\/media\/45953"}],"wp:attachment":[{"href":"https:\/\/devblogs.microsoft.com\/devops\/wp-json\/wp\/v2\/media?parent=18576"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/devops\/wp-json\/wp\/v2\/categories?post=18576"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/devops\/wp-json\/wp\/v2\/tags?post=18576"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}