Software Engineering Notes
Unit I: Introduction & Software Life Cycle Models
Software Engineering Discipline: Systematic approach to software development, including
requirement analysis, design, coding, testing, deployment, and maintenance.
Programs vs. Software Products: Programs are small-scale and often for personal use, while
software products are large-scale, reliable, well-tested, and maintained.
Why Study Software Engineering: Helps manage complexity, improves reliability, reduces
cost, increases efficiency, and ensures high-quality software products.
Emergence of Software Engineering: Emerged in the 1960s to tackle the 'software crisis'
(delays, cost overruns, poor quality).
Changes in Software Development Practices: Transition from ad-hoc coding to structured
methods, use of methodologies, CASE tools, agile practices.
Life Cycle Models:
- Classical Waterfall: Sequential phases, easy to understand but inflexible.
- Iterative Waterfall: Allows feedback between stages.
- Prototyping Model: Focus on building quick prototypes for user feedback.
- Evolutionary Model: Incremental development with continuous improvements.
- Spiral Model: Combines iterative development with risk analysis.
Comparison: Waterfall is rigid; Prototyping improves user involvement; Spiral handles risks
better; Evolutionary supports continuous delivery.
Unit II: Requirements Analysis and Specification & Software Design
Requirements Gathering and Analysis: Process of collecting and analyzing user needs to
ensure system meets expectations.
Software Requirements Specification (SRS): A formal document describing functional and
non-functional requirements.
Good Software Design: Should ensure modularity, low coupling, high cohesion, and easy
maintainability.
Cohesion: Degree to which elements of a module belong together.
Coupling: Degree of interdependence between modules (low coupling is desirable).
Design Approaches:
- Object-Oriented Design: Focuses on objects, encapsulation, inheritance, polymorphism.
- Function-Oriented Design: Focuses on functions, data flow, and transformations.
Unit III: Function-Oriented Software Design & User Interface Design
SA/SD Methodology: Structured Analysis and Structured Design, emphasizes systematic
decomposition of requirements.
Structured Analysis: Breaking down system into processes, data, and data stores.
Data Flow Diagrams (DFD): Graphical representation showing data flow and processing.
Structured Design: Uses modules and hierarchy to implement system functions.
Detailed Design: Specifies algorithms, data structures, and detailed logic.
User Interface (UI) Design:
- Characteristics of Good Interface: Simple, consistent, responsive, user-friendly.
- Types of User Interfaces: Command-line, menu-driven, graphical, natural language.
- Component-based GUI Development: Using pre-built UI components to develop
applications.
- User Interface Methodology: Iterative design, prototyping, user feedback.
Unit IV: Coding, Testing, Software Reliability & Quality Management
Coding: Writing program instructions with focus on readability, maintainability, and
efficiency.
Code Review: Peer-review process to improve quality and detect defects early.
Testing:
- Unit Testing: Testing individual modules.
- Integration Testing: Testing combined modules.
- System Testing: Testing the entire system against requirements.
- Black-box Testing: Tests functionality without looking at internal code.
- White-box Testing: Tests internal logic and code structure.
Debugging: Identifying and fixing defects in code.
Program Analysis Tools: Tools that check code quality, performance, and correctness.
Software Reliability: Probability of software working correctly under given conditions.
Statistical Testing: Using statistical methods to evaluate software reliability.
Software Quality: Ensures software meets requirements and user satisfaction.
Quality Management System: Policies and processes to maintain software quality.
SEI Capability Maturity Model: Framework for process improvement in software
development.
Personal Software Process (PSP): Focus on individual developers improving their work
quality.
Unit V: Computer Aided Software Engineering (CASE) & Software
Maintenance
Computer-Aided Software Engineering (CASE): Tools and techniques to support software
development and maintenance.
CASE Scope: Requirement analysis, design, coding, testing, maintenance.
CASE Environment: Integrated tools providing automated support for software
development.
CASE in Software Life Cycle: Helps in all phases of development.
Characteristics of CASE Tools: Automation, consistency, documentation, integration.
Second Generation CASE Tools: Advanced features like code generation, reverse
engineering.
Architecture of CASE Environment: Repository, tool integration, user interface.
Software Maintenance:
- Corrective Maintenance: Fixing bugs.
- Adaptive Maintenance: Updating software for new environments.
- Perfective Maintenance: Enhancing performance/features.
- Preventive Maintenance: Anticipating future issues.
Reverse Engineering: Analyzing software to extract design and specifications.
Software Maintenance Process Models: Models describing phases of maintenance activities.
Estimation of Maintenance Cost: Based on complexity, size, environment, and change
requests.