[개인 블로그 작업 II] 코드 재심 결과

11836 단어
[코드 재심 결과]
 
  • General
  • Does the code work? Does it perform its intended function, the logic is correct etc.
  • 기본적으로 개인 임무 수요를 완성한다.
  • 미실현 기능: 점수 생성, 괄호 지원 미비(1+5)×(3-5) 이런 것도 7/9/2*8처럼 이의성이 존재하는 경우가 있다), 0/음수를 제외한 회피 처리, 규범화 출력(N. 연산식).
  • 논리가 기본적으로 정확하고 비교적 완선한 이상 처리 메커니즘이 있다.

  • Is all the code easily understood?
  • 비교적 읽기 쉽고 비교적 완전한 주석이 있으며 명명이 단도직입적이고 규범화된 인터페이스로 설명한다.

  • Does it conform to your agreed coding conventions? These will usually cover location of braces, variable and function names, line length, indentations, formatting, and comments.
  • 사용하는 언어가 다르기 때문에 코드 스타일의 차이가 비교적 크고 괄호의 줄 바꾸기 처리 방식이 같지 않기 때문에 다른 것은 기본적으로 일치한다.

  • Is there any redundant or duplicate code?
  • Equation.cpp의 Solve 함수는 사용되지 않았고 마지막으로 다시 쓴 Solve1을 사용했다.

  • Is the code as modular as possible?
  • 모듈화 정도가 비교적 높고 점수, 표현식, IO 처리가 각각 하나의 모듈로 되어 점수와 표현식이 클래스에 통합되어 분업이 세밀하다.
  •  1 void fff();
     2 void exitErr(char* info, int errNum);
     3 void work1(int,int);
     4 void work2(char*, char*);
     5 int isp(char);
     6 int icp(char);
     7 
     8 class Fraction{
     9 public:
    10     Fraction();
    11     Fraction(int, int);
    12     int static gcd(int, int);
    13     Fraction operator+(const Fraction &);
    14     Fraction operator-(const Fraction &);
    15     Fraction operator*(const Fraction &);
    16     Fraction operator/(const Fraction &);
    17     Fraction operator=(const Fraction &);
    18     bool operator==(const Fraction &);
    19     int numerator;
    20     int denominator;
    21     string toString();
    22 };
    23 
    24 class Equation{
    25 public:
    26     Equation();
    27     Equation(int); //  ,  maxNum
    28     string getLeft(); //      
    29     string getRight(); //           
    30     bool equals(Equation &); //    
    31 
    32     static int solve(char*);
    33     static Fraction solve1(string);
    34 
    35 private:
    36     int leftSum; //      
    37     Fraction rightSum; //      
    38     string rightStr;
    39     string leftStr;
    40 
    41     
    42     //char* solveDiv(char*);
    43 };
    44 
    45 #endif


  • Can any global variables be replaced?
  • 매크로 함수만 사용하고 전역 변수가 없음;
  • #define random(max) (rand()%(max))


  • Is there any commented out code?
  • 주석된 코드가 있음;

  • Do loops have a set length and correct termination conditions?
  • 모두 설정이 있지만 비교적 번잡한 판단 조건도 존재한다. 예를 들어 Equaltion:::Solve1의while(signTop!=0 & icp(str[i])<=isp(signStack[signTop-1]) & &!RMeetL)//여기서 기호 창고가 비어 있는지 확인하고 기호의 우선순위를 판단하며 좌우 기호가 이미 일치하는지 검사한다. 그러나 사실 창고가 비어 있는지 판단하기만 하면 순환에 들어갈 수 있다. 괄호 일치와 우선순위 판단은if else 문장의 지점에 삽입할 수 있고 상응하여break를 설정하면 된다.
  •  1 int isp(char c){
     2     switch (c)
     3     {
     4     case '#':
     5         return 0;
     6         break;
     7     case '^':
     8         return 7;
     9         break;
    10     case '*':case '/': case '%':
    11         return 5;
    12         break;
    13     case '+':case '-':
    14         return 3;
    15         break;
    16     case '(':
    17         return 1;
    18         break;
    19     case ')':
    20         return 8;
    21         break;
    22     default:
    23         exitErr("Error in isp", -9);
    24         return -1;
    25         break;
    26     }
    27 }


  • Can any of the code be replaced with library functions?
  • 라이브러리 함수로 대체할 수 있는 함수가 없음
  • Can any logging or debugging code be removed?
  • 관련 코드 없음
  • Security
  • Are all data inputs checked (for the correct type, length, format, and range) and encoded?
  • 수정 기능을 실행할 때 파일은 파일 형식을 규범화하고 명령행 파라미터 입력 검사가 비교적 완벽해야 한다(3차 검사)
    1 if (strlen(argv[i]) != 2) exitErr("command valid", -2);
    2         tmpchar = argv[i][0];
    3         cmdchar = argv[i][1];
    4         if (tmpchar != '-' || (cmdchar != 'n'&&cmdchar != 'r'&&cmdchar != 'e'&&cmdchar != 'a'))exitErr("command valid", -1);
    5         i++;
    6         if (i == argc) exitErr("command valid", -2);


  • Where third-party utilities are used, are returning errors being caught?
  • 타사 프로그램 미사용
  • Are output values checked and encoded?
  • 비교적 전면적인 이상 분석과 상응하는 오류 코드 출력이 있고 전문적인 오류 처리 함수가 적혀 있다.
  • void exitErr(char* info, int errNum){
        printf("%s; error code:%d", info, errNum);
        exit(errNum);
    }
     1 case '(':  //         ) #     (   
     2                     //           ,          、         ,  continue  
     3                     //  continue     signTop--      ,     
     4                     //       '('  
     5                     //       ,    str[i]     
     6                     if (str[i] == ')'){
     7                         signTop--;
     8                         RMeetL = true;
     9                     }
    10                     else{
    11                         exitErr("         ", -11);
    12                     }
    13                     break;


  • Are invalid parameter values handled?
  • 특수 오류 처리 함수 void exitErr(char* info, int errnum)

  • Documentation
  • Do comments exist and describe the intent of the code?
  • Readme 문서가 간결
  • Are all functions commented?
  • 없음, 동일
  • Is any unusual behavior or edge-case handling described?
  • Is the use and function of third-party libraries documented?
  • Are data structures and units of measurement explained?
  • Is there any incomplete code? If so, should it be removed or flagged with a suitable marker like ‘TODO’?

  • Testing
  • Is the code testable? i.e. don’t add too many or hide dependencies, unable to initialize objects, test frameworks can use methods etc.
  • 테스트 가능, 과도한 의존 대상이 없고 대부분 함수 내부에서 상응하는 초기화 작업이 완료됨
  • Do tests exist and are they comprehensive? i.e. has at least your agreed on code coverage.
  • 테스트 단원 없음, 아래 동일
  • Do unit tests actually test that the code is performing the intended functionality?
  • Are arrays checked for ‘out-of-bound’ errors?
  • Could any test code be replaced with the use of an existing API?

  •  
     
  • Summary
  • 프로그램 코드가 비교적 규범화되고 디자인 방향이 뚜렷하며 모듈화 정도가 높고 읽을 수 있다. 상세한 주석이 있고 입력과 출력 등 안전 처리에 대해 자세하게 고려했고 비교적 엄격한 조건을 제한하여 복잡한 오류 상황을 피했다. 유일한 부족한 것은 기능이 아직 완선해야 한다는 것이다. 제로 이상 검사가 완선하지 않아 프로그램 테스트에 어느 정도 난이도가 존재하기 때문에 더욱 개선해야 한다

  •  

    좋은 웹페이지 즐겨찾기