
하드웨어 = 컴퓨터 → 계산기
소프트웨어 → 계산 방법
계산이 뭘까? 계산이 눈에 보이는가?
보이지 않는다
→ 소프트웨어는 생각이다
소프트웨어 요구사항 = 생각의 요구사항
눈에 보이지 않는 것을 요구사항으로 만드는 것은 매우 어렵다.
Software = Program + B
소프트웨어 = 소스 코드 + 데이터 + 문서
→ 소프트웨어의 모호성을 없애기 위해 요구사항을 분석한다.
시스템이란?
요소들이 모여서 하나 이상의 목적을 완전히 달성하는 것
소프트웨어만으로 완전한 목적을 달성할 수 있는가?
→ 계산기(하드웨어)가 있어야 동작할 수 있다. 소프트웨어는 자체적으로 시스템일 수 없다.
어느것에 더 큰 영향을 받는가?
생각은 어디서부터 나오는가?
언어로부터 생각이 나온다.
소프트웨어 = 생각 ← 언어(자연어) = 말 + 그림
소프트웨어는 눈으로 확인할 수 없다.
오로지 언어로 파악할 수 있기 때문에 언어를 마음대로 써선 안된다.
따라서 언어는 소프트웨어에 엄청난 영향을 미친다.
가장 많이 쓰는 언어는 명사, 동사
이를 바탕으로 개발 방법론이 생겨났다.
소프트웨어는 시간이 지나도 썩지 않는다
→ 유지 보수가 매우 중요!
소프트웨어 요구사항이 변한다면?
동사 < 명사가 변하는 경우가 더 많다
→ 객체지향이 유지보수에 더 유리
소프트웨어 = 생각
어떤 방법으로 언어를 생각으로 정리해서 소프트웨어를 만들 것인가?
모델이란?
진짜가 아닌데 진짜같이 보이는 것(Representation, Abstraction)
요구사항 분석 모델 → 소프트웨어
소프트웨어의 진짜란?
소프트웨어(프로그램)가 컴파일되어 실제 컴퓨터 위에서 실행되는 것
소프트웨어는 컴파일(컴파일러) & 실행(OS)이 자동화
그럼 소프트웨어의 진짜는? = 프로그램 (Source Code)
요구사항 분석 모델을 보는 순간 소스 코드가 보여야 한다.
사용자 입장에서 쓰여있는 동사, 명사가 클래스, 함수명이 되어야 요구사항이 제대로 된 것이다.
작명: 요구사항 분석할 때 50% 이상 결정난다.
함수적 모델 vs 객체지향적 모델
- 함수 변환: g(f(x)) → 동사와 동사, 예) C, Go
- 객체 간 연동: x.f().g() → x(클래스명), 명사가 먼저, 예) Java, C++
기능 분할도(Functional Decomposition)
전체 시스템
├── 입력 처리
├── 데이터 변환
└── 출력 생성
자료 흐름도(Data Flow Diagram)

출처: Wikimedia
| 구성 요소 | 설명 |
|---|---|
| 원(○) | 프로세스 |
| 화살표(→) | 데이터 흐름도 |
| 직선(단선/이중선) | 자료 저장소 |
| 사각형(□) | 단말(Terminator |
유스케이스(Use Case)

출처: Wikimedia
UML(Unified Modeling Language) 다이어그램 종류
모델링과 프로세스는 한 몸이다.
소프트웨어 개발 프로세스 정의: 사용자의 요청(Concerns)을 받아 소프트웨어 시스템을 개발하는 해야 되는 일의 순서를 정의하는 것
사용자의 필요성 → 소프트웨어 개발 프로세스 → 소프트웨어 시스템
보다 큰, 복잡한, 다양한, 어려운 시스템으로 가고 있다.
프로세스를 어떻게 진행할 것인지 정해져 있지 않음.
어떻게 진행할지 정하는 것이 모델링.
분석
설계
구현
테스트

출처: Wikimedia
![]()
출처: Wikimedia

출처: Wikimedia