| English | 의미 |
|---|---|
| run-time error/rʌn taɪm ˈerə/ | 실행 중 오류 |
| syntax error/ˈsɪntæks ˈerə/ | 문법 오류 |
| logic error/ˈlɒdʒɪk ˈerə/ | logic error: 논리 오류 |
| dry run/draɪ rʌn/ | dry run: 수동 추적 |
| walkthrough/ˈwɔːkθruː/ | walkthrough |
| white-box testing/waɪt bɒks ˈtestɪŋ/ | 백상자 테스트 |
| black-box testing/blæk bɒks ˈtestɪŋ/ | 흑상자 테스트 |
| integration testing/ˌɪntɪˈɡreɪʃn ˈtestɪŋ/ | 통합 테스트 |
| stub/stʌb/ | 스텝(stub) |
| alpha testing/ˈælfə ˈtestɪŋ/ | 알파 테스트 |
| beta testing/ˈbiːtə ˈtestɪŋ/ | 베타 테스트 |
| acceptance testing/əkˈseptəns ˈtestɪŋ/ | 수용 테스트 |
| test strategy/test ˈstrætədʒi/ | 테스트 전략 |
| test plan/test plæn/ | 테스트 계획 |
| normal data/ˈnɔːml ˈdeɪtə/ | 정상 데이터 |
| abnormal data/əbˈnɔːml ˈdeɪtə/ | 비정상 데이터 |
| extreme data/ekˈstriːm ˈdeɪtə/ | 극한 데이터 |
| boundary data/ˈbaʊndəri ˈdeɪtə/ | 경계 데이터 |
| corrective maintenance/kəˈrektɪv ˈmeɪntənəns/ | 정정 유지보수 |
| adaptive maintenance/əˈdæptɪv ˈmeɪntənəns/ | 적응 유지보수 |
| perfective maintenance/pəˈfektɪv ˈmeɪntənəns/ | 완화 유지보수 |
| regression testing/rɪˈɡreʃn ˈtestɪŋ/ | 회귀 테스트 |
37초
- On 4 June 1996 the first Ariane 5 rocket lifted off from French Guiana. Thirty-seven seconds later it veered off course and destroyed itself. The payload was four satellites worth $370 million.
- 원인은 아리아네 4에서 재사용된 한 줄의 코드로, 64비트 수를 16비트 정수로 변환하는 것이었습니다. 아리아네 5는 더 빠르게 비행했으므로 해당 수치는 더 커졌고, 변환 과정에서 오버플로우가 발생했습니다: 이는 발사 후 더 이상 필요하지 않은 routine에서 발생한 **런타임 오류(run-time error)**였습니다.
- 이 코드는 아리아네 5의 비행 데이터로tested된 바 없습니다.誰も new 로켓의 범위 극단적인 test data를 선택하지 않았습니다.
- 이 교훈은 세 가지 유형의 오류, 테스트 방법, 테스트 데이터 선택법, 그리고 배포 이후 프로그램을 유지 관리하는 방법을 다룹니다.
세 가지 유형의 오류
- **구문 오류(syntax error)**는 언어의 문법을 위반합니다: 괄호 누락, 키워드 오타 등. 번역(compile) 단계에서 발견되므로 수정될 때까지 프로그램은 실행되지 않습니다.
- **런타임 오류(run-time error)**는 프로그램 실행 중 발생합니다: 0으로 나누기, 존재하지 않는 파일, 배열 인덱스 범위를 벗어난情况等. 프로그램이 충돌하거나 예외(excception)를 발생시키며, 해결 방법은 위험한 연산 전에安全检查(chek)를 추가하는 것입니다.
- **논리 오류(logic error)**는 프로그램이 실행되어 **틀린 결과(wrong results)**를 생성하게 만듭니다:
+for-, off-by-one 루프, 조건문의 잘못된 순서 등. 이를 감지하는 신호가 없으며, 오직 테스트와 추적(tracing)을 통해만 밝혀집니다.

