Cem Kaner는 왜 버그를 드러내지 않는 테스트를 시간 낭비라고 생각합니까?


15

긍정적 인 테스트에서 기능을 확인하고 작동하는지 확인하는 것은 어떻습니까? 시간 낭비라고 말해야합니까? 이 인용문 뒤에 어떤 개념이 있습니까?

실패한 테스트, 즉 오류를 찾지 못하는 테스트는 시간 낭비입니다.

웹 엔지니어링 : Cem Kaner를 인용 하는 웹 애플리케이션의 체계적인 개발 원칙 .


2
실제로는 아닙니다. Kaner는 일반적으로 테스트에서 결함이 발견되어야한다고 주장합니다.
John V

4
그것은 매우 학문적 인 입장입니다. 카너 씨와 슈뢰딩거 씨는 언젠가 커피 한 잔을 마셔야합니다.
Blrfl

2
@Blrfl의 유일한 문제는 슈뢰딩거 씨가 죽었다는 것입니다. 아, 잠깐만 ... 음 ...
ikmac 1

1
문맥이없는 그 말은 어리석게 어리석게 들린다 ...
Rig

1
“긍정 테스트에서 기능 확인”– 근본적으로 불가능합니다. 당신 올바른 것을 증명할 수 없으며 단지 잘못을 증명할 수 있습니다.
Konrad Rudolph

답변:


37

25 년 전에 테스트 컴퓨터 소프트웨어의 대부분을 썼습니다. 나는 그 책이 구식이거나 단순히 잘못되었다고 생각하는 여러 부분을 지적했다. http://www.kaner.com/pdfs/TheOngoingRevolution.pdf를 참조 하십시오

내 사이트에서 블랙 박스 소프트웨어 테스팅 코스 (비디오 및 슬라이드 무료 제공), www.testingeducation.org/BBST에 대한 추가 정보 (현재보기는 있지만 TCS에 대한 명시적인 포인터는 없음)를 볼 수 있습니다.

당시의 테스트 문화는 크게 확증되었습니다.

현대식 테스트에서는 단위 테스트에 대한 접근 방식이 크게 확인됩니다. 소프트웨어가 의도 한대로 계속 작동하는지 확인하는 자동화 된 테스트 모음을 작성합니다. 테스트는 코드의 다른 부분에 문제가 있거나이 부분에 문제가 있거나 실제 세계에서는 불가능했던 데이터 값이 현재 응용 프로그램에 도달하면 변경 감지기로 작동합니다. 유지 보수 문제에 프로그래머.

나는 확인 사고 방식이 단위 테스트에 적합하다고 생각하지만 모든 시스템 테스트가 확인 된 세계를 상상하십시오 (구별을하는 사람들의 경우 시스템에 대한 의견에 포함 된 "시스템 통합 테스트"및 "수락 테스트"를 해석하십시오) 테스트 시점은 프로그램이 사양을 충족하는지 확인하는 것이 었으며, 지배적 인 접근 방식은 사양의 일부를 프로그램의 동작에 매핑하는 시스템 수준의 회귀 테스트를 구축하는 것이 었습니다. (사양 별 행동 확인이 유용하다고 생각하지만 더 큰 목표의 작은 부분이라고 생각합니다.)

이런 식으로 작동하는 테스트 그룹이 여전히 있지만 더 이상 지배적 인 관점은 아닙니다. 당시는 그랬습니다. 나는이 사고 방식을 꾸준히 훈련 받고있는 사람들을 강조하기 위해 강조하면서 명쾌한 대조를 그렸다. 오늘날 일부 명암 대비 (여기 인용 된 것 포함)는 구식입니다. 그들은 잘못된 견해에 대한 공격으로 잘못 해석됩니다.

내가 알다시피, 소프트웨어 테스팅은 소프트웨어 제품이나 서비스에 대한 품질 관련 정보를 배우기위한 경험적 과정이다.

유용한 정보를 공개하도록 테스트를 설계해야합니다.

그때까지, 아무도 "정보"를 드러내는 방법으로서 테스트에 대해 이야기 한 사람은 없었습니다. 그 당시 테스트는 (일부 버전의 ...) 버그를 찾거나 (일부 버전의 ...) 사양에 대해 프로그램을 확인 (확인)하는 것이 었습니다. 나는 테스트가 유용한 정보를 드러내 기위한 주장이이 세기까지 테스트 어휘에 들어온 것으로 생각하지 않는다.

