CSE 3310
Chapter 1: Introduction
Software engineering focuses on methods and techniques for developing large-scale software systems.
The engineering metaphor signifies a systematic approach to meet organizational requirements and constraints.
Overview of the software engineering field and emerging trends impacting software development.
Microsoft-Cloudflare Integration Failure
Illustrates system dependencies and challenges of distributed systems.
Key Issues:
Dependency Overlap: Cloudflare relied on the Azure backend, and changes in Azure impacted Cloudflare services.
Testing Gaps: Integration did not consider real-world traffic patterns.
Incident Response: Delayed communication between Microsoft and Cloudflare prolonged the effects.
Incidents in 2024:
September 16, 2024: Cloudflare performance issues affected applications using its CDN.
November 14, 2024: Logging outage resulted in 55% data loss, affecting compliance and observability.
Highlights the necessity for robust monitoring and effective communication to mitigate service disruptions.
Obamacare Website Collapse
Overview: Launched on October 1, 2013, HealthCare.gov faced severe technical issues, rendering it unusable for millions.
Causes of Collapse:
High Traffic Overload: Exceeded capacity with 6 million visitors on launch day.
Integration Failures: Poorly tested backend integrations.
Incomplete Testing: Insufficient end-to-end testing before launch.
Poor User Interface: It is not optimized for performance.
Fragmented Development: Poor coordination due to multiple contractors.
Impact of Failure:
User frustrations, political backlash, and significant cost overruns (from $93 million to $2.1 billion).
Millions faced enrollment delays; recovery involved a turnaround team stabilizing the system.
Lessons learned emphasized phased deployments and improved testing/collaboration to address weaknesses.
ARIANE Flight 501
Disintegration occurred 39 seconds post-launch due to:
Large attitude deviation correction was caused by incorrect data being sent to the onboard computer.
A software exception in the inertial reference system occurred after 36 seconds.
Details:
Overflow error caused by conversion of variable BH from 64-bit to 16-bit integers.
Out of 7 risky conversions, 4 were protected; BH was not.
Conclusions point to inadequate testing, inappropriate reuse of components, and flawed design philosophy.
Software Engineering: The Beginning
Emergence of the term "Software Engineering" during the 1968/69 NATO conferences.
Shift from viewing software development as an art to a structured engineering discipline.
Current Status:
Global IT spending on software reached approximately $913 billion and is projected to rise to $5.26 trillion in 2024.
Continuous growth in the U.S. software market expected until 2029.
Historical Learnings from Engineering Failures
Comparison of software engineering failures to the Tacoma Narrows Bridge collapse:
Common Themes:
Design Flaws: Underestimation of system interactions and dynamics.
Insufficient Testing: Limited real-world testing leads to oversights.
Lack of Redundancy: Systems must incorporate fault tolerance.
Cascading Effects: Failures can propagate throughout interconnected systems.
Predicting Real-World Usage: Importance of simulations and user modeling.
Human Oversight: Necessity of clear communication in large-scale projects.
Software Engineering Principles
The application of a systematic, disciplined, and quantifiable approach per the IEEE definition.
Focus areas:
Handling complexities in large programs.
Efficiency in software development.
Collaboration across different disciplines.
Balancing act of trade-offs in systems.
Software Development Lifecycle
Key phases:
Requirements Engineering: Gathering system requirements, performance criteria, and specifications.
Design: Capturing architecture with a focus on components and their functions/interfaces.
Implementation: Building flexible, robust software components.
Testing: Validation and verification from the start of the development process.
Maintenance: Adapting software post-delivery for errors, environment shifts, or evolving user needs.
Insights on cost distribution indicate that testing consumes significant effort, and maintenance often accounts for 50-75% of the total effort.
Recent Developments in Software Engineering
The rise of agile methods shifting focus from production to effective software use.
Growing importance of open-source software and team heterogeneity in development.
Ethical Principles in Software Engineering
Upholding the public interest, professional standards, integrity, and collaboration among colleagues.
The need for ethical guidelines in software practices reflects the legacy of Hammurabi’s Code.
Summary
Software engineering involves a balancing act where trade-offs are necessary, acknowledging that solutions vary in effectiveness.
Continuous evolution in software maintenance reflects real-world complexities, and various lifecycle models serve as frameworks for development.