📚 Principles in Software Engineering
🔹 A Layered Technology
Software engineering is based on four layers:
1. Tools – Automated support for the process.
2. Methods – Technical steps to build software.
3. Process – Framework for managing projects.
4. Quality Focus – Ensures quality at every step.
🔹 Software Process Models
Frameworks for organizing software development. Key models include:
1. Linear Sequential Model (Waterfall)
Step-by-step phases: Requirements → Design → Implementation → Testing → Deployment.
Rigid and difficult to go back once a phase is complete.
2. Prototyping Model
Build quick prototypes → gather feedback → refine → final system.
Useful when requirements are unclear.
3. RAD Model (Rapid Application Development)
Emphasizes fast development using components and user feedback.
Ideal for time-constrained projects.
4. Evolutionary Process Models
Incremental Model: Build system in parts; each increment adds features.
Spiral Model: Combines design, prototyping, and risk analysis in iterative loops.
5. Agile Process Model
Flexible, iterative, and customer-focused.
Encourages early and continuous delivery.
6. Component-Based Development
Build systems using reusable components.
Reduces development time and increases reliability.
🚀 Agile Methodology
🔹 History of Agile
Born in response to rigid, slow traditional models.
Officially defined in 2001 with the Agile Manifesto.
🔹 Traditional vs. Agile Model
Feature Traditional Model Agile Model
Fixed Plan Yes No (flexible, adaptive)
Delivery One final release Frequent small releases
Customer Involvement Minimal Continuous
Change Handling Difficult Easy & expected
🔹 Classification of Agile Methods
XP (Extreme Programming)
Scrum
Kanban
Crystal
Lean
FDD (Feature-Driven Development)
ASD (Adaptive Software Development)
🔹 Agile Manifesto
"We value individuals and interactions over processes and tools..."
Four Core Values:
1. Individuals & Interactions > Processes & Tools
2. Working Software > Comprehensive Documentation
3. Customer Collaboration > Contract Negotiation
4. Responding to Change > Following a Plan
12 Principles support these values (e.g., early delivery, simplicity, motivated teams).
🔹 Agile Teams
Small, cross-functional, self-organizing.
Roles include:
o Product Owner: Defines vision & prioritizes tasks.
o Scrum Master / Coach: Facilitates process.
o Development Team: Builds and tests product.
🔹 Team Meetings and Ceremonies
Daily Stand-up: Quick updates.
Sprint Planning: Set sprint goals.
Sprint Review: Demonstrate working product.
Sprint Retrospective: Reflect and improve.
The 4 Key Agile Ceremonies
1. Sprint Planning
Purpose: Plan the work for the upcoming sprint.
Participants: Scrum Master, Product Owner, Development Team.
Agenda:
o Product Owner presents prioritized backlog items.
o Team discusses and estimates tasks.
o Team commits to a sprint backlog.
When: Beginning of each sprint.
Duration: 1–2 hours for a 2-week sprint.
2. Daily Standup (Daily Scrum)
Purpose: Daily sync on progress and blockers.
Participants: Scrum Master, Product Owner, Development Team.
Agenda:
o What did I do yesterday?
o What will I do today?
o Are there any blockers?
When: Daily, same time and place.
Duration: 15 minutes or less.
3. Sprint Review
Purpose: Demonstrate completed work and gather feedback.
Participants: Scrum Master, Product Owner, Development Team, Stakeholders.
Agenda:
o Team demos completed work.
o Stakeholders give feedback.
o Product Owner updates backlog.
When: End of each sprint.
Duration: 1–2 hours for a 2-week sprint.
4. Sprint Retrospective
Purpose: Reflect on the sprint and improve the process.
Participants: Scrum Master, Product Owner, Development Team.
Agenda:
o What went well?
o What didn’t go well?
o What can we improve?
When: End of each sprint.
Duration: 1–2 hours for a 2-week sprint.
🔹 Agile Drivers
Market demand for faster, flexible delivery.
Need for better customer involvement and product adaptability.
🔹 Capabilities and Values
Agile enables:
o Fast response to change
o Improved collaboration
o Higher product quality
o Better team morale
Core values:
o Communication, Feedback, Simplicity, Courage, Respect
Agile Processes – Quick Summary
🔧 1. Lean Production
Focuses on reducing waste and improving efficiency.
Delivers value quickly by avoiding non-essential work.
🌀 2. SCRUM
Work is divided into sprints (1–4 weeks).
Uses roles like Scrum Master, Product Owner, and Team.
Daily stand-up meetings, backlog, and regular reviews.
💎 3. Crystal
Lightweight, human-centered Agile method.
Adaptable based on team size and project criticality.
Focuses on communication and early delivery.
🌟 4. Feature Driven Development (FDD)
Develops software by building features (small, useful pieces).
Involves designing first, then building by feature.
🔁 5. Adaptive Software Development (ASD)
Focuses on speculation, collaboration, and learning.
Designed for complex and rapidly changing environments.
✅ 6. Test-Driven Development (TDD)
Write tests first, then write code to pass the tests.
Improves code quality and prevents bugs early.
🧾 7. Kanban
Visualizes work using a board (To-Do, In-Progress, Done).
Focuses on workflow efficiency and limiting work in progress.
🚀 8. Extreme Programming (XP)
Emphasizes frequent releases, customer feedback, and high code quality.
Practices: Pair programming, TDD, continuous integration.
📈 Agile Estimation & Project Management
📊 Agile Forecasting
Predicts progress and delivery time using historical data (like past sprint performance).
🧮 Velocity
Measures how much work a team can complete in a sprint (e.g., story points).
Helps plan future work more accurately.
🕒 Progress Tracking
Done via burn-down charts, task boards, and daily stand-ups.
✅ Track Done Pattern
Clearly defines what “done” means to ensure consistent progress.
Includes coding, testing, reviews, and deployment readiness.
🔮 Project Forecasting
Uses velocity and backlog to predict completion date and progress.
🎨 UX Design in Agile
UX is integrated early and iteratively.
Involves constant user feedback and prototyping.
🚀 DevOps: Overview
DevOps is a set of practices that combines development (Dev) and operations (Ops) to:
Automate and integrate the process of software development and IT operations.
Deliver applications and services faster and more reliably.
🔍 Importance & Benefits of DevOps
✅ Importance:
Bridges the gap between development and operations.
Reduces software release cycles.
Enables continuous delivery and integration.
💡 Benefits:
Faster time to market
Improved collaboration
More stable operating environments
Higher deployment frequency
Early detection and faster correction of issues
🧭 DevOps Principles & Practices
🌟 Core Principles:
1. Collaboration between Dev and Ops teams
2. Automation of the software delivery process
3. Continuous Integration and Continuous Delivery (CI/CD)
4. Monitoring and Feedback for improvement
5. Infrastructure as Code (IaC)
🔧 Common Practices:
Version control
Automated testing
Continuous deployment
Performance monitoring
🔄 7 C’s of DevOps Lifecycle (For Business Agility)
1. Continuous Development – Code planning & writing
2. Continuous Integration – Frequent code merging
3. Continuous Testing – Automated testing of builds
4. Continuous Deployment – Auto-release to production
5. Continuous Monitoring – Real-time performance checks
6. Continuous Feedback – From users and systems
7. Continuous Operations – Seamless, stable operations
🧪 DevOps and Continuous Testing
Ensures code quality at every stage of DevOps pipeline.
Testing happens parallel to development.
Types: Unit, Integration, Regression, Performance testing.
⚠️Challenges in DevOps Tool Selection & Implementation
Tool Selection:
Too many tools available, hard to integrate.
Choosing tools that match team skills and existing systems is tricky.
Implementation Challenges:
Resistance to cultural change
Skills gap in automation and cloud
Managing legacy systems
Ensuring security in CI/CD pipelines
📌 Mapping Applications to DevOps (Assessment)
Before applying DevOps:
Assess the app’s architecture (monolith vs microservices)
Evaluate automation feasibility
Identify dependencies
Define goals (speed, quality, reliability)
🛠 Study of Open Source DevOps Tools
Area Tools
Version Control Git, GitHub, GitLab
Area Tools
CI/CD Jenkins, Travis CI, CircleCI
Configuration Mgmt Ansible, Puppet, Chef
Containerization Docker
Orchestration Kubernetes
Monitoring Prometheus, Nagios, Grafana
Collaboration Slack, Mattermost
Testing Selenium, JUnit, TestNG
🧠 1. Impact of Agile Processes on Requirements Engineering (RE)
Traditional RE involves fixed, detailed upfront requirements.
In Agile, requirements are evolving and flexible.
Agile RE focuses on:
o Continuous user feedback
o Incremental updates
o Lightweight documentation
📌 Key Impact:
Requirements are gathered iteratively, not all at once.
Requirements evolve through conversation (not just documentation).
Heavy focus on working software over formal specs.
📋 2. Product Backlog
A Product Backlog is a prioritized list of all features, enhancements, and bug fixes.
Maintained by the Product Owner.
Each item is called a Product Backlog Item (PBI) and typically written as a User Story.
📌 Characteristics:
Dynamic and continuously updated.
Prioritized based on business value and risk.
🔄 3. Sprint Backlog
A Sprint Backlog is a subset of the Product Backlog selected for a Sprint.
Created during Sprint Planning.
Owned and managed by the Development Team.
Contains:
o Selected User Stories
o Tasks to complete them
🚀 4. Current Agile Practices in Requirements Engineering
User Stories and Story Cards as requirements
Backlogs to manage scope
Daily stand-ups to discuss requirements updates
Customer collaboration for refinement
Acceptance criteria used to validate requirements
Lightweight models (UML, BPMN) only if necessary
📈 5. Variance in Agile RE
Refers to the variability in requirements understanding and documentation across teams/projects.
Causes:
o Different stakeholder inputs
o Changing user needs
o Level of team agility
📌 Addressed by:
Continuous refinement
Short feedback loops
Working closely with stakeholders
🔄 6. Managing Unstable Requirements
Agile embraces changing requirements, even late in development.
Managed through:
o Short sprints (2-4 weeks)
o Regular grooming and refinement
o Close stakeholder collaboration
o Minimal upfront planning; focus on adaptability
🧑🤝🧑 7. Requirements Elicitation in Agile
Done through collaborative conversations.
Techniques:
o User interviews
o Workshops
o Brainstorming
o Observation
o Customer demos
o Feedback sessions
📌 Focuses on understanding real needs, not just stated needs.
📊 8. Agile Requirements Prioritization
Important due to time-boxed development.
Methods used:
o MoSCoW (Must have, Should have, Could have, Won’t have)
o Kano Model (Basic, Performance, Excitement features)
o Value vs. Risk Matrix
o Business Value Rating by Product Owner
🧾 9. Agile Requirements Modeling and Generation
Lightweight models are used only when needed.
Examples:
o UML diagrams for class, sequence
o BPMN for business processes
Generation is:
o Iterative
o Collaborative
o Kept simple and useful
🔁 10. Concurrency in Agile Requirements Generation
Requirements can be:
o Gathered
o Refined
o Implemented
concurrently
Agile supports parallel processing:
o One team works on current sprint
o Product Owner refines upcoming backlog
o QA prepares test cases simultaneously
🧾 11. User Stories – Specification and Formats
Format:
As a [role], I want [goal], so that [benefit]
o E.g., “As a student, I want to upload my assignment so that I can get it reviewed.”
📌 INVEST Criteria for good stories:
Independent
Negotiable
Valuable
Estimable
Small
Testable
🗂 12. Story Cards
Physical or digital cards representing user stories.
Typically includes:
o Title
o Description (user story format)
o Acceptance Criteria
o Priority
o Story Points
📌 Used during planning, stand-ups, and tracking.
✅ Summary Table
Concept Description
Product Backlog Full list of features and tasks, prioritized by the Product Owner
Sprint Backlog Selected items for the current sprint
User Stories Informal, conversational requirements
Story Cards Visual representations of user stories
Requirements Prioritization MoSCoW, Value-Risk Matrix, etc.
Modeling in Agile Lightweight, just enough documentation (UML, BPMN if needed)
Managing Changes Embrace change via short sprints, feedback, and backlog refinement
Requirements Elicitation Done through collaboration, not formal documents
Agile RE Practices Incremental, evolving, and user-centered
Concurrency in Requirement Multiple activities (gathering, refinement, implementation) happen in
Gen. parallel
✅ Agility Quality Assurance and Testing
📦 Agile Product Development & Quality Assurance
Quality is built-in, not added later.
QA is integrated into each sprint, not a separate phase.
Developers and testers collaborate continuously.
Feedback loops are fast and frequent through regular testing.
📊 Agile Metrics
Used to track progress, quality, and efficiency of development.
💰 Financial Metrics (in FDD):
Cost of Delay: Financial loss due to slow delivery.
ROI: Return on investment for each feature delivered.
Budget burn-down: Tracks actual vs. projected spending.
⚙️Production Metrics:
Velocity: Story points completed per sprint.
Lead Time: Time from idea to delivery.
Cycle Time: Time taken for a user story to go from start to done.
Defect Density: Number of defects per feature/module.
🔍 Agile Approach to Quality Assurance
QA is a shared responsibility (developers + testers).
Use of Test-Driven Development (TDD) and Behavior-Driven Development (BDD).
Continuous integration and automated testing ensure early defect detection.
Focus on preventing defects, not just finding them.
🧪 Types of Testing in Agile
Type Purpose
Functionality Testing Verifies if features work as expected.
UI Testing Tests layout, responsiveness, and user interface behavior.
Performance Testing Checks speed, load handling, and stability under pressure.
Security Testing Ensures system is protected against threats and vulnerabilities.
🧠 Agile Testing
🌟 Principles of Agile Testers
Continuous testing, not phase-based
Embrace change, adapt test cases
Test early and often
Collaborate with developers and customers
Provide fast feedback
🧭 Agile Testing Quadrants
Quadrant Type Focus
Q1 Unit & Component Tests Technology-facing, supports the team (TDD)
Q2 Functional Tests Business-facing, supports the team (automation, BDD)
Exploratory & Usability
Q3 Business-facing, critiques the product (manual testing, UI feedback)
Tests
Performance & Security Technology-facing, critiques the product (load, stress, vulnerability
Q4
Tests tests)
👉 Helps balance supporting the team vs. critiquing the product.
🤖 Agile Test Automation
Tests are written before or alongside code.
Frequent CI/CD cycles demand reliable test scripts.
Regression tests, unit tests, and smoke tests are usually automated.
Maintains fast feedback with less manual effort.
🧱 Test Automation Pyramid
Visual model that shows the ideal ratio of automated tests:
scss
CopyEdit
[ UI Tests ] <- Few (expensive & slow)
[ Integration Tests ]
[ Unit Tests ] <- Most (fast & reliable)
Focus on more unit tests (base),
Fewer integration and UI tests (top of pyramid),
Ensures efficiency and coverage.
🧪 Case Study – Selenium
What is Selenium?
A popular open-source tool for web browser automation.
Supports multiple browsers (Chrome, Firefox, Edge).
Supports multiple languages (Java, Python, C#, etc.)
Key Features:
Automates functional and regression testing.
Integrates with CI tools like Jenkins.
Can run tests in parallel using Selenium Grid.
Works with frameworks like TestNG, JUnit, and Cucumber.
Why Selenium in Agile?
Enables frequent, fast testing cycles.
Easy to integrate with Agile tools.
Reduces manual testing effort.
Supports cross-browser and cross-platform testing.
📝 Summary Table
Topic Key Points
Agile QA Continuous testing, TDD, CI/CD
Agile Metrics Velocity, lead time, defect density
Agile Testing Types Functional, UI, Performance, Security
Testing Quadrants Q1–Q4: Tech & business facing, supportive & critique
Test Automation Pyramid Focus on unit > integration > UI tests
Selenium Web test automation tool, supports CI/CD