Software Processes
Requirements Engineering & Specification
Software specification is the process of establishing what services are requires and the constraints on the system’s operation and development.
Requirements Engineering Process
flowchart LR
fs([Feasibility Study]) --> re([Requirements Elicitation & Analysis]) <--> rs([Requirements Specification]) <--> rv([Requirements Validation])
fs --> fr[Feasibility Report]
re --> sm[System Models]
rs --> usr[User & System Requirements]
sm --> rd[Requirements Document]
usr --> rd
Software Design & Implementation
This is the process of converting the system specification into an executable system. This includes:
- Software Design
- Design a software structure that realises the specification.
- There are many tasks that comprise this section.
- Implementation
- Translate this structure into an executable program.
Design and implementation are closely related and may be inter-leaved.
Design Process Activities
- Architectural Design (Separating web service modules)
- Sub-systems making up the ystem and their relationships are identified and documented.
- Abstract Specification
- For each sub-system, an abstract specification of its operation constraints and services is produces.
- Interface Design
- For each sub-system, an unambiguous interface with other sub-systems is designed and documented.
- Components Design
- Services are allocated to components and the interfaces of these components are desgned.
- Data Structure Design
- The data structures used in the system implementation are designed in detail and specified.
- Algorithm Design
- The algorithms used in components to provide services are designed and specified.
Design Methods
Design methods are systematic approaches to developing a software design. This design is usually documented as a set of graphical models.
You could use the following types of model:
- Data-flow
- Entity relation attribute model.
- Structural Model
- Object Models
- State Transition Model (Showing system states and triggers)
Programming & Debugging
Programming should be an iterative activity where small pieces are written and testing is completed.
Testing
flowchart LR
ut[Unit Testing] <--> mt[Module Testing] <--> st[Sub-system Testing] <--> sst[System Testing] <--> at[Acceptance Testing]
subgraph Component Testing
ut
mt
end
subgraph Integration Testing
st
sst
end
subgraph User Testing
at
end
The prior stages are described as:
- Unit Testing - Individual components are tested.
- Testing classes.
- Module Testing - Related collections of dependent components are tested.
- Testing class integration.
- Sub-system Testing - Modules are integrated into sub-systems and tested. The focus here should be on interface testing.
- Testing classes as a service. An organised package or JAR library.
- System Testing - Testing of the system as a while. Testing of emergent properties.
- Whole system test.
- Acceptance Testing - Testing with customer data to check that it is acceptable.