엔지니어 background지식

엔지니어링 기술 습득3(Feat. SW)

아즈마민초 2025. 8. 5. 18:33

좋아 이제는 너가 공급업체에 속하는 소프트웨어 엔지니어야 소프트웨어 요구사양서 문서를 만들어야 하는 상황인데, 문서에 어떤 내용을 작성해야 해? 그리고 작성할 때도 어떻게 작성해야 해?

 

💡 소프트웨어 요구사양서(SRS)란?

소프트웨어 요구사양서는 소프트웨어가 무엇을 해야 하는지를 명확하게 정리한 공식 문서야.

이 문서는 소프트웨어 개발팀뿐 아니라, 고객, 테스트팀, 프로젝트 관리자, 품질팀 모두가 참고하는 문서야. 소프트웨어가 실제로 개발되기 전에 모든 사람이 같은 이해를 가지고 있는지를 확인하기 위한 문서라고 보면 돼.


📄 소프트웨어 요구사양서에 포함되는 핵심 구성 요소

아래는 일반적으로 포함되는 항목들이고, 각 항목을 초보자도 이해할 수 있게 자세히 설명할게.


1. 📘 소개(Introduction)

📌 이 항목에서 설명하는 것:

  • 이 문서가 무엇을 위한 것인지
  • 누가 이 문서를 봐야 하는지
  • 소프트웨어의 기본 목적이 무엇인지

✅ 예시 내용:

  • 문서 목적: “이 문서는 자동차 내부 통신 소프트웨어에 대한 요구사항을 설명한다.”
  • 문서 대상자: “시스템 엔지니어, 소프트웨어 개발자, 검증팀, 고객”
  • 시스템 개요: “이 소프트웨어는 차량 내부에서 센서 데이터와 ECU 간 정보를 주고받는다.”

2. 📗 관련 문서 및 참조

📌 이 항목에서 설명하는 것:

  • 참고해야 할 문서나 기준
  • 표준, 법규, 관련 시스템 문서 등

✅ 예시:

  • ISO 26262 (자동차 기능 안전 표준)
  • 고객 요구사양서 (CSR)
  • 시스템 요구사양서 (SYS-RS)

3. 📙 시스템 개요(System Overview)

📌 이 항목에서 설명하는 것:

  • 소프트웨어가 사용될 시스템 환경
  • 하드웨어와 어떻게 연결되는지

✅ 초보자 설명:

예를 들어 이 소프트웨어가 자동차에서 쓰이는 거라면,

  • 이 소프트웨어는 ECU에 탑재되고
  • 센서로부터 데이터를 받고
  • 차량 내부 CAN 통신을 통해 다른 ECU와 통신하고
  • 운전자에게 경고등을 보여줄 수도 있어

4. 📕 기능 요구사항 (Functional Requirements)

📌 이 항목에서 설명하는 것:

  • 소프트웨어가 "무엇을 해야 하는지"
  • 사용자의 명령에 따라 어떤 반응을 해야 하는지

✅ 예시:

  • “시동이 걸리면 1초 이내에 센서 데이터를 수신해야 한다.”
  • “센서 데이터가 특정 범위를 벗어나면 경고 신호를 전송해야 한다.”
  • “진단 요청이 오면 50ms 이내에 응답해야 한다.”

💡 이 부분은 테스트 가능한 내용이어야 해. → 결과가 나올 수 있어야 하니까!


5. 🧠 비기능 요구사항 (Non-functional Requirements)

📌 이 항목에서 설명하는 것:

  • 속도, 성능, 안정성, 보안성 등 소프트웨어의 “품질적 조건”

✅ 예시:

  • 실시간 응답 시간: 20ms 이하
  • 가용성: 99.9% 이상
  • 코드 메모리 사용량: 64KB 이하
  • 프로세서 점유율: 30% 이하

💡 이 부분은 기능과는 별개지만, 실제 동작에서 매우 중요해.


6. 🧩 인터페이스 요구사항

📌 이 항목에서 설명하는 것:

  • 다른 시스템(하드웨어, 소프트웨어)과 어떻게 연결되는지
  • 신호, 메시지, 통신 프로토콜 등