정보 가치 측면에서 등급 테스트를 상상해보십시오. 우리가 소프트웨어에 대해 알지 못하는 것을 가르쳐 줄 가능성이 높은 테스트는 정보 가치가 매우 높습니다. 우리가 이미 기대하고 이미 여러 번 입증 된 것을 확인할 가능성이 높은 테스트는 정보 값이 낮을 것입니다. 테스트 우선 순위를 정하는 한 가지 방법은 낮은 정보 값 테스트 전에 높은 정보 값 테스트를 실행하는 것입니다.

소프트웨어 우선 순위에 대해 알지 못하는 프로그래머, 프로젝트 관리자 또는 프로세스 관리자의 관심을 끌 수 있도록이 우선 순위를 지나치게 단순화하려는 경우 "버그를 해결하도록 설계된 테스트는 시간 낭비입니다" " 완벽한 번역은 아니지만 미묘함이나 자격을 이해하지 못하거나 이해하지 못하는 독자들에게는 그것이 가능한 한 가깝습니다.

당시에는 다시 한 번 보았습니다. 테스트를 이해하지 못하는 사람들 중 일부는 코너 케이스를 찾기 위해 설계된 테스트가 주요 기능의 주요 사용 테스트와 비교할 때 시간 낭비라고 응답했습니다. 그들은 두 가지를 이해하지 못합니다. 먼저, 테스터가 경계 값을 확인할 시간을 찾음에 따라 주요 기능의 주요 사용은 이미 여러 번 실행되었습니다. (예, 예외가 있으며 대부분의 테스트 그룹은 해당 예외에주의를 기울여야합니다.) 둘째, 극단적 인 값으로 테스트하는 이유는 프로그램이 극단적 인 값으로 실패 할 가능성이 높기 때문입니다. 극단적으로 실패하지 않으면 다른 것을 테스트하십시오. 이것은 효율적인 규칙입니다. 반면에 극단적 인 값으로 실패하면 테스터가 중지하여 버그를보고하거나 테스터가 추가 문제를 해결할 수 있습니다. 프로그램이 더 일반적인 값으로 같은 방식으로 실패하는지 확인하십시오. 문제 해결 담당자 (테스터 또는 프로그래머)는 기업 문화의 문제입니다. 일부 회사는이를 위해 테스터 시간을 책정하고, 일부는 프로그래머 예산을 책정하며, 일부 회사는 프로그래머가 문제를 해결할 수 있도록 일반화 여부에 관계없이 코너 버그를 수정하기를 기대합니다. 테스터가 극단적 인 값을 테스트하여 효율성을 극대화하기보다는 시간을 낭비하고 있다는 일반적인 오해는 "버그를 나타내도록 설계되지 않은 테스트가 시간 낭비"라는 또 다른 이유입니다. 일부 프로그래머가 (실제로) 프로그램에 도전 할 수있는 테스트를 실행하지 않도록 장려합니다. 메시지는 지나치게 단순화되었지만 전체 토론은 지나치게 단순화되었습니다.

그건 그렇고, "정보 가치"가 유일한 우선 순위 시스템 일 수는 없습니다. 단위 테스트 스위트를 설계 할 때는 규칙이 아닙니다. 빌드 검증 테스트 (일명 위생 검사)를 설계 할 때는 규칙이 아닙니다. 두 경우 모두 개별 테스트의 힘보다 적용 범위 유형에 더 관심이 있습니다. 개별 테스트의 힘이 내 디자인과 관련이없는 다른 경우 (예 : 설정, 실행 및 모니터링이 저렴한 대량 자동 테스트)가 있습니다. 추가 예를 생각할 수 있습니다.

그러나 일반적으로 하나의 규칙 만 명시 할 수 있다면 (예 : 한 문장 이상을 처리하려고 할 때 머리를 폭발시키는 경영진에게 말하면) 낮은 정보 가치 테스트는 일반적으로 시간 낭비입니다.