번역 단계에서 발견됨, 런타임에서 발견됨, 출력에서만 발견됨
각 종류의 오류와 그에 따른 발현 방식을 매칭하십시오.
난이도 2/5 · 140 코인 + 오늘 첫 완료 시 소액 보너스
문법 오류 = 컴파일 시 감지; 논리 오류 = 잘못된 출력; 런타임 오류 = 실행 중 충돌.
worked example: 오류를 찾아 수정하기
Total ← 0
FOR i ← 1 TO Count
Total ← Total + Marks[i]
NEXT i
Average ← Total / Count
IF Average > 50 THEN
OUTPUT "Pass"
- 구문:
IF에ENDIF이 없습니다. 번역기가 이를 거부합니다. 런타임:Count가 0이면 나누기 연산이 실패하므로, 이를IF Count > 0 THEN으로 보호(guard)하십시오. 논리: 점수가 50점 이상이면, Exactly 50점에서 학생을 불합격(fail)시키는> 50대신,>= 50이어야 합니다. - 오류의 종류를 명시하고, 왜 그것이 해당 종류인지 설명하며, 수정 방법을 제시하십시오. 3가지 요소, 총 3점 배점입니다.
프로그램이 입력 파일이 비어 있을 때 전체 합을 항목 수로 나누는 과정에서 충돌한다. 이는:
난이도 1/5 · 100 코인 + 오늘 첫 완료 시 소액 보너스
0으로 나누기는 프로그램 실행 중 발생하여 정지시킨다. IF Count > 0와 같은 경계 조건을 추가하면 해결할 수 있다.
테스트 방법: 코드 읽기
- **드라이 런(dry run)**은 종이에 코드를 추종(tracing)하여 각 행마다 trace table에 변수의 값을 기록합니다.
- **워크ス루(walkthrough)**는 팀 리뷰입니다: 프로그래머가 선별로 코드를 설명하고 동료들이 결함을 찾습니다.
- **백박스 테스트(White-box testing)**는 코드의 내부 구조를 기반으로 테스트를 설계하여, 모든 문장, 분기, 루프를 실행하도록 합니다. **블랙박스 테스트(Black-box testing)**는 명세서(specification)만으로 테스트를 설계합니다: 입력을 공급하고, 출력을 예상된 것과 비교하며, 코드는 보지 않습니다.