✅ 예시:

  • CAN 통신 속도: 500 kbps
  • 송신 메시지 ID: 0x123
  • 수신 메시지 ID: 0x124
  • 시리얼 통신: UART, 115200 bps, 8N1

💡 하드웨어 엔지니어와 소통하기 위해 반드시 필요한 부분이야.


7. 🧪 테스트 요구사항 (검증 가능성)

📌 이 항목에서 설명하는 것:

  • 위에서 쓴 요구사항이 실제로 테스트될 수 있는지 설명

✅ 예시:

  • "센서 값이 100 이상일 때 1초 이내에 경고등 점등" → 테스트 항목으로 만들 수 있음

8. 🔐 안전 및 보안 요구사항

📌 이 항목에서 설명하는 것:

  • 소프트웨어가 어떻게 안전하게 동작하는지
  • 해킹 방지, 오작동 방지 등

✅ 예시:

  • 메모리 접근 권한 제어
  • 오작동 시 fail-safe 동작 수행
  • 부트로더 암호화 및 서명 적용

 

 

소프트웨어 요구사양서의 요구사항은 어느 정도의 수준으로 작성돼? 예시를 보여줘

 

🔸 실제 예시로 보기

자동차 도어 제어 시스템의 예시를 들어 볼게요.


🧩 1. 사용자 요구사항 (User Requirements)

  • UR-001: 사용자는 리모컨 버튼을 눌러 차량의 문을 잠글 수 있어야 한다.
    (비기술적, 사용자 중심 표현)

⚙️ 2. 시스템 요구사항 (System Requirements)

  • SR-001: 시스템은 사용자가 리모컨의 "Lock" 버튼을 누른 경우, 모든 도어를 1초 이내에 잠가야 한다.
  • SR-002: 시스템은 도어가 잠긴 후 경고등을 2회 깜빡이도록 해야 한다.
    (시스템의 반응이나 처리 시간 등을 포함한 기능적 요구)

💻 3. 소프트웨어 요구사항 (Software Requirements)

  • SWR-001: 소프트웨어는 수신된 CAN 메시지 ID 0x101에서 payload[0] == 0x01인 경우, 도어 잠금 명령으로 처리한다.
  • SWR-002: 도어 잠금 명령을 수신한 경우, GPIO_PIN_DOOR_LOCK을 HIGH로 설정하고, 500ms 유지 후 LOW로 내려야 한다.
  • SWR-003: 도어 잠금 명령 처리 후, LIN 통신을 통해 상태 메시지를 Body Control Unit에 전송해야 한다.
    (완전히 기술적이고 정량적인 조건과 동작 명시)

✏️ 작성할 때 주의할 점

  • 모호한 표현 ❌ 피하기: "빠르게" → "500ms 이내"
  • 검증 가능성 ✅ 확보하기: 테스트할 수 있어야 함
  • 추적성(Traceability) ✅ 확보: 시스템 요구 → 소프트웨어 요구로 연결되도록 관리

이해를 돕기 위해 어떤 예제를 중심으로 설명해줄까? 예를 들어:

  • 에어컨 제어 시스템?
  • 스마트 조명 시스템?
  • 자동차 센서?
  • 아니면 너가 실제로 보고 싶은 분야 있어?

에어컨 제어 시스템으로 설명해줘

 

좋아, 그럼 자동차용 에어컨 제어 시스템(Air Conditioning Control System) 을 예로 들어서, 소프트웨어 요구사양서(SRS: Software Requirements Specification)에 어떤 식으로 요구사항이 작성되는지를 아주 상세하고 구체적으로 설명해줄게.
초보자도 이해할 수 있도록 구조적으로 단계별로 설명할게.


🔷 1. 소프트웨어 요구사항이란?

에어컨 제어 시스템에서 소프트웨어가 무엇을 해야 하는지를 정의한 문서야.
예를 들어 “온도를 22도로 맞춰줘” 같은 명령이 들어왔을 때, 소프트웨어가 센서, 버튼, 디스플레이, 모터 등과 어떻게 상호작용해야 하는지를 명확히 기술하는 문서지.