4
당신이있어 질문에 대답하는 시간을내어 한 에 대한 권위있는 소스를뿐만 아니라 사람을보고 ... 항상 좋은을 사용하는 재미 많은 사람들이 나를 봐 용어 "빌드 검증 테스트"내 사용을 확인하는 당신의 키가 여기 사람들을 돕기 위해 시간이 걸리는
Jimmy Hoffa

1
Eric G : 다시 읽는다면 Cem은 독자의 일부로서 주제에 대한 그의 견해가 시간이 지남에 따라 진화했다는 것을 이해한다고 말합니다. 또는 당신은 Cem을 역설하기 위해 미묘함과 자격을 계속 수행하고 무시할 수 있습니다. (나는 그러나 예외로서가 아닌 자신의 자격 증명으로 "자격"을 가지고.)
짐 홈즈에게

당신의 인용문은 과학에 대해 내가 관찰 한 것을 상기시켜줍니다. 이론과 일치하는 결과를 얻을 것으로 기대되는 실험을 수행함으로써 과학 이론을 증명할 수 없거나 의미있게지지 할 수 없습니다. 이론을지지하는 방법은 그것을 지원하지는 않지만 그렇게 할 수없는 장치 실험에 선의의 노력을 기울이는 입니다.
supercat

@supercat 이론 이전에 테스트가 수행되지 않은 경우 이론과 일치하는 무언가에 대한 테스트로 이론을 지원할 수 있습니다 (예 : 진공 상태에서 떨어지는 물체의 가속도를 계산하는 것과 동일 함) 아래로 떨어지는 것을 보여주는 것 이상을 말합니다). 에지 테스트는 유사합니다. 극단적 인 값을 처리 할 때 소프트웨어가 올바르게 작동 할 것으로 예상 할 수 있지만, 개발 과정에서 보았던 입력 값을 반복하고 버그를 발견 할 가능성이있는 것보다 품질을 확신 할 수 있습니다.
Jon Hanna

@JonHanna : 문구가 잘못되었습니다. 문제는 기대가 아니라 노력입니다. 하나는에 의해 이론을 증명할 수 시도 가 전달합니다 테스트를 찾기 위해; 유효하지 않은 경우 실패 할 테스트를 찾기 위해 선의의 노력을 기울여야합니다.
supercat

11

Kaner에 따르면이 아이디어는 "테스트 사례를 다 사용하기 전에 시간이 부족하기 때문에 가능한 효율적으로 사용 가능한 시간을 사용하는 것이 중요합니다."라고 말합니다.

당신이 요구하는 인용의 개념은 " 컴퓨터 의 테스트 목표 및 한계"장에서 Cem Kaner (Jack Falk, Hung Quoc Nguyen)의 컴퓨터 소프트웨어 테스팅 기사에 자세하게 설명되어 있습니다 .

왜 테스트를합니까?

모든 버그를 찾을 수는 없습니다. 프로그램을 올바르게 증명할 수 없으며 원하지 않습니다. 비싸고 실망스럽고 인기 콘테스트에서 이기지 못합니다. 그렇다면 왜 테스트를 방해합니까?

프로그램 테스트의 목적은 IT의 문제를 찾아내는 것입니다

문제를 찾는 것이 작업의 핵심입니다. 가능한 많은 것을 찾아야합니다. 문제가 심각할수록 좋습니다.

테스트 사례가 부족하기 전에 시간이 부족하므로 가능한 한 효율적으로 사용 가능한 시간을 사용해야합니다. 7,8,12,13 장은 우선 순위를 자세히 고려합니다. 안내 원칙은 간단하게 다음과 같습니다.


문제를 드러내는 테스트는 성공입니다. 문제를 밝히지 않은 테스트는 시간 낭비였습니다.


Myers (1979)의 다음 비유를 고려하십시오. 무언가 잘못되었다고 가정하십시오. 당신은 의사에게갑니다. 그는 테스트를 실행하고 무엇이 잘못되었는지 찾아 내고 시정 조치를 권장해야합니다. 그는 테스트 후 테스트 후 테스트를 실행합니다. 결국, 그는 잘못된 것을 찾을 수 없습니다. 그는 훌륭한 테스터입니까 아니면 무능한 진단 가입니까? 당신이 정말로 아프면, 그는 무능하며, 값 비싼 테스트는 시간과 돈과 노력의 낭비였습니다. 소프트웨어에서 당신은 진단 전문가입니다. 이 프로그램은 (확실히) 아픈 환자입니다 ...


