UNI111 · Software Engineering

UNI111: Introduction to CSE

Software Engineering

Jooyong Yi (UNIST)

2026 Fall
UNI111 · Software Engineering

Triangle Classification Problem

Given three input values, a, b, and c representing the lengths of the sides of a triangle, classify the triangle as equilateral, isosceles, scalene, or invalid.

Classification Condition
Equilateral (a=b=c), with positive sides
Isosceles Exactly two sides are equal, and the triangle is valid
Scalene All three sides are different, and the triangle is valid
Invalid The sides cannot form a triangle
2026 Fall
UNI111 · Software Engineering

Questions

  • Would you have an LLM classify the triangle?
    • What if you need to classify one billion triangles?
  • Would you have an LLM generate code to classify the triangle?
    • What if you need to develop sophisticated software such as an operating system or a database?
2026 Fall
UNI111 · Software Engineering

Software Engineering provides techniques for

  • Building correct software
    • The software should meet its specification.
  • Operating software systems reliably with minimal downtime or failures
  • Maintaining software over time by fixing bugs and adding new features
    • Google Chrome: 18 years since 2008
    • Apache HTTP server: 31 years since 1995
    • Linux kernel: 35 years since 1991
  • Conducting all of them efficiently.
2026 Fall
UNI111 · Software Engineering

Birth of Software Engineering

  • 1940s: Modern electronic computers emerged.
  • 1950s: As computers became widely used, high-level programming languages such as FORTRAN were invented.
  • 1960s: Software grew larger and more complex, which caused the "software crisis."
    • It became increasingly difficult to develop and deliver large, complex software systems on time, within budget, and with the required quality.
  • 1968: The need for "software engineering" was recognized at the 1968 NATO Software Engineering Conference.
2026 Fall
UNI111 · Software Engineering

Key Questions in Software Engineering

  1. How can we manage the complexity of software development?
  2. How can we manage the complexity of the software itself?
2026 Fall
UNI111 · Software Engineering · Development Complexity

Managing Development Complexity

2026 Fall
UNI111 · Software Engineering · Development Complexity

Software development process

Software development process

  • From ad hoc to systematic development.
  • Reduces the complexity of software development.
2026 Fall
UNI111 · Software Engineering · Development Complexity

Agile Development

  • Agile:
2026 Fall
UNI111 · Software Engineering · Development Complexity

Agile Development

  • Agile: Able to move quickly and easily
2026 Fall
UNI111 · Software Engineering · Development Complexity

Agile Manifesto

  • Individuals and interactions over processes and tools
  • Working software over comprehensive documentation
  • Customer collaboration over contract negotiation
  • Responding to change over following a plan
2026 Fall
UNI111 · Software Engineering · Development Complexity

Agile Development

Agile development

2026 Fall
UNI111 · Software Engineering · Software Complexity

Managing Software Complexity

2026 Fall
UNI111 · Software Engineering · Software Complexity

What languages do machines use?

2026 Fall
UNI111 · Software Engineering · Software Complexity

What languages do machines use?

0001 0101
0010 0110
0011 0111
1111 0000
2026 Fall
UNI111 · Software Engineering · Software Complexity

Assembly Language

LOAD A
ADD  B
STORE C
HALT
2026 Fall
UNI111 · Software Engineering · Software Complexity

Compilers

2026 Fall
UNI111 · Software Engineering · Software Complexity

High-Level Languages

  • #include <stdio.h>
    
    typedef enum {
        CIRCLE,
        RECTANGLE
    } ShapeType;
    
    typedef struct {
        ShapeType type;
        union {
            struct {
                double radius;
            } circle;
            struct {
                double width;
                double height;
            } rectangle;
        } data;
    } Shape;
    
    double area(const Shape *shape) {
        switch (shape->type) {
            case CIRCLE:
                return 3.14159 *
                       shape->data.circle.radius *
                       shape->data.circle.radius;
    
            case RECTANGLE:
                return shape->data.rectangle.width *
                       shape->data.rectangle.height;
        }
        return 0;
    }
    
  • #include <iostream>
    #include <memory>
    #include <vector>
    
    class Shape {
    public:
        virtual double area() const = 0;
        virtual ~Shape() = default;
    };
    
    class Circle : public Shape {
        double radius;
    
    public:
        Circle(double r) : radius(r) {}
    
        double area() const override {
            return 3.14159 * radius * radius;
        }
    };
    
    class Rectangle : public Shape {
        double width, height;
    
    public:
        Rectangle(double w, double h)
            : width(w), height(h) {}
    
        double area() const override {
            return width * height;
        }
    };
    
2026 Fall
UNI111 · Software Engineering · Software Complexity

High-Level Languages

  • #include <iostream>
    #include <vector>
    
    int main() {
        std::vector<int> scores = {45, 80, 65, 30, 90};
        std::vector<int> passed;
    
        for (int score : scores) {
            if (score >= 60) {
                passed.push_back(score);
            }
        }
    
        for (int& score : passed) {
            score += 5;
        }
    
        int total = 0;
        for (int score : passed) {
            total += score;
        }
    
        std::cout << total << '\n';
    }
    
  • scores = [45, 80, 65, 30, 90]
    
    total = sum
        $ map (+5)
        $ filter (>=60) scores
    
    main = print total
    
2026 Fall
UNI111 · Software Engineering · Software Complexity

High-Level Languages

2026 Fall
UNI111 · Software Engineering in the era of AI

Software Engineering in the era of AI

2026 Fall
UNI111 · Software Engineering in the era of AI

Software Development: Past

Software development: past

2026 Fall
UNI111 · Software Engineering in the era of AI

Software Development: Present and Future

Software development: present

2026 Fall
UNI111 · Software Engineering in the era of AI

Program Verification

def classify_triangle(a, b, c):
    if a <= 0 or b <= 0 or c <= 0:
        return "Invalid"

    if a + b <= c or a + c <= b or b + c <= a:
        return "Invalid"

    if a == b == c:
        return "Equilateral"

    if a == b or a == c or b == c:
        return "Isosceles"

    return "Scalene"
  • CSE552 Program Analysis
2026 Fall
UNI111 · Software Engineering in the era of AI

Example Application of Program Verification

2026 Fall
UNI111 · CSE in the era of AI

Is CSE in Crisis?

2026 Fall
UNI111 · CSE in the era of AI

Do you like exploring new ideas?

  • Every crisis creates new opportunities for innovation. Recall that software crisis gave rise to software engineering.
2026 Fall

> Software is as vital as hardware, and in many cases much more complex, but it is much less well understood.