Software Engineering Concepts
Laws of Software Evolution
The Laws of Software Evolution were proposed by Lehman and Belady. These laws describe how software
systems evolve over time and emphasize that software must adapt or risk becoming obsolete.
1. **Continuing Change** - Software must continuously evolve to remain useful.
2. **Increasing Complexity** - Software becomes more complex unless work is done to reduce it.
3. **Self-Regulation** - Evolution processes are self-regulating with predictable trends.
4. **Conservation of Stability** - Over time, the global activity rate in evolving software remains constant.
5. **Conservation of Familiarity** - Developers must limit the rate of system growth to maintain user
familiarity.
6. **Continuing Growth** - To remain useful, software must be enhanced with new functionality.
7. **Declining Quality** - Without maintenance, software quality degrades over time.
8. **Feedback System** - Software evolution is multi-level, multi-loop, and feedback-driven.
These laws help guide long-term software maintenance and planning.
W2H5 Framework
W2H5 is a structured framework for understanding all aspects of a situation or system in software
engineering.
- **What?** - What is the problem, task, or requirement?
- **Why?** - Why is it needed or important?
- **Who?** - Who are the stakeholders or users?
- **When?** - When should it be implemented?
- **Where?** - Where will it be used or deployed?
- **Which?** - Which components or tools are involved?
- **How?** - How will it be carried out?
Software Engineering Concepts
This framework is especially helpful in requirements gathering and project planning.
FURPS Model
FURPS is a model used to classify software quality attributes into functional and non-functional requirements.
- **F - Functionality**: Features, capabilities, and security.
- **U - Usability**: User interface, ease of use, and user support.
- **R - Reliability**: Uptime, recoverability, and accuracy.
- **P - Performance**: Speed, efficiency, and resource usage.
- **S - Supportability**: Maintenance, extensibility, and compatibility.
It ensures all quality aspects of a software system are covered.
Requirements Engineering
Requirements Engineering (RE) is the process of discovering, analyzing, specifying, validating, and
managing software requirements.
**Phases:**
1. **Elicitation**: Collecting needs via interviews, workshops, etc.
2. **Analysis**: Resolving conflicts and checking feasibility.
3. **Specification**: Documenting in an SRS (Software Requirements Specification).
4. **Validation**: Ensuring requirements match user needs.
5. **Management**: Tracking changes and maintaining traceability.
**Types of Requirements:**
- Functional: Specific behaviors or functions.
Software Engineering Concepts
- Non-functional: Performance, usability, etc.
- Domain: Constraints specific to the application area.
A well-executed RE process improves software quality and user satisfaction.
White Box Testing
White Box Testing involves testing internal structures or workings of an application, rather than its
functionality.
**Key Techniques:**
- Statement Coverage
- Branch Coverage
- Path Coverage
- Condition Coverage
- Loop Testing
**Pros:**
- Thorough testing of internal logic
- Detects hidden code-level bugs
**Cons:**
- Requires code knowledge
- Time-consuming
Typically performed by developers to verify correctness of logic and paths in the code.