p4
퀄리티 있는 sw를 만드는 것은 어렵다.
- 간단한 프로그램을 작성하는 것도 어렵다.
- 정확성과 신뢰성 둘다 가지는 sw를 만드는 것은 쉽지도 않으면 어려운 일이다.
- sw의 복잡도는 인간의 뇌의 역량에 비해 훨씬 복잡해져가고 있다.
- 데이터의 크기 증가
- 분산처리
- 시스템이 동적으로 바뀐다 ex) malloc
- 동시성, 멀티스레드 프로세싱
p5
삼각형을 판별하는 프로그램의 예제
- 3변의 길이로 삼각형 유무 판별 result 뜻
0 정삼각형 1 이등변 삼각형 2 삼각형 아님 3 그 외 삼각형 - 위와 같은 예제는 “Requirement Test” 혹은 “Black Box Test”라고 한다.
- 그렇자면 해당 프로그램을 확인하기 위해 총 몇번의 Test가 필수인가.→ 올바른 인자가 들어왔는지에 대한 테스트
- → 총 5번
- → result 0~3 에 대한 테스트
p6
- 만약 코드가 확인 가능하다 → white Test
- Test case의 min과 max 사이에 적절하게 확인
- 적합한 Test Case는 모른다.
p7
- Test : Best Effort Test를 지향해야 한다.
- 특정 프로그램의 controll flow Diagram이 있을 경우 몇번의 test가 필요한가?
- min : Path를 확인하는것
- max : 들어올수 있는 모든 경우의 수
- ex) 삼각형 판별 프로그램의 경우 2^32 * 2^32 * 2^32이다. (int의 범위)
p9
- sw의 퀄리티는 누구든 신경쓴다.
- customer, developer, operator, enterpreneur, people in general..
p14
- 테스팅로 모든 문제를 잡을 수 없다.
- 테스트는 best-effort이다. (할 수 있는 최대한도)
- 그럼에도 불구하고 테스팅은 필수적이다.
- 충분하지는 않지만 그럼에도 불구하고 해야만 한다.
p16
- best effort는 min과 maximun이 존재하며 이 사이에 존재하는 gap사이에서 적절한 값을 찾는 것이 필요하다
p18
- Fault, Errors, failure이 3가지를 꼭 알아야 한다.
- Software Fault
- 소프트웨어 내에 존재하는 정적인 결함이며 코드만을 보고 확인이 가능하다.
- 프르그래머 레벨에서는 부정확한 소스코드로 이야기할수있으며 Error가 생길수도 있음
- (생길수도 있다고 한 이유는 fault가 존재하는 path를 타지 않으면 에러가 발생하지 않을수도 있기때문이다.)
- Software Error
- fault로 인해 발생되며 알맞지 않는 결과를 도출한다.
- 프로그래머 레벨에서는 런타임 도중 영향을 미친다. 또한 Failure가 발생할수도 있다.
- 타이핑 실수 같은 것들
- 내부의 부정확한 state가 존재하는 것을 의미한다.
- software Failure
- 예상치 못한 결과가 도출된다.
- 프로그래머 레벨에서는 프로그램이 실행하는 도중에 error가 프로그램 밖으로 나타난다.
- error의 실행으로 예상치 못한 결과가 도출되는 것을 의미한다. 그러나 error가 실행한다고 해서 무조건 failure가 도출되는 것은 아니다.
chat-gpt
- Fault (결함) : 코드의 오류, 즉 잘못된 코드 또는 버그를 의미합니다. 일반적으로 "결함"이라는 용어는 코드 내부에 존재하는 오류를 나타냅니다.
- Error (에러) : 프로그램이 실행 중에 예기치 않은 동작을 하거나 불완전한 결과를 내는 것을 의미합니다. 에러는 일반적으로 결함으로 인해 발생합니다.
- Failure (실패) : 소프트웨어 제품이 요구 사항을 충족시키지 못하거나 기대한 동작을 하지 못하는 것을 의미합니다. 실패는 일반적으로 결함과 에러로 인해 발생합니다.
- 이러한 fault, error, failure는 논리적인 오류도 포함된다.
- error는 프로그램의 특정 기능에 대해서 말하고 failure는 프로그램 전체적인 면에서의 문제를 말한다.
p20
- 해당 코드에서 Fault는 무엇인가?
- i>0인 부분. cause x[0]인 부분에 대해서는 확인을 못하기 때문에 fault이다
- Fault를 수행하지 않는 test case도 존재하는가?
- x가 null일때는 Fault가 없다.
- Fault를 수행하지만 error수행을 하지 않는 경우는 무엇인가?
- x={1,2,3,4}이고 y=3일경우
- Error는 수행하지만 failure는 아닌 경우는 무엇인가?
- x[0] ≠ y일 때 and 배열 x에 y가 없을때
- 해당 코드에서 fault는 무엇인가.
- i=0 ; i<x.length
- fault를 수행하지 않는 테스트 케이스도 존재하는가?
- 배열 x가 null일때
- fault를 수행하지만 error가 아닌 test case가 있는가
- x배열에 0이 없을때
- error를 수행하지만 failure는 아닌 test case가 있는가
- x배열에 0이 하나 일때
- ex) x = {0,1,2}
p23
- 테스터의 목표는 fault를 최대한 빨리 찾아서 제거하는 것이다.
- 테스팅을 통해 품질을 향상시키고, 비용을 감소시키며, 고객의 만족도를 보존한다.
p25
- Testing : 실행을 통해 소프트웨어를 평가하는것
- test failure : 테스트의 실행으로 소프트웨어가 failure하는 것
- Debugging: failure를 유발한 fault를 찾는 과정
- 모든 inputdms fault를 유발하지 않는다.
chat-gpt
- testing은 소프트웨어가 예상대로 동작하는지 확인하기 위한 과정.
- debugging은 소프트웨어에서 발생하는 버그를 찾고 수정하는 과정.
p26
- fault & failure Model(RIPR)
- failure를 관찰하기 위해서는 다음 4가지의 조건이 필요하다.
- Reachability: fault가 발생하는 지점까지 도달 가능해야 한다.
- Infection: 프로그램의 상태가 부정확해야 한다.
- Propagation: infection된 상태가 전파 가능해야한다./ output이나 finalState까지 갈수 있어야 한다.
- Reveal: 테스터가 프로그램의 부정확한 부분을 확인할 수 있어야 한다.
p27
- coverage criteria : 프로그램이 얼마나 커버 가능한가에 대한 기준
- 테스터는 최소한의 입력값과 최대한의 입력값사이를 찾아야 한다.
- coverage criteria로 input의 규모를 정할수 있고 동일한 test를 반복하지 않을 수 있다.
p28
- Coverage criteria로 인해 얻을 수 있는 장점은 다음과 같다.
- 효율성을 극대화 할 수 있다.
- 테스트에 대한 추적정을 제공해준다.
- 소스코드, 요구사항, 디자인 모델..
- 회귀 테스팅을 수월하게 해준다.
- test input을 생성하는 기준이 존재하는가?, 만약 프로그램을 수정한다면 해당 프로그램에 대한 test case를 전부 수행한다.
- 끝나는 기준을 제시 할 수 있다.
- 강력한 도구가 될 수 있다.
p29
- Test Criterion and requitrement
- test criterion: 테스트 기준점
- 모든 statement에 도달할수 있는가. - 메서드. 함수 내부적인 측면
- 모든 기능적인 요구사항을 충족하는가 - 메서드, 함수 외부적인 측면
- test requirement: 테스트 동안 만드시 만족해야 하는것들
- 각 statement들이 반드시 test되는가
- 각 기능적인 요구사항들이 충족 되는가
p32
- types of test activities 디버깅은 포함 되지 않는다.
- test design(Criteria-based, Human-based) 테스트 디자인
- test automation 테스트 자동화
- test execution
- test evaluation
p33
- Test Design(criteria-based)
- sw testing중에서 가장 technical할 일이다.
- 요구되는 능력으로는
- 이산수한
- 프로그래밍
- 테스팅
- cs지식 많이 필요
- chanllenging한 일이다.
p34
- Test design(human-based)
- 도메인에 대한 지식을 필요로 한다.
- 개발자보다 더 어려울수있다.
- cs에 대한 지식은 거의 필요로 하지 않는다.
- challenging한 일이다.
p35
- Test Automation
- 덜 technical하다.
- 프로그래밍에 대한 지식이 필요로 된다.
p38
- test management
- test maintenance : code가 변경되어도 test case 재사용 가능하도록 하는것.