I. INTRODUCTION TO SOFTWARE ENGINEERING
Software Crisis
-
Definition: Period (1960s-70s) marked by frequent project failures, budget/schedule overruns, and low-quality software.
-
Causes:
-
Increasing system complexity.
-
Inadequate project management and planning.
-
Unrealistic cost/time estimates.
-
Evolving requirements mid-project.
-
Shortage of skilled professionals.
-
-
Characteristics:
-
Cost exceeds budget.
-
Delays in delivery.
-
Poor reliability and performance.
-
User dissatisfaction.
-
Maintenance difficulties.
-
[!TIP]
Exam Focus: Common question: "What is software crisis? Explain with examples."
Example: Therac-25 radiation machine failures due to software bugs.
Software Product vs. Software Process
| Aspect | Software Product | Software Process |
|---|---|---|
| Definition | Tangible output (code, documentation). | Set of activities to develop the product. |
| Focus | Features, functionality, quality. | Methods, practices, tools, people. |
| Relationship | Product quality depends on process quality. | Process is means to produce the product. |
Software Life Cycle (SDLC)
-
Phases:
-
Requirement Analysis: Gather and analyze user needs.
-
System Design: Architecture and detailed design.
-
Implementation: Coding.
-
Testing: Verify and validate.
-
Deployment: Release to users.
-
Maintenance: Fixes, enhancements, adaptation.
-
-
Overview: Sequential or iterative flow; models organize these phases differently.
II. SOFTWARE PROCESS MODELS
Traditional/Linear Models
Waterfall Model
-
Phases: Requirements → Design → Implementation → Testing → Deployment → Maintenance (strictly sequential).
-
Advantages:
-
Simple, easy to understand.
-
Well-documented milestones.
-
Suitable for well-defined, stable requirements.
-
-
Disadvantages:
-
Inflexible; difficult to revisit earlier phases.
-
Late testing; defects found late are costly.
-
Not suitable for dynamic requirements.
-
[!TIP]
Also called Linear Sequential Model. Past papers frequently ask for advantages/disadvantages.
Prototyping Model
-
Types:
-
Throwaway Prototyping: Build prototype to understand requirements, then discard.
-
Evolutionary Prototyping: Build prototype and evolve into final system.
-
-
Applications: Unclear requirements, user interface design, proof-of-concept.
-
Advantages:
-
Early user feedback.
-
Reduces risk of misunderstanding requirements.
-
Users see tangible output early.
-
-
Disadvantages:
-
May lead to incomplete system if prototype is mistaken for final.
-
Excessive changes can increase cost.
-
Poorly managed prototypes may become final system with low quality.
-
Evolutionary Models
Spiral Model
-
Diagram:
DiagramCANVAS: A spiral diagram with cycles. Each cycle divided into four quadrants: (1) Objective Setting, (2) Risk Assessment, (3) Development and Validation, (4) Planning for next iteration. Radius indicates cost, angle indicates progress. -
Activities per Cycle:
-
Objective Setting: Define goals, alternatives, constraints.
-
Risk Assessment: Identify and resolve risks (e.g., feasibility, safety).
-
Development and Validation: Build next version (prototype or increment).
-
Planning: Review results, plan next iteration.
-
-
Advantages:
-
Risk-driven; explicit risk management.
-
Flexible; supports changes.
-
Suitable for large, critical systems.
-
-
Disadvantages:
-
Complex and costly.
-
Requires expertise in risk analysis.
-
May lead to indefinite iterations.
-
Incremental Model
-
Phases: Each increment goes through design, code, test; increments integrate to form final product.
-
Applications: Large systems, early user feedback, resource-constrained projects.
-
Advantages:
-
Early delivery of部分功能.
-
Easier to manage and test.
-
User feedback incorporated incrementally.
-
-
Disadvantages:
-
Requires careful planning of increments.
-
Integration challenges if architecture not robust.
-
Iterative Waterfall Model
- Waterfall with feedback loops between phases (e.g., testing → design). Allows refinement but retains sequential core.
Agile and Adaptive Models
Agile Process Model
-
Features:
-
Iterative and incremental.
-
Customer collaboration over contract negotiation.
-
Responding to change over following a plan.
-
Self-organizing teams.
-
-
Principles (Agile Manifesto):
-
Individuals and interactions over processes and tools.
-
Working software over comprehensive documentation.
-
Customer collaboration over contract negotiation.
-
Responding to change over following a plan.
-
-
Differences from Traditional Models:
-
Traditional: Plan-driven, sequential, fixed scope, heavy documentation.
-
Agile: Value-driven, iterative, flexible scope, minimal documentation, continuous feedback.
-
[!TIP]
Exam Question: "Illustrate the Agile Process Model and explain how it differs from traditional process models."
Key Point: Emphasize flexibility, customer involvement, and iterative delivery.
Extreme Programming (XP)
-
Practices:
-
Pair Programming: Two developers work together.
-
Test-Driven Development (TDD): Write test before code.
-
Continuous Integration: Frequent code integration.
-
Refactoring: Continuous code improvement.
-
Small Releases: Frequent, short iterations.
-
-
Advantages:
-
High code quality.
-
Rapid feedback.
-
Adaptable to changing requirements.
-
-
Disadvantages:
-
Requires high discipline and customer availability.
-
Not suitable for large distributed teams without adaptation.
-
Rational Unified Process (RUP)
-
Phases:
-
Inception: Define scope, business case.
-
Elaboration: Plan project, specify architecture.
-
Construction: Build product.
-
Transition: Deploy to users.
-
-
Disciplines: Business modeling, requirements, analysis & design, implementation, test, deployment, configuration & change management, project management, environment.
-
Iterative: Each phase has multiple iterations.
Specialized Models
Rapid Application Development (RAD)
-
Phases:
-
Requirements Planning: Identify scope, constraints.
-
User Design: Prototyping with user involvement.
-
Construction: Reuse components, automated tools.
-
Cutover: Implementation, training, conversion.
-
-
Applications: Time-critical projects, user-intensive systems (e.g., business apps).
-
Advantages:
-
Fast development (60-90 days).
-
High user satisfaction.
-
Reduced risk through prototyping.
-
-
Disadvantages:
-
Requires skilled, cohesive team.
-
Scalability issues for large systems.
-
Management commitment essential.
-
Component-Based Development Model
-
Definition: Build system from reusable components (e.g., libraries, services).
-
Process: Identify components → adapt/compose → integrate.
-
Advantages:
-
Reusability reduces development time.
-
Improved maintainability.
-
Higher quality through tested components.
-
-
Disadvantages:
-
Component availability and compatibility.
-
Integration complexity.
-
Process Improvement Frameworks
Capability Maturity Model (CMM)
-
Levels:
-
Initial: Chaotic, ad hoc.
-
Repeatable: Project management processes established.
-
Defined: Processes standardized across organization.
-
Managed: Measured and controlled.
-
Optimizing: Continuous process improvement.
-
-
Significance:
-
Provides roadmap for process improvement.
-
Higher maturity correlates with better quality, predictability, and cost control.
-
Used for vendor assessment and process benchmarking.
-
[!TIP]
Past Question: "Describe CMM and its significance in process improvement."
Remember: Levels 1-5 and key characteristics of each.
CMMI (Capability Maturity Model Integration)
-
Integrates multiple CMMs (e.g., software, systems engineering).
-
Representations:
-
Staged: Maturity levels (similar to CMM).
-
Continuous: Capability levels per process area.
-
-
Focus on process improvement across disciplines.
Process Customization and Improvement
-
Methods:
-
Tailor standard processes to project context (size, criticality, team).
-
Use metrics to identify bottlenecks.
-
Adopt best practices (e.g., code reviews, automated testing).
-
Continuous feedback and adaptation.
-
-
Impact on Software Quality:
-
Better fit to project needs → higher efficiency.
-
Reduced defects through improved practices.
-
Enhanced predictability and control.
-
III. REQUIREMENTS ENGINEERING
Types of Requirements
Functional Requirements
-
Definition: What the system should do (functions, features).
-
Examples:
-
"The system shall allow users to reset passwords."
-
"The system shall generate monthly sales reports."
-
Non-Functional Requirements
-
Definition: Constraints on system operation or qualities.
-
Types:
-
Performance: Response time, throughput (e.g., "Search results within 2 seconds").
-
Security: Authentication, authorization, encryption.
-
Usability: Ease of learning, efficiency (e.g., "New users shall perform tasks within 10 minutes").
-
Reliability: Mean time between failures (MTBF).
-
Maintainability: Ease of modification (e.g., "Code cyclomatic complexity < 10").
-
Portability: Ability to run on different platforms.
-
-
Examples:
-
"The system shall support 1000 concurrent users."
-
"All passwords shall be stored encrypted."
-
[!TIP]
Past Question: "Differentiate between functional and non-functional requirements with examples."
Key: Functional = behavior; Non-functional = constraints/qualities.
Requirements Elicitation
Techniques:
-
Interviews: One-on-one, deep dive into user needs.
-
Surveys/Questionnaires: Broad, quantitative data collection.
-
Workshops/Group Sessions: Collaborative brainstorming (e.g., JAD sessions).
-
Prototyping: Build mock-ups to clarify requirements.
-
Observation: Watch users in their environment to understand context.
-
Role: Identify explicit and implicit needs, constraints, and workflows.
Requirements Analysis and Specification
System Requirements Specification (SRS) Document
-
Structure (IEEE 830 standard):
-
Introduction: Purpose, scope, definitions, references.
-
Overall Description: Product perspective, user characteristics, constraints, assumptions.
-
Specific Requirements:
-
Functional requirements.
-
Non-functional requirements.
-
Interface requirements (user, hardware, software, communication).
-
Data requirements.
-
-
-
Characteristics of Good SRS:
-
Correct.
-
Unambiguous.
-
Complete.
-
Consistent.
-
Verifiable.
-
Traceable.
-
Modifiable.
(Blueprint mentions "INSPIRE Qualities" – likely a typo; standard is CUCVTM or similar.)
-
Use Case Modeling
-
Components:
-
Actors: Users or external systems interacting with the system.
-
Use Cases: Functional units from actor's perspective (e.g., "Withdraw Cash").
-
Relationships:
-
Association: actor-use case link.
-
Include: mandatory sub-use case (e.g., "Authenticate" included in "Withdraw").
-
Extend: optional extension (e.g., "Print Receipt" extends "Withdraw").
-
-
-
Creation Process:
-
Identify actors (primary, secondary).
-
Identify use cases (scenarios, goals).
-
Describe use cases (preconditions, postconditions, main flow, alternate flows).
-
Model relationships (include, extend).
-
-
Application in Requirement Analysis: Captures functional requirements in user-oriented way; basis for test case design.
Data Dictionary
- Role: Central repository defining all data elements, their types, formats, relationships, and constraints. Ensures consistency across requirements, design, and code.
Requirements Validation and Verification
-
Validation: "Are we building the right system?"
- Techniques: Reviews (inspections), Prototyping, Model checking (formal methods).
-
Verification: "Are we building the system right?"
- Techniques: Testing, code inspections, walkthroughs.
-
Difference: Validation checks requirements against user needs; verification checks implementation against requirements.
Requirement Traceability
-
Challenges:
-
Complexity of large systems with many requirements.
-
Changing requirements over time.
-
Lack of tool support or expertise.
-
Maintaining links across artifacts (requirements → design → code → tests).
-
-
Mitigation Strategies:
-
Traceability Matrix: Table linking requirements to design elements, code modules, and test cases.
-
Tools: Requirements management tools (e.g., IBM DOORS, JIRA with add-ons).
-
Standards: Follow IEEE 830 for SRS, establish traceability policies.
-
Unique IDs: Assign identifiers to requirements for tracking.
-
IV. SOFTWARE DESIGN
Design Fundamentals
Design Principles
-
Abstraction: Hide complexity, show essential features (e.g., interfaces).
-
Modularity: Divide system into manageable, independent modules.
-
Information Hiding: Encapsulate implementation details within modules.
-
Least Privilege: Minimize access rights for modules/users.
-
SOLID:
-
Single Responsibility: One reason to change.
-
Open/Closed: Open for extension, closed for modification.
-
Liskov Substitution: Subtypes must be substitutable for base types.
-
Interface Segregation: Many client-specific interfaces better than one general.
-
Dependency Inversion: Depend on abstractions, not concretions.
-
-
DRY: Don't Repeat Yourself – avoid code duplication.
Golden Rules of User Interface Design
-
Aesthetic: Visually appealing, professional.
-
Efficient: Minimize user effort, shortcuts.
-
Consistent: Uniform layout, terminology, behavior.
-
Forgiving: Prevent errors, provide easy recovery (undo).
-
User-centered: Design for user tasks and mental models.
Design Metrics
-
Coupling: Interdependence between modules.
-
Types: Content, Common, Control, Stamp, Data (least desirable to most).
-
Low coupling desirable for maintainability.
-
-
Cohesion: Relatedness within a module.
-
Types: Functional (best), Sequential, Communicational, Procedural, Temporal, Logical, Coincidental (worst).
-
High cohesion desirable.
-
-
Importance: Predict maintainability, testability, reusability; guide refactoring.
Design Approaches
Function-Oriented Design (Structured Design)
-
Steps:
-
Transform DFDs into structured charts.
-
Identify modules and their hierarchy.
-
Define module interfaces and data structures.
-
-
Data Flow Diagrams (DFDs):
-
Show data movement between processes, data stores, external entities.
-
Levels: Context (level 0), Level 1, etc.
-
-
Structured Charts: Hierarchical representation of module calls and data passing.
Object-Oriented Design
-
Concepts:
-
Objects: Instances with state (attributes) and behavior (methods).
-
Classes: Blueprints for objects.
-
Inheritance: Mechanism for hierarchy (subclass inherits from superclass).
-
Polymorphism: Same interface, different implementations (e.g., method overriding).
-
-
Comparison with Function-Oriented:
| Aspect | Function-Oriented | Object-Oriented |
|---|---|---|
| Primary Focus | Functions and data flow. | Objects and their interactions. |
| Encapsulation | Limited; data often global. | Strong; data and methods bundled. |
| Inheritance | Not present. | Key feature for reuse. |
| Polymorphism | Not inherent. | Natural via inheritance/interfaces. |
| Suitability | Procedural, data-flow driven systems. | Complex, evolving systems, GUI apps. |
Component-Based Design
-
Definition: Design using pre-built, reusable components (e.g., libraries, services, microservices).
-
Advantages:
-
Reusability reduces development time.
-
Improved maintainability (isolated components).
-
Faster development with off-the-shelf components.
-
Better quality through tested components.
-
Pattern-Based Design
-
Use of Design Patterns: Reusable solutions to common design problems.
- Examples: Singleton (single instance), Observer (publish-subscribe), Factory (object creation), MVC (separation of concerns).
Modeling with UML
UML Diagrams:
-
Use Case Diagram: Actors, use cases, relationships.
-
Class Diagram: Static structure (classes, attributes, operations, associations).
-
Sequence Diagram: Interactions over time (objects, messages, activation).
-
Collaboration Diagram: Interactions with links (similar to sequence, different notation).
-
State Diagram: State transitions of an object (states, events, actions).
-
Activity Diagram: Workflow or business process (actions, decisions, parallelism).
-
Deployment Diagram: Physical nodes (servers, devices) and artifacts (executables, files).
Application in Representing Software Architecture:
-
Multiple Views:
-
Logical View: Class diagrams, object model (static structure).
-
Process View: Sequence/activity diagrams (concurrency, behavior).
-
Physical View: Deployment diagrams (hardware, networking).
-
Scenarios: Use case diagrams (requirements, functionality).
-
Example: UML for Library Management System
-
Use Case Diagram:
-
Actors: Member, Librarian, System.
-
Use Cases: Borrow Book, Return Book, Search Catalog, Manage Inventory, Generate Reports.
-
Relationships:
-
"Borrow Book" includes "Authenticate User".
-
"Return Book" extends "Calculate Fine" if overdue.
-
-
-
Class Diagram:
-
Classes:
Book,Member,Loan,Librarian,Catalog. -
Attributes:
Book: ISBN, title, author;Member: ID, name, email. -
Operations:
Book: checkAvailability(),Member: borrowBook(). -
Associations:
MemberborrowsBookviaLoan(many-to-many).
-
[!TIP]
Past Question: "Create a UML diagram for a Library Management System and explain its components."
Answer: Draw use case and class diagrams; explain actors, use cases, classes, relationships.
Architectural Design
Architectural Styles:
-
Layered: Separate concerns into layers (e.g., presentation, business logic, data). Each layer uses services of layer below.
-
Client-Server: Client requests services from server (e.g., web app).
-
Pipe-and-Filter: Data flows through filters (e.g., compilers: lexical analysis → parsing → code generation).
-
Microservices: Independent, loosely coupled services communicating via APIs (e.g., REST).
Architectural Views:
-
Logical View: Class diagrams, object model.
-
Process View: Sequence/activity diagrams for runtime behavior.
-
Physical View: Deployment diagrams for hardware/software mapping.
-
Development View: Package/module organization (for developers).
V. SOFTWARE TESTING
Testing Fundamentals
Software Testing:
-
Objectives:
-
Find defects.
-
Ensure quality and reliability.
-
Build confidence in software.
-
Prevent failures in production.
-
-
Importance in QA: Integral part of quality assurance; verifies correctness and completeness.
Test Levels:
-
Unit Testing: Test individual units (functions, methods) in isolation. Usually by developers.
-
Integration Testing: Test interfaces and interactions between units/modules.
-
System Testing: Test complete integrated system against requirements.
-
Acceptance Testing: Validate with user/customer (User Acceptance Testing - UAT).
Test Plan:
-
Importance: Roadmap for testing; ensures coverage, resource allocation, and communication.
-
Components:
-
Test plan identifier.
-
Scope (in/out of scope).
-
Approach (techniques, tools, pass/fail criteria).
-
Resources (people, hardware, software).
-
Schedule (milestones, deliverables).
-
Risks and contingencies.
-
Static vs Dynamic Analysis:
-
Static Analysis: Examine code/document without execution.
- Examples: Code reviews, walkthroughs, static analysis tools (e.g., SonarQube, lint).
-
Dynamic Analysis: Execute program with test inputs.
- Examples: Unit testing, system testing, performance testing.
Test Design Techniques
Black-Box Testing
-
Based on requirements, no knowledge of internal code.
-
Equivalence Partitioning:
-
Divide input domain into equivalence classes (valid and invalid).
-
Rule: For each valid class, one test; for each invalid class, one test.
-
Example: Input age (1-120). Classes: valid [1,120]; invalid: <1, >120. Test cases: age=30 (valid), age=0 (invalid), age=121 (invalid).
-
-
Boundary Value Analysis (BVA):
-
Test edges of partitions (boundaries).
-
Rules: For range [a,b], test a-1, a, a+1, b-1, b, b+1.
-
Example: Age 1-120 → test 0,1,2,119,120,121.
-
Often finds off-by-one errors.
-
[!TIP]
Past Question: "What is Boundary Value Analysis? Explain with example."
Key: Always test just below, at, and just above boundaries.
White-Box Testing
-
Based on code structure (control flow, data flow).
-
Statement Coverage: Execute every statement at least once.
-
Branch Coverage: Execute each branch (true/false) at least once.
-
Path Coverage: Execute all possible paths (often infeasible for large programs).
-
Example:
if x > 0: print("Positive") else: print("Non-positive")- Branch coverage requires tests for x>0 (true) and x<=0 (false).
Test Oracles
-
Definition: Mechanism to determine if test output is correct.
-
Types:
-
Specified: Derived from requirements/specifications.
-
Derived: From similar systems or models.
-
Heuristic: Based on experience or rules of thumb (e.g., "no crashes").
-
Test Case Design
-
Criteria: Input, expected output, preconditions, postconditions.
-
Example for Login Module:
| Test ID | Input | Expected Output | Test Condition | |-------------|-------------------------|-----------------------------|--------------------------| | TC01 | valid user, valid pass | Login successful, redirect | Normal flow | | TC02 | valid user, invalid pass| Error message "Invalid pass"| Invalid password | | TC03 | empty user, valid pass | Error "User required" | Empty field validation |
Integration and System Testing
Integration Testing Strategies:
-
Top-Down: Start from top modules, use stubs for lower modules. Advantage: early demonstration of major functions. Disadvantage: stubs may be complex.
-
Bottom-Up: Start from bottom modules, use drivers for upper modules. Advantage: early testing of low-level functions. Disadvantage: drivers needed.
-
Sandwich: Combination of top-down and bottom-up (test middle layer first).
-
Big-Bang: Integrate all modules at once. High risk, hard to debug; rarely used.
System Testing Types:
-
Functional: Verify features against requirements.
-
Performance: Load, stress, scalability testing (e.g., JMeter).
-
Security: Vulnerability scanning, penetration testing.
-
Recovery: Failover, backup/restore testing.
-
Usability: User-friendliness, accessibility.
-
Compatibility: With different OS, browsers, devices.
Acceptance Testing:
-
Alpha: In-house testing by developers or internal users.
-
Beta: At user site by real users (field testing).
-
Contract: Per contract specifications (legal).
-
Regulation: Compliance with laws/standards (e.g., FDA, GDPR).
Test Metrics and Tools
Test Metrics:
-
Purpose: Measure testing progress, effectiveness, product quality.
-
Types:
-
Size: Lines of Code (LOC), Function Points.
-
Effort: Person-hours, cost.
-
Coverage: Requirements coverage, code coverage (statement, branch).
-
Defect Density: Defects per KLOC (thousand lines of code).
-
-
Product vs Process Metrics:
-
Product Metrics: Measure the software (defect density, complexity, reliability).
-
Process Metrics: Measure the development process (effort, cost, schedule, defect removal efficiency).
-
Testing Tools:
-
Categories:
-
Unit Testing: JUnit (Java), NUnit (.NET), pytest (Python).
-
Integration/Functional: Selenium (web), Cucumber (BDD), Postman (API).
-
Performance: JMeter, LoadRunner.
-
Management: TestRail, Zephyr (test management).
-
VI. SOFTWARE PROJECT MANAGEMENT
Project Planning
-
Activities:
-
Scope Definition: Create Work Breakdown Structure (WBS).
-
Estimation: Cost, effort, schedule.
-
Scheduling: Assign tasks, dependencies, durations.
-
Risk Planning: Identify, assess, mitigate risks.
-
Quality Planning: Define quality standards, metrics.
-
-
Project Metrics: Track progress (e.g., earned value, defect density, schedule variance).
Estimation Techniques
Cost Estimation Methods:
-
Expert Judgment: Consult experienced individuals.
-
Analogous: Use historical data from similar projects.
-
Parametric: Use mathematical models (COCOMO, function points).
COCOMO Model
-
Categories:
-
Organic: Simple, familiar environment, small team (e.g., business app).
-
Semi-detached: Mixed environment, medium project (e.g., utility software).
-
Embedded: Tightly coupled with hardware, complex (e.g., real-time systems).
-
-
Effort Calculation:
$$ \boxed{E = a \times (KLOC)^b \times EAF} $$
Where:
-
$E$: Effort in person-months.
-
$a, b$: Constants (Organic: a=2.4, b=1.05; Semi-detached: a=3.0, b=1.12; Embedded: a=3.6, b=1.20).
-
$KLOC$: Thousands of lines of code.
-
$EAF$: Effort Adjustment Factor (product of 15 cost drivers, e.g., reliability, complexity).
LOC-Based Estimation:
-
Advantages: Simple, based on historical data.
-
Disadvantages: Early estimation difficult; language-dependent; inaccurate for new paradigms (e.g., OO, component-based).
Effort and Schedule Estimation:
-
Putnam Model: $$\displaystyle \text{Effort} = \frac{(\text{Size})^{3/4}}{t^{3/4}} \times \text{constants} $$, where $t$ is time.
-
Function Points: Measure functionality independent of language. Calculate based on:
-
Inputs, Outputs, Inquiries, Files, Interfaces.
-
Weighted by complexity (simple, average, complex).
-
Adjusted by Influence Factors (14 factors like data communications, distributed processing).
-
Scheduling and Tracking
Steps:
-
Task Decomposition: Break project into tasks (WBS).
-
Dependency Identification: Determine task order (PERT/CPM).
-
Duration Estimation: Estimate time per task.
-
Critical Path: Longest path determines project duration; tasks on critical path have zero slack.
-
Resource Allocation: Assign people, tools.
Tools:
-
Gantt Charts: Bar chart showing tasks over time.
-
PERT: Probabilistic, uses optimistic (O), most likely (M), pessimistic (P) estimates: $$\displaystyle \text{Expected Time} = \frac{O + 4M + P}{6} $$.
-
Project Management Software: MS Project, Jira, Asana.
Tracking Mechanisms:
-
Milestones: Key events (e.g., "Design Complete").
-
Earned Value Management (EVM):
-
PV (Planned Value): Budgeted cost for scheduled work.
-
EV (Earned Value): Budgeted cost for completed work.
-
AC (Actual Cost): Actual cost incurred.
-
CV (Cost Variance) = EV - AC.
-
SV (Schedule Variance) = EV - PV.
-
CPI (Cost Performance Index) = EV / AC.
-
SPI (Schedule Performance Index) = EV / PV.
-
Risk Management
Risk Identification:
- Techniques: Checklists, brainstorming, Delphi (anonymous expert consensus), SWOT analysis.
Risk Assessment:
-
Probability: Likelihood (0-1 or low/medium/high).
-
Impact: Severity (cost, schedule, quality impact).
-
Prioritization: Risk Matrix (plot probability vs impact); prioritize high-probability, high-impact risks.
Risk Mitigation Strategies:
-
Avoid: Change plan to eliminate risk (e.g., use proven technology).
-
Transfer: Shift to third party (e.g., insurance, outsourcing).
-
Mitigate: Reduce probability or impact (e.g., prototyping, training).
-
Accept: Acknowledge risk, have contingency plan (e.g., budget reserve).
Risk Information Sheet (format):
- Risk ID, Description, Probability, Impact, Priority, Mitigation Strategy, Owner, Status.
Feasibility Analysis
Types:
-
Technical: Can we build it with available technology?
-
Economic: Cost-benefit analysis, ROI, payback period.
-
Operational: Will users adopt it? Fit with existing processes?
-
Legal: Compliance with laws, regulations (e.g., data privacy).
-
Schedule: Can we meet deadline with available resources?
Outcomes: Feasibility report, recommendation (go/no-go decision).
Software Configuration Management (SCM)
Functions:
-
Version Control: Track changes to artifacts (code, docs). Tools: Git, SVN.
-
Change Control: Process for requesting, reviewing, approving, implementing changes.
-
Configuration Auditing: Verify compliance with specifications and standards.
-
Status Reporting: Report on configurations, changes, baselines.
Version Control Example with Git:
-
Repository: Central storage (e.g., GitHub, GitLab).
-
Branching: Create branch for feature/fix (
git branch feature-x). -
Merging: Combine branches (
git merge feature-x). -
Common Commands:
-
git clone <repo>: Copy repository. -
git add <file>: Stage changes. -
git commit -m "msg": Commit changes. -
git push: Upload to remote. -
git pull: Fetch and merge remote changes.
-
VII. SOFTWARE QUALITY ASSURANCE (SQA)
Quality Concepts
-
Definition: Conformance to requirements and fitness for use.
-
McCall's Quality Factors:
- Correctness, Reliability, Efficiency, Integrity, Usability, Maintainability, Flexibility, Testability, Portability, Reusability, Interoperability.
SQA Activities
-
Reviews: Formal Technical Review (FTR) – structured inspection of artifacts.
-
Audits: Independent evaluation of compliance with standards.
-
Testing: As described in Unit V.
-
Process Compliance: Ensure adherence to defined processes and standards.
Quality Metrics
-
Product Metrics: Measure the software product.
-
Defect density (defects/KLOC).
-
Complexity (cyclomatic complexity).
-
Reliability (MTBF – Mean Time Between Failures).
-
-
Process Metrics: Measure the development process.
-
Effort (person-months).
-
Cost.
-
Defect removal efficiency (DRE) = (Defects found before release) / (Total defects found).
-
Software Quality Standards
-
ISO 9001: Quality management systems – requirements for organizations.
-
IEEE Standards:
-
IEEE 730: SQA plans.
-
IEEE 829: Test documentation.
-
IEEE 830: SRS.
-
VIII. SOFTWARE MAINTENANCE AND EVOLUTION
Types of Maintenance
-
Corrective: Fix defects found after release.
-
Adaptive: Adapt to environment changes (OS, hardware, regulations).
-
Perfective: Enhancements, performance improvements, usability.
-
Preventive: Prevent future problems (e.g., refactoring, code cleanup).
Maintenance Process
-
Request Analysis: Receive and evaluate change requests.
-
Implementation: Design, code, unit test changes.
-
Testing: Regression testing to ensure no side effects.
-
Distribution: Deploy updated software.
-
Documentation: Update user manuals, release notes.
Re-engineering vs Reverse Engineering
-
Reverse Engineering: Analyze existing system to understand its structure and function. Output: models, documentation.
-
Re-engineering: Redesign and reimplement to improve quality (may include reverse engineering as first step).
-
Difference: Reverse is understanding; re-engineering is rebuilding.
Program Comprehension Techniques
-
Documentation: Read existing design docs, comments.
-
Debugging: Run and observe behavior.
-
Clustering: Group related code modules (e.g., by functionality).
-
Static Analysis Tools: Use tools to visualize structure (e.g., call graphs).
Software Evolution
-
Concepts: Software must evolve to remain useful in changing environment.
-
Strategies:
-
Spiral: Iterative evolution with risk analysis.
-
Incremental: Stepwise enhancements.
-
IX. SPECIAL TOPICS (From Past Papers)
Structured Methods
-
Overview: Use Structured Analysis (SA) and Structured Design (SD).
-
SA: DFDs, data dictionaries, structured English.
-
SD: Structured charts, module design.
-
-
Application: Traditional systems, data-flow oriented (e.g., business information systems).
Test Oracles
-
Definition: Source of expected results for test comparison.
-
Types:
-
Specified: From requirements/specs.
-
Derived: From similar systems or models.
-
Heuristic: Based on experience (e.g., "no crashes").
-
-
Example: For login test, specified oracle: "Valid credentials → success message."
Feasibility Analysis
- As in Section VI.
Test Case Design
-
Techniques: Equivalence partitioning, boundary value analysis, decision tables, state transition testing.
-
Best Practices:
-
Clear, concise, repeatable.
-
Traceable to requirements.
-
Independent (minimal dependencies).
-
Cover both positive and negative scenarios.
-
Object Models
-
In OOAD, three models:
-
Object Model: Static structure (classes, objects, relationships).
-
Dynamic Model: State changes (state diagrams, sequence diagrams).
-
Functional Model: Data transformations (data flow diagrams).
-
Component Model
-
Detailed: Component interfaces, contracts (pre/post conditions), reuse mechanisms.
-
Examples:
-
COM (Component Object Model): Microsoft binary standard.
-
EJB (Enterprise JavaBeans): Java component model.
-
.NET Assemblies: .NET component units.
-
-
Advantages: Reusability, maintainability, independent deployment.
Design Principles
-
Comprehensive List:
-
SOLID (as above).
-
DRY: Don't Repeat Yourself.
-
KISS: Keep It Simple, Stupid.
-
YAGNI: You Ain't Gonna Need It (avoid over-engineering).
-
Law of Demeter: Principle of least knowledge (talk only to immediate friends).
-
Traceability
-
In Requirements and Design: Link requirements to design elements and test cases.
-
Challenges: Changing requirements, complexity, tool support.
-
Mitigation: Traceability matrix, tools (e.g., IBM DOORS), unique IDs, standards (IEEE 830).