Class Notes – Software Engineering
Lecture 1 – Introduction to Software Engineering
Software engineering is the systematic application of engineering principles to the development of
software systems.
Topics:
- The software crisis and need for methodology
- Software process and lifecycle
- Difference between software engineering and programming
Discussion:
– Why documentation and process discipline matter.
– How poor design increases maintenance costs.
Lecture 2 – Software Development Life Cycle (SDLC)
The SDLC provides a structured approach for developing software.
Models:
- Waterfall model
- Incremental model
- Agile methodologies
- Spiral model
Each model balances predictability, flexibility, and feedback.
Lecture 3 – Requirements Engineering
Requirements define what a system should do.
Steps:
1. Elicitation – gathering needs from stakeholders
2. Analysis – resolving conflicts and prioritizing
3. Specification – writing formal documentation
4. Validation – ensuring accuracy and completeness
Tools:
– Use cases, user stories, requirements traceability matrix.
Lecture 4 – Software Design Principles
Design transforms requirements into architecture and components.
Key Principles:
- Modularity and abstraction
- Separation of concerns
- High cohesion and low coupling
- Design patterns (Singleton, Observer, Factory, etc.)
Example:
Design a modular library management system architecture.
Lecture 5 – Software Architecture
Software architecture defines the high-level structure of a system.
Architectural Styles:
– Layered architecture
– Client-server architecture
– Microservices and service-oriented architecture (SOA)
– Event-driven systems
Discussion:
– Trade-offs between scalability, maintainability, and complexity.
Lecture 6 – Software Testing
Testing ensures that software meets quality and functional requirements.
Testing Levels:
- Unit testing
- Integration testing
- System testing
- Acceptance testing
Concepts:
– Test-driven development (TDD)
– Automated testing and CI/CD pipelines
Lecture 7 – Project Management
Software project management involves planning, monitoring, and controlling software projects.
Topics:
– Work Breakdown Structure (WBS)
– Gantt charts and task estimation
– Risk management and mitigation
– Agile vs traditional management
Example:
Estimate project cost and schedule using function points.
Lecture 8 – Software Maintenance and Evolution
Maintenance includes correcting defects, improving performance, and adapting software to new
requirements.
Types:
1. Corrective
2. Adaptive
3. Perfective
4. Preventive
Notes:
– Most of software lifecycle cost occurs during maintenance.
– Version control systems are essential (e.g., Git).
Lecture 9 – Software Quality Assurance (SQA)
SQA ensures that all processes and deliverables meet defined quality standards.
Metrics:
– Reliability, efficiency, usability, maintainability
– Code coverage and defect density
Tools:
– Static analysis tools, linting, code reviews
Discussion:
– The role of QA in Agile environments.
Lecture 10 – Ethics and Professional Practice
Software engineers must adhere to professional ethics to ensure safety, fairness, and integrity.
Principles (ACM/IEEE Code of Ethics):
– Public interest
– Client and employer responsibility
– Product quality
– Professional competence
Final Remarks:
Software engineering is not only about code — it’s about responsibility, design, and sustainability.