바깥에서 안을 보는 것, 혹은 안에서 모든 경로를 보는 것
명세서(입력 및 예상 출력)만 참고하고 내부 코드는 무시하며 테스트 케이스를 설계하는 것을 ______-박스 테스팅이라고 한다.
난이도 1/5 · 100 코인 + 오늘 첫 완료 시 소액 보너스
명세서를 기반으로 하는 블랙박스 테스트; 화이트박스는 코드 내부 구조를 사용하여 문장 및 분기 커버리지 확보에 사용된다.
테스트 방법: 조립 및 배포
- **통합 테스트(Integration testing)**는 개별적으로 테스트된 모듈들을 결합하고 그 사이의 인터페이스를 테스트합니다. 아직 작성되지 않은 모듈을 대신하여 고정된 값을 반환하는 **스텝(stub)**을 사용하여 나머지 부분을 상하분해(top-down)로 테스트할 수 있습니다.
- 알파 테스트(Alpha testing) α는 배포 전 개발자가社内(in-house)에서 수행합니다. 베타 테스트(Beta testing) β는 제한된 수의 실제 사용자에게 자신의 환경에서 프로그램을 제공합니다.
- **수용 테스트(Acceptance testing)**는 고객에 의해 요구사항에 부합하는지 여부를 결정하기 위해 수행됩니다.
소프트웨어 프로세스 험실
개발 사례를 해당 단계 또는 도구에 따라 분류하십시오.
worked example: 어떤 상황에 어떤 테스트 방법
- 리포트 모듈은 완성되었지만它所调用的数据库模块이 아직 존재하지 않습니다: 고정된 데이터를 반환하는 **스텝(stub)**으로 테스트하십시오.
- 두 모듈이 각각 자체 테스트에서는 통과하지만,其中一个的输出作为另一个的输入时 실패합니다: 인터페이스에 대한 **통합测试(integration testing)**가 필요합니다.
- 소프트웨어가 완성되었으므로, 일반 출시 전에 실제 환경에서 결함을 찾아야 합니다: 제한된 사용자 그룹에 의한 베타 테스트.
- 고객이 결제 여부를 결정합니다: 합의된 요구사항에 따른 수용 테스트. 이 방법의 이름과 목적을 명시하십시오.
각 상황을 해당 테스트 방법과 매칭하시오.
난이도 2/5 · 140 코인 + 오늘 첫 완료 시 소액 보너스
결손된 부분에 대한 스텁, 실제 사용자용 베타 테스트, 고객용 수용 테스트, 결합 부위를 위한 통합 테스트.
테스트 전략 및 테스트 계획
- 테스트 전략은 고수준 접근법입니다: 어떤 종류의 테스트를, 누가, 언제 수행하며, 다음 단계로 넘어가기 위해 무엇이 통과해야 하는지 정의합니다.
- 테스트 계획은 테스트의 상세 목록입니다. 각 항목마다 목적, 입력 데이터, 기대 출력, 그리고 테스트 실행 시 실제 출력을 기록할 열이 포함됩니다.
- 기대 결과가 없는 테스트는 테스트가 아닙니다. 프로그램이 무엇을 했는지 보여줄 뿐, 그것이 올바른지 여부는 확인하지 못합니다.
테스트 계획은 각 테스트에 대해 입력 데이터와 예상 출력을 나열한다.
난이도 1/5 · 100 코인 + 오늘 첫 완료 시 소액 보너스
목적, 입력, 예상 출력, 실제 출력 열을 포함함. 전략은 고수준 접근 방식이고, 계획은 상세한 목록임.
테스트 데이터 선택
- 정상 데이터: 범위 내의 일반적인 유효 값으로, 허용되어야 하며 올바르게 처리되어야 합니다.
- 비정상 데이터: 거부되어야 할 값으로, 범위를 벗어났거나 유형이 틀린 경우입니다.
- 극한 데이터: 여전히 허용되는 가장 크고 작은 값으로, 범위의 가장자리 위치입니다. 경계 데이터: 각 가장자리를 가로지르는 쌍으로, 허용된 극한 값과 그 바로 바깥에 있는 거부된 값(한 자리 오류가 숨어있는 곳)을 의미합니다.

내부, 외부, 그리고 선 위에
0~100 점수를許容하는 필드에 대한 경계 테스트 값은?
난이도 1/5 · 100 코인 + 오늘 첫 완료 시 소액 보너스
경계 데이터는 유효 범위의 가장자리(그리고 바로 외부)에 위치하여 오프바이원 오류가 숨어 있는 곳임.
worked example: 0부터 100점까지의 점수를 위한 테스트 데이터
| 종류 | 데이터 | 기대 결과 |
|---|---|---|
| 정상 | 50, 75 |
수용되고 처리됨 |
| 비정상 | -10, 200, "abc" |
거부됨: 범위를 벗어남 또는 유형 오류 |
| 극한 | 0, 100 |
허용됨: 가장 작고 큰 유효 값 |
| 경계 | -1와 0, 100와 101 |
-1 거부됨, 0 허용됨; 100 허용됨, 101 거부됨 |
- 모든 행에는 기대 결과가 필요합니다. 입력만 나열한 표는 절반 점수만 받습니다. 극한 값은 허용됩니다:
-1는 경계 값이지 극한 값이 아닙니다.
필드에 0부터 100까지의 점수가 허용됩니다. 극단적 테스트 데이터로 적절한 값을 모두 선택하십시오.
난이도 2/5 · 140 코인 + 오늘 첫 완료 시 소액 보너스
극단적 값은 여전히 허용되는 가장 작고 가장 큰 값입니다. -1은 거절되므로 경계 또는 비정상 데이터이며, 50은 정상 데이터입니다.
유지보수
- 프로그램의 수명 기간 비용 대부분은 출시 후 발생합니다. 정적 유지보수는 사용 중 발견된 결함을 수정합니다.
- 적응형 유지보수는 변화하는 환경에서도 프로그램이 작동하도록 유지합니다: 새로운 운영체제, 새로운 API, 법규 변경 등.
- 완화적 유지보수는 이미 작동하는 프로그램을 개선합니다: 더 빠른 성능, 사용자가 요청한 새로운 기능 등. 프로그램은 수명 기간 동안 세 가지 모두를 필요로 할 수 있습니다.

