소프트웨어 테스트 입문의 학습과 사고

첫 번째 제목:


Briefly describe an error from your past projects that you have recently completed or an error from other projects which impress you most. State the reason, impact of the error and how did you find it.
  • 최근에 기억에 남는 error에 대해 말하자면 처음에 생각한 것은 어떤 acm문제를 풀 때 어떤 수 m가 소수인지 아닌지를 판단하는 데 써야 한다는 것이다.m의 데이터 범위는 10을 넘는 12차방일 것이다.

  • 내 오류 함수:
    bool prime(lli m){
        if(m == 1) return 0;
        for(int i = 2;i *i <= m;i++){
            if(m % i == 0) return 0;
        }
        return 1;
    }
  • 그리고 문제를 낸 후에time exceed의 힌트를 얻었다. 대략 복잡도를 계산하면 시간을 초과하지 않을 것 같아서 어떤 부분에서 논리적인 문제가 생긴 것 같다.그래서 하나의 함수, 하나의 함수 배열을 시작했는데 마지막으로prime에서 이 함수가 늦게 끝나지 않았다는 것을 발견했다.
  • 비로소 i*i의 여기 폭발 정밀도를 발견했습니다. i는 int형이고 i*i도 기본적으로 int형입니다...
  • 롱롱인트로 바꾸면 OK.

  • 두 번째:


    Below are two faulty programs. Each includes a test case that results in failure. Answer the following questions (in the next slide) about each program.
    public int findLast (int[] x, int y) { //Effects: If x==null throw  NullPointerException
    // else return the index of the last element // in x that equals y.
    // If no such element exists, return -1
        for (int i=x.length-1; i > 0; i--){
            if (x[i] == y) {
                return i; }
            }
        return -1;
    }
    // test: x=[2, 3, 5]; y = 2 // Expected = 0
  • 이것은 -1을 얻었는데 분명히 x[0]는 방문할 수 없다.
  • public static int lastZero (int[] x) { //Effects: if x==null throw NullPointerException
    // else return the index of the LAST 0 in x. 
    // Return -1 if 0 does not occur in x
        for (int i = 0; i < x.length; i++){
            if (x[i] == 0) return i; 
        } 
        return -1; 
    }
    // test: x=[0, 1, 0] // Expected = 2
  • 이것은 분명히 가장 기본적인 기능조차 실현하지 못했다. (실현이 틀렸다.) 마지막 0을 찾으려면 왜 같은 것부터 반복해야 합니까?

  • 그 다음은 하나의 개념에 대한 분석이다.
  • fault:A static defect in the software.잘못 쓴 곳의 코드를 가리킨다.
  • error:An incorrect internal state that is the manifestation of some fault.내부의 오류 코드 (fault) 로 인해 발생하는 오류의 표현 형식입니다.
  • failure:External, incorrect behavior with respect to the requirements or other description of the expected behavior.외부의 오류.
  • If possible, identify a test case that does not execute the fault. (Reachability)
    1)//x=null
    2)//x=null
    If possible, identify a test case that executes the fault, but does not result in an error state.
    1)//test: x=[2, 3, 5]; y = 5 // Expected = 5
    2)//test: x=[0, 3, 5];  // Expected = 0
    If possible identify a test case that results in an error, but not a failure. 
    1)//test: x=[2, 3, 5]; y = 2 // Expected = 5; // actually:-1
    2)//test: x=[0, 3, 0];  // Expected = 2; // actually: 0
    

    좋은 웹페이지 즐겨찾기