| English | 의미 |
|---|---|
| structure chart/ˈstrʌktʃə tʃɑːt/ | 구조도 |
| state-transition diagram/steɪt trænˈsɪʃn ˈdaɪəɡræm/ | 상태 전이도 |
| pseudocode/ˈsuːdəʊkəʊd/ | 가짜 코드 |
| decomposition/ˌdiːkɒmpəˈzɪʃn/ | 분해 |
| subroutines/ˈsʌbruːtiːnz/ | 서브루틴 |
| parameters/pəˈræmɪtəz/ | parameters: 매개변수 |
| top-down design/tɒp daʊn dɪˈzaɪn/ | 상향식 설계 |
| states/steɪts/ | 상태 |
소프트웨어가 공학이 된 해
- 1968년 10월, 세계 최고의 프로그래머 50명이 독일 가르미치(Garmisch)에 모여 대형 프로그램 실패 원인(지연, 예산 초과, 신뢰성 부족)을 논의했습니다. 그들은 결여된 것을 지칭하는 용어를 만들었는데, 그것이 바로 소프트웨어 엔지니어링(Software Engineering) 입니다.
- 불만 사항은 간단했습니다. 건축가는 건축 전에 도면을 그립니다. 엔지니어는 절단 전에 계산합니다. 그러나 프로그래머들은 아무도 프로그램의 도면을 그리기 전에 이미 코드를 타이핑하고 있었습니다.
- 그 decade 동안 탄생한 도면들이 바로 설계 단계에서 사용할 것들입니다. 프로그램이 부분으로 어떻게 분할되는지를 보여주는 구조도(structure chart) 와 프로그램이 어떻게 동작하는지를 보여주는 상태 전이 도표(state-transition diagram) 입니다.
- 이 수업에서는 이 도면들을 읽는 방법, 구성하는 방법, 그리고 구조도를 가짜 코드로 변환하는 방법을 다룹니다.
설계가 결정하는 것
- 분석(Analysis)은 프로그램이 무엇(what) 을 해야 하는지 설명했습니다. 설계(Design)는 어떻게(how) 를 결정합니다: 데이터 구조, 알고리즘, 모듈 및 인터페이스.
- 설계 단계에서产出되는 도면들은 프로그래머가 코딩할 수 있는 자료입니다: 특정 알고리즘 논리를 위한 플로우차트(flowchart), 텍스트로 표현한 동일한 내용을 위한 가짜 코드(pseudocode), 모듈을 위한 구조도(structure chart), 동작을 위한 상태 전이 도표(state-transition diagram).
- 각 도구들은 서로 다른 질문에 답하며, 시험에서는 어떤 도구가 적합한지 묻습니다.
코딩하기 전에 그려진 단일 알고리즘의 논리
소프트웨어 프로세스 험실
개발 사례를 해당 단계 또는 도구에 따라 분류하십시오.
구조도(structure chart)
- 구조도(structure chart) 는 프로그램이 모듈, 서브루틴(subroutines), 그리고 모듈 간에 전달되는 매개변수(parameters) 로서 계층적으로 분해(decomposition) 되는 과정을 보여줍니다. 이러한 상향식 설계(top-down design) 는 하나의 큰 문제를 작은 하위 문제로 나누며, 각 하위 문제는 하나의 모듈이 됩니다.
- 각 모듈은 직사각형입니다. 위쪽의 호출자(caller)와 아래쪽의 호출받는 모듈을 연결하는 선이 있습니다. 같은 레벨의 모듈들은 왼쪽에서 오른쪽 순서로 호출됩니다.
- 선 옆의 작은 화살표는 데이터를 나타냅니다: 모듈로 들어가는 매개변수(하향)와 호출자에게 돌아오는 결과(상향). 마름모形(diamond)은 선택을, 곡선 화살표는 루프(loop)를 표시합니다.