🔷 2. 소프트웨어 요구사양서 구성 항목 예시

아래는 SRS에서 실제로 포함될 수 있는 요구사항 항목들(예시)이야

🔷 3. 요구사항의 수준(level) 은 어느 정도?

좋은 요구사항은 다음과 같은 특징을 가져야 해:

 

🔚 마무리 요약

소프트웨어 요구사항은 “어떤 동작을, 언제, 어떻게, 왜 수행해야 하는지”를 아주 명확하게 기술해야 하며,
자동차 에어컨 같은 시스템의 경우:

  • 센서 데이터 처리
  • 사용자 입력 처리
  • 디스플레이 출력
  • 자동 제어 로직
  • 오류 처리

등을 빠짐없이 포함해야 해.

 

 

좋아 이제 소프트웨어 아키텍처 설계 문서를 작성해야해 아까처럼 상세하게 하나,하나 알려줄 수 있어? 내가 정말 엔지니어링 기본 지식이 없어도 소프트웨어 아키텍처 문서를 완전하게 해석할 수 있을 정도로 말이야

 

좋아, 이제 **소프트웨어 아키텍처 설계 문서(Software Architecture Design Document, SADD)**에 대해 완전히 초보자의 시선에서 하나씩 아주 상세히 설명할게. 이 문서는 개발하고자 하는 소프트웨어의 전체 구조와 구성 요소들을 정리한 청사진이라고 보면 돼. 건물을 짓기 전에 그리는 설계도 같은 개념이야.


🧱 1. 소프트웨어 아키텍처 설계 문서란?

이 문서는 소프트웨어가 어떻게 구성되어 있고, 어떤 부품(모듈)으로 나뉘며, 이 부품들이 서로 어떻게 연결되어 동작하는지를 설명하는 문서야.

📌 쉽게 말하면: 이 문서를 보면, “이 소프트웨어는 어떤 기능을 어떻게, 누구와 연결되게 만들 건지”를 한눈에 알 수 있어.


📂 2. 문서에 들어가는 기본 구성 요소

아래는 일반적인 소프트웨어 아키텍처 설계 문서의 목차(구성 항목) 예야. 각 항목을 아주 쉽게 풀어서 설명할게:


✅ [1] 문서 개요 (Introduction)

  • 이 문서가 왜 필요한가?
  • 어떤 시스템에 대한 문서인가?

예: “이 문서는 자동차용 에어컨 제어 시스템의 소프트웨어 아키텍처를 정의합니다.”


✅ [2] 시스템 개요 (System Overview)

  • 전체 시스템에서 소프트웨어가 어떤 역할을 하는지 요약
  • 소프트웨어가 연결되는 외부 장치나 시스템은?

예: “이 소프트웨어는 온도 센서를 통해 차량 내부 온도를 측정하고, 필요 시 팬과 냉각 장치를 작동시켜 설정된 온도를 유지합니다.”


✅ [3] 아키텍처 목표 및 제약사항

  • 왜 이렇게 설계해야 했는가? (요구사항 반영)
  • 제한 조건은? (예: 메모리, 성능)

예: “이 소프트웨어는 16KB RAM과 64KB Flash 메모리 내에서 동작해야 한다.”


✅ [4] 아키텍처 구성 설명 (Architectural Design)

이 부분이 문서의 핵심이야. 아래처럼 세분화할 수 있어.

🧩 4.1 전체 아키텍처 개요도 (Block Diagram)

  • 전체 구성요소(모듈)를 큰 블록 형태로 표현
  • 각 모듈이 어떤 역할을 하는지 간단히 설명
  • **모듈 간의 연결(인터페이스)**을 선으로 표현

예시:

  • Sensor Module: 온도 측정
  • Control Logic Module: 설정 온도와 실제 온도 비교
  • Fan Actuator Module: 팬 On/Off
  • User Interface Module: 사용자가 온도 설정

→ 이런 식의 블록 다이어그램을 그림으로 포함시켜.


🧩 4.2 모듈 상세 설명

각 블록(모듈)을 더 자세히 설명해야 해.

  • 모듈 이름
  • 책임(무엇을 하는지)
  • 입력/출력 데이터
  • 다른 모듈과 어떻게 연결되는지

