GET 211 - Software Engineering Study Notes
GET 211 - Software Engineering Study Notes
COMPILED BY
DR ABOLADE OMIYALE
1
TOPIC 1: SOFTWARE ENGINEERING AS AN ENGINEERING DISCIPLINE
Introduction
At the undergraduate level, the most important conceptual shift is moving from “writing
programs” to “engineering software systems”. Programming emphasises syntax, logic, and
making code run. Software engineering expands this focus to include requirements analysis,
design structure, risk management, teamwork, lifecycle thinking, and professional
responsibility.
Conceptual Explanation
Unlike physical products, software does not wear out. Instead, problems arise from design
flaws and evolving requirements. Maintenance, therefore, involves modification rather than
repair. This characteristic makes software engineering heavily lifecycle-oriented, with
significant effort occurring after deployment.
This broader view reinforces the idea that software is a system asset rather than merely code.
2
Examples and Nigerian Context
Consider a Nigerian university portal used for course registration. From a programming
perspective, the goal may appear simple: allow students to select courses and submit forms.
From a software engineering perspective, the system must handle thousands of
simultaneous users, prevent duplicate registration, ensure data integrity, and remain
available during peak periods. These concerns require planning, architecture, testing, and
maintenance strategies beyond coding.
Similarly, digital payment platforms such as mobile transfer applications must maintain
reliability and security. A single software failure could result in incorrect debits or loss of
trust. Such systems demonstrate why software engineering practices exist.
Applications
This mindset is essential for large-scale systems such as smart waste management platforms,
e-government services, and digital health solutions increasingly deployed across Nigeria.
Summary
Exercises
Short-Answer Questions
Conceptual Questions
3
Application Question
A Nigerian polytechnic wants to build an online hostel allocation system. Identify three
software engineering considerations beyond coding.
Model Answers
Short Answers
Conceptual Answers
1. Software is intangible, and its defects arise from design rather than manufacturing
processes.
2. Constraints such as cost, time, and security force engineers to balance competing
system qualities.
Application Answer
4
TOPIC 2: SOFTWARE SYSTEMS AND ENGINEERING CONTEXT
Introduction
Software does not operate in isolation. Every software system exists within a broader
environment consisting of hardware, networks, human users, organisational policies, and
physical conditions. Failure to understand this context is a common cause of system
breakdown, even when code is technically correct.
Conceptual Explanation
System behaviour emerges from interactions among these elements rather than from
individual components alone. Consequently, a system may fail even when each component
works correctly.
Human behaviour adds additional complexity. Users may misinterpret instructions, make
mistakes, or use systems in unintended ways. Software engineering, therefore, adopts a
defensive design philosophy that anticipates user error and provides safeguards.
A Nigerian university registration portal may experience failure not because of faulty code
but because students attempt simultaneous access during course registration deadlines.
Network congestion, server overload, and user impatience create system stress that must be
anticipated during design.
Similarly, ATM systems integrate software, hardware, banking networks, and operational
procedures. A failure in any interface may lead to transaction inconsistencies, highlighting
the importance of system-level thinking.
5
Traffic control systems provide another example. Sensors detect vehicle movement,
software determines signal timing, and physical traffic lights execute commands. Timing
errors or incorrect assumptions may cause congestion or accidents, illustrating the safety
implications of software context.
Applications
Summary
Exercises
Short-Answer Questions
Conceptual Questions
1. Explain why correct software logic does not guarantee system success.
2. Discuss the role of human behaviour in software system reliability.
Application Question
6
Model Answers
Short Answers
Conceptual Answers
Application Answer
Free Resources
7
TOPIC 3: SOFTWARE PROCESSES AND LIFECYCLE MODELS
Introduction
Large software systems cannot be developed through improvisation. They involve many
developers, long timelines, evolving requirements, and significant risks. A software process
provides the structure that organises these activities and ensures predictable outcomes.
Without a defined process, development becomes chaotic, leading to missed deadlines,
rework, and poor-quality systems.
A software process is therefore a structured set of activities, roles, and artefacts that guide
how software is developed and maintained over time. It answers four fundamental questions:
what activities are performed, in what order they occur, who performs them, and what
outputs are produced.
Conceptual Explanation
The Software Development Life Cycle (SDLC) represents the phases through which a system
passes from conception to retirement. Typical phases include planning, requirements
analysis, design, implementation, testing, deployment, and maintenance. Lifecycle thinking
highlights that early decisions influence long-term system cost and quality, while
maintenance often dominates total project effort.
Traditional models assume stable requirements and sequential development. The Waterfall
model exemplifies this approach, where each phase must be completed before the next
begins. It is effective when requirements are well understood and regulatory documentation
is required, such as in payroll or inventory systems.
The V-Model extends the waterfall model by associating each development stage with a
corresponding testing stage. Requirements link to acceptance testing, design links to system
testing, and module design links to unit testing. This traceability is essential in safety-critical
systems.
8
Agile Thinking
Illustration
Applications
Process selection depends on project characteristics, including system complexity, risk level,
team size, and requirement stability. Choosing an inappropriate process can itself become a
cause of project failure.
Summary
Software processes transform development from ad hoc coding into disciplined engineering.
They provide coordination, risk control, and lifecycle awareness, enabling reliable system
delivery.
Exercises
Short Answer
Conceptual
Application
9
Model Answers
Short: Structured set of development activities; planning and testing; early feedback.
Conceptual: Early decisions influence long-term cost; Waterfall is sequential, while Agile is
adaptive.
Application: Agile, because requirements evolve and rapid feedback is needed.
Free Resources
10
TOPIC 4: AGILE DEVELOPMENT PHILOSOPHY
Introduction
Agile development recognises that change is inevitable in software projects. Rather than
resisting change, Agile embraces adaptability through iterative delivery and continuous
stakeholder collaboration.
Conceptual Explanation
Agile development operates in short cycles called iterations or sprints. Each iteration
produces a usable increment of the system. Collaboration with users ensures that evolving
requirements are incorporated early, reducing the risk of building irrelevant features.
Agile teams are typically small and cross-functional, promoting shared responsibility and
rapid communication. Documentation is kept lightweight, prioritising working software as
the primary measure of progress. Continuous testing and integration ensure that defects are
detected early.
Illustration
A fintech startup launching a savings application may adopt Agile to release core features
quickly, gather customer feedback, and iteratively enhance security and usability.
Applications
Summary
11
Exercises
Model Answers
Free Resources
12
TOPIC 5: PROTOTYPING MODEL
Introduction
When requirements are unclear, attempting full-scale development immediately can be risky.
The prototyping model addresses this challenge by creating simplified experimental
versions of the system that help stakeholders visualise functionality and refine expectations.
Conceptual Explanation
A prototype is an incomplete, quickly developed system created primarily for learning rather
than deployment. Its objective is to determine whether the proposed system meets user
needs. Prototypes emphasise interaction and workflow rather than performance or
completeness.
Throwaway Prototyping
Here, the prototype is built, evaluated, and discarded. Lessons learned guide the final design.
This prevents experimental code from contaminating production systems.
Evolutionary Prototyping
The prototype is gradually refined into the final product through continuous feedback and
incremental improvements. While this approach accelerates delivery, it risks architectural
weaknesses if early design decisions are poor.
Prototyping improves requirement clarity, enhances usability, and fosters user engagement.
However, stakeholders may misinterpret prototypes as finished systems, leading to
unrealistic expectations. Developers may also introduce shortcuts that accumulate technical
debt.
Illustration
Applications
13
Summary
Exercises
Model Answers
Free Resources
14
TOPIC 6: SOFTWARE DESIGN FUNDAMENTALS
Introduction
Software design is the intellectual bridge between requirements and implementation. Once
user needs have been understood, engineers must decide how the system will be organised
before writing code. This planning stage determines system structure, responsibilities of
components, and interactions among them. Many software failures arise not from poor
algorithms but from weak design decisions that create tangled logic, difficult maintenance,
and unreliable behaviour.
Conceptual Explanation
Modularity
Modularity divides a system into self-contained units called modules. Each module performs
a specific function and communicates through well-defined interfaces. Effective modular
design relies on:
This approach improves understanding, facilitates teamwork, simplifies testing, and reduces
maintenance effort.
Decomposition
Decomposition involves breaking complex systems into manageable parts based on logical
responsibilities. Proper decomposition prevents arbitrary divisions and ensures that system
structure reflects functional needs.
High-level design describes major subsystems and their interactions, answering the question,
“How is the system organised?” Low-level design provides details of algorithms, data
15
structures, and internal module logic. Weak high-level design often leads to poor system
quality regardless of low-level correctness.
Illustration
Consider a university portal system. A well-designed structure might separate:
Without this separation, changes in one area may affect others, increasing maintenance
difficulty.
Applications
Good design:
Design decisions influence system longevity and adaptability, making them critical
engineering responsibilities.
Summary
Exercises
Short Answer
Conceptual
16
Application
Design a modular structure for an online food delivery platform operating in [Link]
Answers
Software design structures solutions; modularity divides systems into independent units;
high-level defines structure, while low-level defines logic.
Conceptual: Systems may work but be difficult to maintain; high cohesion and low
coupling improve quality.
Application: Separate ordering interface, payment processing, delivery coordination, and
database modules.
Free Resources
17
TOPIC 7: SOFTWARE ARCHITECTURE
Introduction
Conceptual Explanation
Software architecture helps control complexity, manage risks, and support scalability. It
answers fundamental questions about system organisation and distribution of
responsibilities.
Architectural Styles
Layered Architecture
Divides the system into hierarchical layers such as presentation, logic, and data. Each layer
interacts only with adjacent layers, simplifying maintenance.
Client–Server Architecture
Clients request services while servers provide them. This model supports centralised data
management and multiple users.
Distributed Architecture
System components operate across multiple machines, improving scalability and reliability
but introducing network complexity.
Benefits
Good architecture:
18
Illustration
A national examination portal may use layered architecture for clarity, client–server
architecture for web access, and distributed architecture to support nationwide usage.
Architectural choices determine whether the system handles peak loads effectively.
Applications
Summary
Software architecture defines the overall structure of a system and shapes its long-term
behaviour. Thoughtful architectural decisions are essential for dependable large-scale
systems.
Exercises
Model Answers
Free Resources
19
TOPIC 8: SOFTWARE IMPLEMENTATION AS AN ENGINEERING ACTIVITY
Introduction
Implementation translates design into working code. However, coding is not merely writing
instructions; it is an engineering activity requiring discipline, structure, and communication.
Code reflects design decisions and becomes a long-term asset maintained by multiple
developers.
Conceptual Explanation
Readable Code
Readable code uses meaningful naming, consistent formatting, and simple logic. Because
maintenance often lasts longer than development, clarity reduces future errors and costs.
Structured Implementation
Breaking code into functions and modules maintains separation of concerns and simplifies
testing. Poor implementation may destroy good design by introducing unnecessary
dependencies.
Version Control
Version control systems manage changes, track history, and coordinate teamwork. They
allow recovery of previous versions and documentation of evolution.
Debugging
Illustration
A software team building a ride-hailing platform must use version control to coordinate
contributions from multiple developers and maintain code quality over time.
Applications
20
Summary
Implementation converts plans into reality while preserving design integrity. Engineering
discipline during coding ensures clarity, reliability, and long-term system sustainability.
Exercises
Model Answers
Free Resources
21
TOPIC 9: SOFTWARE TESTING AND QUALITY ASSURANCE
Introduction
A useful mindset for students is that untested software is incomplete engineering work. A
program may compile and produce results yet still contain hidden faults that appear only
under unusual inputs, heavy loads, or real-world usage conditions.
Conceptual Explanation
Testing exists because defects may arise from requirements misunderstandings, design
errors, or implementation mistakes. A defect (bug) is a flaw in design or code, while a failure
occurs when the system exhibits incorrect behaviour during execution. Not all defects
immediately cause failures; some remain dormant until triggered.
Levels of Testing
Unit Testing verifies individual modules or functions. Developers confirm that internal
logic behaves correctly in isolation.
Integration Testing evaluates interactions among modules, ensuring correct data flow and
interface compatibility.
System Testing examines the complete system against functional and non-functional
requirements such as performance, reliability, and usability.
Test Cases
A test case specifies inputs, expected outputs, and execution conditions. Testing compares
actual behaviour with expected behaviour defined in requirements. Any mismatch
indicates a defect.
22
Illustration
Consider an online result-checking portal used by examination bodies. Unit testing may
verify score calculation logic, integration testing ensures database retrieval works correctly,
while system testing confirms the portal handles thousands of simultaneous users during
result release.
Applications
Testing improves reliability, reduces maintenance costs, and protects users from system
failure. It is essential for financial platforms, e-learning systems, and public service
applications.
Summary
Software testing is a systematic verification process that detects defects early, enhances
reliability, and ensures engineering responsibility.
Exercises
Short Answer
Conceptual
Application
Model Answers
Testing verifies behaviour; a defect is a fault, while failure is incorrect behaviour; unit testing.
Conceptual: Compilation does not guarantee correctness; test cases provide systematic
verification.
Application: Unit tests for recharge logic, integration tests for payment gateway, system tests
for user experience.
23
Recommended Textbook Chapters
Free Resources
24
TOPIC 10: SOFTWARE MAINTENANCE AND EVOLUTION
Introduction
Software engineering does not end at deployment. Systems must evolve to remain useful as
requirements change, technologies advance, and defects are discovered. Maintenance,
therefore, represents a major portion of software lifecycle effort and cost.
Conceptual Explanation
Maintenance dominates lifecycle cost because systems often operate for many years while
requirements and technologies evolve. Early design decisions significantly influence
maintenance difficulty.
Technical Debt
Technical debt refers to shortcuts taken during development that increase future
maintenance effort. While sometimes unavoidable, unmanaged technical debt accumulates
and degrades system quality.
Illustration
A school management system initially designed for desktop use may later require mobile
access and cloud deployment. Adaptive maintenance supports this transition, while
perfective maintenance improves interface usability based on user feedback.
Applications
Summary
25
Exercises
Model Answers
Free Resources
26
TOPIC 11: HUMAN, ETHICAL, AND PROFESSIONAL ISSUES
Introduction
Software engineering decisions influence people, organisations, and society. Engineers must
therefore consider usability, security, privacy, and professional ethics. Technical
competence alone is insufficient without social responsibility.
Conceptual Explanation
Human Factors
Users may make mistakes or misinterpret instructions. Systems must therefore prioritise
usability, accessibility, and error tolerance.
Engineers are responsible for protecting systems from attacks and safeguarding sensitive
data. Ethical data handling and responsible storage are essential professional obligations.
Professional Ethics
Illustration
A mobile banking application handling customer data must ensure confidentiality and secure
authentication. Failure to protect user data could result in financial loss and erosion of trust.
Applications
Ethical awareness guides the responsible design of AI systems, digital payment platforms,
and public service software.
Summary
Software engineering integrates technical expertise with ethical responsibility and social
awareness.
Exercises
Ethics involve responsible conduct, protecting user data; poor usability may cause harm.
Application: Privacy protection, data accuracy, secure access control.
Free Resources
28
TOPIC 12: CASE STUDIES AND SOFTWARE ENGINEERING IN THE REAL WORLD
Introduction
Case studies provide a vital bridge between software engineering theory and professional
practice. While theoretical concepts explain processes, models, and techniques, case studies
reveal how these ideas operate in real environments characterised by constraints,
uncertainties, and evolving requirements. By analysing real successes and failures, students
gain insight into cause–and–effect relationships that abstract explanations alone cannot
convey.
This topic also highlights the transition from academic programming to professional
software engineering. Whereas student programming often focuses on producing working
code, real-world software engineering emphasises reliability, scalability, maintainability,
and long-term system evolution. Understanding this distinction prepares students for
industry practice and lifelong professional growth.
Conceptual Explanation
Real-world software systems succeed or fail based on engineering decisions made across the
lifecycle. Common causes of failure include:
Case studies reinforce the insight that software success depends not only on technical
correctness but also on disciplined processes, engineering judgement, and contextual
awareness.
29
Illustration
An online admission portal that crashes during peak application periods illustrates the
consequences of inadequate scalability planning and performance testing. Although the
system may function correctly under normal load, failure to anticipate high user demand
results in service disruption and user frustration.
Within Nigeria’s evolving digital ecosystem, examples such as e-learning platforms, digital
payment systems, and smart urban services highlight the growing relevance of robust
software engineering practices. These systems illustrate how engineering discipline
supports reliability, trust, and long-term sustainability.
Applications
The integration of case study analysis with real-world professional awareness enables
students to:
This topic also emphasises that software engineering education provides a foundation rather
than an endpoint. Continuous learning, adaptation, and professional growth remain essential
throughout an engineer’s career.
Summary
30
Exercises
Short Answer
Conceptual Questions
Application Questions
• A case study examines real software systems to connect theory with practice.
• Professional software engineering emphasises reliability, scalability, and
maintainability beyond functional correctness.
• Many systems fail due to weak processes, poor requirements, and inadequate testing
rather than coding errors.
• Lifelong learning is necessary because technologies, methodologies, and system
requirements continuously evolve.
• Lessons from system failures include the need for scalability planning, robust testing,
and architectural foresight.
• Essential career skills include teamwork, design thinking, testing competence,
architectural awareness, and effective communication.
Free Resources
31
FURTHER READING (ORDERED BY IMPORTANCE & EASE OF UNDERSTANDING)
[Link]
engineering/P200000003163
[Link]
software-engineering-rajib-mall
[Link]
approach-pressman-maxim/[Link]
4. Pfleeger, S. L., & Atlee, J. M. (2010). Software engineering: Theory and practice (4th
ed.). Prentice Hall.
[Link]
practice/P200000003365
[Link]
products/P200000003221
[Link]
[Link]
engineering-schach/[Link]
[Link]
32
9. Kernighan, B. W., & Pike, R. (1999). The practice of programming. Addison-Wesley.
[Link]
programming/P200000003256
[Link]
month/P200000003146
33