Sunday, May 1, 2011

Systems Every (Starting) Developer or Software House Should Know and Have

Regardless of programming language of choice you work or specialize in, there are processes or systems developers and software development shops must make sure are in place and know how to use to help develop robust, reliable and good reputation-building application with little fuss.

What are these processes that every developer and software house should have? They are:
  • Coding standard
  • Source code documentation
  • Software application testing system
  • Bug tracker system
  • Version control system
  • And hopefully, continuous integration system
In this article we discuss them, their rationale and examples to help you find some to try for fit in your software development workflow.

Coding standard
Based on Microsoft Secrets: How the World's Most Powerful Software Company Creates Technology, Shapes Markets, and Manages People (this book was published when free and open source technology hasn't yet given them a run for their money), their source codes (maybe for C and C++ programming mostly) were written using Hungarian notation and it's a great example of coding standard, so that different developers will have a consistent coding style and format, making the code easier to maintain. If this seems like a chore to you, especially if you're the sole developer hoping to make the next free open source killer app project, think of it as your social responsibility to other developers in the future who will contribute to your project, and if you need to retire and hand over the reins in the future, your project may survive rather than just being forked from.

There are also coding style checker tools that help you keep developing coding standard-compliant lines of code, for example, there's PHP_CodeSniffer for PHP programming or GNU indent for C/C++ development or Uncrustify for more programming languages. There are even some like AStyle that works as an IDE plugin, in this case specifically for Eclipse IDE.

Source code documentation
This is probably the most hated process by developers, given that it seems to take away precious time from software development, while writing explanations on what a particular function/procedure or object-oriented entity does. As a developer, aside from the creative nirvana we feel making software, we must also be socially responsible for a developer-friendly documentation that will make sense of the system you just made, for the benefit of others who will maintain the code base of your project. This can be eased by using code documentation generators.

Examples of code documentation generators include JavaDoc for Java, PHPDocumentor for PHP and JavascriptDoc Toolkit for Javascript. You can get more information on a wide variety of tools that may be more specific to your needs from this comparison of code documentation generators.

Software application testing system
Software testing is the foundation of software quality control. No person in his right mind should claim to software development competency if they have no background on basic software testing principles and knowledge of its procedures. You may want to read Software Testing (2nd Edition) and Agile Testing: A Practical Guide for Testers and Agile Teams for starters to catch on this.

If coding standard and source code documentation is your social responsibility to your fellow developer, you owe it to yourself to have software application testing system in place to keep your sanity and verify that your project is working as expected, even after all the improvements and changes you made and will make in the future to maintain it.

Luckily, there are automated testing systems available now that will help you make the most of this chore. PHPUnit and Selenium are two popular testing suites usually used in tandem for PHP programming and quality assurance procedure. Application testing, more than being tedious can frankly be a boring chore, read further on testing automation and list of automated testing frameworks for more details.

Bug tracker system
No software is perfect on the first go and when it's been released, software bugs, improvements and feature requests will naturally come up, and hopefully you'll see this in a positive light: somebody cared enough to bother with your creation and is here to help you polish it beyond the spit-and-shine to success. During initial development, as a system increases in size, it will naturally also increase in complexity, and software bugs are inevitable byproducts. To help you keep track of which bug or improvement is up, being worked on or already done and tested, bug tracking systems are indispensable.

Mantis, Bugzilla, and Trac are some of the popular options for free and open source bug trackers, and they work best when they work in coordination with your version control system to counter check changes done, files added, modified or removed as part of the change and as audit trail on when the change occured and who made those changes.

Version control system
Picture this: you've got an already functional system in place, but there are some more code polishing and features you want to add to the system. After about a few lines of code (okay make that about 20 or more), when you tried to run your system, it won't run and you're starting to regret making those changes to an already fully functional system, and worse, you can't recall which changes you made could be causing this trouble and you hope you'd just revert to the old working version as clean slate start again.

If you've been through this experience before and don't want it to happen again, version control systems are your friends, and as software development projects become bigger and more complex, they become indispensable tools you should have. For local server configuration, you can have centralized Subversion, or distributed version control systems like Mercurial or Git; there are also free online services for free and open source projects like GitHub and SourceForge.

Continuous integration system
This is possibly the catch-phrase for a system that automates all the previously mentioned supposedly automated systems: it can check for coding style standard-compliance before it allows committing into the version control systems and runs application testing systems to help report possible bugs, then run command to generate documentation from the documentation auto-generator if all is in order.

This system is very ideal for software development shops to automate the quality assurance process of the company. Jenkins, forked from Oracle's Hudson, and CruiseControl are some of the notable continuous integration systems available as of this writing. If you have extra cash to burn, you may want to invest in proprietary systems like Bamboo, one of the best in my experience.

Technically, being a developer nowadays requires more than just writing code your way, you have to understand and practice software engineering principles and procedures to produce quality software. For starting or experienced developers, knowing the usage and benefits of these systems are great means to a productive career. For software development shops and companies, these systems if properly implemented are very cost-effective means to deliver profitable time-to-market products and build good reputation for the company and the development team within it as a result.

No comments:

Post a Comment