The field of software development is diverse. Software development isn’t all about the code. In fact, coding is a part of the overall development project lifecycle. Irrespective of the what kind of software application product being developed, outsourcing or not, there are a series of phases or processes that are carried out during the software application development. Companies, including outsourcing firms have between four and six phases for their projects.
The typical software development phases would be as follows.
The initiation phase is the approval process of the project details. Generally, it is when the project manager is defined and when it commences. Later on the next phases, the project manager’s effort along with other responsible individuals for the project will define the overall schedule and other project related needs.
In this phase, the work begins by establishing the different requirements for all necessary system elements and then allocating some to subset of these requirements to develop the software. This system is essential when software must be compatible with other elements such as databases, hardware and people. Systems engineering also include gathering of requirements at system level with a small amount of top-level design and analysis.
This phase begins by analyzing what exactly must be done to complete the project. After project initiation, the software development starts with the identification of the requirements noted in systems engineering phase and ends with the formal verification of the developed software in line with those requirements. The requirements gathering process is focused specifically on what type of software is being developed. To understand the nature of the programs to be built, the software engineer needs to understand the information domain for the software, as well as what are the required functions, different behavior, performance and interfacing. It is in this phase when the requirements are formally documented so it can serve as a solid foundation for the software engineering. This phase also defines the functionality and the performance of the proposed program and system.
Generally, it is the requirement analyst’s duty to take care of the requirements in any software development project. Based on the different types and levels of software requirements, the analyst prepares the document with different specifications for both onsite and offshore before and after the project transfer.
These are the requirements that specify how the software system should perform, how the data in the program can be manipulated.
These are the requirements supporting the primary and functional requirements. Non-functional characteristics like software quality can define the product output.
These are the requirements that define what the software system must do for the users or the market to perform their different tasks and objectives. Sometimes multiple user level requirements exist to satisfy more than one business requirement.
These are what define data or information flow from the software to different external devices available like fax, printer, shared resources and other software applications that are connected outside the main software product.
The are requirements that deal with system performance such as how the system should react in different instances and how should it respond to user interactions
These requirements deal with the manipulation of data and where it should be stored etc.
These requirements are the most important when the project is being sent overseas or offshore where security risks are very high. These requirements deal with all the possible security issues in the project
Requirements validation and management comes next. This is the last step in the process of requirements development where in the identified requirements are validated to ensure that they are clear, complete and are written correctly for customer satisfaction. This step may lead to iteration of the other steps in the software development process if there are gaps, defects and other issues. One of the validation mechanisms that can be conducted is peer evaluation of the document that contains requirement specification. Peer evaluation is known to have the highest priority in detection of possible software gaps and defects.
Requirements management is the tracking of the requirements from start to the deployment of the project. It is composed of different set of activities that will assist the project team to identify, track and control requirements and changes at anytime throughout the software development project. This also involves an analysis of the requested changes, approving or disapproving the changes needed, and implementation of those changes. Requirements management also takes care of keeping and tracking of consistent project plans and status in the ongoing software development process.
The design and development phase represent the “how” phase. It is the longest phase of the project and is the most expensive when it comes to cost. This is where most of the project expenses are allocated. The product architecture is developed, and this is also when the design is broken down into detailed information until the software modules can be specified and the coding process begun. Details on computer programming languages, environments, packages, machines, distributed architecture layering, application architecture, platform, memory size, algorithms, global type definitions, data structures, interfaces and many other engineering details are all established in this phase.
During the design phase, S/W Design Interface Analysis, S/W Design Evaluation, Software Design Traceability Analysis, and Test Plan Evaluation are also carried out. Depending on the design method being implemented, the design model comprises of a data design, an architectural design, component-level design and an interface design. Data objects are translated into data structures that reside within the software itself.
At a higher level of concept, data design may lead to the definition of a database architecture or a data warehouse. In software applications, the data architecture will have a profound influence on the software architecture that will process the data objects and structures. At the program component level, data structure design and the associated algorithms required.
Software testing has been identified as the basic form to identify defects for majority of software projects. In general, software testing is a one-step software process that is often viewed as destructive rather than constructive because of its nature. Software testing is also done as a defined process of software system execution to determine its compliance with the specifications noted during the first few phases.
Testing phase starts with creating different test cases to demolish the built software system. Once the coding has been done, the program testing begins. The software testing process focuses on the it’s logical internals, assuring that all possible statements have been tested, the functional externals are uncovering errors and ensuring that the defined data inputs will produce actual results that meet with required results. After the first phase of testing is done, the product is integrated into its operating environment. The phase typically ends when the users or clients signs off on the user acceptance or agreement results.
Any software engineering project can be tested in two different ways. First testing is to check whether each software function is all fully operational, while at the same time searching for errors in each different function. One good example of this is black box testing. Second testing is where the internal operations of defined functions are tested. This is most commonly known example of white box testing.
Unit testing begins at concentrating on each unit, function or component of the software system. Then the spiral progresses outwards to integration testing where the design and software architecture are tested and investigated carefully. Moving more outwards of the software system spiral, is the validation testing that concentrates on the validation of the different requirements against the software requirements that is being constructed. Finally, the system testing where the software built is tested together with the other components like hardware peripherals and shared resources that can be connected to the software once its ready for launch.
Deployment and maintenance phase are the installation of the software product into the different production environment available. The software project is officially over at this point and the finish product enters in the software maintenance period. Software will undergo different changes after it is delivered to the customer, so the software support and maintenance re-applies each time of the preceding phases of the existing program rather than a new one.
In some outsourcing environment, each phase starts with the same processes and ends with implementation of that phase in an outsourcing environment. When the total software application is developed and tested by the offshore team, the application is then deployed into a package and is finally sent to the client’s location for final testing. Field testing is usually done by the client’s personnel and the feedback is obtained and sent back to the service providers personnel from the client for next processing.
It is very important to choose the right software application development partner when it comes to outsourcing. Business must make sure that the partner they are working for offers maintenance and support services to avoid future conflicts in the product should the need arises.