-
sw 테스팅의 어려움테스팅 관련/Q&A 2020. 5. 23. 01:46
Q. 소프트웨어 테스팅은 소프트웨어가 불연속적이기 때문에 많은 규율로 테스트하는 것과는 다르다. 수학에서는, 연속성은 함수의 값을 알고 있다면, 그 주변 값들에 대해 주장할 수 있다. 테스팅에서 왜 이것이 중요할까?
더보기A. 연속적 시스템들은 종종 하나의 테스트 결과에서 주변 테스트들의 결과까지 추론할 수 있으므로 더 심플하다.
Q. the Zune은 경계 조건(boundary conditions)들에 대한 테스트들이 필요하다. 이 것들은 산술식(arithmetic) 또는 관계식(relational expressions)의 경계(boundaries)들이 테스트 되는지 확인하는 값들이다. 다음 function에서 경계 조건 테스트들의 예제는 무엇인가?
int FlipSome(int A, int N, int X) { int i = 0; while (i) { if(A < 0) { A = -A; } i++; } return(1); }
더보기A. [A = 5, X = 5, N = 5] → A < X 의 경계를 확인.
[A= 1, X = 10, N = 1] → i < N 의 경계를 확인. i = 1이 되면, i < N 또는 i <= N 이 올바른 것인지 테스트 할 수 있다.
Q. 테스팅은 (주로) 낙관적인(optimistic) 또는 비관적인(pessimistic) 검증(verification) 기술인가?
더보기A. 낙관적(Optimistic)
대부분, 테스팅은 낙관적이다. 어떠한 입력값들에 대해서 결과가 틀리게 나와도 프로그램은 올바르게 작동하기 때문이다. 오직 테스트들이 잘못 명시되었을 때"만", 테스팅은 비관적이다. 만약 테스터가 테스트 결과값을 잘못 표시하면, 그 테스트는 부정행위로서(as misbehaving) 프로그램에게 잘못(incorrectly) 경고할지도 모른다.
Q. 충분한 노력이 있다는 가정하에, 어떤 프로그램이든 모든 경우에서 그에 상응하는 필요조건(requirements)들을 충족시키는지 증명하는 것이 항상 가능한가?
더보기A. 아니오
임의의 프로그램과 임의의 입력이 주어져 있을 때, 올바른 값을 생성하는지는 커녕 해당 프로그램이 끝날 수 있는지 아니면 무한히 계속 도는지 알 수 있는지 여부마저도 이론상으로 결정할 수 없다. 이를 Alan Turing의 정지 문제(Halting Problem)라고 부른다.
여기서 중요한 내용은 "임의"라는 것에 있다. 즉, 이 세상에 존재하는 모든 프로그램과 모든 입력에 대해서 해당 판별 알고리즘이 존재하는지 여부를 묻는 문제라고 볼 수 있다.
→ 해당 문제에 대한 결론이 가져다주는 결론은 컴퓨터로 해결할 수 없는 문제가 존재할 수 있다는 것을 의미.
'테스팅 관련 > Q&A' 카테고리의 다른 글
자동화: 테스팅 프레임워크 사용 (0) 2020.05.25 테스트는 무엇일까? (0) 2020.05.24 테스트 주도 개발 (0) 2020.05.23 커버리지 테스팅 (0) 2020.05.23 소프트웨어 테스팅 개념 (0) 2020.05.22