선에는 계층 구조, 화살표에는 데이터
구조도(structure chart)는 다음을 보여줍니다:
난이도 1/5 · 100 코인 + 오늘 첫 완료 시 소액 보너스
구조도는 모듈로의 계층적 분해이며, 아래쪽은 파라미터, 위쪽은 결과를 나타냅니다.
문제를 위에서부터 아래로模块化하는 것은:
난이도 1/5 · 100 코인 + 오늘 첫 완료 시 소액 보너스
상하향 설계는 모듈화된 솔루션을 생성합니다.
worked example: 차트에서 서명(signatures) 읽기
CalculatePay
/ | \
GetEmployee CalculateBonus CalculateTax
returns: takes: sales takes: gross
employeeID returns: bonus returns: tax
GetEmployee은何も接收하지 않고 직원 ID를 반환하므로:FUNCTION GetEmployee() RETURNS INTEGER.CalculateBonus은 판매 금액을 하향으로 받아 보너스를 상향으로 보내므로:FUNCTION CalculateBonus(Sales : REAL) RETURNS REAL.CalculateTax은 총급여(gross pay)를 받아 세금(tax)을 반환합니다. 차트의 모든 화살표는 헤더에 있는 매개변수나 반환 값입니다. 차트에 표시되지 않은 매개변수가 포함된 헤더는 틀린 것입니다.
구조도에서 호출자(call caller)에서 모듈로 내려가는 작은 화살표는 모듈에 전달되는 ____를 의미합니다.
난이도 1/5 · 100 코인 + 오늘 첫 완료 시 소액 보너스
아래 방향 화살표는 들어오는 파라미터, 위 방향 화살표는 반환되는 결과입니다. 이 둘이 결합하여 모듈 헤더를 구성합니다.
worked example: 구조도(structure chart) 만들기
- 프로그램이 학생의 성적을 입력받아 평균을 계산하고 등급을 출력합니다. 구조도를 그려보세요.
- 최상위 모듈:
ProcessStudent. 그 아래 왼쪽에서 오른쪽으로:ReadMarks(성적 배열을 반환함),CalculateAverage(성적 배열을 하향으로 받아 평균을 반환함),OutputGrade(평균을 하향으로 받아何も返さない模块)。 - 세 가지 요점이 점수를 받습니다: 상위에 주 임무를 배치한 계층 구조, 실행 순서에 따른 하위 작업, 그리고 올바른 방향으로 향하는 명명된 매개변수. 레이블이 없는 화살표는 최대 반점까지_GET_합니다.
구조도(structure chart)에서 가짜 코드(pseudocode)로
- 최상위 모듈이 메인 프로그램이 되고, 그 아래 직사각형들은 화살표를 통해 헤더를 읽은 프로시EDURE 또는 함수가 되어, 메인 프로그램은 왼쪽에서 오른쪽 순서로 이를 호출합니다.
PROCEDURE ProcessStudent()
DECLARE Marks : ARRAY[1:10] OF INTEGER
DECLARE Average : REAL
Marks ← ReadMarks()
Average ← CalculateAverage(Marks)
CALL OutputGrade(Average)
ENDPROCEDURE
- 반환되는 값이 있다면 이는 **
FUNCTION … RETURNS**이며, 아무것도 반환하지 않는 모듈은 **PROCEDURE**입니다. 매개변수 목록은 정확히 아래쪽 화살표들입니다.
구조도를 사용하여 프로그램을 설계하는 단계를 순서대로 나열하십시오.
난이도 3/5 · 200 코인 + 오늘 첫 완료 시 소액 보너스
상하향: 과제, 하위 과제, 데이터 흐름, 헤더, 호출. 코드의 첫 줄을 쓰기 전에 차트가 완성됩니다.
구조도의 화살표가 위로 값을 반환해야 하는 모듈은 PROCEDURE로 작성해야 합니다.
난이도 1/5 · 100 코인 + 오늘 첫 완료 시 소액 보너스
반환된 값이 있으면 이는 FUNCTION … RETURNS입니다. PROCEDURE는 아무것도 반환하지 않습니다.
상태 전이 도표(state-transition diagram)
- 상태 전이 도표(state-transition diagram) 은 시스템의 동작(behaviour) 을 문서화합니다: 시스템이 가질 수 있는 상태(states) 와 한 상태에서 다른 상태로 이동시키는 이벤트(events).
- 각 상태는 원이나 둥근 사각형이며, 각 전이(transition)는 이를 유발하는 이벤트로 레이블이 붙은 화살표입니다. 때로는 취해진 action도 함께 표기합니다. 마커(start marker)는 시작 상태를 나타냅니다.
- 이벤트 대기 중이면서 반응하는 시스템에 적합합니다: 자판기, 신호등, 문 잠금 장치, 사용자 인터페이스.