예:

  • Control Logic Module
    • 책임: 현재 온도와 설정 온도를 비교
    • 입력: 센서 값, 설정 온도
    • 출력: 냉각 장치 또는 히터 작동 명령

🧩 4.3 데이터 흐름 (Data Flow)

  • 데이터가 어떻게 흘러다니는지 순서대로 설명
  • 센서 → 제어 로직 → 액추에이터 순

예: 온도센서 → Control Logic → Fan 모터


✅ [5] 인터페이스 정의 (Interface Design)

  • 모듈 간, 모듈과 하드웨어 간 어떤 신호나 데이터를 주고받는지
  • 어떤 포맷으로 통신하는지 (예: I2C, UART, GPIO 등)

예:

  • 센서 → Control Logic: 온도 데이터 (정수형, 단위: °C)
  • Control Logic → Fan: ON/OFF 명령 (Boolean, GPIO)

✅ [6] 비기능 요구사항 설계 반영

  • 성능 (예: 응답 시간)
  • 안정성, 안전성
  • 테스트 가능성
  • 모듈화 및 재사용성

예: “시스템은 1초 내에 온도 변화에 반응해야 함”


✅ [7] 아키텍처 선택 근거

  • 왜 이 구조로 설계했는지?
  • 다른 설계안과 비교해서 선택 이유 설명

✅ [8] 용어 정의 / 약어 정리

초보자도 이해할 수 있도록 모든 용어나 약어를 정리해.


🖼️ 예시 블록 다이어그램 (텍스트 형태)

 

 

이제 아까 소프트웨어 요구사양서를 실제 '에어컨 제어 시스템'으로 알려준 것처럼 시스템 아키텍처 문서도 알려줘

 

좋아, 이번엔 **소프트웨어 아키텍처 설계서(Software Architecture Design Document)**를 실제 "에어컨 제어 시스템" 예시로 하나하나 상세하게 설명해줄게.
이 문서는 소프트웨어가 어떻게 구성되는지, 어떻게 동작하고 연결되는지를 설계 수준에서 설명하는 문서야. 기능이 아니라 구조와 흐름에 집중하는 문서라고 보면 돼.


🔷 문서 개요: 소프트웨어 아키텍처 설계서란?

  • 목적: 소프트웨어 구성요소들이 어떻게 나뉘어 있고, 서로 어떻게 연결되어 있는지를 명확히 보여줘서, 구현, 테스트, 유지보수를 쉽게 하기 위해 작성해.
  • 독자: 소프트웨어 설계자, 개발자, 검증 엔지니어, 시스템 엔지니어, 고객 (경우에 따라)

📘 에어컨 제어 시스템 예시로 설명하는 문서 구성


1. 문서 개요 (Introduction)

  • 이 문서가 에어컨 제어 시스템 소프트웨어의 아키텍처를 설명한다는 내용
  • 문서의 목적, 범위, 관련 문서 링크
  • 예시:
  • 본 문서는 차량용 에어컨 제어 시스템 소프트웨어의 아키텍처를 설명한다. 온도 제어, 풍량 제어, 디스플레이 및 센서 연동 등 주요 기능의 구조 및 통신 흐름을 포함한다.

2. 시스템 개요 (System Overview)

  • 소프트웨어가 탑재될 전체 시스템 개요 (하드웨어 포함)
  • 블록 다이어그램으로 시스템 환경 요약

🔸 예시 다이어그램:

3. 소프트웨어 구조 개요 (Software Structure Overview)

  • 전체 소프트웨어를 계층 구조(레이어) 또는 모듈 구조로 나눈 모습
  • 예시:

4. 주요 소프트웨어 컴포넌트 설명

여기부터 각 구성 요소를 1개씩 자세히 설명해줘야 해. 아래처럼.


💡 컴포넌트: Temp_Controller

  • 역할: 실내 온도와 목표 온도를 비교하여 냉방/난방 출력을 제어
  • 입력
    • 실내 온도 (센서에서)
    • 목표 온도 (사용자 설정)
  • 출력
    • 냉매 제어 신호 (온/오프)
  • 내부 알고리즘
    • PID 제어 사용 (자세히 적을 수도 있음)
  • 연동 모듈
    • Sensor_HAL
    • AC_Control_Manager

