Software Engineering
Software Engineering
SWD 316
1
1.0 & 2.0 Understanding the Fundamentals of Software Engineering and software
development methodologies
Key Concepts
The SDLC is a framework for planning, designing, developing, testing, and maintaining
software systems. It includes phases such as requirements gathering, design,
implementation, testing, deployment, and maintenance.
Requirements Engineering
Design
Design is the process of creating a detailed plan for the software system, including its
architecture, components, and interfaces. It involves creating models, diagrams, and
documentation to describe the software system.
Implementation
Implementation is the process of writing the software code, using programming languages
and software development tools. It involves translating the design into a working software
system.
2
Testing
Testing is the process of evaluating the software system to ensure it meets the
requirements and works correctly. It involves identifying and reporting defects, and
verifying that the software system meets the required specifications.
Maintenance
Maintenance is the process of updating, modifying, and repairing the software system after
it has been deployed. It involves fixing defects, adding new features, and ensuring the
software system continues to meet the required specifications.
SCM is the process of managing changes to software systems, involving processes such as
version control, change control, and release management. It involves ensuring that changes
to the software system are tracked, controlled, and documented.
Software development involves a complex array of stakeholders, each with their own set
of expectations, responsibilities, and levels of influence. Effective stakeholder
management is crucial to ensure the successful delivery of software projects. In this
analysis, we will examine the various stakeholders involved in software development, their
roles, expectations, and levels of influence.
3
Internal Stakeholders
Internal stakeholders are those within the organization, working on the software
development project. These stakeholders include:
- Project Manager: The project manager oversees the project timeline, budget, and
resources. They are responsible for ensuring the project is delivered on time, within
budget, and to the required quality standards. Their expectations are high, and their level
of influence is significant.
- Developers: Developers design, develop, test, and maintain the software. They are
responsible for ensuring the software meets the required quality standards and is delivered
on time. Their expectations are high, and their level of influence is medium to high.
- Quality Assurance (QA) Engineers: QA engineers test the software, identify defects, and
ensure the software meets the required quality standards. Their expectations are high, and
their level of influence is medium.
- Technical Writers: Technical writers create user documentation, guides, and release
notes. Their expectations are clear, concise, and accurate documentation. Their level of
influence is low to medium.
- Designers (UI/UX): Designers design the user interface and user experience. Their
expectations are intuitive, visually appealing, and user-friendly design. Their level of
influence is medium.
External Stakeholders
External stakeholders are those outside the organization, including clients, end-users,
third-party vendors, partners, and regulatory bodies. These stakeholders have a significant
impact on the software development project and must be managed effectively.
4
- Clients/Customer: Clients provide requirements, feedback, and funding for the project.
Their expectations are high-quality software, delivered on time and within budget. Their
level of influence is high.
- End-Users: End-users use the software and provide feedback. Their expectations are
user-friendly, reliable, and efficient software. Their level of influence is medium.
- Third-Party Vendors: Third-party vendors provide services, tools, or components for the
project. Their expectations are reliable, compatible, and high-quality
services/tools/components. Their level of influence is medium.
- Regulatory Bodies: Regulatory bodies enforce laws, regulations, and standards. Their
expectations are compliance with laws, regulations, and standards. Their level of influence
is high.
- Training: Providing training and support for stakeholders, especially end-users, to ensure
they can effectively use the software.
5
- Conflict Resolution: Establishing a clear conflict resolution process to address
stakeholder concerns and issues.
6
Waterfall Methodology
1. Requirements Gathering Phase: This phase involves defining project scope, goals, and
deliverables. It includes conducting stakeholder interviews, analyzing business
requirements, and creating a Software Requirements Specification (SRS) document.
2. Design Phase: During this phase, a detailed design of the software application is created.
It involves developing a detailed design document, creating prototypes, and conducting
design reviews.
3. Implementation Phase: This phase involves writing the code for the software
application. It includes developing software components, conducting unit testing, and
integrating components.
4. Testing Phase: The Testing phase verifies that the software application meets the
requirements. It involves conducting integration testing, system testing, and acceptance
testing.
5. Deployment Phase: During this phase, the software application is delivered to the
end-users. It involves planning deployment, conducting deployment, and providing
training and support.
6. Maintenance Phase: The Maintenance phase ensures the software application continues
to meet changing requirements. It involves conducting maintenance activities, fixing
defects, and implementing changes.
Advantages of Waterfall:
Disadvantages of Waterfall
The V-Model methodology is an extension of the Waterfall model, with a focus on testing
and validation at each stage. The phases in the V-Model methodology are similar to those
in the Waterfall methodology, with the addition of Unit Testing, Integration Testing, and
System Testing phases.
Advantages of V-Model:
Disadvantages of V-Model:
1. Sprint Planning Phase: During this phase, the work to be done during the sprint is
defined. It involves conducting sprint planning, defining sprint goals, and selecting tasks.
8
3. Daily Scrum Phase: The Daily Scrum phase tracks progress and discusses challenges. It
involves conducting daily scrum, discussing progression, and discussing challenges.
4. Sprint Review Phase: During this phase, the work done during the sprint is reviewed. It
involves conducting sprint reviews, demonstrating working software, and gathering
feedback.
5. Sprint Retrospective Phase: The Sprint Retrospective phase identifies opportunities for
improvement and implements changes. It involves conducting sprint retrospective,
identifying improvements, and creating an action plan.
The Agile Manifesto, created in 2001, outlines 12 principles that guide the Agile
methodology:
1. Customer Satisfaction: Our highest priority is to satisfy the customer through early and
continuous delivery of valuable software.
4. Collaboration: Business people and developers must work together daily throughout the
project.
5. Motivated Team: Build projects around motivated individuals. Give them the
environment and support they need, and trust them to get the job done.
10. Simplicity: Simplicity--the art of maximizing the amount of work not done--is
essential.
9
11. Self-Organizing Teams: The best architectures, requirements, and designs emerge from
self-organizing teams.
12. Regular Reflection: At regular intervals, the team reflects on how to become more
agile and adjusts its behavior accordingly.
These principles guide Agile teams in delivering value to customers, embracing change,
and continuously improving their processes.
Kanban Methodology
The Kanban methodology is a visual system for managing work, focusing on continuous
flow and limiting work in progress. The phases in the Kanban methodology include:
1. Visualization Phase: During this phase, the workflow is visualized using a board,
columns, and cards.
2. Limiting Work in Progress (WIP) Phase: This phase defines WIP limits to ensure a
smooth workflow.
10
Advantages of Kanban
Disadvantages of Kanban
Meet user needs: Satisfy the specific requirements of the intended users.
Develop software on time and within budget: Adhere to project timelines and cost
constraints.
Key Principles:
1. Problem-solving: Identify and define problems, develop solutions, and evaluate
their effectiveness.
2. Teamwork: Collaboration among software engineers, project managers, and users is
crucial.
3. Communication: Effective communication within the development team and with
stakeholders is essential.
4. Lifelong learning: Continuous learning and adaptation to new technologies and
methodologies are vital.
11
3.0 Understanding Software Requirements Analysis
Definition
Types of Requirements
1. Functional Requirements: Describe what the software should do, such as user
interactions, data processing, and output.
12
4. Use Cases: Describing scenarios of how users will interact with the software.
5. User Stories: Brief descriptions of software features from the user's perspective.
User Stories
User stories are a way to capture the requirements of a software system from the
perspective of the users. They are typically written in a simple, concise format:
Format
As a [type of user], I want to [perform some task] so that [I can achieve some goal].
Example: As a customer, I want to view my order history so that I can track my purchases.
Characteristics
1. User-centric: User stories focus on the needs and goals of the users.
2. Simple: User stories are concise and easy to understand.
3. Concrete: User stories describe specific tasks and goals.
4. Estimable: User stories can be estimated in terms of complexity and effort required.
Customer
1. As a customer, I want to search for flights based on departure and arrival cities, dates,
and time so that I can find a suitable flight.
2. As a customer, I want to book a flight and select my seat so that I can secure my travel
arrangements.
13
3. As a customer, I want to receive booking confirmation (implied for all user interactions)
so that I have a record of my booking.
4. As a flight operations team member, I want to update flight status in real-time so that
customers can receive timely updates.
5. As a flight services team member, I want to offer special meal options to customers so
that I can provide a personalized experience (implied for flexibility).
Administrators
8. As a customer support agent, I want to assist customers with booking inquiries so that I
can provide timely support.
10. As a customer support agent, I want to update customer booking information so that I
can make changes on behalf of the customer.
14
1. Improved Communication: User stories help stakeholders communicate more
effectively about software requirements.
3. Better Requirements: User stories help ensure that software requirements are
user-centric, simple, and concrete.
4. Estimable Requirements: User stories provide a basis for estimating the complexity and
effort required to implement software features.
Requirements prioritization
Definition
Importance
1. Limited resources: Projects often have limited resources, including time, budget, and
personnel.
3. Changing requirements: Requirements may change over time, and prioritization helps
ensure that the most important requirements are addressed.
Methods
Best Practices
2. Use clear criteria: Establish clear criteria for prioritization, such as business value or
customer needs.
16
Booking Customer Receive booking Must-Have
Confirmation confirmation
17
Customer Booking Agent Update customer Should-Have
Information Updates booking information
4. Consistency Checking: Ensuring that requirements are consistent with each other and
with the overall project goals.
5. Completeness Checking: Ensuring that all necessary requirements have been identified.
Requirements Documentation
18
1. Reduces Misunderstandings: Clear documentation reduces misunderstandings and
misinterpretations of software requirements.
4. Supports Verification and Validation: Documentation helps verify that software meets
requirements and validates that it meets user needs.
- May include use cases, user stories, and other supporting documentation.
2. Use Case Diagrams: Visual representations of use cases and their relationships.
3. User Stories: Brief descriptions of software features from the user's perspective.
4. Requirements Management Tools: Specialized software tools that help manage and
track software requirements.
19
Characteristics of Good Requirements Documentation
20
Software Design Process
Definition
Software design is the process of creating a blueprint or a detailed plan for the software
system. It involves transforming the software requirements into a detailed design that can
be used to develop the software.
Importance
1. Provides a clear understanding of the system: Design helps stakeholders understand how
the system will work and what it will look like.
2. Guides development: Design serves as a roadmap for developers, ensuring that the
system is built correctly.
4. Enhances scalability: Design helps ensure that the system can scale to meet future
needs.
Design Principles
Modularity
21
Abstraction
1. Reduces complexity: Abstraction helps focus on the essential features of the system.
Information Hiding
1. Improves modularity: Low coupling and high cohesion enable modular systems.
2. Enhances maintainability: Systems with low coupling and high cohesion are easier to
maintain.
3. Reduces complexity: Low coupling and high cohesion reduce system complexity.
Design Activities
Requirements Analysis
Reviewing and analyzing software requirements to ensure they are complete, consistent,
and unambiguous.
22
System Design
Creating a high-level design for the system, including the overall architecture and
components.
Component Design
Designing the user interface, including the layout, navigation, and visual elements.
3. Data Flow Diagrams (DFDs): A technique for modeling data flows and processes.
23
8. Deployment Diagrams: A tool for modeling the physical deployment of a system.
2. Structured Analysis and Design (SAD): A design approach that emphasizes a top-down,
hierarchical approach.
4. Service-Oriented Design (SOD): A design approach that emphasizes the use of services
to achieve a business goal.
7. Test-Driven Development (TDD): A design approach that emphasizes the use of tests to
drive the development process.
2. User Stories: A technique for capturing the requirements of a system from the user's
perspective.
4. Prototyping: A technique for creating a working model of a system to test its feasibility.
Best Practices
24
Follow a Systematic Design Process
Apply established design patterns and principles, such as modularity, abstraction, and
encapsulation.
Maintain accurate and up-to-date design documentation, including diagrams, models, and
descriptions.
Regularly review and refine the design to ensure it meets the requirements and is feasible
to implement.
Design Approaches:
Object-Oriented Design: Based on the concept of objects, which encapsulate data and
behavior.
Structured Design: Based on the decomposition of the system into modules with
well-defined interfaces.
25
5.0 Understand Software Development
Software Development: The process of translating the software design into executable
code.
Programming Languages: Languages used to write software code (e.g., Java, Python, C++,
JavaScript).
Programming Paradigms
Programming paradigms are the fundamental styles or approaches to writing code. They
shape the way developers design, organize, and solve problems. Here's an in-depth
explanation of three primary programming paradigms: Procedural, Object-Oriented, and
Functional.
Procedural Programming
Key Characteristics
Advantages
Disadvantages
Key Characteristics
- Inheritance allows objects to inherit properties and behavior from parent objects.
Advantages
Disadvantages
Key Characteristics:
Advantages
Disadvantages:
In conclusion, each programming paradigm has its strengths and weaknesses. The choice
of paradigm depends on the specific needs of the project, the experience and preferences
of the development team, and the desired characteristics of the final product.
28
Coding Standards: Guidelines for writing clean, readable, and maintainable code.
Software Testing: The process of evaluating a software system to identify defects and
ensure that it meets the specified requirements.
1. Unit Testing: Testing individual software components or units to ensure they function
correctly.
2. Integration Testing: Testing how different software components interact with each other.
3. System Testing: Testing the entire software system to ensure it meets requirements.
5. Regression Testing: Testing to ensure changes to the software haven't introduced new
bugs.
Testing Techniques
1. Black Box Testing: Testing without knowledge of the internal workings of the software.
2. White Box Testing: Testing with knowledge of the internal workings of the software.
3. Gray Box Testing: Testing with some knowledge of the internal workings of the
software.
5. Boundary Value Analysis: Testing at the boundaries of input data to ensure correctness.
Testing Levels
29
1. Component Testing: Testing individual software components.
Testing Tools
1. Improved Quality: Testing ensures software meets requirements and works correctly.
2. Reduced Costs: Testing reduces the cost of fixing bugs and issues.
30
Best Practices for Software Testing
1. Test Early and Often: Test software early and often to catch bugs and issues.
2. Use Automated Testing: Use automated testing tools to reduce testing time and cost.
5. Test for Usability: Test software for usability to ensure it meets customer requirements.
Effective software project management involves several key activities. First, project
planning is essential to define project goals, scope, budget, and schedule. This includes
defining project scope and objectives, estimating project costs and resources, creating a
project schedule and timeline, and identifying and allocating project resources.
Another critical activity is risk management, which involves identifying and mitigating
potential risks. This includes identifying potential risks and threats, assessing risk
likelihood and impact, developing risk mitigation strategies, and monitoring and reviewing
risk status.
Team management is also vital to lead and motivate the development team. This involves
building and leading a high-performing team, defining roles and responsibilities, providing
training and development opportunities, and managing team conflicts and issues.
31
Quality assurance is essential to ensure that the software meets quality standards. This
involves defining quality standards and metrics, developing a quality assurance plan,
conducting testing and quality assurance activities, and identifying and addressing quality
issues.
Configuration management is necessary to track and control changes to the software. This
involves identifying and documenting software components, controlling changes to
software components, tracking and reporting changes, and ensuring compliance with
regulatory requirements.
By focusing on these key activities, software project managers can ensure that their
projects are delivered on time, within budget, and to the required quality standards.
32