Software Engineering Overview and Principles
Software Engineering Overview and Principles
Software is the set of programs, procedures, algorithms and documentation that enable computers
to perform specific tasks. It acts as the bridge between the user and hardware, controlling computer
operations and facilitating meaningful use of the system.
Characteristics of Software
Software cannot be touched or physically measured.
Software is developed through design and logic rather than physical assembly.
Software does not deteriorate like hardware; however, it may become obsolete due to changes
in user needs or technology.
Software can be tailored to meet specific requirements.
Software are often more complex than hardware systems due to logical interdependencies.
Components of Software
1. Programs: A set of instructions that perform specific tasks.
2. Data: Information processed by programs.
3. Documentation: Manuals, help files, and instructions that describe how to use or maintain
the software.
4. Configuration files: Parameters that control software behavior.
Software Engineering
Software Engineering is the systematic, disciplined, and quantifiable approach to the design,
development, operation, and maintenance of software.
It applies engineering principles to software creation with the goal of producing reliable, efficient, cost-
effective, and maintainable software.
Definition (IEEE Standard):
Software engineering is the application of a systematic, disciplined, quantifiable approach to the
development, operation, and maintenance of software.
1
Emphasis on quality assurance, testing, and maintenance.
Training and certification of software engineers.
Categories of Software
A. System Software
System software is a collection of programs designed to manage and control hardware resources and
provide a platform for running application software.
Purpose
It facilitates the communication between hardware and user applications, ensuring efficient operation
of the entire computer system.
Examples
Operating Systems (Windows, Linux, macOS)
Device Drivers
Utility Programs
2
Firmware
Network Management Systems
Functions of System Software
Manages memory, processes, and storage.
Controls input/output operations.
Provides user interfaces (CLI or GUI).
Facilitates networking and file management.
Enhances performance through optimization and diagnostics.
B. Application Software
Application software refers to programs developed to help users perform specific tasks or solve
domain-related problems using the computer system.
It operates on top of system software and is user-oriented rather than hardware-oriented.
Main Categories of Application Software
1. Games and Entertainment Software
o Designed for leisure and recreation.
o Includes computer games, video simulations, and multimedia entertainment.
o Examples: FIFA, Chess Titans, Candy Crush, PlayStation applications.
2. Intelligent Applications
o Utilize artificial intelligence (AI) techniques to automate reasoning and learning.
o Include expert systems, neural networks, business decision systems, and robotic vision
software.
o Examples: Chatbots, machine learning tools, medical diagnosis systems.
3. Modeling and Simulation Applications
o Used for scientific, educational, military, and training simulations.
o Provide virtual environments to analyze behavior without real-world risk.
o Examples: Flight simulators, financial modeling software, physics simulation packages.
4. Real-Time Applications
o Designed to process data instantly and provide immediate responses.
o Common in control systems, telecommunications, and industrial monitoring.
o Examples: Air traffic control systems, missile control, and embedded systems.
5. Productivity Applications
o Support office, business, and personal productivity tasks.
o Include word processors, spreadsheets, and project management software.
o Examples: Microsoft Office Suite, Google Workspace, Trello.
6. Web-Based Applications
o Operate through web browsers and require internet connectivity.
o Support e-commerce, communication, and content management.
o Examples: Gmail, YouTube, Facebook, Amazon, WordPress.
7. Educational Applications
o Facilitate teaching, learning, and training.
o Include school management systems, e-learning platforms, and educational games.
o Examples: Google Classroom, Moodle, Duolingo, Khan Academy.
8. Domain-Specific Applications
o Developed for specialized fields or industries.
o Examples include banking, hospital management, or airline reservation systems.
3
o Examples: Core Banking Systems, SAP ERP, Airline Ticketing Software.
The Software Development Life Cycle (SDLC) is the framework that describes the stages involved in
the creation of software from identifying user requirements to deployment and maintenance.
Requirements phase: This is the first and most crucial phase in software development. It involves
identifying, gathering, and documenting the needs and expectations of users and stakeholders.
Activities in this phase are
Conducting feasibility studies.
Gathering requirements through interviews, questionnaires, and observation.
Preparing a Software Requirements Specification (SRS) document.
System and Software Design Phase: At this stage, the system’s overall structure is defined. It
transforms the “what” from the requirement phase into the “how” of implementation.
Activities in this phase are Architectural design (high-level design), Detailed design (low-level design).
Database and interface design.
4
Implementation (Coding) Phase: This is where actual programming takes place according to the
design specifications.
Activities in this phase are
Writing code in appropriate programming languages (e.g., Java, Python, C++).
Following coding standards and conventions.
Performing unit testing on individual modules.
Testing Phase: Testing is performed to verify and validate that the software works as intended and
meets user requirements.
Types of Testing
Unit Testing: Testing individual modules.
Integration Testing: Testing combined modules.
System Testing: Testing the entire software system.
Acceptance Testing: Testing by end-users before final delivery.
Deployment (Installation) Phase: After successful testing, the software is installed and made
operational in the user’s environment.
Activities in this phase are
Installing the system on user hardware.
Configuring the system for operation.
Conducting user training.
Performing initial performance monitoring.
Maintenance Phase: Maintenance is the longest phase of the software life cycle, involving corrections,
updates, and enhancements after deployment.
Types of Maintenance
Corrective: Fixing bugs or defects found after delivery.
Adaptive: Modifying the software to adapt to new environments.
Perfective: Improving performance or adding new features.
Preventive: Anticipating and preventing future problems.
5
Each model selects or rearranges stages depending on project type and complexity.
1. Analysis Phase
Activities:
•Collect and analyze system requirements from stakeholders.
•Define functional and non-functional requirements.
•Prepare feasibility and cost-benefit analyses.
• Document user needs and expectations.
Deliverables:
• Software Requirements Specification (SRS) document.
• Feasibility report and initial project plan.
• Requirement validation report.
2. Design Phase
Activities:
• Transform requirements into a detailed system design.
• Develop architectural design (overall system structure).
6
• Create detailed design for each module, data flow, and interface.
• Review and validate design consistency and feasibility.
Deliverables:
• System Design Document (SDD) or Design Specification.
• Data models, UML diagrams, and interface designs.
• Prototypes (if applicable) for critical modules.
4. Testing Phase
Activities:
• Integrate all modules into a complete system.
• Conduct integration testing, system testing, and acceptance testing.
• Verify that the software meets all specified requirements.
• Detect and correct defects through iterative feedback.
Deliverables:
• Test plan and test cases.
• Bug/defect reports and test results summary.
• Verified and validated system ready for deployment.
5. Installation Phase
Activities:
• Deploy the tested system in the production environment.
• Configure the software to match user and hardware requirements.
• Conduct user training and prepare operation manuals.
• Obtain user acceptance and handover documentation.
Deliverables:
• Deployed software system.
• User manuals and training materials.
• System acceptance report.
6. Maintenance Phase
Activities:
• Monitor software performance in the user environment.
• Fix post-deployment bugs or performance issues.
7
• Implement updates, patches, and enhancements.
• Provide ongoing technical support and user assistance.
Deliverables:
• Updated software versions.
• Maintenance logs and issue tracking reports.
• Performance improvement documentation.
Characteristics
• Linear and sequential flow.
• Each phase has specific entry and exit criteria.
• Emphasizes documentation and milestone tracking.
• Ideal for predictable, low-risk projects.
In the diagram, prototyping is embedded within the Waterfall framework, allowing feedback loops
between requirements, specifications, and design stages.
8
Phases and Key Activities
1. Prototype Requirements Phase: involves gather preliminary requirements and identify the core
functionalities to be represented in the prototype.
Activities:
Conduct initial user interviews and feasibility studies to define basic needs.
Identify ambiguous, high-risk, or complex requirements suitable for prototyping.
Prepare an outline of system objectives, data inputs, processing needs, and expected outputs.
Define the scope and goals of the prototype—whether it will demonstrate user interfaces, system
performance, or critical functions.
Deliverables:
Preliminary requirements document
Prototype plan outlining key features and scope
2. Specification Phase involves translate user requirements into detailed system specifications
through iterative prototype feedback.
Activities:
Develop an initial prototype representing core functionalities or user interface elements.
Present the prototype to users for evaluation and feedback.
Modify and refine requirements based on user input until the desired clarity and
functionality are achieved.
Finalize Software Requirement Specifications (SRS) based on validated user needs.
Deliverables:
Revised prototype versions
Validated Software Requirement Specification (SRS)
User feedback documentation
3. Design Phase: involves create a system design that reflects the validated requirements from the
prototype.
Activities:
Transform approved requirements into system and software architecture designs.
9
Develop data models, interface designs, and workflow diagrams.
Reuse insights from the prototype (e.g., user interface layouts, process logic).
Review design for consistency and feasibility.
Deliverables:
System Design Document (SDD)
Data flow and architecture diagrams
Interface specifications
4. Coding (Implementation) Phase: involves convert the design specifications into executable code.
Activities:
Implement system modules using suitable programming languages.
Integrate prototype components where applicable.
Conduct unit testing for each module to ensure correctness.
Perform internal code reviews for optimization and standard compliance.
Deliverables:
Source code files
Unit test reports
Integrated build of the software system
5. Testing Phase involves validate the complete system against the specified requirements.
Activities:
Conduct integration, system, and user acceptance testing (UAT).
Verify that functionalities match those refined during the prototype stage.
Identify and correct defects or performance issues.
Ensure all user requirements are met satisfactorily before release.
Deliverables:
Test plan and test case documentation
Bug and defect reports
Verified and validated software product
6. Operations Phase involves deploy the finalized system into the operational environment and
provide ongoing support.
Activities:
Install the software on target systems.
Conduct user training sessions and deliver user manuals.
Provide post-deployment maintenance, updates, and enhancements.
Monitor system performance and address user feedback for improvement.
Deliverables:
Deployed system
User and training manuals
Maintenance and support reports
Feedback and Iteration Mechanism: The dotted feedback arrows in the diagram represent the
iterative nature of the prototype model within the Waterfall framework.
Feedback flows back from Design, Coding, and Testing to earlier stages (Specifications and
Requirements).
10
This ensures that errors, ambiguities, or missing requirements discovered later are corrected
promptly.
The prototype thus acts as a communication bridge between developers and users,
promoting a shared understanding of the system’s behavior before final implementation.
Limitations
Frequent prototype revisions may increase development time and cost.
Users may mistake the prototype for the final product.
Poorly managed prototypes can lead to scope creep.
Inappropriate for projects with well-defined, stable requirements.
11
Prioritized Requirements List.
Incremental Development Plan.
2. Incremental Design
Each increment is designed to integrate seamlessly with previous releases while maintaining system
scalability and modularity.
Activities:
Design the architecture to support modular expansion.
Define the design for each release (UI, database, and system logic).
Review design consistency with previous increments.
Deliverables:
Incremental Design Document.
Updated Architectural Blueprint.
Interface and Data Flow Diagrams.
3. Implementation (Development)
Development occurs in iterations, where each increment builds upon the previous one. Each
iteration produces a working system with new or improved functionality.
Activities:
Develop and code modules defined for the current increment.
Integrate with previously developed components.
Conduct unit and integration testing.
Record feedback for the next iteration.
Deliverables:
Executable Increment (partial product).
Source Code Repository.
Integration and Unit Test Reports.
5. Deployment (Release)
After testing, each increment is deployed for user evaluation and real-world use. This enables early
feedback and continuous improvement.
12
Activities:
Deploy the increment to the production or pilot environment.
Provide user training and operational support.
Collect user feedback for future iterations.
Deliverables:
Deployed System Increment.
User Manuals and Release Notes.
Feedback and Performance Reports.
13
Release 2: Medium priority requirements
- Requirements specification
- Design
- Implementation
- Integration
- Deployment
Advantages
Enables early delivery of a working system.
Supports user feedback and continuous improvement.
Reduces project risk by identifying issues early.
Easier to manage and test smaller increments.
High flexibility—new features can be added in later releases.
Disadvantages
Requires careful planning and integration management.
Frequent iterations may increase project complexity.
Continuous user involvement may not always be feasible.
Overall cost may increase due to repeated testing and deployment.
Use Cases
Web and mobile application development.
Government, healthcare, and educational systems needing phased rollouts.
Systems requiring early operational prototypes.
14
This model emphasizes risk analysis and management, making it highly suitable for large,
complex, and high-risk projects where requirements are not well understood from the
beginning.
The Spiral Model is represented as a spiral-shaped diagram where each loop represents a
development phase of the software. Each loop in the spiral corresponds to a phase in the
software process, and the spiral continues outward as the project progresses.
The model is divided into four quadrants, each representing a specific set of activities:
1. Determine objectives, alternatives, and constraints
2. Evaluate alternatives and manage risks
3. Develop and verify
4. Plan the next phase
As the development progresses through these quadrants, the software evolves through
continuous refinement and expansion.
Diagram Explanation
The attached Figure 2.4: Spiral Model for Software Development and Maintenance clearly
illustrates the cyclical nature of the process:
The radial dimension represents increasing cost and effort.
The angular dimension represents progress in completing each cycle.
Each loop corresponds to one iteration in the software process.
The risk management line shows the central role of risk analysis and prototype
evaluation throughout the process.
The spiral expands outward as the software evolves from the conceptual stage to a fully
developed system.
Iterative and Incremental: Software is developed in small, functional increments that evolve over
multiple iterations.
Continuous Feedback: Customer feedback is integrated at every stage of development.
Cross-Functional Teams: Developers, testers, and stakeholders work collaboratively.
Adaptability: Requirements can change even late in the project.
Time-Boxed Sprints: Each sprint (usually 2–4 weeks) results in a working product increment.
17
Phases of the Agile Development Model
1. Requirement Gathering and Planning
This phase begins with high-level requirements and user stories that define what the customer needs.
Unlike traditional methods, Agile does not freeze all requirements at the start. Instead, they are
continuously refined throughout the development process.
Activities:
Conduct stakeholder meetings to identify user needs.
Create Product Backlog (a prioritized list of features).
Define Sprint Goals and select items for the current sprint.
Formulate user stories and acceptance criteria.
Deliverables:
Product Backlog.
Sprint Backlog.
User Stories and Acceptance Criteria.
Initial Project Plan.
3. Development (Implementation)
The development phase focuses on coding the selected user stories for the sprint. Agile emphasizes
collaborative coding, pair programming, and daily communication to maintain progress and
transparency.
Activities:
Implement user stories assigned for the sprint.
Conduct daily stand-up meetings (Scrum meetings).
Maintain version control and continuous integration.
Update sprint backlog as tasks progress.
Deliverables:
Working Increment (functional product).
Updated Source Code Repository.
Sprint Progress Reports.
4. Testing
Testing is integrated throughout the sprint, not delayed until the end. Agile promotes test-driven
development (TDD) and continuous testing to ensure quality.
18
Activities:
Conduct unit, integration, and acceptance testing.
Automate regression testing where possible.
Collaborate between developers and testers for quick bug resolution.
Validate each user story against acceptance criteria.
Deliverables:
Tested Product Increment.
Test Reports and Defect Logs.
Updated Documentation and Test Cases.
Illustration
Agile Development Lifecycle Diagram
(The diagram will be inserted in the Word version as a labeled graphic.)
+---------------------------------------------------------------+
| Agile Development Lifecycle (Iterative) |
+---------------------------------------------------------------+
| 1. Requirement Gathering → 2. Design → 3. Development → 4. Testing → 5. Deployment |
| ↑ ↓ |
| ←←←←←←←←←←←←←←←← 6. Feedback & Retrospective ←←←←←←←←←←←
|
+---------------------------------------------------------------+
19
Each cycle (Sprint) delivers a working software increment ready for review.
Advantages
Delivers functional software quickly and frequently.
Highly flexible to changing requirements.
Promotes strong collaboration and transparency.
Early identification of defects and risks.
High customer satisfaction due to continuous involvement.
Encourages continuous improvement.
Disadvantages
Requires frequent customer involvement.
Difficult to predict final cost and timeline.
Documentation may be limited or less formal.
Demands skilled, self-disciplined teams.
Not ideal for very large or highly regulated projects without adaptation.
Use Cases
Dynamic projects with rapidly changing requirements.
Startups or innovation-driven product development.
Web and mobile app development.
Software-as-a-Service (SaaS) solutions.
Collaborative environments requiring quick market release.
Software Errors
Software error (or bug) is any defect, fault, or mistake in a program that causes it to produce incorrect
or unexpected results, or to behave in unintended ways.
In essence, an error occurs when the software does not do what it is supposed to do according to
requirements or specifications.
21
Software Reliability and Errors
The number and severity of errors affect software reliability defined as the probability that software
performs correctly over a specified time and environment.
To achieve high reliability: Minimize defects. Apply continuous testing. Implement preventive
maintenance.
Software Structure
Software structure refers to the organization or arrangement of components and modules within a
software system and how they interact to perform overall system functions. It is the skeleton or
framework that defines relationships among different parts of the software.
22
Characteristics of a Good Software Structure
Modularity: Software is divided into independent units for easier development and maintenance.
Cohesion: Each module performs a single, well-defined task.
Low Coupling: Modules interact minimally, reducing dependency.
Hierarchy: Clear organization from high-level to low-level components.
Scalability: Ability to add or modify features without major restructuring.
Software Architecture
Software architecture is the high-level structural design of a software system that defines its
components, their interactions, and the principles guiding its construction and evolution.
It serves as the blueprint for both system design and implementation.
Software Stakeholders
A software stakeholder is any individual, group, or organization that has an interest, influence, or
role in the software system during its development, operation, or maintenance.
Stakeholders can be internal (within the development organization) or external (outside users, clients,
or regulators).
24
As software systems become more complex and critical, well-trained and certified software engineers
are in high demand across industries.
Importance of Certification
Demonstrates professional credibility and expertise.
Enhances employability and career advancement.
Promotes global recognition and standardization.
Encourages lifelong learning and specialization.
Builds client and employer trust in the engineer’s competence.
Examples of Recognized Software Engineering Certifications
Certification Issuing Organization Focus Area
Certified Software Development IEEE Computer Society Professional software
Professional (CSDP) development skills
Certified Software Engineer Institute for Certification of General software engineering
(CSE) Computing Professionals (ICCP) competence
Microsoft Certified: Azure Microsoft Cloud-based software solutions
Developer Associate
Oracle Certified Java Oracle Corporation Java programming and
Programmer (OCJP) application development
Agile Certified Practitioner Project Management Institute Agile development
(PMI-ACP) methodologies
ISTQB Certified Tester International Software Testing Software testing and quality
Qualifications Board assurance
25
This involves:
Attending seminars, conferences, and workshops.
Engaging in continuous professional development (CPD) programs.
Reading research journals and industry publications.
Participating in professional associations such as ACM, IEEE, and NSE.
26
8. Self Engage in lifelong learning and professional development to maintain
competence and stay current with new technologies.
Software Process
A software process refers to the structured set of activities involved in developing a software product.
It describes how software is produced from requirements gathering to testing and maintenance.
Software Process Activities
1. Requirements Analysis: Understanding what the software should do.
2. Design: Structuring the system and components.
3. Implementation (Coding): Writing the program code.
27
4. Testing: Verifying and validating the software.
5. Deployment: Delivering the software to users.
6. Maintenance: Correcting errors and updating the system.
28
1. Correctness: The software must perform its functions accurately according to the user’s
requirements and specifications. No logical or computational errors. Produces correct and
expected results.
Example: A banking application must calculate account balances accurately.
2. Reliability: refers to the ability of software to operate without failure under specified conditions for
a specified period. It must not crash or produce inconsistent output. Critical in systems like
aviation, healthcare, or finance.
Example: Air traffic control software must operate reliably 24/7.
3. Efficiency: Software should use system resources optimally, including CPU time, memory, and
disk space. High performance with minimal resource usage. Efficiency ensures speed and
responsiveness.
Example: Mobile applications should perform well even on low-memory devices.
4. Usability: means the software is easy to learn, use, and navigate. Simple and clear interface.
Requires minimal user training.
Example: A learning management system (LMS) that teachers and students can use without much
training.
5. Maintainability: Software must be easy to modify, correct, or enhance after initial deployment.
Code should be modular, well-documented, and understandable. Reduces maintenance cost and
time.
Example: Updating a payroll system to include new tax rules.
6. Portability: is the ability of software to run on different hardware platforms or operating systems
with minimal modification.
Example: Software that runs on both Windows and Linux systems.
7. Reusability: means that parts of the software (modules, functions, or components) can be used in
other applications. Promotes productivity and reduces development cost.
Example: A login authentication module reused across multiple applications.
8. Flexibility: refers to the ease with which software can adapt to changing user needs or
environments. Software should allow configuration and extension without complete redesign.
Example: E-commerce software that can be updated to include new payment methods.
9. Security: Software must protect data and operations from unauthorized access, misuse, or
modification. Includes data encryption, authentication, and access control.
Example: Online banking systems must ensure secure transactions.
10. Testability: Software should be designed so that it can be easily tested for correctness,
performance, and reliability. Supports automated testing and debugging.
Example: Modular systems that can be tested unit by unit.
11. Scalability: is the ability of software to handle increasing workloads or users without performance
degradation.
Example: Cloud-based systems that support millions of users as demand grows.
12. Interoperability: means that software can communicate and exchange data with other systems or
applications seamlessly.
Example: A hospital management system that integrates with laboratory and pharmacy systems.
29
These pioneers helped transform computing from simple machine instructions to complex software
systems used in science, business, and society today.
Major Pioneers and Their Contributions
1. Charles Babbage (1791–1871) Known as the “Father of the Computer. Designed the Analytical
Engine, a mechanical general-purpose computer. His design introduced concepts such as control
flow, memory, and input/output — which later influenced software design.
Contribution: Laid the foundation for modern programmable computers.
2. Ada Lovelace (1815–1852) The world’s first computer programmer. Wrote the first algorithm
intended for Babbage’s Analytical Engine. Recognized that a machine could perform more than
just arithmetic.
Contribution: Introduced the idea of programming logic and symbolic computation. (The
programming language “Ada” was named in her honor.)
3. Alan Turing (1912–1954) Introduced the concept of the Turing Machine, a mathematical model
for computation. Defined the foundation of modern algorithm theory and artificial intelligence.
Played a crucial role in code-breaking during World War II.
Contribution: Established theoretical foundations of computing and algorithms.
4. John von Neumann (1903–1957) Proposed the Von Neumann Architecture, which became the
model for most modern computers. His architecture separates data and instructions and uses
stored-program concept. Contribution: Basis for the structure of modern computer systems.
5. Grace Hopper (1906–1992) Developed the first compiler that translated human-readable code into
machine code. Played a key role in developing COBOL (Common Business-Oriented Language).
Contribution: Simplified programming through high-level languages. (She is often called the
“Mother of Programming Languages.”)
6. Edsger W. Dijkstra (1930–2002) Pioneered structured programming and formal methods in
software development. Introduced the shortest path algorithm (Dijkstra’s Algorithm). Advocated
for mathematical rigor in software design.
Contribution: Improved program correctness and software reliability.
7. Frederick P. Brooks Jr. (1931–2022) Project manager for IBM’s System/360 and author of the
classic book “The Mythical Man-Month.” Emphasized that adding more people to a late project
makes it later (Brooks’ Law).
Contribution: Major influence on software project management principles.
8. Margaret Hamilton (born 1936) Director of the Software Engineering Division for NASA’s Apollo
project. Coined the term “Software Engineering.” Developed error-tolerant software that ensured
the success of Apollo 11’s lunar landing.
Contribution: Formalized software engineering as a disciplined profession.
9. Donald E. Knuth (born 1938) Author of “The Art of Computer Programming.” Created the TeX
typesetting system and developed algorithm analysis as a field.
Contribution: Advanced software algorithm efficiency and documentation standards.
10. Linus Torvalds (born 1969) Creator of the Linux operating system kernel, an open-source system
widely used globally. Promoted collaborative software development and open-source community
models.
Contribution: Revolutionized software sharing and collaborative engineering.
Summary of Pioneers
Pioneer Contribution
30
Charles Babbage Designed the first programmable computer concept
Ada Lovelace First computer programmer
Alan Turing Concept of algorithms and Turing Machine
John von Neumann Von Neumann architecture
Grace Hopper First compiler and COBOL
Edsger Dijkstra Structured programming
Frederick Brooks Software project management
Margaret Hamilton Coined “Software Engineering”
Donald Knuth Algorithm analysis and TeX system
Linus Torvalds Linux and open-source movement
Importance of Pioneers
Established the conceptual and theoretical foundation for computing.
Inspired generations of engineers and researchers.
Contributed to software reliability, structure, and development methodologies.
Helped shape software engineering into a recognized professional discipline.
31