'뇌세포덩어리""/리팩토링&객체지향'에 해당하는 글 2건

1. 싱글톤 : 객체 하나를 통한 이벤트 

                - 클래식싱글톤 : 상속을 해도 오직 상위객체의 데이터/함수만 사용가능

                - borg 싱글톤 : 상속을 해서 하위단의 데이터를 사용가능/함수만 상위단의 것을 사용

 

2. 팩토리 : 변수에 따른 객체를 리턴

                - 여러개의 공통된 클래스의 집합을 통해 하나의 클래스에서 변수를 통해 해당 클래스를 리턴 

                - 사용자는 상위단을 알 필요 없이 선택에 따라 객체를 받을수 있음

                                         - ex : Connect() ------> httpConnect()

                                                                   |

                                                                   ------->ftpConnect()

                                           - 사용자의 입력에 따라 http or ftp 객체를 리턴 

                    - 상위단에서는 하위단에서 구현되여야 할 함수를 선언(abstract)

 

3. 파사드 : 인터페이스를 통해 사용자의 편의성 제공 목적

                 - 사용자가 인터페이스를 통해 원하는 액션을 받을수 있도록 하나의 인터페이스로 여러개의 클래스를 집약시킴

                 - 팩토리와 다른점은 팩토리는 사용자의 선택에 따라 객체를 선택해서 받음, 파사드는 오직 하나의 동작만을 수행하지만 인터페이스를 통한 간소화가 목적

 

4. 프록시 : 다른 객체의 기능을 확장할때 사용 (중간에서 어떠한 행위를 할때 사용)

               - 보안상의 필요성을 위해 몇몇의 변수/함수만을 허락할때 

               - subject의 모든 호출 및 파라미터를 기록할때 

               - 값을 반환하기 전에 임시로 저장하기 위해 

               - 객체에 대한 참조를 세기 위해 

                - ex :                                       client --------------------->   proxy   ------------------->    subject(interface)

                                                                                                                      |                                                       ^

                                                                                                                     %                                                      |

                                                                                                                  realSubject--------------------------| 

                    - realSubject에 모든 구현이 되어 있지만 client는 proxy를 통해 사용

                   -  proxy에서 중간에서 수행할 기능 구현 

 

5. 옵저버 : 일대다 관계 ( 다수의 상태를 바꿔야 할때 )의 객체간 의존성을 낮출 때 

                - 모든 사용자들에게 알림요청

                - 특정 상태를 다수의 객체에 전달할때

'뇌세포덩어리"" > 리팩토링&객체지향' 카테고리의 다른 글

디자인패턴  (0) 2019.06.02
sonarQube 정적 코드 분석 (기초편)  (0) 2019.05.26

WRITTEN BY
No.190
세계정복의 시작점

트랙백  0 , 댓글  0개가 달렸습니다.
secret

1. docker kitematic를 통한 sonarqube 다운로드 및 설치

 

2.  http://localhost:32768/about 로 접속 로그인  (아이디 /  패스워드  :  admin / admin )

 

3. create new project ( 이름은 아무거나 )

 

4. 토큰 생성 클릭

5. 언어와 실행할 os 선택 ( python // macos 선택 )

download를 클릭하여 sonar-scanner 실행 파일 다운로드

"soanr-scanner는 정적 분석 후 sonarqube에 전송하는 역활"

하단의 커맨드 부분을 copy 후 실행 하면 정적분석 시작!!

파라미터를 보면  "sonar.sources=. " 부분이 어떤 폴더를 실행할지를 결정하므로 

커맨드를 실행하는 해당 폴더의 파일들을 분석하게됨 (각자 알아서 폴더 경로를 넣어주면 됨  " . " 일 경우 현재 폴더를 의미)

 

6. 명령어 실행시 정적 분석을 시작  / 완료 후 클릭해 보면 분석 데이터를 볼수 있음

7. 버그와 중복 코드가 많은것을 볼수 있음......

 

8. 나의 경우 pytest를 통한 분석용페이지에서 중복 코드가 대부분 나왔다. 해당 폴더를 제외 시키자

 

9. 메뉴 Administration -> Analysis Scope -> Files -> Source File Exclusions 에 제외시키고 싶은 경로를 쓰면 된다. ( 특정 폴더의 모든 파일들을 제외 시킨다면 다음과 같이 쓴다. ex : 폴더명/*.* ) 

저장을 하고 5번에서의  sonar-scanner 명령어를 다시 실행하면 해당 폴더가 제외된 실행 결과를 볼수 있다. 

10. 해당 폴더가 제외된 결과 상황 ( *.py만 나왔다.. 중복 코드가 너무 많다.. )

 

11. 리포팅을 통해 버그와 중복을 제거하자. 끝! 

 

추가 부분 

12.  현재  pytest를 통해 테스트코드 작성과 커버리지를 하고 있었음.

pytest의 리포트 기능을 통해 sonarqube에 coverage와 test를 보여줄수 있음

먼저 pytest 실행시 두개의 옵션 추가 

$ pytest --cov-report=xml:coverage.xml --junitxml=./pytest-report.xml

--cov-report 는 커버리지 내용을 다음에 저장하라는 명령어. 

--junitxml 은 테스트 코드가 어디곳에 작성되어 돌아가는지 저장하는 명령어

해당 명령어를 돌리면 두개의 파일 coverage.xml / pytest-report.xml 이 생성 됩니다. 

 

13. sonar-sanner 실행시 옵션을 추가 합니다. 

sonar-scanner \
-Dsonar.projectKey=test_sonarqube \
-Dsonar.sources=. \
-Dsonar.host.url=http://localhost:32768 \
-Dsonar.login=80a2d40fd130938312a5a776c0e406f205ca9d5a \
-Dsonar.python.xunit.reportPath=./pytest-report.xml \
-Dsonar.python.coverage.reportPaths=./coverage.xml

unit과 coverage 파일의 경로를 추가 해주면 아래와 같이 리포팅된 값을  sonarqube에서 볼수 있습니다. 

coverage에 커버리지 %를 볼수 있게 되었습니다. 
어느 부분에서 테스트코드가 작성되지 않았는지 볼수 있습니다. 

 

진짜 끝!

'뇌세포덩어리"" > 리팩토링&객체지향' 카테고리의 다른 글

디자인패턴  (0) 2019.06.02
sonarQube 정적 코드 분석 (기초편)  (0) 2019.05.26

WRITTEN BY
No.190
세계정복의 시작점

트랙백  0 , 댓글  0개가 달렸습니다.
secret