SOFTWARE PROCESS ACTIVITY:
The four basic process activities of specification, development, validation and evolution are organised differently in different development processes. In the waterfall model, they are organised in sequence, whereas in evolutionary development they are interleaved. How these activities are carried out depends on the type of software, people and organisational structures involved.
Software specification:
A software requirement is defined as a condition to which a system must comply. Software specification or requirements management is the process of understanding and defining what functional and non-functional requirements are required for the system and identifying the constraints on the system’s operation and development. The requirements engineering process results in the production of a software requirements document that is the specification for the system.
There are four main phases in the requirements engineering process:
1. Feasibility study. In this study an estimate is made of whether the identified user needs may be satisfied using current software and hardware technologies. The study considers whether the proposed system will be cost-effective from a business point of view and whether it can be developed within existing budgetary constraints.
2. Requirements elicitation and analysis. This is the process of deriving the system requirements through observation of existing systems, discussions with potential users, requirements workshop, storyboarding, etc.
3. Requirements specification. This is the activity of translating the information gathered during the analysis activity into a document that defines a set of requirements. Two types of requirements may be included in this document: user (functional) requirements and system (non-functional) requirements.
4. Requirements validation. It is determined whether the requirements defined are complete. This activity also checks the requirements for consistency.
Software design and implementation:
The implementation phase of software development is the process of converting a system specification into an executable system through the design of system. A software design is a description of the architecture of the software to be implemented, the data which is part of the system, the interfaces between system components and, sometimes, the algorithms used. The design process activities are the followings:
1. Architectural design. The sub-systems of system and their relationships are identified based on the main functional requirements of software.
2. Abstract specification. For each sub-system, an abstract specification of its services and the constraints under which it must operate is defined.
3. Interface design. Interfaces allow the sub-system’ services to be used by other sub-systems. The representation of interface should be hidden. In this activity the interface is designed and documented for each sub-system. The specification of interface must be unambiguous.
4. Component design. Services are allocated to components and the interfaces of these components are designed.
5. Data structure design. The data structures used in the system implementation are designed in detail and specified.
6. Algorithm design. In this activity the algorithms used to provide services are designed in detail and specified.
This general model of the design process may be adapted in different ways in the practical uses.
A contrasting approach can be used by structured methods for design objectives. A structured method includes a design process model, notations to represent the design, report formats, rules and design guidelines. Most these methods represent the system by graphical models and many cases can automatically generate program code from these models. Various competing methods to support object-oriented design were proposed in the 1990s and these were unified to create the Unified Modeling Language (UML) and the associated unified design process.
Software validation:
Software validation or, more generally, verification and validation (V & V) is intended to show that a system conforms to its specification and that the system meets the expectations of the customer buying the system. It involves checking the processes at each stage of the software process. The majority of validation costs are incurred after implementation when the operation of system is tested.
The software is tested in the usual three-stage testing process. The system components, the integrated system and finally the entire system are tested. Component defects are generally discovered early in the process and the interface problems during the system integration. The stages in the testing process are:
1. Component (or unit) testing. Individual components are tested to ensure that they operate correctly. Each component is tested independently, without other system components.
2. System testing. The components are integrated to make up the system. This testing process is concerned with finding errors that result from interactions between components and component interface problems. It is also concerned with validating that the system meets its functional and non-functional requirements.
3. Acceptance testing. It is considered a functional testing of system. The system is tested with data supplied by the system customer.
Usually, component development and testing are interleaved. Programmers make up their own test data and test the code as it is developed. However in many process model, such as in V-model, Test Driven Development, Extreme Programming, etc., the design of the test cases starts before the implementation phase of development. If an incremental approach to development is used, each increment should be tested as it is developed, with these tests based on the requirements for that increment.
Software evolution:
Software evolution, specifically software maintenance, is the term used in software engineering to refer to the process of developing software initially, then repeatedly updating it for various reasons.
The aim of software evolution would be to implement the possible major changes to the system. The existing larger system is never complete and continues to evolve. As it evolves, the complexity of the system will grow. The main objectives of software evolution are ensuring the reliability and flexibility of the system. The costs of maintenance are often several times the initial development costs of software.