💡 컴포넌트: Fan_Speed_Controller

  • 역할: 냉방 효율 또는 사용자 설정에 따라 팬 속도를 제어
  • 입력
    • 온도 오차 (목표 - 현재)
    • 사용자 입력 (1~5단)
  • 출력
    • PWM Duty 제어 값
  • 연동
    • PWM Driver 사용

6. 데이터 흐름도 (DFD: Data Flow Diagram)

데이터가 어떻게 전달되는지 시각적으로 보여줌:

사용자 입력 --> User_Input_Manager --> Temp_Controller --> AC_Control_Manager --> Compressor_Control

온도 센서 --> Temp_Sensor_HAL --> Temp_Controller --> Fan_Speed_Controller --> PWM Driver --> Fan Motor

 

7. 동작 시퀀스 예시

정해진 시나리오에 따라 어떤 컴포넌트가 어떤 순서로 호출되는지 보여줌

📌 시나리오: 실내 온도가 높아졌을 때

8. 타이밍/우선순위 고려 (RTOS 사용 시)

  • 어떤 태스크가 주기적으로 도는지
  • 우선순위가 어떤지

9. Fault Handling / Diagnostics

  • 센서 오류, 연결 끊김, EEPROM 오류 등 발생 시 어떻게 대응하는지

10. 아키텍처 설계 근거 및 정당성

  • 구조를 이렇게 설계한 이유
    • 재사용성
    • 모듈 분리로 테스트 용이
    • 확장성 고려

 

 

소프트웨어 상세 설계 문서로 넘어가고 싶어

 

좋아! 이제 소프트웨어 상세 설계 문서(Software Detailed Design Document, SDD) 로 넘어가자.
이 문서는 소프트웨어 아키텍처 설계 문서보다 더 구체적으로, 실제 코드를 구현하기 직전 수준의 설계 정보를 담는 문서야.


🔧 소프트웨어 상세 설계 문서란?

  • 소프트웨어 아키텍처 문서에서 정의한 각 소프트웨어 컴포넌트모듈에 대해,
  • 실제로 어떻게 동작할지, 어떤 데이터 구조와 알고리즘을 쓸지, 구현 수준에 가깝게 상세히 설명하는 문서야.
  • 주로 프로그래머검증 엔지니어가 참고해서 코딩하거나 테스트 케이스를 만들 수 있을 정도의 정보가 담겨 있어.

📄 문서 구조 (목차 예시)

  1. 문서 개요 (Introduction)
  2. 참고 문서 및 정의
  3. 설계 기준 및 제약사항
  4. 모듈별 상세 설계
    • 4.1 모듈 개요
    • 4.2 인터페이스 정의 (입출력 포함)
    • 4.3 내부 동작 로직 (플로우차트, 상태기계, 알고리즘 등)
    • 4.4 데이터 구조 정의
    • 4.5 에러 처리 및 예외 처리
  5. 소프트웨어 간 인터페이스 설명 (함수 호출 관계 등)
  6. 하드웨어/소프트웨어 인터페이스 설명 (Driver 등 포함 시)
  7. 테스트 고려 사항 (설계 기반 테스트 가능 정보)

🧊 예시: 에어컨 제어 시스템

앞에서 아키텍처에서 정의했던 모듈 중 하나인 온도 제어 모듈(Temperature Control Module)을 예로 들어 설명해볼게.

 

📌 5. 예외 처리

  • 센서 값이 비정상일 경우 (currentTemp 값이 -50도나 150도 같이 비현실적):
    • 에러 로그 저장
    • 릴레이 모두 OFF
  • 모드가 잘못된 값일 경우:
    • 릴레이 모두 OFF

📌 6. 모듈 간 인터페이스 (호출 관계)

  • TemperatureControl 모듈은 다음 모듈에서 호출됨:
    • MainControlLoop (메인 주기 루프)
    • ManualOverrideHandler (수동 제어 시)