확인 (Validation)
Download
Report
Transcript 확인 (Validation)
Slide 6.1
Object-Oriented and
Classical Software
Engineering
Yoo haeyoung
[email protected]
Dankook.University, Yoo haeyoung, 2005
CHAPTER 6
TESTING
Dankook.University, Yoo haeyoung, 2005
Slide 6.2
학습목표
Quality issues
Non-execution-based testing
Execution-based testing
What should be tested?
Testing versus corrctness proofs
Who should perform execution-based testing?
When testing stops
Dankook.University, Yoo haeyoung, 2005
Slide 6.3
Testing
Slide 6.4
테스팅의 두개의 기본 타입
실행 기반 테스팅(execution-based testing)
비-실행 기반 테스팅(non-execution-based testing)
“V & V”
검증 (Verification)
Determine if the workflow was completed correctly
확인 (Validation)
Determine if the product as awhole satisfies its requirement
Warning
The term “verify” is also used for all non-executionbased testing
Dankook.University, Yoo haeyoung, 2005
6.1 Software Quality
Slide 6.5
품질이란 “우수함(excellence)”을 뜻하는 것이 아님
The extent to which software satisfies its
specifications
모든 소프트웨어 전문가들은 자신들이 작업한 것이
항상 고품질의 소프트웨어인지를 보장해야 하는
책임이 있음
품질은 소프트웨어 품질 보증(SQA: Software Quality
Assurance) 그룹이 후에 어떤 것을 추가하는 것이 아니라
개발자들이 처음부터 구축해야 하는 사항임
Dankook.University, Yoo haeyoung, 2005
6.1.1 소프트웨어 품질 보증 (Software Quality Assurance)
Slide 6.6
SQA 그룹의 멤버들은 개발자들이 해당 작업을
high-quality work로 했는지를 확인해야 함,즉
At the end of each workflow
When the product is complete
SQA 그룹의 역할은 소프트웨어 프로세스의 품질을
확인하고 또 프로덕트의 품질도 확인하는 것
SQA는 소프트웨어 프로세스 자체에도 적용
Example: Standards
Dankook.University, Yoo haeyoung, 2005
6.1.2 관리의 독립성 (Managerial Independence)
Slide 6.7
다음의 두 가지는 독립적으로 관리 되어야 함
개발 팀
SQA 그룹
어느 쪽의 그룹도 다른 쪽을 지배해서는 안됨
소프트웨어 조직은 이때 만족스럽지 못한 두 가지
선택 사항 중 하나를 선택해야 함
클라이언트가 소프트웨어에 있는 결함 때문에 고생을
할지라도 정시에 인도를 할 것인지 , 아니면
인도가 늦어지더라도 개발자가 소프트웨어에 있는
결함들을 수정하든지
개발 조직과 클라이언트 모두에게 이익이 되도록
결정해야함
Dankook.University, Yoo haeyoung, 2005
6.2 Non-Execution-Based Testing
Slide 6.8
기초 원리
문서를 작성하는 사람이 그 문서를 검토하는 책임을 갖는
것은 좋은 아이디어가 아님
그룹 시너지 효과
Dankook.University, Yoo haeyoung, 2005
6.2.1 워크스루 (Walkthroughs)
Slide 6.9
워크스루 팀(walkthrough team)은 4명에서 6명으로 구성
워크스루 팀의 구성
현재 웍플로우를 담당하는 팀의 대표자
다음 웍플로우를 담당할 팀의 대표자
클라이언트의 대표자
SQA 그룹의 대표자
워크스루에서 사용할 자료들은 참가자들이 구체적으로
준비할 수 있게 사전에 배포되어야 함,즉
작성해야할 두가지 아이템
검토자가 이해할 수 없는 항목(item)
부정확하다고 생각되는 항목의 리스트
Dankook.University, Yoo haeyoung, 2005
6.2.2 워크쓰루 관리 (Managing Walkthroughs)
Slide 6.10
워크스루 팀은 SQA 대표자가 의장이 되어야 함
결함들을 수정하는 것은 팀의 임무가 아니고 단지
후의 수정을 위해 문서로 기록
워크스루의 한정된 시간 내에 위원회(즉, 워크스루 팀)가
작성한 수정은 품질면에서 필요한 기법들을 훈련 받은
사람이 작성한 수정보다 떨어질 수 있음
위원회 수정 비용은 너무 높음
결함들로 간주했던 모든 아이템들이 정확하지 않다는 것
워크스루는 2시간 이상 계속하면 안됨
워크스루에서는 결함들을 발견하고 수정할 충분한 시간이 없음
Dankook.University, Yoo haeyoung, 2005
6.2.2 워크스루 관리 (Managing Walkthroughs)(contd)
Slide 6.11
워크스루를 진행하는 방법
참가자-중심(participant- driven)
문서-중심(document-driven)
Verbalization은 결함을 발견할 수 있게 함
워크스루는 고가(성능)평가에 사용되어선 안됨
Dankook.University, Yoo haeyoung, 2005
6.2.3 인스펙션 (Inspections)
인스펙션은 5개의 정형화된 단계로 구성
개요 (Overview)
준비 (Preparation)
발견된 결함들의 유형에 대한 리스트는 빈도에 따라 순위가
부여되기 때문에 큰 도움이 됨
인스펙션 (Inspection)
재작업 (Rework)
사후검토 (Follow-up)
Dankook.University, Yoo haeyoung, 2005
Slide 6.12
6.2.3 인스펙션 (Inspections) (contd)
인스펙션은 4명으로 구성된 팀이 수행
중재자 (Moderator)
현재 워크스루를 수행하고 있는 팀의 멤버
다음 웍플로우를 수행할 팀의 멤버
SQA 그룹의 멤버
중요한 담당 역할은 다음과 같음
중재자 (Moderator)
판독자 (Reader)
기록자 (Recorder)
Dankook.University, Yoo haeyoung, 2005
Slide 6.13
결함 통계 (Fault Statistics)
Slide 6.14
결함들은 엄격히 기록됨
Example:
Major or minor
결함들은 결함 타입으로 기록됨
설계 결함들의 예:
명세 아이템 모두가 어드레스를 가지고 있는 것은 아님
각 인터페이스에 대해 실 인수(actual argument)들과 가인수들이
대응되어 있지 않음
Dankook.University, Yoo haeyoung, 2005
결함 통계 (Fault Statistics) (contd)
Slide 6.15
주어진 웍플로우에 대해 우리는 이전의
프로덕트들의 결함 비율과 현재 결함 비율을 비교
특정 코드 산출물의 인스펙션이 해당 프로덕트의
다른 코드 산출물에서 발견 된 것 보다 많은
결함들이 나타나면
처음부터 재설계 하는 것은 좋은 대안
인스펙션 프로시저의 중요한 컴포넌트는 결함이
발생한 통계 기록
현재의 인스펙션에서 모든 타입의 결함을 발견할 순 없음
Dankook.University, Yoo haeyoung, 2005
인스펙션 통계 (Statistics on Inspections)
Slide 6.16
IBM 인스펙션의 결과
모든 결함의 82% (1976)
모든 결함의 70% (1978)
모든 결함의 93% (1986)
스위칭 시스템
결함 발견 비용이 90% 감소 (1986)
JPL
각 2시간 인스펙션에서 평균적으로 4개의 중요 결함과 14개의 사소한
결함들이 노출 (1990)
인스펙션 당 약 $25,000의 절약을 의미
발견된 결함들의 개수는 고전적 단계로 보면 지수적으로 감소된 것을
보여 줌 (1992)
Dankook.University, Yoo haeyoung, 2005
인스펙션 통계 (Statistics on Inspections) (contd)
Warning
인스펙션 프로세스의 위험은 성능감정 용으로
사용되면 안됨
“황금 달걀을 낳는 거위를 죽인다”는 속담과 같음
Dankook.University, Yoo haeyoung, 2005
Slide 6.17
6.2.4 인스펙션과 워크스루의 비교
Walkthrough
2단계 비정형 프로세스
준비 (Preparation)
분석 (Analysis)
Inspection
5단계 정형 프로세스
개요 (Overview)
준비 (Preparation)
인스펙션 (Inspection)
재작업 (Rework)
사후검토 (Follow-up)
Dankook.University, Yoo haeyoung, 2005
Slide 6.18
6.2.5 검토의 강점과 약점
(Strengths and Weaknesses of Reviews)
검토(review)는 효과적
Slide 6.19
결함들이 소프트웨어 프로세스 초기에 발견
만약 소프트웨어 프로세스가 부적절 하다면 검토의
효과는 감소
대규모 소프트웨어는 작은 독립된 컴포넌트로 구성되지
않으면 검토하기가 매우 어려움
이전 웍플로우의 문서화가 완전하지 않으면 프로젝트의
현재의 버전을 반영하기 위해 갱신시켜야 하고 또
온라인을 이용할 수 있게 하면 검토 팀들의 효과는 현저히
하락
Dankook.University, Yoo haeyoung, 2005
6.2.6 인스펙션용 척도 (Metrics for Inspections)
Slide 6.20
인스펙션 율(Inspection rate) (e.g., 시간당 검사된
설계페이지들의 수)
결함 밀도 (Fault density) (e.g., 검사된 KLOC(Kilo Line Of
Code: 1000라인)당 결함들의 수 )
결함 발견율 (Fault detection rate) (e.g., 시간당 발견된
결함들의 수)
결함 발견 효과 (Fault detection efficiency) (e.g., 사람 당
발견한 주요-단순 결함들의 수 )
결함 발견율이 50% 증가된 것이 의미하는 것은
품질이 저하되었는가? 혹은
인스펙션 프로세스들이 보다 효율적인가?
Dankook.University, Yoo haeyoung, 2005
6.3 실행 기반 테스팅 (Execution-Based Testing)
조직은 테스팅에 소프트웨어 예산의 50%까지 사용
그럼에도 불구하고 인도된 소프트웨어를 신뢰할 수
없다고 말함
Slide 6.21
Dijkstra (1972)
“프로그램 테스팅은 버그의 존재를 보여주는 가장
효과적인 방법일 수 있지만, 그들이 없는 것을
보여주기에는 안타깝게도 부적절하다.”
Dankook.University, Yoo haeyoung, 2005
6.4 테스트 대상은 무엇인가?
Slide 6.22
실행-기반 테스팅(execution- based testing) 정의
“알고 있는 환경에서 선택된 데이터를 대입시켜
프로덕트에 실행해서 나온 결과를 기준으로 프로덕트의
어떤 행위의 성질을 추론하는 과정”
이 정의에는 다음의 세가지 고민스러운 의미가
내포되어 있음
Dankook.University, Yoo haeyoung, 2005
6.4 테스트 대상은 무엇인가? (contd)
Slide 6.23
“추론(Inference)”
사용자 결함 보고서, 소스코드, KLOC 등. 이들로 부터
테스터는 결함이 있다면 어떤 것이 있는지를 추론해야
“알고 있는 환경 (Known environment)”
우리는 결코 우리가 처한 환경을 알지 못할 수도 있음
“선택된 입력들 (Selected inputs)”
때로는 우리가 원하는 입력들을 제공할수가 없다,즉
실시간 시스템인 경우에 입력들이 시스템을 자주 제어할
수 없음
시뮬레이션이 필요
Dankook.University, Yoo haeyoung, 2005
6.4 테스트 대상은 무엇인가? (contd)
Slide 6.24
우리는 정확성(correctness),그리고 다음의
항목들을 테스트할 필요가 있음.필요충분 조건은
아니지만.
유용성 (Utility)
신뢰성 (Reliability)
강건성 (Robustness)
성능 (Performance)
Dankook.University, Yoo haeyoung, 2005
6.4.1 유용성 (Utility)
Slide 6.25
유용성(utility)은 정확한 프로덕트가 해당 명세들이
허용한 조건들 아래서 사용될 때 사용자의
니즈(user`s needs)를 만족시키는 정도를 의미함
Examples:
Ease of use
Useful functions
Cost effectiveness
Dankook.University, Yoo haeyoung, 2005
6.4.2 신뢰성 (Reliability)
Slide 6.26
신뢰성(Reliability)은 프로덕트 실패의 빈도와
위험을 측정하는 것
프로덕트들이 얼마나 자주 실패하는지(mean time
between failures)
해당 실패의 결과들이 얼마나 나쁜 영향 미칠 수
있는지(mean time to repair)
프로덕트가 실패할 때 실패를 복구하는데 평균적으로
얼마나 걸리는지(time (and cost) to repair the results of
a failure)
Dankook.University, Yoo haeyoung, 2005
6.4.3 강건성 (Robustness)
Slide 6.27
A function of
The range of operating conditions
The possibility of unacceptable results with valid input
The effect of invalid input
Dankook.University, Yoo haeyoung, 2005
6.4.4 성능 (Performance)
Slide 6.28
성능(performance)은 테스트해야 할 프로덕트의 또
다른 측면
프로덕트는 응답 시간이나 공간 요구에 대한 제약을
만족시키는 정도를 의미함
실시간 소프트웨어는 시간 제약으로 특징지을 수
있음
만약 시스템이 너무 느려서 데이터를 잃어버린다면
그 데이터들을 되찾을 방법이 없음
Dankook.University, Yoo haeyoung, 2005
명세의 정확성 (Correctness of specifications)
Slide 6.29
정렬에 대한 부정확한 명세:
Figure 6.1
명세들을 충족시키는 메쏘드 trickSort 방법 :
Figure 6.2
Dankook.University, Yoo haeyoung, 2005
명세의 정확성 (Correctness of specifications) (contd)
Slide 6.30
정렬에 대한 부정확한 명세 :
Figure 6.1 (again)
정렬을 위해 고쳐진 명세:
Figure 6.3
Dankook.University, Yoo haeyoung, 2005
6.4.5 정확성 (Correctness)
Slide 6.31
프로덕트가 만약 설계명세를 만족시킨다면 이 프로덕트는
정확(correct)하다고 말함
기술적으로, 정확성은
필요하지 않음 (Not necessary)
Example: C++ compiler
충분하지 않음 (Not sufficient)
Example: trickSort
그래서 프로덕트의 정확성은 필요ㆍ충분 조건이 아님
Dankook.University, Yoo haeyoung, 2005
6.5 테스팅 대 정확성 증명
Slide 6.32
Testing versus Correctness Proofs
정확성 증명(correctness proof)은 프로덕트가 해당
명세들을 만족여부를 보여주는 수학적인 기법
Dankook.University, Yoo haeyoung, 2005
6.5.1 정확성 증명의 예
Slide 6.33
정확성을 증명 할 코드 세그먼트(code segment)
Figure 6.4
Dankook.University, Yoo haeyoung, 2005
6.5.1 정확성 증명의 예 (contd)
A flowchart equivalent
of the code segment
Dankook.University, Yoo haeyoung, 2005
Figure 6.5
Slide 6.34
6.5.1 정확성 증명의 예 (contd)
Add
입력명세 (Input specification)
출력명세 (Output specification)
루프 인베리언트 (Loop invariant)
어서션 (Assertions)
(See next slide)
Dankook.University, Yoo haeyoung, 2005
Slide 6.35
6.5.1 정확성 증명의 예 (contd)
Figure 6.6
Dankook.University, Yoo haeyoung, 2005
Slide 6.36
6.5.2 Correctness Proof Mini Case Study
Slide 6.37
비정형 증명(induction)은 6.5.1절에 있음
Dijkstra (1972):
“프로그래머는 프로그램 증명과 프로그램이 잘 어울리게
성장 시킨다 ”
Naur - “텍스트 프로세싱 문제 (text-processing
problem)” (1969)
Dankook.University, Yoo haeyoung, 2005
Naur의 텍스트 프로세싱 문제
Blank 문자들이나 Newline 문자들로 분리된
단어들로 구성된 텍스트가 주어지면 다음 구성
규칙들에 따라 line-by-line 형태로 변환 됨:
line break들은 주어진 텍스트가 blank나 newline을
포함하는 곳에서만 만들어져야 함
각 line은 가능한 한 길게 채워져야 함
maxpos 문자들보다 더 많이 포함되는 line은 없음
Dankook.University, Yoo haeyoung, 2005
Slide 6.38
Episode 1
Naur는 프로시저를 대략 25라인으로 구축
그는 정확성을 비정형적으로 증명했음
Dankook.University, Yoo haeyoung, 2005
Slide 6.39
Episode 2
Slide 6.40
1970 — Computing Reviews의 Leavenworth가
검토
그는 Naur의 프로시저 출력에서 첫 라인의 첫 단어는
첫 단어가 정확히 maxpos 문자들 길지 않으면 blank로
처리된다고 지적
Dankook.University, Yoo haeyoung, 2005
Episode 3
Slide 6.41
1971 — London은 Naur의 프로시저에 있는 세 가지
추가 결함을 찾아 냄
Including:
maxpos 문자보다 더 긴 문자를 만나지 않는다면 그
프로시저는 종료되지 않는다는 사실
Dankook.University, Yoo haeyoung, 2005
Episode 4
Slide 6.42
1975 — Goodenough와 Gerhart가 London이
그들의 공식적인 “증명”에도 불구하고 발견치 못한
3가지 결함을 발견
Including:
마지막 단어가 blank나 newline이 나오지 않는 한
출력되지 않는다는 사실을 포함
Dankook.University, Yoo haeyoung, 2005
6.5.2 Correctness Proof Mini Case Study (contd)
Slide 6.43
Lesson:
프로덕트가 정확하다고 증명되었어도 그것은
철저하게 테스트를 해야 함.
Dankook.University, Yoo haeyoung, 2005
6.5.3 정확성 증명과 소프트웨어 공학
Correctness Proofs and Software Engineering
정확성 증명의 세가지 신화
Slide 6.44
소프트웨어 엔지니어들은 적절한 수학적 훈련을 받지 못했다는 주장
컴퓨터 과학 주요과목에는 선수과목으로 있거나 전문적으로 정확성
증명기법을 배울 수 있게 기초가 포함되어 있음
증명은 비용이 너무 많이 들기 때문에 소프트웨어 개발에 사용할 수
없다는 주장
정확성 증명의 경제적인 실용성은 비용-이익 분석(5.2절)을 사용해
프로젝트 단위로 결정
정확성을 증명하는 것이 너무 어렵다는 주장
많은 프로덕트들은 성공적으로 정확하다고 입증
이론 증명기(theorem prover)와 같은 많은 툴들이 정확성 증명을 돕는데
사용
Dankook.University, Yoo haeyoung, 2005
정확성 증명의 어려움
Slide 6.45
우리는 어떻게 다음의 theorem prover가 정확하다고 확신할
수 있는가?
Figure 6.7
만약 이론 증명기가 This product is correct라고 출력하면
우리는 그것을 믿을 수 있는가 ?
이론 증명기의 출력물에 어떤 신뢰성이 있는가 ?
결코 우리는 설계 명세나 검증 시스템이 옳다고 확신할 수
없음.
Dankook.University, Yoo haeyoung, 2005
6.5.3 정확성 증명과 소프트웨어 공학(contd)
Slide 6.46
소프트웨어 엔지니어링 툴은 정확성 증명에 중요함
informal proofs 는 프로덕트의 품질을 향상 시킬 수
있음
Use the assert statement
Dankook.University, Yoo haeyoung, 2005
6.6 누가 실행-기반 테스팅을 수행하는가?
프로그래밍은 건설적임(constructive)
테스팅은 파괴적임(destructive)
Slide 6.47
성공적인 테스트는 결함을 발견함
그래서 프로그래머들은 그들 자신의 코드 결과물을
테스트하지 말아야 함
Dankook.University, Yoo haeyoung, 2005
6.6 누가 실행-기반 테스팅을 수행하는가?(contd)
Slide 6.48
Solution:
프로그래머는 informal testing을 함
그 후 SQA 그룹은 체계적인 테스팅을 함
프로그래머는 모듈의 결함을 없앰 (debugs)
모든 테스트 케이스는
미리 계획되어야 함
기대한 output을 포함 하여야 함
그 후 유지 되어야 함
Dankook.University, Yoo haeyoung, 2005
6.7 테스트 종료 시기
Slide 6.49
프로덕트가 많은 해 동안 성공적으로 유지보수 된
후 그 사용성이 결국에 손실되면 전체적으로 다른
프로덕트로 교체
소프트웨어를 폐기할 때 곧 테스팅을 종료시키는
시점
Dankook.University, Yoo haeyoung, 2005