모든 상태, 모든 이벤트, 모든 화살표
상태 전이도(state-transition diagram)는 다음을 보여줍니다:
난이도 1/5 · 100 코인 + 오늘 첫 완료 시 소액 보너스
상태는 원, 전이는 이벤트로 라벨링된 화살표입니다. 자동 판매기, 자물쇠, 신호등에 이상적입니다.
상태 전이도가 보여주는 것을 모두 선택하십시오.
난이도 2/5 · 140 코인 + 오늘 첫 완료 시 소액 보너스
상태, 라벨링된 전이, 시작 마커. 타이밍은 도표의 일부가 아닙니다.
worked example: 도어락 다이어그램 읽기
- 잠금장치는 코드 2, 5, 9에서 열립니다. 잠금(Locked) 상태에서 시작합니다. 2를 누르면 *하나의 숫자만 맞음(One digit correct)*으로 이동하고, 그 상태에서 5를 누르면 *두 개의 숫자가 맞음(Two digits correct)*으로 이동하며, 마지막으로 9를 누르면 *해제(Unlocked)*됩니다.
- 대기 상태 중 어느 상태에서도 다른 키를 누르면 다시 *잠금(Locked)*으로 돌아갑니다: 도표에는 이러한 화살표도 표시되어 있으며, 이들을 생략하면 도표에 빈틈이 생깁니다. 해제(Unlocked) 상태에서 2를 누르면 어떻게 됩니까? 화살표에 명시된 내용이 없다면, 이는 설계 단계에서 결정되지 않았음을 의미합니다.
- 바로 이것이 도표가 필요한 이유입니다: 모든 상태는 각 이벤트 발생 시 어떤 일이 일어나는지 명시해야 하므로, 누락된 전이(transitions)는 사용자에게 맡기기보다 문서상에서 미리 확인되어야 합니다.
모든 상태와 그 사이의 이벤트가 배치되어 있어 누락되거나 처리되지 않은 전이를 쉽게 식별할 수 있습니다.
난이도 1/5 · 100 코인 + 오늘 첫 완료 시 소액 보너스
모든 상태와 이벤트를 보면 처리하지 못한 사례를 알 수 있습니다. 예를 들어 자동 판매기에 예상치 못한 두 번째 동전投入 등.
도구 선택
- 프로그램이 모듈로 분리되고 그들 사이에서 무엇이 전달되는지를 보여줄 때: 구조도(structure chart).
- 시스템이 이벤트에 대응하여 시간에 따라 어떻게 작동하는지, 특히 모드(mode)를 가진 기계나 인터페이스의 경우를 보여줄 때: 상태 전이 도표(state-transition diagram).
- 하나의 알고리즘에 대한 **단계별 논리(step-by-step logic)**를 보여줄 때: 흐름도(flowchart) 또는 가상의코드(pseudocode). 어떤 것을 사용해야 하며 그 이유를 설명하십시오.
각 설계 도구와 그것이 보여주는内容进行 매칭하십시오.
난이도 2/5 · 140 코인 + 오늘 첫 완료 시 소액 보너스
각 도구는 설계를 다르게 바라봅니다: 구조(모듈), 행동(상태), 흐름(플로우차트) 또는 단계(가짜코드).
타이머와 보행자 버튼을 반응해야 하는 신호등 컨트롤러의 행동을 가장 잘 기록하는 설계 도구는 무엇인가?
난이도 1/5 · 100 코인 + 오늘 첫 완료 시 소액 보너스
빨강, 빨강-노랑, 초록, 노랑은 상태이며, 타이머와 버튼은 이벤트입니다. 구조도는 모듈을 보여주지 행동은 보여주지 않습니다.
놓칠 수 있는 점
- 구조도는 흐름도가 아닙니다. 모듈 내부의 의사결정 순서를 보여주는 것이 아니라 계층(hierarchy)과 매개변수(parameters)를 나타냅니다.
- 모든 화살표에 매개변수나 결과물의 이름을 붙이고 올바른 방향으로 향하게 하십시오. 이름이 없는 단순한 화살표는 아무런 의미를 가지지 않습니다.
- 상태(state)는 시스템이 기다리고 있는 **조건(condition)**이며, 이벤트(event)는该系统에 일어나는 일입니다. "5를 누르다"는 상태가 아닌 이벤트입니다.
- 가상의코드 헤더들은 도표와 일치해야 합니다: 동일한 매개변수, 동일한 반환 값, 동일한 호출 순서여야 합니다.
이해했습니다
- **구조도(structure chart)**는 상하분해(top-down decomposition)를 통해 모듈로 나누어 주며, 매개변수는 아래로 전달되고 결과물은 레이블이 있는 화살표를 통해 위로 반환됩니다.
- 가상의코드 헤더를 도표에서 읽으십시오: 아래쪽 화살표는 매개변수 목록이며, 위쪽 화살표는 이를
FUNCTION … RETURNS으로 만들며, 메인 모듈은 왼쪽에서 오른쪽으로 호출합니다. - **상태 전이 도표(state-transition diagram)**는 **상태(states)**와 그들 사이를 이동시키는 **이벤트(events)**를 보여주며, 아직 결정되지 않은 전이(transitions)를 드러냅니다.
- 분해(decomposition) → 구조도; 동작(behaviour) → 상태 전이 도표; 단일 알고리즘의 논리 → 흐름도 또는 가상의코드