Software Development Cycle - A web application view
Welcome back OR Welcome. - Pick a greeting which suits you.
Article is meant to give a comprehensive view of activities involved in Software Development. It is written with Web Application in view. I will give little background about myself which will help you to put this information in perspective. I am a software engineer, working on Java/J2ee technologies in a service company. I am mostly involved in designing web-applications using Html, javascript, jsps, AJAX, Dwr, servlets, struts, DAOs, Hibernate, EJBs, web-services etc.. I am working on windows platform with oracle as database and weblogic as application server. IDE if talked anywhere will refer to eclipse.
So far, your marketting team have found a client, who is ready to invest his time and money with you to get one web-application running, which will be servicing his customers, providing them with newer features, more information about products/services and allow customers to order products with ease. If you want to know more about what the web-application is intended to do, talk to your marketting team and then to your client to get a bigger picture.
1. Know your Client
My company is a hundred percent subsidary of a US company. So to say that we already know who is our client and his core business, makes life much easier. If you don't have this information spend some time in getting to know your client first. Roam around his web-site to find out what kind of work he likes. Even we do it in order to get ideas on what prototypes should be proposed to our client.
2. Prototyping
Though not always software engineers have luxury to design prototypes, but if prototyping is done, then this is the right time for software engineers to know what exactly are the client's fantacies. This step gives an opportunity to development team to understand the business of the client, integration points with already established systems, to fix the scope of the project in large dimensions. On the other side it allows client to know what application would be delivered to him in the end. Thus this step is beneficial to both the sides, it avoids any disappointments for the client and any fantacy requirements for the development team. After this step both the sides know, what is it that development team is working on.
Though I have seen prototypes in excel, images, flow-diagrams also but I have found that using Html and Javascript for prototyping is the best approach. It not only provides a close simulation of the end-product but also saves a lot of time while coding Jsps. Most of the Html and Javascript can be reused for designing web-pages. I am adamant in using this approach, but well it doesn't always happen for eg: if prototypes are given to you from the client side. What do you do then? I will say put some people to start converting them to Html and Javascript.
Since we follow XP in our company, prototypes are not a fixed agreement between client and us but it allows us to save lots of effort in wrong directions. Some changes can always be incorporated while the actual development.
3. Estimation
This is the most critical step as far as your client and your own manager is concerned. Getting it right is like walking on an double edged sword. If you bloat your estimations too much, client will say that he can do away with this application this means loss of business for you, and if you are very aggressive here, that will mean late nights for you and your team in the office which will lead to loosing precious resources of the company (not many people realize but this loss is a good as loosing business).
But if you have done the prototyping or if you have well understood the prototypes, you should be able to come up with good estimates. Only experience can teach you this. This step itself can form a big topic for an article, I will take it some time. In one statement I would say that you should devide the work in small modules, define their inter-dependencies, integration points in these modules, keep some time for writting Junits, and some for bug fixing and ofcourse some time just to allow spare time (No body ever misses this).
Let us hope that your client is happy with your estimates and says a GO to the project.
In steps 1,2,3 you have already spent about 30% of total project time. Good news is you would know what exactly you are working on.
4. Know the production environment
Before moving ahead and deciding technologies that you will use for coding the web-application, you should spend some time to know the production environment where your application will be deployed. This will also allow you to de-select some technologies in the next step. Minimum things that you would be interested to know are database, web browser (with version), application server, clustered/non-clustered etc. Wiered restrictions would be faced if your client wants to deploy this new application on eon old system. You should talk to production team of the client to get some idea. If you are going to decide the production environment...... hmm I don't know I have never done that.
5. Deciding the technologies
Its now time to decide what technologies you would use to develop the application. Though every one takes the requirement in view to decide technlogies, one should also take into account about the abilities and knowledge of development team while deciding technologies.
Generally speaking you can devide the application in three parts.
First - Front End.
There are many technologies available, with Jsps being the most popular these days. But before making a decision one might take a look on spring framework, JSF and even servlets (if your pages are logic intensive.). You can even use combination of servlets and Jsps, this works great. I have been mostly using struts which is quite good and quite easy to work with. Though since I have not used many other technologies available, I am not in a position to compare struts with others. So untill unless I get sufficient time to study and learn any other frame work, or I do have some expert in team on other framework, I would like to use struts for frontend even if there are other technologies available which are a better fit to project requirements.
Second - Middle Layer.
Some would say there is hardly anything to decide over here, as every body uses Core Java in this layer. Yes it's true that evey one uses java only, but here you should architect your application as in give your modules a more concrete technical schema. You could think about design patterns to be used. You should think about level of security required. You must think about trasaction handling between two different systems. You would think about interacting with with older and already established systems of client. So though you are not deciding on what to use over here, but still there is considerable work on how to use Java to get a better performance and comprehensive code.
Third - Database Interation.
Hmmm, I always had difficult times on what to use for database interaction. There are so many technologies available with their pros and cons, that it just becomes a matter of comfirt as a prime factor when deciding technology here. Technologies available are DAOs, JDOs, EJBs, Hibernate, Top-Link etc. We will talk about these in detail some other time. Though I have worked upon DAOs, EJBs and Hibernate , I do not have a suffiecient technical knowledge to make a fair comparision between them.
You should also make a decision on application server, web browser, database etc. in this step.
6. Setup the development environment
Now it is time to setup the environment, that is install the application server, a database, a code repository, a build tool, installation of IDE, JDK etc. If you don't know on what to chose, take a look on list below.
Application Server - JBoss, Resin, Orion, WebLogic etc. (Weblogic- My fav.)
Code Repository - VSS, CVS, Dimension etc. (WinCvs/Tortoise CVS - My Fav.)
Build Tool - ANT (I have never worked on any other.)
IDE - Intellij idea, Eclipse etc. (Eclipse is free, and IntelliJ idea is probably the best available.)
Database - Oracle, SQL, Access, File System etc. ( again I haven't worked on anything other than oracle.)
JDK version- 1.4.1.2, 1.5 etc.
Take some time to install all these properly on each of the machines that will be used for development. Datbase may be required to install on each machine.
In steps 4,5,6 you would have spent about 15% of project time. Good news is now you are going to start the coding.
7. Coding application
Things that you would like to remember here are that
- your team's interest is always intact.
- you have some redundancy between team members that is there is more than one person who knows a particular module.
- Everyone knows how his code is going to fit in the project.
- Do remember to write Junits to assist in code refactoring
This step will take about 35% of the project time.
8. Testing and Bug fixing
It will be good idea to keep experts in this area. But if you do not have that luxury, you should rotate team for the testing, that is to test the functionality of a module, you should ask people who have not coded that module. You should also keep a track on the number of bugs raised with the priority level and number of bugs resolved. One can use tools like BugZilla and Testdirector for this. Do remember to do performance testing of the application, with simulation of actual production environment.
Just one peice of advice, do keep suffiecient time for this step say about 15% of the project time.
9. Post production
Keep about 5% of time for this. One certainity - one would always face some issue(s) here. One uncertainity - Each issue would be new and quite unexpected. All I will say do not panic. Any issue(s) will be resolved with some night-outs.
With this I will conclude my article. I hope this would be of some help when you would lead your first project.
Article is meant to give a comprehensive view of activities involved in Software Development. It is written with Web Application in view. I will give little background about myself which will help you to put this information in perspective. I am a software engineer, working on Java/J2ee technologies in a service company. I am mostly involved in designing web-applications using Html, javascript, jsps, AJAX, Dwr, servlets, struts, DAOs, Hibernate, EJBs, web-services etc.. I am working on windows platform with oracle as database and weblogic as application server. IDE if talked anywhere will refer to eclipse.
So far, your marketting team have found a client, who is ready to invest his time and money with you to get one web-application running, which will be servicing his customers, providing them with newer features, more information about products/services and allow customers to order products with ease. If you want to know more about what the web-application is intended to do, talk to your marketting team and then to your client to get a bigger picture.
1. Know your Client
My company is a hundred percent subsidary of a US company. So to say that we already know who is our client and his core business, makes life much easier. If you don't have this information spend some time in getting to know your client first. Roam around his web-site to find out what kind of work he likes. Even we do it in order to get ideas on what prototypes should be proposed to our client.
2. Prototyping
Though not always software engineers have luxury to design prototypes, but if prototyping is done, then this is the right time for software engineers to know what exactly are the client's fantacies. This step gives an opportunity to development team to understand the business of the client, integration points with already established systems, to fix the scope of the project in large dimensions. On the other side it allows client to know what application would be delivered to him in the end. Thus this step is beneficial to both the sides, it avoids any disappointments for the client and any fantacy requirements for the development team. After this step both the sides know, what is it that development team is working on.
Though I have seen prototypes in excel, images, flow-diagrams also but I have found that using Html and Javascript for prototyping is the best approach. It not only provides a close simulation of the end-product but also saves a lot of time while coding Jsps. Most of the Html and Javascript can be reused for designing web-pages. I am adamant in using this approach, but well it doesn't always happen for eg: if prototypes are given to you from the client side. What do you do then? I will say put some people to start converting them to Html and Javascript.
Since we follow XP in our company, prototypes are not a fixed agreement between client and us but it allows us to save lots of effort in wrong directions. Some changes can always be incorporated while the actual development.
3. Estimation
This is the most critical step as far as your client and your own manager is concerned. Getting it right is like walking on an double edged sword. If you bloat your estimations too much, client will say that he can do away with this application this means loss of business for you, and if you are very aggressive here, that will mean late nights for you and your team in the office which will lead to loosing precious resources of the company (not many people realize but this loss is a good as loosing business).
But if you have done the prototyping or if you have well understood the prototypes, you should be able to come up with good estimates. Only experience can teach you this. This step itself can form a big topic for an article, I will take it some time. In one statement I would say that you should devide the work in small modules, define their inter-dependencies, integration points in these modules, keep some time for writting Junits, and some for bug fixing and ofcourse some time just to allow spare time (No body ever misses this).
Let us hope that your client is happy with your estimates and says a GO to the project.
In steps 1,2,3 you have already spent about 30% of total project time. Good news is you would know what exactly you are working on.
4. Know the production environment
Before moving ahead and deciding technologies that you will use for coding the web-application, you should spend some time to know the production environment where your application will be deployed. This will also allow you to de-select some technologies in the next step. Minimum things that you would be interested to know are database, web browser (with version), application server, clustered/non-clustered etc. Wiered restrictions would be faced if your client wants to deploy this new application on eon old system. You should talk to production team of the client to get some idea. If you are going to decide the production environment...... hmm I don't know I have never done that.
5. Deciding the technologies
Its now time to decide what technologies you would use to develop the application. Though every one takes the requirement in view to decide technlogies, one should also take into account about the abilities and knowledge of development team while deciding technologies.
Generally speaking you can devide the application in three parts.
First - Front End.
There are many technologies available, with Jsps being the most popular these days. But before making a decision one might take a look on spring framework, JSF and even servlets (if your pages are logic intensive.). You can even use combination of servlets and Jsps, this works great. I have been mostly using struts which is quite good and quite easy to work with. Though since I have not used many other technologies available, I am not in a position to compare struts with others. So untill unless I get sufficient time to study and learn any other frame work, or I do have some expert in team on other framework, I would like to use struts for frontend even if there are other technologies available which are a better fit to project requirements.
Second - Middle Layer.
Some would say there is hardly anything to decide over here, as every body uses Core Java in this layer. Yes it's true that evey one uses java only, but here you should architect your application as in give your modules a more concrete technical schema. You could think about design patterns to be used. You should think about level of security required. You must think about trasaction handling between two different systems. You would think about interacting with with older and already established systems of client. So though you are not deciding on what to use over here, but still there is considerable work on how to use Java to get a better performance and comprehensive code.
Third - Database Interation.
Hmmm, I always had difficult times on what to use for database interaction. There are so many technologies available with their pros and cons, that it just becomes a matter of comfirt as a prime factor when deciding technology here. Technologies available are DAOs, JDOs, EJBs, Hibernate, Top-Link etc. We will talk about these in detail some other time. Though I have worked upon DAOs, EJBs and Hibernate , I do not have a suffiecient technical knowledge to make a fair comparision between them.
You should also make a decision on application server, web browser, database etc. in this step.
6. Setup the development environment
Now it is time to setup the environment, that is install the application server, a database, a code repository, a build tool, installation of IDE, JDK etc. If you don't know on what to chose, take a look on list below.
Application Server - JBoss, Resin, Orion, WebLogic etc. (Weblogic- My fav.)
Code Repository - VSS, CVS, Dimension etc. (WinCvs/Tortoise CVS - My Fav.)
Build Tool - ANT (I have never worked on any other.)
IDE - Intellij idea, Eclipse etc. (Eclipse is free, and IntelliJ idea is probably the best available.)
Database - Oracle, SQL, Access, File System etc. ( again I haven't worked on anything other than oracle.)
JDK version- 1.4.1.2, 1.5 etc.
Take some time to install all these properly on each of the machines that will be used for development. Datbase may be required to install on each machine.
In steps 4,5,6 you would have spent about 15% of project time. Good news is now you are going to start the coding.
7. Coding application
Things that you would like to remember here are that
- your team's interest is always intact.
- you have some redundancy between team members that is there is more than one person who knows a particular module.
- Everyone knows how his code is going to fit in the project.
- Do remember to write Junits to assist in code refactoring
This step will take about 35% of the project time.
8. Testing and Bug fixing
It will be good idea to keep experts in this area. But if you do not have that luxury, you should rotate team for the testing, that is to test the functionality of a module, you should ask people who have not coded that module. You should also keep a track on the number of bugs raised with the priority level and number of bugs resolved. One can use tools like BugZilla and Testdirector for this. Do remember to do performance testing of the application, with simulation of actual production environment.
Just one peice of advice, do keep suffiecient time for this step say about 15% of the project time.
9. Post production
Keep about 5% of time for this. One certainity - one would always face some issue(s) here. One uncertainity - Each issue would be new and quite unexpected. All I will say do not panic. Any issue(s) will be resolved with some night-outs.
With this I will conclude my article. I hope this would be of some help when you would lead your first project.
0 Comments:
Post a Comment
<< Home