ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [30일코딩] Unit TEST
    개발입문/JAVA 2017. 5. 16. 00:31

    개발자가 구현을 하면 여러 사람의 테스트를 거쳐서 디버깅을 한다.

    주로 기획은 요구사항인 메인기능을 테스트하고, 세부 Test Case 는 QA 가 진행한다.


    개발직군은 다른 직군에 테스트를 맡기기 전에

    최소한 테스트를 진행할 수 있을 정도의 퀄리티로 구현을 해야한다.

    그리고 테스트 피드백 - 디버깅을 원활하게 해야 프로젝트 완성도가 올라간다.


    기획    요구사항/화면 기획 
    개발    구현 Test-Driven-Development
    기획    요구사항 반영여부 확인
    QA    TestCase 단위 Report 작성
    기획    최종 확인, 프로젝트 종결 선언



    개발에서 테스트를 해놓지 않으면... 기획이 몇번씩 지적해서 서로 표정이 굳거나

    QA 가 도저히 테스트 못해먹겠다고 테스트 거부하는 경우가 생긴다.

    (이런 불편한 상황이 계속되면 프로젝트 오픈이 밀리거나 심지어는 중단되는 경우도 있다.) 


    서론이 엄청 길었는데, 그만큼 테스트는 중요하다!!!!!





    유닛 테스트


    유닛테스트는 각 유닛에 대해 의도한 대로 잘 동작하는지 확인한다. 

    *유닛은 독립적인 기능을 담당하는 코드

    코드를 구현하면서 테스트코드도 같이 구현해야 한다.

    코드를 통해 테스트 코드를 작성해주는 많은 어플리케이션들이 있다고 한다. (;;;)

    Unit Test 는 모든 유닛에 대한 Bottom-up 테스트이다.


    이 테스트를 진행해 놓으면 나중에 디버깅하기도 쉽고,

    기획, QA 직군이 Integrated Test 할 때에도 기본적인 기능은 잘 동작할 확률이 높다.



    그룹 테스트


    Align TEST 라고도 한다.

    한 가지 목적을 달성할 수 있는 여러 유닛을 그룹핑해서 테스트한다.

    하나를 고치니 사이드이펙트로 다른게 고장나는 경우를 방지하기 위해서 작성한다.


    이걸 잘 해놓으면 효율적으로 디버깅 + 리팩토링을 진행할 수 있다.




    예상할 수 있는 에러 vs. 갑툭튀 에러

    에러는 try-catch 로 의도된 대로 처리될 수 있다면 괜찮다.

    하지만 예상하지 못한 갑툭튀 에러는 버그로 이어진다.


    만약 확인하고 싶은 에러가 있다면 코드에 에러가 나올 수 있따고 선언하고 에러로그를 출력할 수 있도록 한다.

    throw Exception: get Alerted to fix it




    30일코딩 예제 코드
    이번 예제 코드는 Discussion 에 뭔가 욕이 한가득이다...
    기존 예제들과 다르게 Test Case (TC) 를 작성해야 하는데-
    TC 가 조건이 매우 까다롭다.

    왜 있는지 모르겠다는 조건들도 있다고는 하는데,
    나는 거기에 불만을 가질 짬이 안되므로... 열심히 방어로직 코드를 넣었다.


    요렇게 테스트케이스를 출력만 되게 넣은 사람도 있었지만.

    #include<iostream>
    using namespace std;
    int main(){
        cout<<"5"<<endl; 
        cout<<"3 1"<<endl; cout<<"-1 0 9"<<endl;
        cout<<"6 3"<<endl; cout<<"9 5 0 3 -5 5"<<endl; 
        cout<<"4 3"<<endl; cout<<"-8 5 0 -5"<<endl; 
        cout<<"7 2"<<endl; cout<<"0 7 -3 2 3 7 6"<<endl; 
        cout<<"5 4"<<endl; cout<<"6 0 -1 1 5"<<endl; 
    }


    난 TC 랜덤 신봉자여서 랜덤 코드까지 직접 작성했다.
    조건이 까다롭다보니 유사코드 pseudo-code 는 필수다.


    public static void main(String[] args) {
    result YNYNY 나오도록 
    num 이 겹치지 않도록 TC 추출 / 출력

    }

    static int randNum(int a, int b) { 
    Random Number a Max, b Min
    }

     static ArrayList<Integer> randLate(int num) { 
    each minutes students come late (-1000 ~ 1000)
    0, 1, -1 included

    }

    static String checkOutput(int num, int k, ArrayList<Integer> A) {
    YNYNY confirm
    }

    static void printOut(int num, int k, ArrayList<Integer> A) {
    print Out num, k, A 
    num     student
    k          minimumStudent that class can start
    A         array of late minutes 

    }



    A Array 가 -1000 ~ 1000 사이에서 마구 튀어나온다. (희열!)
    테스트를 위한 메소드를 작성하고- 테스트 케이스를 잘 출력한다. :ㅇ


    아마 실제 구현코드도 테스트 코드와 흡사했을 것이다.

    구현코드를 보고 테스트코드를 작성할 수 있는 기회도 있어봤으면 좋겠다. 

    무튼 30일코딩 테스트 완료!


    '개발입문 > JAVA' 카테고리의 다른 글

    Java String Formatting  (0) 2017.09.10
    Java API 분석__LinkedList  (0) 2017.07.25
    [30일코딩] Running Time and Complexity  (0) 2017.05.14
    [30일코딩] Heaps and Binary Search  (0) 2017.05.09
    [30일코딩] Generic 제너릭  (0) 2017.05.09

    댓글

Designed by Tistory.