소프트웨어와 생활웹 교과서
이 페이지의 목차
5단원 · 6차시

소프트웨어 구현

최소 기능 제품구현테스트

코드 예제: Python · 예상 50분

학습 목표

  • 설계에 따라 핵심 기능을 구현할 수 있다.

관련 성취기준

  • [12소생05-03]

    스타트업 프로젝트에 적합한 소프트웨어를 협력적으로 설계하고 구현한다.

생각 열기 — 케이크를 한 층씩 구우면

최소 기능 제품

최소 기능 제품(MVP, minimum viable product) — 사용자의 핵심 문제를 풀 수 있는 가장 작은 기능만 담아 빠르게 내놓는 첫 판. 이것으로 사용자의 반응을 보고 다음 판을 정한다(MVP)은 핵심 문제를 푸는 가장 작은 판이다. 작지만 «통째로» 쓸 수 있어야 한다 — 케이크의 아래층만이 아니라 작은 컵케이크여야 맛을 볼 수 있다.

분류하기분실물 찾기 — 첫 판에 넣을까, 다음 판으로 미룰까?

카드를 누른 뒤, 넣을 통을 누른다. 통 안의 카드를 누르면 다시 나온다.

첫 판에 넣는다

다음 판으로 미룬다

첫 판 만들기 — 등록과 찾기

5차시에 설계한 데이터와 알고리즘을 그대로 코드로 옮긴다. 분실물 하나는 딕셔너리, 분실물 전체는 리스트다. ▶ 실행해 보자.

Python분실물 찾기 — 첫 판
# 분실물 찾기 — 첫 판(최소 기능 제품): 등록하기와 찾기 두 가지만
분실물 = []

def 등록(물건, 색, 곳):
    분실물.append({'물건': 물건, '색': 색, '곳': 곳})

def 찾기(낱말):
    결과 = []
    for 하나 in 분실물:
        if 낱말 in 하나['물건']:
            결과.append(하나)
    return 결과

등록('체육복', '남색', '체육관')
등록('필통', '분홍', '3층 복도')
등록('체육복 바지', '검정', '운동장')

for 하나 in 찾기('체육복'):
    print(하나['물건'], '·', 하나['색'], '·', 하나['곳'])
확인된 실행 결과
체육복 · 남색 · 체육관
체육복 바지 · 검정 · 운동장

잘 되는 것 같다. 그런데 «잘 되는 것 같다»는 시험이 아니다.

시험표로 확인하기

테스트(test) — 프로그램에 입력을 넣고, 기대한 결과와 실제 결과가 같은지 확인하는 일는 입력 · 기대한 결과 · 실제 결과를 나란히 놓고 견주는 일이다. 시험 역할은 «평범한 경우»뿐 아니라 이상한 경우를 일부러 찾는다 — 없는 물건, 띄어 쓴 낱말, 아무것도 안 적은 경우.

예상해 보기

아래 시험의 마지막 줄 — 아무것도 적지 않고(빈 낱말) 찾으면 결과는 몇 개가 나올까?

결과 바로 보기
3
Python첫 판의 시험표
분실물 = []

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차시 알고리즘 설계에서 «아무것도 남지 않았으면 알리고 끝낸다»를 넣어 둔 까닭이다.
Python고친 판 — 띄어쓰기를 지우고, 빈 낱말을 걸러 낸다
분실물 = []

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분
  1. 5차시 작업 보드의 카드를 «하는 중»으로 옮기고 시작한다. 끝나면 «다 함»으로.
  2. 개발 역할은 핵심 기능 하나를 만든다. 위 예제를 고치기 해서 우리 팀 주제로 바꿔도 좋다(예: «찾았다» 표시 기능 더하기).
  3. 시험 역할은 시험표를 먼저 만든다 — 평범한 경우 둘, 이상한 경우 셋 이상.
  4. 화면 설계 역할은 5차시 시안을 내려받아 친구에게 써 보게 하고 기록한다.
작업 보드누가 무엇을 맡나

① 팀원과 역할 — 이름 대신 별명이나 번호로 적는다. 한 사람이 역할을 둘 맡아도 된다.

② 할 일 카드 — 한 장에 한 가지 일. 끝낼 수 있을 만큼 작게 쪼갠다.

보드는 이 브라우저에만 저장된다. 팀원과 나누려면 내려받는다.

활동지

시험표와 사용자 시험 기록

스스로 점검
  • 시험이 다섯 줄 이상이다
  • 실패한 시험이나 고장을 기록했다
  • 사용자 시험을 기록했다

글자 규칙으로 살펴보는 점검표다. 다 켜졌다고 좋은 답이 되는 것은 아니다 — 마지막 판단은 내가 한다.

적은 내용은 이 브라우저에만 저장된다. 다른 컴퓨터로 옮기거나 제출하려면 내려받는다.

확인 문제

개념 확인 문제

보기를 누르면 바로 채점된다. 틀려도 해설을 읽으면 된다.

최소 기능 제품(MVP)에 대한 설명으로 알맞은 것은?12소생05-03

파이썬에서 '' in '체육복' 의 결과는?12소생05-03

시험표를 만들 때 꼭 넣어야 할 경우로 가장 알맞은 것은?12소생05-03

코드 한 곳을 고친 뒤 할 일로 알맞은 것은?12소생05-03

이 차시는 C 예제를 제공하지 않는다. 상단에서 다른 언어로 바꾸면 예제를 볼 수 있다.

교과서에서 찾기

이 차시에 대응하는 교과서 위치가 아직 정리되지 않았다. [확인필요]