What is Software Engineering?
Software Engineering is a systematic, disciplined, and quantifiable approach to the development, operation, and maintenance of software. It applies engineering principles to software development.
Software engineering encompasses all aspects of software production from initial conception to operation and maintenance. It focuses on producing high-quality software on time and within budget.
Software Development Life Cycle (SDLC)
SDLC Phases
- Requirements Gathering and Analysis
- System Design
- Implementation/Coding
- Testing
- Deployment
- Maintenance
Software Process Models
Waterfall Model
Characteristics: Linear sequential flow, each phase must be completed before next begins
Advantages: Simple, easy to understand, good for small projects
Disadvantages: Inflexible, difficult to accommodate changes
Iterative Model
Characteristics: Development in cycles, working version after each iteration
Advantages: Early working software, easier to manage risk
Disadvantages: Requires more resources, complex to manage
Spiral Model
Characteristics: Combines iterative and waterfall, emphasis on risk analysis
Advantages: High amount of risk analysis, good for large projects
Disadvantages: Complex, expensive, not suitable for small projects
Agile Model
Characteristics: Incremental, iterative development, customer collaboration
Advantages: Flexible, customer satisfaction, early delivery
Disadvantages: Less documentation, requires experienced team
Software Requirements
Types of Requirements
- Functional Requirements: What the system should do
- Non-Functional Requirements: How well the system performs its functions
- User Requirements: Statements in natural language of what services the system should provide
- System Requirements: Detailed description of the system services
Requirements Engineering Process
- Feasibility Study
- Requirements Elicitation
- Requirements Specification
- Requirements Validation
- Requirements Management
Software Design
Design Concepts
- Abstraction: Hiding complex details and showing only essential features
- Modularity: Dividing software into separately named and addressable components
- Information Hiding: Hiding implementation details from other modules
- Coupling: Degree of interdependence between software modules
- Cohesion: Degree to which elements inside a module belong together
Design Levels
Architectural Design
Identifies software as a system with many components interacting with each other.
High-level Design
Breaks down the system into smaller modules that can be coded and tested separately.
Detailed Design
Specifies the internal elements of all the modules defined in high-level design.
Software Testing
Software Testing is the process of evaluating a software item to detect differences between given input and expected output.
Testing Levels
Unit Testing
Testing individual components or modules of software
Performed by: Developers
Integration Testing
Testing integrated modules to verify combined functionality
Types: Big Bang, Top-down, Bottom-up
System Testing
Testing the complete integrated system
Includes: Functionality, Performance, Security testing
Acceptance Testing
Testing to verify if requirements are met
Types: Alpha testing, Beta testing
Testing Techniques
| Testing Type | Description | When to Use |
|---|---|---|
| Black Box Testing | Testing without knowledge of internal code structure | System testing, Acceptance testing |
| White Box Testing | Testing with knowledge of internal code structure | Unit testing, Integration testing |
| Gray Box Testing | Combination of black box and white box testing | Integration testing |
| Regression Testing | Testing to ensure new changes don't break existing functionality | After modifications or enhancements |
| Smoke Testing | Preliminary testing to check basic functionality | After build deployment |
Software Maintenance
Types of Maintenance
- Corrective Maintenance: Fixing bugs and errors
- Adaptive Maintenance: Adapting to new environments
- Perfective Maintenance: Improving performance and usability
- Preventive Maintenance: Preventing future problems
Software Quality Assurance
Quality Factors
- Correctness: Degree to which software meets specifications
- Reliability: Ability to perform required functions under stated conditions
- Efficiency: Amount of computing resources required
- Integrity: Protection from unauthorized access
- Usability: Effort required to learn, operate, and prepare input
- Maintainability: Effort required to locate and fix errors
- Portability: Ability to be transferred from one environment to another
Software Quality Standards
- ISO 9000: Quality management standards
- CMMI (Capability Maturity Model Integration): Process improvement approach
- Six Sigma: Data-driven approach to eliminate defects
Agile Methodologies
Agile Methodology is an iterative approach to software development that emphasizes flexibility, customer collaboration, and rapid delivery of working software.
Agile Principles
- Customer satisfaction through early and continuous delivery
- Welcome changing requirements
- Deliver working software frequently
- Business people and developers work together
- Build projects around motivated individuals
- Face-to-face conversation is best
- Working software is primary measure of progress
- Sustainable development pace
- Continuous attention to technical excellence
- Simplicity is essential
- Self-organizing teams
- Regular reflection and adaptation
Popular Agile Frameworks
| Framework | Description | Key Features |
|---|---|---|
| Scrum | Iterative framework with fixed-length iterations (sprints) | Sprints, Daily stand-ups, Product backlog |
| Kanban | Visual workflow management system | Kanban board, Work in Progress limits, Continuous delivery |
| Extreme Programming (XP) | Focus on technical excellence and customer satisfaction | Pair programming, Test-driven development, Continuous integration |
| Lean | Focus on eliminating waste and maximizing value | Value stream mapping, Just-in-time, Continuous improvement |
Software Project Management
Project Management Activities
- Project Planning: Defining objectives, scope, and resources
- Project Scheduling: Creating timeline and milestones
- Risk Management: Identifying and mitigating risks
- Quality Management: Ensuring quality standards
- Configuration Management: Managing changes to software
Software Metrics
- Size Metrics: Lines of Code (LOC), Function Points
- Complexity Metrics: Cyclomatic Complexity
- Quality Metrics: Defect Density, Mean Time to Failure
- Process Metrics: Productivity, Efficiency
Exam Preparation Tips
- Understand the differences between various software process models
- Memorize the phases of SDLC and their key activities
- Learn the types of software requirements and testing levels
- Understand agile principles and popular agile frameworks
- Be familiar with software quality factors and standards
- Practice numerical problems on software metrics
- Understand the concepts of coupling and cohesion
- Learn the types of software maintenance
- Be prepared to compare and contrast different methodologies
Important Software Engineering Concepts
Software Configuration Management (SCM)
Process of systematically managing changes to software to maintain integrity and traceability.
Risk Management
Process of identifying, analyzing, and responding to risk factors throughout the life of a project.
Software Reengineering
Process of examining and altering a system to reconstitute it in a new form.
Reverse Engineering
Process of analyzing a system to identify its components and their interrelationships.
Software Documentation
Written text that accompanies computer software explaining how to use or implement it.