💻 SOFTWARE ENGINEERING – DETAILED NOTES
🧠 1. Introduction to Software Engineering
🔹 What is Software Engineering?
Software Engineering is the systematic, disciplined, and quantifiable approach to the development, operation, and maintenance of software.
Definition (IEEE):
“Software Engineering is the application of a systematic, disciplined, and quantifiable approach to the development, operation, and maintenance of software.”
🔹 Why Software Engineering?
- To manage large and complex projects
- To reduce cost and improve quality
- To ensure on-time delivery
- To make maintenance easier and cheaper
🧩 2. Software and Its Characteristics
🔹 Software Definition
Software = Programs + Documentation + Operating Procedures
🔹 Characteristics of Software
- Intangible (cannot be touched)
- Developed, not manufactured
- Does not wear out, but deteriorates with time (due to maintenance)
- Highly customizable
- Complex and error-prone
🧮 3. Software Crisis and Challenges
🔹 Software Crisis
Refers to problems faced during software development like:
- Late delivery
- Budget overrun
- Low quality
- Poor documentation
- Difficult maintenance
Causes:
- Increasing complexity
- Lack of management control
- Unclear requirements
- Inadequate testing
⚙️ 4. Software Development Life Cycle (SDLC)
🔹 Definition
The SDLC is a process used to design, develop, and test software.
🔹 Phases of SDLC
| Phase | Description |
|---|---|
| 1. Requirement Analysis | Identify what the system should do. |
| 2. System Design | Prepare architecture and design documents. |
| 3. Implementation (Coding) | Convert design into source code. |
| 4. Testing | Verify and validate software. |
| 5. Deployment | Install the system in real environment. |
| 6. Maintenance | Fix bugs and update as needed. |
🧱 5. Software Development Models
🔹 1. Waterfall Model
Sequential flow — each phase must complete before the next starts.
Phases: Requirement → Design → Coding → Testing → Maintenance
Advantages: Simple, easy to manage
Disadvantages: No feedback between phases, poor flexibility
🔹 2. Prototyping Model
Build a prototype (working model) to understand requirements.
Steps:
- Collect requirements
- Build prototype
- Evaluate prototype
- Develop final product
Used when: Requirements are unclear
🔹 3. Spiral Model (Barry Boehm)
Combination of Waterfall + Prototyping + Risk Analysis.
Each loop = One phase of development with risk evaluation.
Advantages: Good for large and high-risk projects
🔹 4. Iterative/Incremental Model
Software built in small increments — each release adds features.
Example: Agile Development
🔹 5. V-Model (Verification & Validation)
Each development phase has a corresponding testing phase.
| Verification | Validation |
|---|---|
| Requirement Analysis | Acceptance Testing |
| Design | System Testing |
| Coding | Unit/Integration Testing |
🔹 6. Agile Model
Iterative and adaptive process — continuous feedback and improvement.
Frameworks: Scrum, Kanban, XP
Advantages: Fast, flexible, customer-focused
🧠 6. Software Requirements Engineering (SRE)
🔹 Requirement Types
| Type | Description |
|---|---|
| Functional | Describe system behavior (e.g., login, search). |
| Non-functional | Describe quality (e.g., security, performance). |
| User Requirements | Natural language statements. |
| System Requirements | Detailed, formal specifications. |
🔹 Requirement Engineering Process
- Elicitation – Gathering requirements
- Analysis – Checking for conflicts/inconsistencies
- Specification – Writing SRS (Software Requirement Specification)
- Validation – Confirming requirements are correct
- Management – Handling changes
🔹 Software Requirement Specification (SRS)
A detailed document that defines what the software will do.
SRS Characteristics (IEEE 830):
- Correct
- Unambiguous
- Complete
- Consistent
- Verifiable
- Modifiable
- Traceable
🧩 7. Software Design
🔹 Goal
Convert requirements into a blueprint (design) for implementation.
🔹 Types of Design
| Type | Description |
|---|---|
| High-level Design (Architectural) | Defines modules and their relationships. |
| Low-level Design (Detailed) | Defines internal logic and algorithms. |
🔹 Design Concepts
- Abstraction – Ignoring details to focus on essentials
- Modularity – Dividing software into small components
- Coupling – Degree of interdependence between modules (low is better)
- Cohesion – How closely related functions in a module are (high is better)
- Data Hiding – Protecting internal data of modules
🔹 Design Tools
- DFD (Data Flow Diagram)
- ER Diagram (Entity-Relationship)
- Flowcharts
- UML Diagrams (Use Case, Class, Sequence, etc.)
🧮 8. Coding (Implementation Phase)
🔹 Coding Guidelines
- Use meaningful names
- Maintain indentation
- Write comments
- Follow coding standards (e.g., ISO/IEC 12207)
🔹 Programming Paradigms
- Structured Programming (C)
- Object-Oriented Programming (Java, C++)
- Functional Programming (Python, Scala)
🧾 9. Software Testing
🔹 Definition
Testing is the process of executing software to find and fix defects.
🔹 Levels of Testing
| Level | Description |
|---|---|
| Unit Testing | Test individual components (by developers). |
| Integration Testing | Test module interactions. |
| System Testing | Test entire system as a whole. |
| Acceptance Testing | Done by end-users. |
🔹 Types of Testing
| Type | Purpose |
|---|---|
| White Box Testing | Internal logic testing (code-based). |
| Black Box Testing | Functional testing without code knowledge. |
| Regression Testing | Ensures old features still work after changes. |
| Smoke Testing | Basic functionality test. |
| Alpha/Beta Testing | Pre-release testing by internal/external users. |
🔹 Test Case Design Techniques
- Equivalence Partitioning
- Boundary Value Analysis (BVA)
- Decision Table Testing
- State Transition Testing
🧩 10. Software Maintenance
🔹 Definition
Process of modifying a software product after delivery.
🔹 Types
| Type | Description |
|---|---|
| Corrective | Fix defects. |
| Adaptive | Adapt to environment changes. |
| Perfective | Improve performance or features. |
| Preventive | Prevent future problems. |
Note: Maintenance consumes ~60% of total cost of a software product.
💰 11. Software Cost Estimation
🔹 Purpose
Estimate effort, time, and cost of software development.
🔹 Techniques
| Method | Description |
|---|---|
| Expert Judgment | Based on experience. |
| Algorithmic Models | Mathematical estimation (COCOMO, Putnam). |
🔹 COCOMO Model (Constructive Cost Model)
Effort (Person-Months):E=a×(KLOC)bE=a×(KLOC)b
Time (Months):T=c×(E)dT=c×(E)d
Where KLOC = Thousand Lines of Code
| Mode | a | b | Description |
|---|---|---|---|
| Organic | 2.4 | 1.05 | Simple projects |
| Semi-Detached | 3.0 | 1.12 | Medium complexity |
| Embedded | 3.6 | 1.20 | Complex systems |
🧠 12. Software Quality Assurance (SQA)
🔹 Definition
SQA ensures software meets quality standards and requirements.
🔹 Quality Attributes (ISO 9126)
| Attribute | Example |
|---|---|
| Functionality | Correct output |
| Reliability | Consistent results |
| Usability | Easy to use |
| Efficiency | Optimal performance |
| Maintainability | Easy to modify |
| Portability | Works on different platforms |
🔹 Verification vs Validation
| Verification | Validation |
|---|---|
| Are we building the product right? | Are we building the right product? |
| Ensures product meets design specs | Ensures product meets user needs |
🧾 13. Software Configuration Management (SCM)
🔹 Definition
SCM manages changes in software during development and maintenance.
🔹 Components
- Version Control
- Change Control
- Build Management
- Release Management
Tools: Git, SVN, Jenkins
🧱 14. Software Risk Management
🔹 Types of Risks
| Type | Examples |
|---|---|
| Project Risks | Budget, schedule issues |
| Technical Risks | Technology failures |
| Business Risks | Market failure, funding issues |
🔹 Risk Handling Steps
- Identify
- Analyze
- Prioritize
- Plan mitigation
- Monitor and control
🚀 15. Software Project Management
🔹 Responsibilities of Project Manager
- Planning
- Scheduling
- Resource Allocation
- Monitoring progress
- Risk handling
🔹 Tools
- Gantt Charts
- PERT/CPM Charts
- Project Management Software (MS Project, Jira)
🧮 16. Software Metrics
🔹 Definition
Measures used to quantify software attributes (quality, complexity, productivity).
| Metric Type | Example |
|---|---|
| Product Metrics | LOC, Cyclomatic Complexity |
| Process Metrics | Defect density, effort/time |
| Project Metrics | Cost, schedule, productivity |
🧩 17. Emerging Trends in Software Engineering
- Agile and DevOps
- Cloud-based development
- Microservices Architecture
- AI-assisted Coding (e.g., Copilot)
- Software Reusability & Component-based development
✅ 18. Summary Table
| Concept | Description |
|---|---|
| Software Engineering | Systematic approach to software dev. |
| SDLC | Life cycle from idea to maintenance |
| Models | Waterfall, Spiral, Agile, etc. |
| SRS | Document describing system requirements |
| Design | Blueprint of software |
| Testing | Ensures software correctness |
| Maintenance | Post-delivery modification |
| COCOMO | Cost estimation model |
| SQA | Ensures software quality |
| SCM | Version & change control |
| Metrics | Measure software performance |
