Modern Programming - part II

In my previous article I discussed some of the facets of modern programming, and what it takes to be a modern programmer. In this article I continue with the same theme and look at other aspects of project development and some of the tools that can be used to encompass them.

Prototyping
Presenting outlines or sketches of a proposed application or process flow to stakeholders is important for both the stakeholder and development team. It helps eliminate ambiguity and provides each party with a better appreciation of the expectations being placed upon them. You might consider Balsamic or review this article for a comprehensive list of UI design tools available on the market.

Source Control
When you're working in teams then source control is important. Some popular vendors (in the order that they appeared on the scene) include CVS (I don't think anyone uses CVS any more), SVN. Also Mercurial was popular for a while, but Git appears to be the flavour at the moment and is likely to stay for some time due to GitHub. What ever source control you're using, you will want to ensure that your build tool can operate with it.

Build tools
In the old days of building a web application, you would modify the source code directly in the www root. On complex systems that became unmaintainable, and if you're building custom solutions of your core product then a guaranteed nightmare ensured after a few customers. I use Ant, but there are other build tools specific for programming languages or platforms. Examples include gradle, Nant and Rake .

Unit Testing
Unit testing comes with the language that you're programming with. Java uses JUnit, PHP has PHPUnit and CppUnit for C++. Make sure you're using a modern language that has the capability for unit testing. With the right sort of plugins you can also get code coverage analysis as well.

Functional Testing
Functional testing is tied with Unit Testing, but tests the functionality of your application. I use Selenium IDE plugin for Firefox to record my actions in my application, and then Selenium can replay those steps time and time again. So if I make changes to the code and need to check that my web application still works as expected, I just have Selenium replay the steps I saved earlier.

Load Testing
Load testing (which can also be done with Selenium) is done to measure the performance of your application against a predefined network load and hardware. Typically what you are aiming for is the right balance between your application responsiveness, the necessary hardware, the expected load on the system and the amount of money to be spent.

Identity
In the past you would have username and passwords stored on a database that would be independent of any other application that you had. In an enterprise environment you'd be looking at LDAP or Microsoft's Active Directory (which uses the LDAP protocol anyway) for authentication to ensure all your applications have the same sign-on. In some organizations you may even have Cas for Single Sign-on, and yet others may utilize one of the many social networking API's for login authentication.

Virtual Environments
I have an Ubuntu virtual environment (I tried Virtual Box, but ended up with VmWare Player) set up for the purpose of testing. I can do unit and functional testing on a separate system with its own database and know that it wont interfere with my main OS, database or system resources. It is also useful for load testing, and you can see first hand how increased CPU, RAM or page hits impacts on your application performance.

Issue Tracking
Some advanced issue tracking software can tie directly into your IDE and documentation. Imagine being able to track an issue from Bugzilla, through to your code, documentation and release build. There are far too many issue tracking platforms to list in this article, but you might find this wiki page helpful.

Continuous Integration
There are some very interesting tools (Jenkins, Hudson) that help with agile and test driven development. Jenkins and Hudson (forked from the same project) are tools for continuous integration.

Internationalization
Your application may need to support different locales, and this will typically encompass language, time zone and date and number formatting.

Comments

Add new comment

Plain text

  • No HTML tags allowed.
  • Web page addresses and e-mail addresses turn into links automatically.
  • Lines and paragraphs break automatically.
By submitting this form, you accept the Mollom privacy policy.