Software Engineering Lecture 1
Software Engineering Lecture 1
SOFTWARE ENGINEERING
ENG: OSAMA ALATHWARI
LECTURE 1
Real-life example: Consider the development of a social media platform like Facebook. A
programmer might be tasked with coding a specific feature, like the "like" button. A software
engineer, however, would be involved in designing the overall architecture of the platform,
ensuring scalability to millions of users, implementing security measures, and coordinating
different teams working on various aspects of the system.
Real-life example: The OS/360 project by IBM in the 1960s was one of the largest software
projects of its time. It faced significant delays and cost overruns, largely due to the lack of
established software development practices. This project and others like it contributed to
what became known as the "software crisis," which led to the birth of software engineering as
a discipline.
Real-life example: The success of NASA's Mars Rover missions can be attributed in large
part to rigorous software engineering practices. The software controlling these rovers must be
extremely reliable, as even a small bug could lead to mission failure. NASA's use of formal
methods, extensive testing, and careful requirements management exemplifies the importance
of software engineering in critical systems.
Analysis and requirements gathering are crucial steps in the software development process.
They help ensure that the final product meets the needs of the users and stakeholders. Here's a
breakdown of the process:
• Interviews
• Surveys
• Workshops
• User observation
• Existing system analysis
2
SOFTWARE ENGINEERING ENG: OSAMA ALATHWARI
5.2 Design
UML (Unified Modeling Language) diagrams are used to visualize, specify, construct, and
document software systems. Here are some common UML diagrams and their purposes:
• Purpose: Shows the interactions between users (actors) and the system
• Used for: Identifying system functionalities and user roles
b) Class Diagram:
• Purpose: Represents the static structure of the system, showing classes, attributes,
methods, and relationships
• Used for: Designing the object-oriented structure of the system
c) Sequence Diagram:
• Purpose: Illustrates the sequence of messages and interactions between objects over
time
• Used for: Modeling the dynamic behavior of the system for specific scenarios
d) Activity Diagram:
• Purpose: Shows the different states an object can be in and the transitions between
those states
• Used for: Modeling the lifecycle of objects with distinct states
f) Component Diagram:
g) Architecture Diagram:
3
SOFTWARE ENGINEERING ENG: OSAMA ALATHWARI
• Purpose: Provides a high-level view of the entire system, showing its major
components, their relationships, and how they interact.
• Used for: Communicating the overall structure of the system to both technical and
non-technical stakeholders.
5.3 Implementation
5.4 Testing
• Definition: Verifying that the software meets requirements and functions correctly.
• Activities: Unit testing, integration testing, system testing, acceptance testing.
• Techniques: Test case design, automated testing, performance testing.
• Outcome: Test plans, test cases, bug reports, test results.
5.5 Deployment
5.6 Maintenance
4
SOFTWARE ENGINEERING ENG: OSAMA ALATHWARI
Main differences:
• Waterfall is rigid and sequential, while Iterative and Agile are more flexible.
• Agile emphasizes customer collaboration and adapting to change more than the other
models.
• Waterfall produces a complete product at the end, while Iterative and Agile produce
working software in increments.
Real-life example: Spotify uses an Agile-inspired model called "Spotify Model" which
emphasizes autonomous, cross-functional teams (called "squads") working on different parts
of the product. This allows them to rapidly develop and deploy new features, adapting
quickly to user feedback and market changes.
Real-life example: The development of healthcare.gov, the website for the U.S. health
insurance marketplace, faced many of these challenges. Its initial launch in 2013 was plagued
with issues related to scalability (unable to handle the high volume of users), reliability
(frequent crashes and errors), and changing requirements (evolving healthcare policies). This
demonstrates the critical importance of addressing these challenges in large-scale software
projects.
Real-life example: The success of the Linux operating system can be attributed to its strong
adherence to these quality attributes. It's known for its functionality (wide range of supported
5
SOFTWARE ENGINEERING ENG: OSAMA ALATHWARI
1.7 Methodology
6
SOFTWARE ENGINEERING ENG: OSAMA ALATHWARI
Chapter 3: Analysis
3.1 Introduction
7
SOFTWARE ENGINEERING ENG: OSAMA ALATHWARI
Chapter 4: Design
4.1 Introduction
Chapter 5: Implementation
• Describe the implementation process
• Highlight key challenges and solutions
• Discuss any deviations from the original design and why they were necessary
Chapter 6: Testing
6.1 Introduction
• Introduce the testing phase and its importance in the software development lifecycle
8
SOFTWARE ENGINEERING ENG: OSAMA ALATHWARI
Chapter 7: Summary
7.1 Project Overview
Chapter 8: References
8.1 Bibliography