Monday, December 17, 2012

Code management methodologies

I recently finished teaching a course on software deployment methodologies in the company I work. In this course I tried to introduce techniques, tools and procedures that help to improve quality and reduce time and cost on software development

 In these times, companies already use these techniques in a very natural way. It has been widely proved the advantages that entails the incorporation in the development life cycle. Very few are the ones that still work without a source control management system, development frameworks as well as test and deployment plans. In the vast majority of cases these tools are being used more and more and become essential.

If we take a look at companies that develop large software (even in open source software projects), in which many developers are implied,we can see how they apply team working techniques. One of the most popular is the "continuous integration". It is based on the fact of trying to bring the pieces of developed code to the main software as soon as possible. This technique allows all developers to work with the most advanced version of the project, at same time that merging the new code with the rest is less painful. To perform this technique properly, our development process must have the appropriate  tools to ensure the code quality  (via test) and the automation of this integration tasks. These mechanisms will reduce the time we spend on joining code, and assure the correct integration of all the parts of the software

Other tools that will help us to be successful on software development are project managers and documentation apps. These should allow us to plan, monitor and report whatever happen in software development process, since its conception to its delivery and still on its evolution.

In this course, in addition to a brief overview about the UP methodology, I focused on applying the techniques involved in the implementation phases. Since my work is based on Java development, I choose  tools that allow to apply these techniques in a natural way.

We saw:

  • Apache Maven: Framework for automation build, package and report of apps written in Java. (http://maven.apache.org/)
  • Sonatype Nexus: Repository management tool for Maven libraries. (http://www.sonatype.org/nexus/)
  • JUnit: Libraries to perform unit testing to applications written in Java. (https://github.com/kentbeck/junit/wiki)
  • Selenium: That tool helps to automate web applications for testing purposes. It's based on automatic execution through web browsers like Firefox, Chrome, Safari, etc..
  • Subversion: A source code management system. (http://subversion.tigris.org/)
  • Git: Another version SCM. The main difference between subversion and git is based on a the distributed model it uses. (http://git-scm.com/)
  • Jenkins: Web Framework that automates deployment tasks using all previous technologies. (http://jenkins-ci.org/)
  • Trac: Project management and bug/issue tracking system. It also helps us on documentation tasks. (http://trac.edgewall.org/)
  • Jira / Confluence: Two web applications that helps on planning and managing issues like Trac.


In short, I will publish some blog posts with the different sections mentioned above.

No comments:

Post a Comment