수리하고, 작동하게 유지하며, 개선하다
수정 유지보수는 결함을 수정하고, 완벽화 유지보수는 기능을 개선하며, 적응형 유지보수는 변경된 환경에서도 소프트웨어가 작동하도록 유지합니다.
난이도 1/5 · 100 코인 + 오늘 첫 완료 시 소액 보너스
세 가지 유지보수 유형: 수정(버그 수정), 완벽화(기능 강화), 적응(새로운 OS/하드웨어/규칙 대응).
세금 법안이 변경되었으므로 급여 계산 프로그램을 수정했습니다. 이는哪种유형의 유지보수입니까?
난이도 1/5 · 100 코인 + 오늘 첫 완료 시 소액 보너스
프로그램에는 결함이 없으며 개선되지도 않았지만 환경이 변경되었습니다. 이는 적응형 유지보수입니다.
기존 프로그램 수정
- 알고리즘과 데이터 흐름을 이해할 때까지 기존 코드를 읽으십시오. 수정이 필요한 곳을 찾으십시오: 어느 서브루틴, 어느 줄인지.
- 수정 사항을 최소로 유지하십시오; 작동 중인 코드를 다시 작성하지 마십시오. 관련 모든 부분을 업데이트하십시오: 변경된 매개변수 목록을 호출하는 각 지점, 변경된 데이터 구조를 사용하는 각 routine.
- 새로운 동작과 구 동작을 모두 테스트하십시오: 회귀 테스트는 이전에正常工作하던 것이 깨지지 않았음을 확인합니다. 그런 다음 변경 사항을 문서화하십시오.
프로그램을 변경한 후 회귀 테스트에서는 다음을 확인합니다:
난이도 1/5 · 100 코인 + 오늘 첫 완료 시 소액 보너스
회귀 테스트는 변경 후 기존 동작이 여전히正常工作하는지 확인하기 위해 이전 테스트를 재실행합니다.
기존 프로그램 수정 단계의 순서를 바르게 배열하시오.
난이도 3/5 · 200 코인 + 오늘 첫 완료 시 소액 보너스
이해, 위치 파악, 소규모 변경, 영향 전파, 모든 것 테스트, 기록. 회귀 테스트를 생략하면 수정 사항이 다른 부분을 손상시킬 수 있습니다.
놓칠 수 있는 점
- 극한 값은 허용되며, 비정상 값은 거부됩니다.
0와100는 극한 값이며,-1와101는 거부된 쪽의 경계 값입니다. - 논리 오류는 프로그램을 충돌시키지 않습니다. 충돌했다면 그것은 실행 시간 오류였습니다.
- 알파는社内(사내), 베타는 사외 실제 사용자입니다. 스터브는 누락된 모듈을 대체하며, 완성된 코드에 대한 테스트 방법이 아닙니다.
- 기대 출력이 없는 테스트 계획 행은 점수가 없습니다. 회귀 테스트는 모든 변경 사항에 따라 수행됩니다.
이해했습니다
- 구문 오류는 번역을 중단함 · 실행 시간 오류는 실행 중인 프로그램을 충돌시킴 · 논리 오류는 실행되어 잘못된 출력을 내며, 테스트를 통해만 발견됨
- 방법: 드라이 실행, 워크스루, 백색 박스(코드 기반), 흑색 박스(규격 기반), 통합(인터페이스, 누락된 모듈용 스터브 포함), 알파(사내), 베타(실제 사용자), 수용(고객)
- 테스트 데이터: 정상 허용, 비정상 거부, 극한 허용된 가장자리, 경계 각 가장자리 양쪽; 모든 테스트에는 기대 결과가 있음
- 유지보수: 정적 수정, 적응형 환경 대응, 완화적 개선; 소규모 수정, 호출자 업데이트, 회귀 테스트