위의 요점은 테스트를 현명하게 우선시해야한다는 것입니다. 테스트는 제한된 시간이 소요될 것으로 예상되며 주어진 시간 내에 모든 것을 테스트 하는 것은 불가능합니다 .

테스트를 실행하는 데 하루 (주, 월)를 보내고 버그를 발견하지 못했으며 버그를 밝힐 테스트를 실행할 시간이 없었기 때문에 버그가 사라 졌다고 상상해보십시오. 이런 일이 발생하면이 미스를 정당화하기 위해 "다른 테스트를 수행 하느라 바빴 기 때문에 내 잘못이 아닙니다"라고 말할 수는 없습니다.

버그를 밝히지 않는 테스트를 실행하는 데 시간을 낭비했으며 이로 인해 버그를 발견 한 테스트를 놓쳤습니다.

(당신이 궁금해하는 경우 경우, 위의 같은 미스 상관없이 당신이 시도하는 방법을 일반적으로 피할 수없고, 거기에 있는 이들에 대처하는 방법이 있지만, 그 SQA에 대한 별도의 질문에 대한 더 많은 주제 ... 아마 더 잘 맞는 것입니다. SE.)


12
이 답변은 자신의 입장을 정확하게 나타내지 만 많은 사람들이 자신의 입장이 잘못되었다고 생각할 가치가 있습니다. 앱에서 가장 중요한 기능을 보여주는 테스트 (정확한 경우 수락 테스트)와 드물게 사용되는 앱 코너에서 사소한 버그 (한 픽셀 단위로 정렬)를 찾는 테스트 중에서 선택하면 제한된 시간에 어떤 것을 선택해야하는지 알고 있습니다. 그리고 의사의 비유를 위해 : 증상에 대한 반응보다는 검사를 받고 있다면, 심장이 좋은지, 폐가 좋은지 등을 확인하는 것이 좋은 결과입니다. 그래서.
Kate Gregory

@KateGregory 동의합니다. 나는 그의 의견이 잘못되었다고 생각한다. 우리는 주로 정보를 수집하기 위해 테스트한다.
John V

2
@KateGregory 동의-통과 된 테스트를 총 폐기물로 표시하는 것이 정확하지 않다고 생각합니다. 비록 그가 한 가지 점은 시간 이 없다고 생각합니다 . 만약 릴리스 테스트를 통해 버그가 미끄러지면 QA는 "오, 그러나 우리는 다른 테스트를 수행 하기 위해 바빴 습니다 " 이상의 것을 필요 로합니다. 나는 이것을 과거에 테스터로 겪어 왔으며 지금은 개발자라는 것을 알았습니다. 그리고 그것이 사라질 것이라고 생각하지 않습니다.
gnat

4

글쎄요, 캐너 씨는 모르지만 IMHO

잠재적으로 오류를 찾지 못하는 테스트

시간 낭비입니다. 여기에는 이미 일부 테스트가있는 상황 (자동 또는 검사 목록에 있는지 여부는 중요하지 않음)이 포함되며 기본적으로 이미 보유한 것과 동일한 경우를 검증하는 새 테스트를 추가합니다. 따라서 새로운 테스트는 기존 테스트보다 더 많은 오류를 찾지 않습니다.

예를 들어, 당신이 무작위로 목록을 통해 그러한 상황이 발생할 수 있습니다-나는 "무용지물"이라고 말할 수 있습니다 (그 단어를 용서하십시오). 입력 데이터의 클래스 또는 이미 작성된 테스트와 관련하여 코드 범위를 증가시키는 경우.


-1

내 생각에이 인용구는 너무 일반적이거나 견고하지 않은 테스트를 말합니다.

이메일을 검증하는 기능을 테스트하고 테스트에서 유효한 이메일 만 제공하는 경우 해당 테스트는 완전히 쓸모가 없습니다. "모든"문자열 가능, 유효하지 않은 이메일, 너무 긴 이메일, 유니 코드 문자 (áêñç ....)에 대해이 기능을 테스트해야합니다.

name@dom.com이 true를 반환하고 name @ com이 false를 반환하는지 확인하는 테스트를 코딩하는 경우 해당 테스트는 전혀 테스트와 동일하지 않습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.