이 페이지의 목차
소프트웨어 구현
코드 예제: Python · 예상 50분
학습 목표
- 설계에 따라 핵심 기능을 구현할 수 있다.
관련 성취기준
- [12소생05-03]
스타트업 프로젝트에 적합한 소프트웨어를 협력적으로 설계하고 구현한다.
생각 열기 — 케이크를 한 층씩 구우면
최소 기능 제품
최소 기능 제품(MVP, minimum viable product) — 사용자의 핵심 문제를 풀 수 있는 가장 작은 기능만 담아 빠르게 내놓는 첫 판. 이것으로 사용자의 반응을 보고 다음 판을 정한다(MVP)은 핵심 문제를 푸는 가장 작은 판이다. 작지만 «통째로» 쓸 수 있어야 한다 — 케이크의 아래층만이 아니라 작은 컵케이크여야 맛을 볼 수 있다.
카드를 누른 뒤, 넣을 통을 누른다. 통 안의 카드를 누르면 다시 나온다.
첫 판에 넣는다
다음 판으로 미룬다
- 주운 물건 등록하기 — 등록이 없으면 찾을 것도 없다
- 물건 이름으로 찾기 — 페르소나의 가장 큰 불편 «어디 있는지 모른다»를 바로 푼다
- 2주 지난 물건을 학급에 알리기 — 중요하지만, 등록·찾기가 쓰이는지 먼저 확인한 뒤에 더해도 된다
- 사진 속 물건을 인공지능이 알아보기 — 만들기 어렵고, 이름으로 찾기가 먼저다
- 화면 색깔 고르기(테마) — 핵심 문제와 상관없다
- 찾은 물건에 «찾음» 표시하기 — 이미 돌아간 물건이 계속 결과에 나오면 찾기가 쓸모없어진다
첫 판 만들기 — 등록과 찾기
5차시에 설계한 데이터와 알고리즘을 그대로 코드로 옮긴다. 분실물 하나는 딕셔너리, 분실물 전체는 리스트다. ▶ 실행해 보자.
# 분실물 찾기 — 첫 판(최소 기능 제품): 등록하기와 찾기 두 가지만
분실물 = []
def 등록(물건, 색, 곳):
분실물.append({'물건': 물건, '색': 색, '곳': 곳})
def 찾기(낱말):
결과 = []
for 하나 in 분실물:
if 낱말 in 하나['물건']:
결과.append(하나)
return 결과
등록('체육복', '남색', '체육관')
등록('필통', '분홍', '3층 복도')
등록('체육복 바지', '검정', '운동장')
for 하나 in 찾기('체육복'):
print(하나['물건'], '·', 하나['색'], '·', 하나['곳'])체육복 · 남색 · 체육관 체육복 바지 · 검정 · 운동장
잘 되는 것 같다. 그런데 «잘 되는 것 같다»는 시험이 아니다.
시험표로 확인하기
테스트(test) — 프로그램에 입력을 넣고, 기대한 결과와 실제 결과가 같은지 확인하는 일는 입력 · 기대한 결과 · 실제 결과를 나란히 놓고 견주는 일이다. 시험 역할은 «평범한 경우»뿐 아니라 이상한 경우를 일부러 찾는다 — 없는 물건, 띄어 쓴 낱말, 아무것도 안 적은 경우.
아래 시험의 마지막 줄 — 아무것도 적지 않고(빈 낱말) 찾으면 결과는 몇 개가 나올까?
힌트 — 파이썬에서 '' in '체육복' 은 참일까, 거짓일까?
3
결과 바로 보기
3
분실물 = []
def 등록(물건, 색, 곳):
분실물.append({'물건': 물건, '색': 색, '곳': 곳})
def 찾기(낱말):
결과 = []
for 하나 in 분실물:
if 낱말 in 하나['물건']:
결과.append(하나)
return 결과
등록('체육복', '남색', '체육관')
등록('필통', '분홍', '3층 복도')
등록('체육복 바지', '검정', '운동장')
# 시험표 — 입력 · 기대한 결과 · 실제 결과를 견준다
def 시험(무엇, 실제, 기대):
print('통과' if 실제 == 기대 else '실패', '|', 무엇, '| 기대', 기대, '실제', 실제)
시험('있는 물건', len(찾기('필통')), 1)
시험('여러 개', len(찾기('체육복')), 2)
시험('없는 물건', len(찾기('우산')), 0)
시험('띄어 쓴 낱말', len(찾기('체육 복')), 2)
시험('빈칸만 넣음', len(찾기('')), 0)통과 | 있는 물건 | 기대 1 실제 1 통과 | 여러 개 | 기대 2 실제 2 통과 | 없는 물건 | 기대 0 실제 0 실패 | 띄어 쓴 낱말 | 기대 2 실제 0 실패 | 빈칸만 넣음 | 기대 0 실제 3
두 가지가 실패했다. 이것이 시험의 쓸모다.
- 띄어 쓴 낱말 — 「체육 복」에는 띄어쓰기가 있어 「체육복」 안에 들어 있지 않다. 사람은 같은 말로 보지만 컴퓨터는 글자를 그대로 견준다.
- 빈 낱말 — 파이썬에서 빈 글자
''는 모든 글자 안에 들어 있다고 본다. 그래서 아무것도 안 적으면 모든 물건이 나온다. 5차시 알고리즘 설계에서 «아무것도 남지 않았으면 알리고 끝낸다»를 넣어 둔 까닭이다.
분실물 = []
def 등록(물건, 색, 곳):
분실물.append({'물건': 물건, '색': 색, '곳': 곳})
def 다듬기(글):
return 글.replace(' ', '') # 띄어쓰기를 모두 지운다
def 찾기(낱말):
낱말 = 다듬기(낱말)
if 낱말 == '':
return [] # 아무것도 안 적으면 찾지 않는다
결과 = []
for 하나 in 분실물:
if 낱말 in 다듬기(하나['물건']):
결과.append(하나)
return 결과
등록('체육복', '남색', '체육관')
등록('필통', '분홍', '3층 복도')
등록('체육복 바지', '검정', '운동장')
def 시험(무엇, 실제, 기대):
print('통과' if 실제 == 기대 else '실패', '|', 무엇, '| 기대', 기대, '실제', 실제)
시험('있는 물건', len(찾기('필통')), 1)
시험('여러 개', len(찾기('체육복')), 2)
시험('없는 물건', len(찾기('우산')), 0)
시험('띄어 쓴 낱말', len(찾기('체육 복')), 2)
시험('빈칸만 넣음', len(찾기('')), 0)통과 | 있는 물건 | 기대 1 실제 1 통과 | 여러 개 | 기대 2 실제 2 통과 | 없는 물건 | 기대 0 실제 0 통과 | 띄어 쓴 낱말 | 기대 2 실제 2 통과 | 빈칸만 넣음 | 기대 0 실제 0
핵심 기능 만들기
약 30분- 5차시 작업 보드의 카드를 «하는 중»으로 옮기고 시작한다. 끝나면 «다 함»으로.
- 개발 역할은 핵심 기능 하나를 만든다. 위 예제를 고치기 해서 우리 팀 주제로 바꿔도 좋다(예: «찾았다» 표시 기능 더하기).
- 시험 역할은 시험표를 먼저 만든다 — 평범한 경우 둘, 이상한 경우 셋 이상.
- 화면 설계 역할은 5차시 시안을 내려받아 친구에게 써 보게 하고 기록한다.
① 팀원과 역할 — 이름 대신 별명이나 번호로 적는다. 한 사람이 역할을 둘 맡아도 된다.
② 할 일 카드 — 한 장에 한 가지 일. 끝낼 수 있을 만큼 작게 쪼갠다.
보드는 이 브라우저에만 저장된다. 팀원과 나누려면 내려받는다.
시험표와 사용자 시험 기록
- 시험이 다섯 줄 이상이다
- 실패한 시험이나 고장을 기록했다
- 사용자 시험을 기록했다
글자 규칙으로 살펴보는 점검표다. 다 켜졌다고 좋은 답이 되는 것은 아니다 — 마지막 판단은 내가 한다.
적은 내용은 이 브라우저에만 저장된다. 다른 컴퓨터로 옮기거나 제출하려면 내려받는다.
확인 문제
개념 확인 문제
보기를 누르면 바로 채점된다. 틀려도 해설을 읽으면 된다.
최소 기능 제품(MVP)에 대한 설명으로 알맞은 것은?12소생05-03
파이썬에서 '' in '체육복' 의 결과는?12소생05-03
시험표를 만들 때 꼭 넣어야 할 경우로 가장 알맞은 것은?12소생05-03
코드 한 곳을 고친 뒤 할 일로 알맞은 것은?12소생05-03
교과서에서 찾기
이 차시에 대응하는 교과서 위치가 아직 정리되지 않았다. [확인필요]