# Development Environment

Development Environment
Usually in a software development environment the following components would be configured:
* An Editor [e.g. Eclipse]
* Version control system [e.g. SVN]
* A build tool [e.g. Ant]
* Continuous integration tool [e.g. Hudson]
* Bug Tracker [e.g. Bugzilla]
* Test Server and Release Management [e.g. a Linux server]
* Requirement collection and revision [e.g. Twiki]

## Over All Approach

Quality assurance is an important aspect of any development environment. At least 25% of resources should be focused on the quality aspect of the project. Especially in Agile development area this coordination and collaboration is important for better quality. The adage is there is always a scope for improving the quality of a product.
The following are the major development phases irrespective of any software development life cycle.
* Team setup and management
* Requirement Gathering
* High level design and Architecture model
* Estimation
* Low level design
* Define quality process
* setup development environment [as mentioned above]
* Coding and Testing
* User Acceptance Testing
* Deployment in production
* Monitoring and Maintenance

## Team Setup and Management

This is the most important and first step in the life of a project. If you select wrong people in to a team then that project would be in menace. So take care to select team members. Interview them for elimination and take only if they can not be avoided in any circumstances.
It has been noted that some incipient companies are taking only freshers and trying to run the project. It is not the right way, because it will result in very not rectifiable artifacts. So the entire project will slowly slip into failure.
The fundamental formula for Team Management is to get the commitment from the people. Make sure that they are not trying very hard to meet this target. We should inform them you have these much time and if you could complete before it is because of your smartness. This will ensure people who work in projects are morally motivated and they will try to produce their best. The result will most probably a win-win situation. It has very much important than hear the appreciation that one feels himself achieved something great.
Out of these phases usually people will ignore the quality procedures. But usually it will deserve a huge spending in later phases of the project to maintain the quality. This highlights the fact that the quality assurance plan and implementation is very vital to any development environment.

## Requirement Gathering

There should be a collaboration portal hosted to write the requirement on this as and when team collects the information. There can be various headings where people can put their comments and suggestions to have a better documentation over decisions and acceptances.
Authors are supposed to outline the topics and export word document with the same name but could be different versions as and when requirement changes. All artifacts in the design phase like DB model class diagram etc. can also be exported to this repository.

## High level design and Architecture model

In this phase resources will discuss the requirement and decide the technologies and platform to develop the application. There are four major software platforms for development.
* Java/J2EE
* .NET
* PHP
* Ruby
Based on these the architecture and components will differ. Java/J2EE platform is used for a kind of project having a development time of more than 3 years. .NET is comparatively quick but not recommended for more than 3 years of development time. PHP and ruby are for less than 1 year. But this may differ if we adopt any robust packages like ERP, CRM etc.
Nowadays we adopt n Tier architecture with various components.
* Presentation [Front end]
* Business [Middle layer]
* Data [Back end]
* logging [component]
* security [component]
* internationalization [component]
Usually Spring or Struts framework will be used for presentation layer. Business layer could be either Spring or EJB. Hibernate or JDBC is recommended for back end data persistence. Log4j for logging, Acegi for security and resource bundles / Locales for internationalization.
Usually Spring.NET or ASP.NET framework will be used for presentation layer. Business layer could be either Spring.NET or COM+. nHibernate or ADO.NET is recommended for back end data persistence. Log4net for logging, IIS config for security and ASPX for internationalization.
Web Services are a promising middle tier technology for both J2EE and .NET.

## Estimation

Functional point or Use Case Estimation technique is used for estimation.

## Low level design

The following UML diagrams are recommended for low level design
* Activity
* Collaboration
* Sequence
* class Diagram

## Define quality process

Prepare the plan and control the over all testing procedure. Usually the plans for the following tasks are to be documented and distributed to the team.
* Unit Testing
* Integration Testing
* QA acceptance Testing
* Functionality Testing
* UAT
* Frequent auditing
* Internal or Peer review
* External or Tech lead review

## Coding and Testing

Usually Quality specialists or Champions would have defined the process and procedure to be followed. They will make a frequent auditing also to ensure the adherence to the process. Developers will write the unit tests before they write the real code. Unit tests will be written using a unit testing framework like Junit or MbUnit. These test cases are frequently been reviewed and updated. The tests are collected to make test suits and will be executed for integration testing before release to QA. QA won't usually accept any delivery which does not have sufficient test coverages. There are lot of plug-ins available for almost all kind of editors. These plug-ins can measure not only the test coverage but also the coding quality and documentation inside the code.

## User Acceptance Testing

Tests are executed by the business owners. They usually use a test framework like Selenium for recording and playing fast. It is a business objective or acceptance criteria to have the compatibility to run any UAT tests by end of the day.

## Deployment in production

Usually Continues integration system will make the builds on regular intervals and which are ready to be deployed. These builds are tested and released on a nightly or weekly basis depends on the project complexity and size.

## Monitoring and Maintenance

There are application level plug-ins available to monitor the application server performance. The log files will give the details of most time consumed process or queries against DB. There can also have OS level tools deployed to monitor various plug-and play hardware and software components in the system.