11 22 Reading_Assignment_6(20094068 3학년 이준서) - JunSeoLee/project_team_5 GitHub Wiki
###소프트웨어 테스팅은 무엇인가? 그리고 왜 그렇게 어려운가?
거의 모든 개발자는 사용자에 의해 보고 된 소프트웨어 버그에 좌절을 맞고 있다. 사용자의 버그는 이럴 때 보고된다. 첫 번째 사용자는 테스트되지 않은 코드를 실행했을 때 두 번째 실제 사용에서 실행되는 순서의 불일치. 세 번째 사용자가 검증되지 않은 입력 값의 조합을 적용. 네 번째 테스트되지 않은 사용자의 운영 환경. 그래서 이런 어려움의 일부를 명확하게 알기 위한 네 단계의 테스트가 있다. 첫 번째로 소프트웨어의 환경을 모델링 두 번째로 테스트 시나리오의 선택 세 번째로 테스트 시나리오를 실행 및 평가 네 번째로 테스트 진행 상황을 측정이다. 앞으로 이 네 가지에 대한 이야기를 하겠다. 첫 번째로 말한 소프트웨어의 환경을 모델링은 여러 가지가 있다. 테스터는 소프트웨어의 환경을 모델링해야 한다. 모델링에는 여러가지가 있는데 일단 테스터는 식별 및 시뮬레이션 소프트웨어 시스템이 사용하는 인터페이스와 각각의 인터페이스를 교차 할 수 입력을 열거해야 한다. 4개의 일반적인 인터페이스가 있는데 첫 번째로 인간의 인터페이스 두 번째로 소프트웨어 인터페이스 세 번째로 파일 시스템 인터페이스 네 번째로 통신 인터페이스가 있다. 테스터는 테스트중인 소프트웨어의 제어를 벗어나 사용자의 상호 작용을 이해해야 하는데 세 가지가 있다 첫 번째로 다른 사용자가 열어 놓은 그 파일을 삭제 해야 한다. 장치는 통신의 흐름의 중간에 재부팅되어야 한다. 세 번째로 두 소프트웨어 시스템 API에서 중복 서비스에 대한 경쟁이 필요하다. 테스터는 테스트 도중 두 가지 어려움에 직면하게 된다. 첫 번째 모든 변수 입력 값을 선택했을 때 두 번째 어떻게 시퀀스 입력에 결정하느냐이다. 그레서 시퀀스 입력에 대한 테스트 모델을 정의한다. 가장 일반적인 모델은 그래프 또는 상태 다이어그램이고, 다른 인기 있는 모델로는 정규 표현식과 문법, 언어 이론의 도구이고, 덜 사용되는 모델로는 확률 과정과 유전자 알고리즘이 있다. 두 번째로 말한 테스트 시나리오의 선택에서 테스트 시나리오의 무한한 수는 있지만 일부는 적용 할 수 있다. 첫 번째로 테스터는 적용을 위해 노력으로 코드 문을 포함하고 취재를 입력하는 것이다. 두 번째로 코드 입력 범위가 충분한 경우에, 출시 제품은 매우 몇 가지 버그가 있을 것이므로 확인해야한다. 실행 경로와 입력 시퀀스이다. 그리고 최상의 테스트 데이터 적정성 기준이 있는데 가장 많은 버그를 찾을 수 있도록 설정하고 일반적인 시나리오 사용하는 것이다. 그리고 실행 경로로써의 테스트 기준이 있는데 첫 번째로 제어 흐름은 각 소스 문이 적어도 한 번 실행되도록 할 테스트를 설정해야 한다. 가능한 각각의 값으로 평가 할 각 분기 구조의 원인이 테스트를 설정해야 한다. 두 번째로 데이터 흐름이 있는데 초기화 한 다음 나중에 사용할 수 있도록 각 데이터 구조의 원인이 테스트를 설정해야 한다. 세 번째로 오류 시드가 있는데 시드 결함을 각각 노출 테스트를 설정해야 한다. 또 입력 도메인 테스트 기준이 있는데 첫 번째로 단순 적용으로 각 물리적 입력을 포함하는 일련의 테스트를 선택한다. 각 인터페이스 제어가 자극 될 수 테스트 세트를 선택한다. 두 번째로 차별 기준으로 전체 입력 도메인과 같은 통계 속성이 테스트 집합을 선택한다. 일반 사용자에 의해 실행 될 가능성이 경로의 집합을 선택한다. 대부분의 연구자들은 중요한 릴리스 결정을 내릴 때 여러 조건을 사용하는 것이 현명하다는 것에 동의해 한다. 테스터 기준이 자신의 방법론에 내장 된 고유의 한계를 이해하는 알고 있어야 한다. 세 번째로 말한 테스트 시나리오를 실행 및 평가인데 우선 시나리오의 실행에서 테스터는 테스트 시나리오 최대한을 자동화하려고 하고 테스터들은 테스트 후크 나 주장 같은 시뮬레이션 환경에서 데이터 수집 코드가 있다. 시나리오의 평가로는 사양에 설명된 대로 예상 출력 테스트 시나리오 실행에서 발생하는 소프트웨어의 실제 출력의 비교한다. 시나리오의 평가는 어렵기 때문에 보통 인간은 신의 도움에 의해 수행한다. 기본 적으로 테스트를 평가하는 두 가지 방법이 있다. 첫 번째로 형식주의로 형식에 맞춘 평가 방법과 두 번째로 테스트 코드를 포함시키는 방법이 있다. 특정 내부 데이터 개체 또는 상태를 노출시킨 테스트 코드를 평가한다. 자체 테스트 프로그램을 이용하기도 한다. 네 번째로 말한 테스트 진행 상황을 측정으로 일단 진행상황의 측정하는데 있어 계산 방법은 테스트의 진행 상황에 대해 거의 통찰력을 얻을 수 있으므로 확인할 구조 및 기능 테스트 완전성에 설계 문제를 많은 테스터가 응답한다. 테스트 진행 중 테스트를 중지하는 것을 결정하는 것은 고려를 해야 한다. 구조적 관점에서의 테스트 용이성이 있는데 제프리 보하스는 테스트 용이성을 제안했다. 테스트 용이성은 강력한 개념이지만 초기 단계에 있다. 그 예측 능력 데이터가 아직 없다. 또 기능적 관점에서의 신뢰성 모델이 있는데 첫 번째로 수학적 모델과 두 번째로 사용자가 입력을 적용 할 것으로 예상되는 방식에 대한 설명과 세 번째로 실패의 확률을 계산하기 위해 이러한 모델은 장애 발생을 제어하는 기본 확률 분포에 대한 몇 가지 가정과 네 번째로 성공사례 연구이다.
간단한 테스팅 프로그램 두 개의 입력 소스를 받고 사용자의 현재 시스템에 시간 및 날짜를 응용 프로그램을 서비스로 제공
내 생각 소프트웨어 테스팅에서 가장 중요한 것은 테스트의 복잡한 성격을 인식하고 심각하게 생각하는 것인 것 같다. 그리고 여러 사람들의 커뮤니케이션으로 테스팅 기술들을 공유하고 성공사례들을 적용해야 될 것 같다. 그리고 가장 중요한 것은 천재가 필요해야 할 것 같다.