CSCI 370 – Midterm Extended Review Sheet

March 25 Lecture

Chapter 1: Introduction to Software Engineering

What is Software Engineering?

What is a Software Project?


📋 Software Development Lifecycle (SDLC)

1. Feasibility

2. Requirement Specification

3. Design / Architecture

4. Programming (aka Coding, Development, Implementation)

5. Testing (QA)

6. Release and Deployment

7. Documentation

8. Maintenance (Software Evolution)


📈 Changes in Software Engineering Over Time

Technology’s Impact


✅ Software Quality Attributes (Buzzwords)


💻 Types of Software

1. Standalone

2. Transaction-Based

3. Web Software (Client-Server Architecture)

4. Financial Software


🧱 Object-Oriented Programming (OOP)

Object vs. Class

Four OOP Principles

  1. Inheritance – Reuse code by having child classes inherit behavior from parent classes.
  2. Encapsulation – Protect internal data using access control (e.g., private fields with getters/setters).
  3. Polymorphism – One method name behaves differently depending on input types.
  4. Abstraction – Hide complex logic behind simple interfaces/methods.

📆 Design Principles & Patterns

Composition Over Inheritance

Strategy Pattern

Observer Pattern


🧬 SOLID Principles

  1. S - Single Responsibility:
    • A class should only have one reason to change.
  2. O - Open/Closed Principle:
    • Classes should be open for extension, closed for modification.
  3. L - Liskov Substitution:
    • Subclasses should behave like their parent classes when substituted.
  4. I - Interface Segregation:
    • No client should be forced to depend on methods it doesn’t use.
  5. D - Dependency Inversion:
    • Depend on abstractions, not concrete implementations.

😄 Code Quality Principles


💡 Process Models

1. Waterfall

2. Incremental (Agile, Scrum, XP)

3. Reuse-Oriented Development


🔧 Agile Practices


📊 Estimation & Prioritization


📏 UML (Unified Modeling Language)

Class Diagrams