FSE Tutorial
FSE Tutorial
Engineering
Tutorial
1
2
Introduction to Software Engineering
Today’s topics
• Definition of Software Engineering
• Importance of Software Engineering
• Key Components of Software Engineering
3
Definition of Software Engineering
Software Engineering is the systematic approach to the design, development,
operation, and maintenance of software systems.
4
Software products
There are two kinds of software products:
• Generic Products – These are stand-alone systems that are produced by a
development organization and sold on the open market to any customer who is able
to buy them.
Examples: software for PCs such as databases, word processors, drawing packages, and
vertical applications designed for some specific purpose such as library information
systems, accounting systems, etc.
• Customized (or bespoke): developed for a single customer according to their
specification. A software contractor develops the software especially for that
customer
Examples: control systems for electronic devices, systems written to support a
particular business process, and air traffic control systems.
5
Importance of Software Engineering
Software Engineering is crucial due to several reasons:
• Increasing reliance on software in various industries: Software is ubiquitous, powering
everything from smartphones to critical infrastructure.
• Complexities in software systems: Modern software systems are intricate /complex,
requiring structured approaches to manage their development and maintenance.
• Quality assurance: Software Engineering focuses on ensuring the quality, reliability, and
security of software products, vital for user satisfaction and trust.
• Cost-effectiveness: Proper software engineering practices can help in reducing
development costs, minimizing errors, and optimizing resource utilization.
• Meeting customer requirements: Software Engineering ensures that software systems
meet the desired functionality, performance, and usability requirements of users.
6
Key Components of Software Engineering
• Software Processes:
• Systematic approaches to developing, deploying, and maintaining software
systems.
• Software Requirements:
• Understanding and documenting the needs and specifications of software
systems.
• Software Design:
• Creating blueprints and architectures for software systems based on
requirements.
7
Cont’d…
• Software Construction:
• Writing, coding, and testing the software components to build the system.
• Software Testing:
• Verification and validation of software to ensure it meets the specified
requirements and quality standards.
• Software Maintenance:
• Making modifications, enhancements, and updates to software systems after
deployment to address issues and adapt to changing needs.
8
Conclusion
Software Engineering is essential for developing high-quality, reliable, and
efficient software systems.
9
Software Development Process Models
Today's Topics:
• Introduction to Software Development Process Models
• Waterfall Model
• Iterative Model
• Agile Model
• Spiral Model
• Comparison of Different Models
10
Introduction to Software Development Process Models
11
Waterfall Model
• The Waterfall Model is a linear sequential approach to software development.
• It consists of distinct phases:
• Requirements Analysis
• Design
• Implementation
• Testing
• Deployment
• Maintenance
12
Cont’d…
• Progress flows downwards, like a waterfall, with each phase dependent on the
completion of the previous one.
• Advantages: Simple and easy to understand, well-suited for projects with clear
and stable requirements.
• Limitations: Inflexible to changes, long delivery time, limited customer
involvement until the end.
13
Cont’d…
When to use waterfall model
• Requirement are very well known, clear and fixed
• Product definition is stable
• Technology is understood
• There are no ambiguous requirements
• Ample resources with required expertise are available freely
• The project is short
14
Iterative Model
• The Iterative Model involves repeating the development cycle in iterations or
increments.
• Each iteration consists of phases similar to the Waterfall Model but with shorter
durations and more flexibility.
• After each iteration, a working version of the software is produced, allowing for
feedback and refinement.
15
Cont’d…
• Advantages: Allows for early delivery of a partial product, accommodates
changes, promotes customer involvement and feedback, Progress can be
measured, Less costly to change the scope/requirements, Testing and debugging
during smaller iteration is easy, Easier to manage risk - High risk part is done first.
• Limitations: Requires careful planning and management, may lead to scope creep
if not controlled, More resources may be required, Not suitable for smaller
projects.
16
Cont’d…
When to use iterative model
• Requirements of the complete system are clearly defined and understood.
• Major requirements must be defined; however, some functionalities or requested
enhancements may evolve with time.
• There is a time to the market constraint.
• A new technology is being used and is being learnt by the development team
while working on the project.
• Resources with needed skill set are not available and are planned to be used on
contract basis for specific iterations.
• There are some high-risk features and goals which may change in the future.
17
Agile Model
The Agile Model emphasizes flexibility, collaboration, and incremental delivery.
It prioritizes individuals and interactions over processes and tools, responding to
change over following a plan.
Agile methodologies include Scrum, Kanban, Extreme Programming (XP), etc.
Agile principles include iterative development, customer collaboration, frequent
deliveries, and continuous improvement.
Advantages: Adaptive to changing requirements, promotes customer
satisfaction, encourages teamwork and communication.
Limitations: Requires experienced team members, may not be suitable for large-
scale projects or critical systems.
18
Agile Model
The Agile Model emphasizes flexibility, collaboration, and incremental delivery.
It prioritizes individuals and interactions over processes and tools, responding to
change over following a plan.
Agile methodologies include Scrum, Kanban, Extreme Programming (XP), etc.
Agile principles include iterative development, customer collaboration, frequent
deliveries, and continuous improvement.
Advantages: Adaptive to changing requirements, promotes customer
satisfaction, encourages teamwork and communication.
Limitations: Requires experienced team members, may not be suitable for large-
scale projects or critical systems.
19
Spiral Model
• The Spiral Model combines elements of both iterative and waterfall models.
• It consists of multiple cycles, each involving planning, risk analysis, development, and
evaluation.
• Progress spirals outward, with each cycle addressing feedback, risks, and evolving
requirements.
• Advantages: Incorporates risk management/Critical high-risk functions are developed
first, accommodates changes, suitable for large and complex projects, early and
frequent feedback from users
• Limitations: Requires significant resources and expertise, can be time-consuming and
costly.
20
Cont’d…
When to use Spiral Model
• When creation of a prototype is appropriate
• When costs and risk evaluation is important, For medium to high-risk projects
• Users are unsure of their needs
• Requirements are complex
21
Comparison of Different Models
• Comparison based on various factors:
• Flexibility to changes
• Customer involvement
• Delivery time
• Risk management
• Resource requirements
• Each model has its strengths and weaknesses, and the choice depends on project
requirements, constraints, and stakeholders' preferences.
22
Conclusion
• Software Development Process Models play a crucial role in organizing and
managing software projects.
• Understanding the characteristics and differences between different models
helps in selecting the most suitable approach for a given project.
• In practice, hybrid models or customized approaches are often used to address
specific project needs effectively.
23
Software Requirements
Engineering
Today's Topics:
• Overview of Software Requirements Engineering
• Processes Involved
• Methods for Gathering Requirements
• Tools and Techniques Used
• Importance of Requirements Engineering
24
Overview of Software
Requirements Engineering
• Software Requirements Engineering is the process of defining, documenting, and
managing requirements for software systems.
• It involves understanding and specifying what the software should do and how it
should behave to meet the needs of users, stakeholders, and the organization.
• Requirements Engineering is crucial for ensuring the success of software projects
by establishing a clear and shared understanding of what needs to be developed.
25
Processes Involved
Requirements Engineering typically involves the following processes:
• Elicitation: Gathering requirements from stakeholders through interviews, surveys,
workshops, etc.
• Analysis: Analysing and refining requirements to ensure clarity, completeness, and
consistency.
• Specification: Documenting requirements in a structured format, such as use cases, user
stories, or requirement documents.
• Validation: Ensuring that the specified requirements accurately reflect the needs of
stakeholders and can be implemented.
• Management: Managing changes to requirements throughout the software
development lifecycle, maintaining traceability, and addressing conflicts.
26
Methods for Gathering
Requirements
• Various methods are used for gathering requirements:
• Interviews: Direct interaction with stakeholders to understand their needs and
preferences.
• Surveys: Collecting feedback from a large number of stakeholders to identify
common patterns and requirements.
• Workshops: Collaborative sessions involving stakeholders to brainstorm ideas,
prioritize requirements, and resolve conflicts.
• Observation: Observing users in their natural environment to understand their
workflow, tasks, and challenges.
• Prototyping: Building early versions of the software to elicit feedback and refine
requirements iteratively.
27
Tools and Techniques Used
• Several tools and techniques support the Requirements Engineering
process:
• Requirement Management Tools: Software tools for capturing, organizing, and
managing requirements, such as JIRA, Trello, or IBM Rational DOORS.
• Modelling Techniques: Visual modelling techniques, such as UML diagrams, flowcharts,
or entity-relationship diagrams, to represent requirements graphically.
• Prototyping Tools: Software tools for creating interactive prototypes or mockups to
visualize and validate requirements.
• Collaboration Platforms: Online platforms for facilitating collaboration and
communication among stakeholders, such as Slack, Microsoft Teams, or Confluence.
28
Importance of Requirements
Engineering
Requirements Engineering is essential for several reasons:
• Ensuring Customer Satisfaction: Clearly defined requirements help in meeting the
expectations and needs of customers and end-users.
• Minimizing Rework: Well-understood requirements reduce the likelihood of errors,
rework, and delays during the development process.
• Managing Scope: Properly managed requirements help in controlling the scope of
the project and avoiding scope creep.
• Facilitating Communication: Requirements serve as a common language for
communication among stakeholders, developers, and testers.
• Enhancing Quality: Clear and concise requirements contribute to the overall quality
and usability of the software product.
29
Conclusion
• Software Requirements Engineering is a critical phase in the software
development lifecycle, ensuring the success of software projects by establishing
clear and achievable objectives.
• Understanding the processes, methods, tools, and importance of Requirements
Engineering is essential for software engineers and project managers.
30
Object-Oriented Software
Design
Today's Topics:
• Introduction to Object-Oriented Software Design
• Principles of Object-Oriented Design
• Methods for Object-Oriented Design
• Quality Attributes in Object-Oriented Design
31
Introduction to Object-Oriented
Software Design
• Object-Oriented Software Design is an approach to software development that
focuses on modelling software systems as collections of interacting objects.
• Objects represent real-world entities or concepts, encapsulating data and
behaviour.
• Object-oriented design promotes modularity, reusability, and maintainability by
organizing software components into classes and objects.
32
Principles of Object-Oriented
Design
• Object-Oriented Design is guided by several principles, including:
• Encapsulation: Hiding the internal implementation details of objects and exposing
only necessary interfaces.
• Inheritance: Allowing objects to inherit properties and behaviour from other objects,
promoting code reuse and hierarchy.
• Polymorphism: Enabling objects to exhibit different behaviours based on their types
or classes, enhancing flexibility and extensibility.
• Abstraction: Simplifying complex systems by modelling them at a higher level of
abstraction, focusing on essential characteristics and ignoring irrelevant details.
33
Methods for Object-Oriented
Design
• Various methods and techniques are used for Object-Oriented Design:
• Use Case Modelling: Identifying and describing the interactions between users and
the system.
• Class Diagrams: Visualizing the structure of the system by representing classes,
attributes, and relationships.
• Sequence Diagrams: Illustrating the interactions between objects over time, showing
the flow of messages.
• State Diagrams: Modelling the behaviour of objects based on different states and
transitions.
• Design Patterns: Reusable solutions to common design problems, providing proven
approaches to software design challenges.
34
Quality Attributes in Object-
Oriented Design
Object-Oriented Design influences various quality attributes of software systems,
including:
• Modularity: The degree to which a system's components can be separated and recombined.
• Reusability: The extent to which software components can be reused in different contexts or
projects.
• Maintainability: The ease with which software can be modified, updated, or enhanced over
time.
• Scalability: The ability of a system to handle increasing workload or data volume without
significant changes to its architecture.
• Flexibility: The ability to adapt or extend the system's functionality without major redesign or
disruption.
35
Conclusion
• Object-Oriented Software Design provides a structured and modular approach to
software development, promoting flexibility, reusability, and maintainability.
• Understanding the principles, methods, and quality attributes of Object-Oriented
Design is essential for designing robust and scalable software systems.
36
Architectural Design Decisions
• Architectural design involves making high-level decisions regarding the
organization, structure, and behaviour of a software system.
• It defines the framework within which software components are designed and
integrated to achieve the system's objectives.
• Architectural decisions have a significant impact on the system's functionality,
performance, scalability, and maintainability.
37
Importance of Architectural
Design
• Architectural design serves as the blueprint for the entire software development
process.
• A well-designed architecture ensures that the system meets both functional and
non-functional requirements effectively.
• It facilitates modularity, allowing for easier understanding, modification, and
extension of the system.
• Architectural design enables the system to evolve over time while maintaining its
integrity and coherence.
38
Factors Influencing Architectural
Design Decisions
1. Functional Requirements: The system's functional requirements dictate the features and
capabilities that the architecture must support.
2. Non-Functional Requirements: Quality attributes such as performance, reliability, security, and
usability influence architectural decisions.
3. Constraints: External constraints such as budget, time, technology, and organizational policies
may impose limitations on architectural design choices.
4. Stakeholder Concerns: Input from various stakeholders, including clients, users, developers, and
project managers, shapes architectural decisions to align with their needs and expectations.
5. Design Patterns and Principles: Established design patterns, architectural styles, and design
principles provide guidance and best practices for making architectural decisions.
6. Trade-offs: Architectural design involves balancing trade-offs between conflicting objectives,
such as performance vs. scalability or security vs. usability.
39
Conclusion
• Architectural design decisions are crucial for defining the structure, behavior, and
quality attributes of software systems.
• Understanding the importance of architectural design and considering various
influencing factors helps in creating robust, scalable, and maintainable
architectures.
40
Architectural Views
• Architectural views represent different perspectives or abstractions of a software
system's architecture.
• They provide stakeholders with focused representations that highlight specific
aspects of the system's structure and behaviour.
• Architectural views help in understanding, communicating, and analysing the
architecture from various viewpoints.
41
Definition of Architectural Views
• Architectural views are structured representations of the architecture
that capture different concerns, such as functionality, structure,
behaviour, and deployment.
• Each view focuses on specific architectural elements and relationships
relevant to a particular stakeholder or aspect of the system.
42
Different Types of Architectural
Views
• Functional View:
• Describes the system's functionality and the interactions between its
components.
• Focuses on the functional requirements and how they are realized through
component interactions.
• Structural View:
• Illustrates the system's structure, including its components, modules, and
their relationships.
• Provides insights into the organization of the system and the dependencies
between its parts.
43
Cont’d…
• Behavioural View:
• Depicts the dynamic behaviour of the system, including its state changes,
interactions, and control flow.
• Helps in understanding how the system responds to different stimuli and events.
• Deployment View:
• Describes how the system's components are physically or logically distributed
across hardware and software environments.
• Addresses concerns related to scalability, performance, and resource utilization.
44
Importance of Architectural Views in Software Design
• Architectural views serve as blueprints for designing, implementing, and evolving
software systems.
• They facilitate communication and collaboration among stakeholders by providing
clear and concise representations of the architecture.
• Architectural views enable stakeholders to focus on specific aspects of the
architecture relevant to their roles and concerns.
• They support analysis, evaluation, and decision-making throughout the software
development lifecycle.
• Architectural views aid in managing complexity by breaking down the system into
manageable and comprehensible parts.
45
Conclusion
• Architectural views play a vital role in understanding, communicating, and
analysing the architecture of software systems.
• Different types of architectural views provide stakeholders with focused
perspectives that address their specific concerns.
46
Software Testing Maintenance
• Software testing maintenance refers to the ongoing process of managing and
updating test assets, including test cases, test scripts, and test environments, to
ensure the effectiveness of testing activities.
• It involves maintaining the relevance and accuracy of test artifacts in response to
changes in the software under test, such as updates, enhancements, or bug fixes.
47
Importance of Testing
Maintenance
• Testing maintenance is essential for ensuring the reliability, stability, and quality
of software systems throughout their lifecycle.
• It helps in detecting and preventing regressions by continuously validating
software changes against existing functionality.
• Effective testing maintenance reduces the risk of defects escaping into
production, leading to improved customer satisfaction and trust.
• Regular updates to test assets ensure that testing remains aligned with evolving
requirements, technologies, and business needs.
48
Factors Influencing Maintenance
Cost
1. Size and Complexity of the Software: Larger and more complex software systems
require more extensive testing maintenance efforts.
2. Frequency of Changes: Systems undergoing frequent updates or modifications incur
higher maintenance costs.
3. Availability and Quality of Documentation: Clear and comprehensive documentation
reduces the time and effort required for testing maintenance.
4. Skill and Experience of Testers: Competent testers with adequate knowledge and
expertise can perform testing maintenance more efficiently.
5. Tools and Automation: Effective use of testing tools and automation frameworks can
streamline maintenance activities and reduce costs.
49
Types of Maintenance
1. Corrective Maintenance: Addressing defects or issues discovered during testing
or in production.
2. Adaptive Maintenance: Modifying the software to adapt to changes in the
environment, such as operating system upgrades or hardware updates.
3. Perfective Maintenance: Enhancing the software to improve performance,
usability, or functionality based on user feedback or new requirements.
4. Preventive Maintenance: Proactively identifying and addressing potential issues
to prevent future failures or degradation in performance.
50
Maintenance Models
1. Waterfall Model: Sequential approach where maintenance activities follow a
predefined sequence after development.
2. Iterative Model: Maintenance activities are integrated into iterative
development cycles, allowing for ongoing refinement and improvement.
3. Agile Model: Maintenance is performed iteratively and incrementally in short
sprints, with a focus on delivering value to customers.
4. Hybrid Models: Combining elements of different maintenance models to suit
the specific needs of the project or organization.
51
Conclusion
1. Software testing maintenance is vital for ensuring the ongoing quality and
reliability of software systems.
2. Understanding the importance of testing maintenance, factors influencing
maintenance costs, and different types and models of maintenance helps in
planning and executing effective testing strategies.
52
Summary of key points covered
in this tutorial
• Understanding software engineering fundamentals is essential for anyone involved
in software development, including developers, project managers, and stakeholders.
• It provides a solid foundation for effectively managing and executing software
projects, ensuring the success and satisfaction of stakeholders.
• Software engineering is a dynamic and evolving field that requires continuous
learning and adaptation to keep pace with advancements in technology and industry
practices.
• By embracing software engineering fundamentals and adopting a mindset of lifelong
learning, you can contribute to the development of innovative and impactful
software solutions.
53
Good Luck!
54
1. Which of the following is a limitation of the waterfall life cycle model?
A. Software is developed in phases.
B. Each phase is completed before the next phase is started.
C. Software development is cyclic.
D. Software requirements are not properly tested until a working system is available.
55
1. Which of the following is a limitation of the waterfall life cycle model?
A. Software is developed in phases.
B. Each phase is completed before the next phase is started.
C. Software development is cyclic.
D. Software requirements are not properly tested until a working system is available.
Answer
D. Software requirements are not properly tested until a working system is available.
56
2. Which requirements elicitation technique involves observing users in their natural
environment to understand their work processes and needs?
A. Brainstorming
B. Document Analysis
C. Interviews
D. Ethnographic Studies
57
2. Which requirements elicitation technique involves observing users in their natural
environment to understand their work processes and needs?
A. Brainstorming
B. Document Analysis
C. Interviews
D. Ethnographic Studies
Answer
D. Ethnographic Studies
58
3. What do software quality attributes address?
A. Software functional requirements
B. Software non-functional requirements
C. Software performance requirement
D. Software availability requirements
59
3. What do software quality attributes address?
A. Software functional requirements
B. Software non-functional requirements
C. Software performance requirement
D. Software availability requirements
Answer
B. Software non-functional requirements
60
4. In object-oriented design, what is an aggregation hierarchy?
A. A weak form of a generalization/ specialization hierarchy
B. A strong form of a generalization/specialization hierarchy
C. A weak form of a whole/part relationship
D. A strong form of a whole/part relationship
61
4. In object-oriented design, what is an aggregation hierarchy?
A. A weak form of a generalization/ specialization hierarchy
B. A strong form of a generalization/specialization hierarchy
C. A weak form of a whole/part relationship
D. A strong form of a whole/part relationship
Answer
C. weak form of a whole/part relationship
62
5. Which software quality metrices used to improve the development and maintenance
activities of the software?
A. Process metrics
B. Project metrics
C. Product metrics
D. User metrics
63
5. Which software quality metrices used to improve the development and maintenance
activities of the software?
A. Process metrics
B. Project metrics
C. Product metrics
D. User metrics
Answer
A. Process metrics
64
6. What is “black box” testing?
A. System testing
B. Testing with knowledge of the system internals
C. Testing without knowledge of the software internals
D. Integration testing
65
6. What is “black box” testing?
A. System testing
B. Testing with knowledge of the system internals
C. Testing without knowledge of the software internals
D. Integration testing
Answer
C. Testing without knowledge of the software internals
66
7. Which elicitation activity you are going to use for cataloguing system to understand a
requirement ‘how a particular library categorizes its collection’?
A. Application domain understanding
B. Problem understanding
C. Business understanding
D. Understanding the needs and constraints of system stakeholders
67
7. Which elicitation activity you are going to use for cataloguing system to understand a
requirement ‘how a particular library categorizes its collection’?
A. Application domain understanding
B. Problem understanding
C. Business understanding
D. Understanding the needs and constraints of system stakeholders
Answer
A. Application domain understanding
68
8. Which one of the following is intended to the behavior of the system?
A. Functional requirements
B. Non-Functional requirements
C. Product requirements
D. Organizational requirements
69
8. Which one of the following is intended to the behavior of the system?
A. Functional requirements
B. Non-Functional requirements
C. Product requirements
D. Organizational requirements
Answer
A. Functional requirements
70
9. ______ is a process of describing and transforming a problem into a solution?
A. Requirement
B. Analysis
C. Design
D. Specification
71
9. ______ is a process of describing and transforming a problem into a solution?
A. Requirement
B. Analysis
C. Design
D. Specification
Answer
C. Design
72
10. What are the two kinds of UML interaction diagrams?
A. Class diagram and sequence diagram
B. Sequence diagram and communication diagram
C. Class diagram and communication diagram
D. State chart and communication diagram
73
10. What are the two kinds of UML interaction diagrams?
A. Class diagram and sequence diagram
B. Sequence diagram and communication diagram
C. Class diagram and communication diagram
D. State chart and communication diagram
Answer
B. Sequence diagram and communication diagram
74
11. The risks exposed by poor architecture include?
A. software that is unstable
B. software unable to support existing or future business requirements,
C. software that is difficult to deploy or manage in a production environment
D. all
75
11. The risks exposed by poor architecture include?
A. software that is unstable
B. software unable to support existing or future business requirements,
C. software that is difficult to deploy or manage in a production environment
D. all
Answer
D. ALL
76
12. What is a UML package?
A. A box
B. A grouping of classes
C. A grouping of use cases
D. A grouping of model elements
77
12. What is a UML package?
A. A box
B. A grouping of classes
C. A grouping of use cases
D. A grouping of model elements
Answer
D. A grouping of model elements
78
13. Which of the following is not performance-related?
A. System response time
B. System throughput
C. System availability
D. System capacity
79
13. Which of the following is not performance-related?
A. System response time
B. System throughput
C. System availability
D. System capacity
Answer
C. System availability
80
14. What is the goal of software verification?
A. Building the system
B. Building the right system
C. Building the system right
D. Testing the system
81
14. What is the goal of software verification?
A. Building the system
B. Building the right system
C. Building the system right
D. Testing the system
Answer
C. Building the system right
82
15. The types of software product which developed for a single customer according to their
specification?
A. Customize Products
B. Generic Products
C. Dynamic product
D. System product
83
15. The types of software product which developed for a single customer according to their
specification?
A. Customize Products
B. Generic Products
C. Dynamic product
D. System product
Answer
C. Building the system right
84