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:

      1. Dependency Overlap: Cloudflare relied on the Azure backend, and changes in Azure impacted Cloudflare services.

      2. Testing Gaps: Integration did not consider real-world traffic patterns.

      3. Incident Response: Delayed communication between Microsoft and Cloudflare prolonged the effects.

  • Incidents in 2024:

    1. September 16, 2024: Cloudflare performance issues affected applications using its CDN.

    2. 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:

    1. High Traffic Overload: Exceeded capacity with 6 million visitors on launch day.

    2. Integration Failures: Poorly tested backend integrations.

    3. Incomplete Testing: Insufficient end-to-end testing before launch.

    4. Poor User Interface: It is not optimized for performance.

    5. 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:

      1. Design Flaws: Underestimation of system interactions and dynamics.

      2. Insufficient Testing: Limited real-world testing leads to oversights.

      3. Lack of Redundancy: Systems must incorporate fault tolerance.

      4. Cascading Effects: Failures can propagate throughout interconnected systems.

      5. Predicting Real-World Usage: Importance of simulations and user modeling.

      6. 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:

    1. Requirements Engineering: Gathering system requirements, performance criteria, and specifications.

    2. Design: Capturing architecture with a focus on components and their functions/interfaces.

    3. Implementation: Building flexible, robust software components.

    4. Testing: Validation and verification from the start of the development process.

    5. 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.