Wednesday, August 25, 2010

Properties of a Large Scale Applications and Elements of Application Lifecycle Management

This is the 2nd part of a series of articles written to show how PHP and related technologies can be utilized to create large scale enterprise level software applications. You can read the first part here.

Before we drill down into specifics about this subject, I would like to share few thoughts about the term “Enterprise Software Applications”; I believe this will help us understand the properties of such software application in order to identify the necessary elements in developing them. Simply put, enterprise software applications are complex application software that are used in large scale corporate level (or enterprise level) business entities. These applications enable such large multi facade organizations to operate seamlessly across countries and usually capable of handling both B2B and B2C transactions. These applications are capable of operating in a distributed environment and provide multiple ways for clients or other applications to interact with them (i.e. the same application can have a standalone GUI, a web interface and a set of web services exposing selected functionalities.

With the above simple understanding, we can focus on a more organized list of properties for an average enterprise software application.
  1. Complex in nature. I.e. these applications are complex in all aspects (planning, designing, development, data storage and management, deployment etc…)
  2. Extendable and Scalable, Designed in a way that changes to the functionalities can be done easily and quickly.
  3. Secured, reliable and most importantly interoperable, i.e. the application can work with either existing legacy system or another 3rd party software application.
The list can go on, however, you can find good articles in the internet regarding this subject, hence I’m restraining from going onto explaining the nature of an enterprise level application in grate details (actually that will require another complete article ?). Important thing to understand here is that these applications are large, complex and usually will be used to manage the complete end to end business processors of an organization.

In developing such applications, it’s obvious to see the importance of following a suitable software development process and doing software analysis and designing. A good software design and architecture is essential to complete a project of such magnitude successfully. However, there’s another area that is absolutely imperative for the success of enterprise application development, and that area is the application development environment or to be more precise, the Application Lifecycle Management Environment. Most of the times we don’t tend to think about this factor and it leads to lot of issues or complete failures.

Application Life cycle Management (ALM) environment is essentially a collection of tools that enable one or more development teams to plan, design, code, manage builds, test and deploy enterprise level software applications. It automates most tedious tasks and helps to maintain a high standard in coding and documentation. Most of the times, enterprise level applications are developed by multiple teams and ALM provides an excellent environment for them to coordinate their day today tasks. Having said that, I should point out here that the exact set of tools that go into the ALM environment will depend on the software development process you are following. I am a big fan of Agile based processors (specially Scrum); hence, the environment I have presented here will be more suitable for Agile Scrum based software application development. However, it can easily be adapted to suite other software development processors without much effort.

Structure of a typical ALM is given below.



Major part of any ALM is the Continues Integration (CI) of the application you are building. CI is a very important concept in enterprise application development, this allows multiple teams working on the same application project to seamlessly manage the source code and create successful builds every time a commit happens to the SVN server. CI servers will also take care of checking the code for any coding standard violations, and unit tests and the whole process is completely automated.
If you are coming from J2EE background, chances are that you have worked in an CI environment before. Our target here is to port a similar environment for PHP based application development.

Our next article will focus on configuring a fully fledged CI server for PHP. But first, we need to identify the right set of tools. Normally, A CI environment will be configured within a Linux environment, there are many good articles that explain how to do this, however, most of us who are doing development still use Windows as our development platform. And it’s surprising to see how well the windows environment can be used as a CI server as well. So, I’ll be using Windows to show you how easy and quick it is to configure fully fledged CI environment. I’m using the following tools and environments
  1. Windows XP /Windows Vista/ Windows 7/ Any Windows Server version
  2. XAMPP (http://xampp.org/)
  3. Subversion (for Version controlling, server and client)
  4. Hudson (Continues Integration and Build Management)
  5. PHPDoc (http://manual.phpdoc.org/HTMLSmartyConverter/HandS/li_phpDocumentor.html)
  6. PHP Code Sniffer - PHPCF (http://pear.php.net/package/PHP_CodeSniffer/download/All)
  7. PHPDepend (Code Analyzer) (http://www.pdepend.org/documentation/getting-started.html)
  8. PHPUnit - Unit and Integration Testing (http://www.phpunit.de/manual/3.4/en/installation.html)
  9. XDebug – PHP Debugging tools

I’ll use the above tools and few others to configure our CI server in the next article, so stay tuned

No comments:

Post a Comment