Copperbelt University
School of Information Communication and Technology
Software Development (CS 130)
Introduction to software development
What is software development?
Software development refers to a set of computer science activities that are dedicated to the
process of creating, designing, deploying and supporting software.
What is software?
Software is a collection of instructions or programs that direct a computer on what tasks to
perform, making it programmable and enabling it to execute specific functions.
The goal of software development is to create a product that meets user needs and business
objectives in an efficient, repeatable and secure way. Software developers, programmers and
software engineers, AI Engineers develop software through a series of steps called the software
development lifecycle (SDLC).
Types of software
Types of software include system software, programming software, application software and
embedded software:
1. System software
Is the foundational layer of software that allows hardware to communicate with
software. It manages hardware resources and provides essential services for other types
of software.
Examples
• Operating Systems (OS): Windows, macOS, Linux, Android, iOS.
Copperbelt University 1 CS 130
• Utility Software: Disk cleanup tools, antivirus programs, file management
systems.
• Hardware Management: Device drivers for printers, graphics cards, or network
adapters.
2. Programming software
Provides tools for developers to write, test, and debug code. It helps create all the other
types of software.
Examples
• Text Editors: Notepad++, Visual Studio Code.
• Integrated Development Environments (IDEs): Eclipse, IntelliJ IDEA, PyCharm.
3. Application software
Helps users perform specific tasks, such as writing documents, playing music, or
browsing the web.
Examples
• Office Productivity Software: Microsoft Word, Excel, Google Docs.
• Media Players: VLC Media Player, Spotify.
• Data Management: Microsoft Access, Tableau.
• Web and Mobile Apps: Amazon (shopping), Instagram (social media),
Uber (transportation).
4. Embedded software
Is designed to run on specific devices that are not traditional computers. It enables
these devices to perform specific tasks, often in real-time, and is usually embedded
directly into the hardware.
Examples
• In Cars: Software that powers airbags, GPS systems, or cruise control.
• In Industrial Robots: Robotics software controlling assembly-line robots
in factories.
Copperbelt University 2 CS 130
Who develops software?
Programmers, software engineers, software developers, and AI engineers primarily conduct
software development. These roles interact, overlap, and have similar requirements, such as
writing code, testing software, developing Large language models and ensuring functionality.
The dynamics between them vary greatly across development departments and organizations.
Programmers (coders)
Programmers, or coders, write source code to program computers for specific tasks such as
merging databases, processing online orders, routing communications, conducting searches or
displaying text and graphics. They also debug and test software to make sure the software does
not contain errors.
Programmers typically interpret instructions from software developers and engineers and use
programming languages such as PHP, C++, Java™, JavaScript and Python to implement them.
Software engineers
Software engineers design, develop, test and maintain software applications. As a managerial
role, software engineers engage in problem solving with project managers, product managers
and other team members to account for real-world scenarios and business goals. Software
engineers consider full systems when developing software, making sure that operating systems
meet software requirements and that various pieces of software can interact with each other.
Beyond the building of new software, engineers monitor, test and optimize applications after
they are deployed. Software engineers oversee the creation and deployment of patches, updates
and new features.
Software developers
Like software engineers, software developers design, develop and test software. Unlike
engineers, they usually have a specific, project-based focus. A developer might be assigned to
fix an identified error, work with a team of developers on a software update or to develop a
specific aspect of a new piece of software. Software developers require many of the same skills
as engineers but are not often assigned to manage full systems.
Copperbelt University 3 CS 130
AI Engineers
AI engineers specialize in designing, developing, and deploying artificial intelligence and
machine learning systems. Their work often involves creating models that can analyze large
amounts of data, make predictions, or automate complex tasks. AI engineers use programming
languages such as Python, R, and Java, as well as specialized frameworks like TensorFlow,
PyTorch, or Scikit-learn. AI engineers work closely with data scientists, software engineers, and
product managers to ensure that AI systems integrate seamlessly into larger software solutions.
They focus on optimizing model performance, ensuring scalability, and addressing challenges
like data preprocessing, bias, and explainability.
Summary Table
Role Primary Focus Scope Example
Programmer Writing code Task-specific coding Writing a function to sort
a list or fixing
bugs in existing code.
Software Developer Building software Application- Creating a mobile app or
applications level web application
development from start to finish.
Software Engineer Engineering software System-level design Designing and
systems & development implementing a scalable
distributed
system.
AI Engineer AI and ML models Intelligent system Creating and
development deploying a
recommendation
system or NLP
chatbot.
The Software Development Life Cycle (SDLC)
The Software Development Life Cycle (SDLC) is a well-structured process that guides software
development projects from start to finish. It provides a clear framework for planning, building,
and maintaining software, ensuring that development is systematic and meets quality standards.
Following SDLC software production guidelines, engineers can deliver reliable, functional
software, avoid common pitfalls, and keep projects on schedule.
Copperbelt University 4 CS 130
What is the Software Development Life Cycle ?
The Software Development Life Cycle is a formalized process software engineers use to plan,
design, develop, test, and maintain software applications. Defining the specific SDLC stages
ensures that development is organized and executed effectively, resulting in high-quality
software that meets user requirements. Following a structured approach, development teams can
reduce risks, optimize resources, and produce software that aligns with business goals– all within
a reasonable timeframe.
Main Software Development Life Cycle phases
1. Planning
The planning phase is the foundation of any successful software development project.
Project goals, objectives, and requirements are gathered and documented during this
phase. Project requirements can be based on customer feedback or market research
evaluating existing product options. Stakeholders work together to define the project
scope, establish timelines, and allocate resources. Planning establishes the project's
direction, ensuring that all participants have a clear understanding of what needs to be
done and how to achieve it.
2. Feasibility analysis
Once planning is complete, the feasibility analysis phase begins. During this phase, the
project team evaluates whether the project is technically and financially viable. This
includes assessing the technical requirements, estimating costs, and performing a risk
analysis. Risk assessment is essential to identifying potential challenges and
determining if the project is worth pursuing.
3. System design
The system design phase includes creating the software's architecture and design. Based
on the requirements gathered during planning, the team creates a blueprint outlining
how the software will function. This includes high-level architecture and detailed
design specifications, including user interface design to ensure the software is user-
friendly and an assessment of requirements for compatibility with existing products.
Copperbelt University 5 CS 130
4. Implementation
The implementation phase, also known as the development phase, transforms the
design into a functional application. It is here that the actual coding takes place.
Developers write the code based on the design specifications, following best practices
and coding standards to ensure the result is efficient, secure, and maintainable.
5. Testing
The testing phase is critical because it generates essential performance and usability
feedback while revealing defects and quirks. Various types of software testing can be
used, including automated testing, unit testing, integration testing, and system testing. The
goal is to identify and fix bugs, ensuring the software operates as intended before being
deployed to users.
6. Deployment
Once internal software testing is complete, the solution can be deployed to end users.
This typically includes a beta-testing phase or pilot launch, limited to a select group of
real-world users. Depending on the project's needs, deployment can be done on-
premise or in the cloud. The deployment strategy determines how easily users can
access and use the software.
7. Maintenance
The last phase of the SDLC is maintenance. Even after the software is deployed, ongoing
support is necessary to address issues, apply updates, and add new features. Continuous
maintenance ensures that the software remains functional and relevant over time.
Software Development Life Cycle (SDLC) Models
Introduction to SDLC Models
The Software Development Life Cycle (SDLC) consists of structured phases guiding the creation,
testing, deployment, and maintenance of software applications. Different SDLC models exist to
accommodate various project needs, constraints, and risk levels.
This document categorizes, explains, and evaluates SDLC models based on flexibility, risk handling,
speed, and use cases. Additionally, we will analyze real-world scenarios to help students select and
justify the appropriate SDLC model for different projects.
Copperbelt University 6 CS 130
Categorization of SDLC Models
SDLC models can be grouped into four broad categories based on their approach to development and
adaptability to change:
A. Structured & Sequential Models (Best for Well-Defined Requirements)
Waterfall Model
The Waterfall model is a traditional, linear approach to software development where each
phase must be completed before moving on to the next. It follows a strict sequence:
requirements gathering, system design, implementation, testing, deployment, and maintenance.
Once a phase is completed, there is no going back, making it a rigid and structured process.
This model is highly documentation-driven, requiring detailed plans and specifications at each
stage. Waterfall works best for projects with well-defined, stable requirements that are unlikely
to change, such as government projects or safety-critical systems like medical software.
However, its lack of flexibility makes it unsuitable for projects where requirements may evolve,
as changes are costly and time-consuming to implement. Additionally, testing occurs only after
implementation, which means defects are often discovered late in the process, increasing the
risk of project failure.
Deployment
Figure 1 - Waterfall model
Advantages
• Simple and easy to understand.
• Well-structured documentation.
• Works well for projects with stable and well-defined requirements.
Copperbelt University 7 CS 130
Disadvantages
• Inflexible to changes.
• Testing occurs late in the cycle, increasing the risk of undetected defects.
• Not suitable for projects where requirements may evolve.
V-Shaped
The V-Shaped model is an extension of the Waterfall model that emphasizes verification and
validation at every stage. It follows a linear sequence like Waterfall, but each development
phase is paired with a corresponding testing phase. For example, requirements gathering is
paired with acceptance testing, and system design is paired with system testing. This ensures
that testing is integrated into every step of the development process, resulting in high-quality
software. The V-Shaped model is well-suited for projects with clearly defined requirements
and a strong focus on quality, such as medical software or safety-critical systems. However,
like Waterfall, it is inflexible and does not accommodate changes well once the project has
moved to the next phase. Testing occurs only after implementation, which means defects are
often discovered late, and working software is delivered only at the end of the process.
Figure 2 - V-shaped model
Copperbelt University 8 CS 130
Advantages
• Early testing ensures defect identification at each stage.
• High focus on validation and verification.
• Well-suited for projects with clear, static requirements.
Disadvantages
• Still lacks flexibility for changes.
• More expensive due to extensive testing phases.
• Working software is only available at the end of the process.
Scenarios for Structured Models
Scenario 1: Developing a Government Tax Filing System
A government agency is creating a national tax filing system that must comply with strict
regulations. The system must ensure secure data storage, accurate tax calculations, and seamless
integration with financial institutions. The project has a fixed scope, clear regulatory guidelines,
and no room for ongoing modifications once deployed.
Scenario 2: Building an Aviation Control System
An aviation firm is developing flight control software to assist pilots with navigation, autopilot
functions, and emergency response. The software must undergo rigorous testing and validation at
every stage, ensuring high reliability under real-world flight conditions. Any failure in the system
could pose a risk to passenger safety, making structured development and verification critical.
B. Iterative & Flexible Models (Best for Changing Requirements)
Iterative
The Iterative model focuses on repeated cycles of development, where each cycle produces
a working version of the software. Unlike the Waterfall model, the Iterative model allows
for incremental development and refinement. Each iteration adds new features or
improves existing ones, and the process continues until the final product is complete. This
model is particularly useful for projects where early delivery of a working product is
important, such as prototypes or minimum viable products (MVPs). It also helps reduce
risks by identifying and resolving issues early in the development process. However, the
Iterative model requires careful planning to avoid scope creep, and it may not be ideal for
small, simple projects where such an approach is unnecessary. Additionally, the focus on
delivering working software can sometimes lead to insufficient documentation.
Figure 3 - Iterative model
Advantages:
• Allows gradual improvements and refinements.
• Identifies issues early in development.
• Ideal for projects with evolving requirements.
Disadvantages:
• Requires strong planning.
• Can become expensive with too many iterations.
• Scope creep may occur if not managed well.
Agile
The Agile model is an iterative and incremental approach to software development that emphasizes
flexibility, collaboration, and customer feedback. Instead of following a linear path, Agile breaks the
project into small, manageable chunks called sprints, typically lasting 2-4 weeks. Each sprint
results in a working piece of software, allowing for frequent deliverables and continuous
improvement. Agile is highly adaptable, making it ideal for projects with evolving requirements,
such as startups or mobile apps. It encourages close collaboration between developers, customers,
and stakeholders, ensuring that the final product meets user needs. However, Agile requires active
customer involvement and can be less predictable in terms of scope and timelines. It is not well-
suited for large, complex projects.
Figure 4 - Agile model
Advantages
• Highly responsive to changes.
• Encourages collaboration between stakeholders and developers.
• Ensures rapid delivery of functional software.
Disadvantages
• Requires active user involvement.
• Difficult to manage for large-scale projects.
• Unpredictable scope and timeline.
Rapid application development (RAD)
The Rapid Application Development (RAD) model is a type of Agile development that
prioritizes speed and flexibility. It focuses on delivering working software quickly by
minimizing planning and emphasizing adaptive processes. RAD involves iterative
development and prototyping, with frequent feedback from users to guide the
development process. This model is ideal for projects where time-to-market is critical, such
as startups or new product launches. RAD allows for rapid changes and updates based on
real-world user feedback, making it highly adaptable. However, the lack of detailed
planning can lead to scope creep and quality issues if not managed properly. RAD is best
suited for small to medium-sized projects with experienced teams that can handle the fast-
paced, iterative nature of the process.
Figure 5 - RAD model
Advantages
• Extremely fast development cycle.
• Allows early user testing and adjustments.
• Reduces risks associated with changing requirements.
Disadvantages
• Requires skilled developers.
• Less documentation may lead to maintenance challenges.
• Not suitable for large, complex systems.
Scenarios for Iterative Models
Scenario 3: Launching a Startup Social Media App
A new startup is looking to develop a social media platform where users can share posts, interact
with friends, and explore trending topics. Since the social media landscape is highly competitive
and changes frequently, the company needs to be able to adapt quickly and respond to new trends
and user feedback. The app’s features and functionalities will likely need to be updated and refined
frequently based on real-time data and feedback from the early users.
Scenario 4: Building an E-Commerce Website with Multiple Features
An online retailer is building a comprehensive e-commerce platform that includes various
features like shopping, real-time order tracking, and AI-driven recommendations. The
website will need to deliver a seamless shopping experience for customers, while also
constantly improving based on user behavior, feedback, and market demands. This project
involves not only user-facing features but also integrating complex back-end systems to
handle the e-commerce workflow.
C. Risk-Driven & Adaptive Models (Best for Complex or Uncertain Projects)
Spiral
The Spiral model is a risk-driven approach that combines elements of both Waterfall and
Agile. It involves repeated cycles (spirals) of planning, risk analysis, development, and
evaluation. Each cycle begins with identifying objectives, constraints, and alternatives,
followed by risk analysis and mitigation strategies. Development and testing are then
carried out, and the process repeats until the final product is complete. The Spiral model is
particularly effective for large, complex projects with high uncertainty, such as video
games or aerospace software, where risk management is critical. It allows for incremental
development and refinement, making it flexible and adaptable. However, the Spiral model
can be complex and costly due to the need for thorough risk analysis and planning in each
cycle. It is not ideal for small, simple projects where such extensive risk management is
unnecessary.
Figure 6 - Spiral model
Advantages
• Reduces risks by addressing them early.
• Suitable for large, complex projects.
• Allows flexible changes.
Disadvantages
• Expensive and time-consuming.
• Requires strong risk management expertise.
• Difficult to implement for smaller projects.
Lean
The Lean model is a type of Agile development that focuses on reducing waste and
optimizing processes throughout the software development lifecycle. It borrows
principles from lean manufacturing, such as eliminating unnecessary steps, prioritizing
faster feedback loops, and delaying decisions until accurate data is available. Lean
development emphasizes delivering value to the customer quickly and efficiently, with a
strong focus on quality assurance at every step. This model is ideal for projects where
efficiency and resource optimization are critical, such as startups or projects with limited
budgets. However, Lean requires a high level of discipline and expertise to implement
effectively, and it may not be suitable for large, complex projects where more structured
approaches are needed.
Advantages
• Optimizes resource use.
• Reduces unnecessary features.
• Fast and cost-effective.
Disadvantages
• Requires experienced teams.
• Difficult to scale for large projects.
Scenarios for risk-driven and adaptive models
Scenario 5: Aerospace Software Development
A tech startup is working on a new mobile app that helps users track their fitness goals. The team
needs to release a minimum viable product (MVP) as quickly as possible with a focus on core
features like goal setting and progress tracking. The startup has limited resources and needs to
optimize the development process without sacrificing quality. They plan to gather user feedback
and improve the app based on that data.
Scenario 6: Startup Mobile App Development
A company is tasked with developing critical software for controlling drones used in military
operations. The software must meet high safety standards and deal with the complexity of real-
time data processing. Given the potential risks of failure, the company needs a development
approach that allows for ongoing risk management and testing, while ensuring the software
remains adaptable to new technological advancements.
D. Automation & Continuous Delivery Models (Best for Fast Releases)
DevOps
DevOps is a cultural and operational approach that combines software development (Dev)
and IT operations (Ops) to deliver high-quality software quickly and efficiently. It
emphasizes collaboration, automation, and continuous integration, delivery, and
deployment. DevOps breaks down the traditional silos between development and
operations teams, enabling faster and more reliable software releases. Automation plays a
key role in DevOps, with tools used for testing, deployment, and monitoring to ensure
continuous improvement. This model is ideal for projects that require frequent updates
and releases, such as SaaS platforms or e- commerce websites. However, adopting
DevOps requires a significant cultural shift and expertise in automation tools, making it
less suitable for small, simple projects. Despite these challenges, DevOps is highly
effective for large, complex projects where collaboration and efficiency are critical.
Figure 7 - DevOps model
Advantages
• Ensures fast, frequent releases.
• Enhances collaboration between teams.
• Reduces system failures.
Disadvantages
• Requires investment in automation tools.
Complex setup.
Scenarios for automation and continuous delivery.
Scenario 7: SaaS Platform for Business Analytics
A company is developing a Software as a Service (SaaS) platform that provides business analytics
tools to small and medium-sized enterprises (SMEs). The platform collects data from various
business functions (e.g., sales, marketing, finance) and offers insights to help businesses optimize
their operations. The company plans to offer frequent feature updates, performance improvements,
and seamless bug fixes. With a large user base that requires constant uptime and quick responses
to issues, the platform needs to be able to deploy updates without disruption to service.
The table below shows SDLC model comparison, against various software development factors.
Figure 8 - SDLC Model comparison
Types of Software Development
• Frontend development - Focuses on creating the user interface (UI) and user
experience (UX) of websites or applications using technologies like HTML, CSS,
and JavaScript.
• Backend development - Handles the server-side logic, databases, and application
functionality, ensuring smooth communication between the server, database, and
frontend.
• Full stack Development - Combines both frontend and backend development,
enabling developers to build and manage the entire application, from UI to server-
side processes.
• API Development - Involves designing and implementing application
programming interfaces (APIs) that allow different software systems to
communicate with each other.
• Mobile App Development - Focuses on creating applications for mobile devices,
typically using platforms like iOS, Android, or cross-platform frameworks.
• Video Game Development - Centers on creating games for various platforms,
involving game design, programming, graphics, and audio integration.
• Database Development - Specializes in designing, implementing, and
maintaining databases to store and organize data efficiently for software systems.
• Web App Development - Involves building applications that run in web browsers,
often combining frontend, backend, and API development to create interactive and
dynamic online tools.
Software Development Tools
Software development tools are essential for writing, testing, debugging, and managing
code efficiently. These tools range from lightweight code editors to full-featured
Integrated Development Environments (IDEs) and extensions that enhance productivity.
Below is an in- depth look at the tools developers use daily.
• Code editors
Code editors are lightweight tools designed for writing and editing code. They are
fast, customizable, and often support multiple programming languages. Eg
VsCode, atom, sublime text.
• Integrated development environments (IDEs)
IDEs are feature-rich environments that provide tools for coding, debugging,
testing, and deploying applications. They are tailored for specific programming
languages or frameworks. Eg PHP Storm, IntelliJ IDEA (java), Pycharm
(python).
• Extensions and plugins
Extensions and plugins enhance the functionality of code editors and IDEs, making
them more powerful and tailored to specific workflows. VS Code’s prettier,
CLINE extensions.
• Version Control Systems
Help developers track and manage changes to codebases, enabling collaboration
and rollback to previous versions if needed. Eg git, git bucket.
• Testing tools
Facilitate automated and manual testing of software to ensure it meets quality
standards. Tools range from unit testing to performance testing frameworks. E.g.
Selenium, Postman, PHPUnit
• Collaboration and project management
Help teams plan, track, and manage software projects collaboratively. These tools
ensure efficient communication and task allocation. E.g. Jira, Trello, Slack
• Database Management Tools
Enable developers to design, query, and manage databases effectively. E.g.
Xampp, MongoDB compass, MySQL workbench.