Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Silex Techtalk - Perl and Continuous Integratio...

Avatar for JEEN JEEN
February 01, 2012

Silex Techtalk - Perl and Continuous Integration w/ Jenkins

흔하디 흔한 Perl 프로젝트를 Jenkins 환경에 어떻게 적용하는 지 얘기합니다.

Avatar for JEEN

JEEN

February 01, 2012
Tweet

Other Decks in Technology

Transcript

  1. Continuous Integration? http://www.martinfowler.com/articles/continuousIntegration.html 지속적인 통합은 여러명으로 구성된 팀이 작업한것을 자주

    통합하는것을 가리키는 소프트웨어 개발 프랙티스 로서 여기서 자주는 각 팀원이 적어도 하루에 한번 이상, 매일 여러번의 통합이 이루어지는것을 의미한다. 매번 이루어지는 통합은 자동화된 빌드에 의해 통합 에러가 없는지 가능한 빨리 검증된다. (여기에서 빌드는 테스트도 포함한다.) 12년 2월 1일 수요일
  2. Situation #1 요고요고, 이런 거 필요하겠네. 요고 넣어야지 테스트코드도 넣어야지.

    슥샥슥샥. 대충 Push 해야지. 요거요거 => git pull 하고 함 돌려봐야지 뭐이야, 이거 안돌아. 에러나. 뭐이래. @aanoaa, 방금 푸쉬한 거 안도네예. 아오.. 제가 뭘 어떻게 해야 제대로 돌아예?. 돌아버리겠네. 모듈없다네. 깔아야지. 12년 2월 1일 수요일
  3. git pull 해야지. 안도네. DB 테이블 없다네. 개같네. @JEEN_LEE ,

    탁구도 못하는 게... <= 이거 지우고, 저거 지우고, 저거 안쓰고, 저거 없애고 깔끔하네. 쥑이네. 올려야지. 잘 보이네. Push 해야지. Situation #2 12년 2월 1일 수요일
  4. Why Jenkins? • Easy Installation/Configuration • Changeset Support • Notification

    (RSS/Email/IM) • Reporting • File fingerprinting • Plugin Support 12년 2월 1일 수요일
  5. Jenkins Job A Job B Job C Build #1 Build

    #2 Build #3 Structural Architecture Each concept is mapped to Object Each object keeps its persistency with XML 12년 2월 1일 수요일
  6. Scheduler Project Build Runtime Architecture Checkout/Update SCM : SVN/Git PostBuild

    Builder : batch/shell Workspace Build Recorder : Clover/ Checkstyle Notifier : Email/IM 12년 2월 1일 수요일
  7. Jenkins vs Hudson • Jan. 2011 : Divorce from Oracle

    • Hudson 2.x ? • Jenkins 1.450 (present) • Almost 80%+ moved to Jenkins • Hudson → Eclipse Foundation 12년 2월 1일 수요일
  8. Perl + Jenkins ? • Perl-friendly Results => Java-friendly Results

    • e.g.) TAP → JUnit • Use Shell Commands [!Maven] 12년 2월 1일 수요일
  9. TAP → JUnit Clover Coverage Report Checkstyle Analysis TAP::Formatter::JUnit Devel::Cover::Report::Clover

    Perl::Metrics::Lite Perl-friendly → Java-friendly 12년 2월 1일 수요일
  10. TAP → JUnit TAP::Formatter::JUnit Perl-friendly → Java-friendly $ prove -lv

    --timer --formatter TAP::Formatter::JUnit t/* Usage 12년 2월 1일 수요일
  11. Checkstyle Analysis Perl::Metrics::Lite Perl-friendly → Java-friendly $ measureperl-checkstyle --max_sub_lines 60

    \ --max_sub_mccabe_complexity 10 \ --directory lib > checkstyle-result.xml Usage Generating checkstyle-result.xml 12년 2월 1일 수요일
  12. 사이클로매틱 복잡도는 1976년에 Thomas J. McCabe가 프로그램의 복잡도를 결정하기 위해

    개 발한 소프트웨어 지표이다. 이 지표를 사용하면 소스 코드를 통해 선형적으로 독립적인 경로 또 는 분기의 수를 판단할 수 있다. McCabe에 따르면, 메소드의 복잡도를 10 미만으로 유지하는 것 이 최선이라고 한다. 이는 인간의 기억력에 관한 연구에서 인간이 단기 기억력으로 기억할 수 있 는 항목의 수가 7±2개인 것으로 밝혀졌기 때문에 중요하다. 어떤 개발자가 선형적으로 독립적인 경로가 50개나 되는 코드를 작성하고 있다면, 이 수는 그 메 소드에서 발생하고 있는 일을 계속 추적할 때 단기 기억력의 용량을 대략 5배 이상 초과하는 것 이 된다. 인간의 모든 단기 기억에 부담을 주지 않는 간단한 메소드가 사용하기 더 쉽고 오류가 덜 발생하는 것으로 입증되었다. Enerjy가 2008년에 수행한 한 연구 결과, 사이클로매틱 복잡도 와 불완전성 간에는 강력한 상관관계가 있는 것으로 밝혀졌다. 복잡도가 11인 클래스는 오류 발 생 확률이 0.28이었지만, 복잡도가 74인 클래스에서는 그 확률이 무려 0.98로 상승했다. http://www.ibm.com/developerworks/kr/aix/library/au-cleancode/ Cyclomatic Complexity 12년 2월 1일 수요일
  13. if ($var) +1 if ($var && $var2) +2 if ($var

    || $var2) +2 unless ($var) +1 my $var = $solo || ‘couple’; +1 my $var = $yongbin eq ‘is_couple’ ? 1 : 0; +2 12년 2월 1일 수요일
  14. 39 sub gen_attr { 40 my ($self, $req, $prop) =

    @_; 41 42 my %attr = (); 43 my $sort = $req->{sort} || 'id'; 44 my $order = $req->{order} || 'desc'; 45 46 $order = 'desc' unless $order =~ /^(?:desc|asc)$/; 47 $sort = 'id' unless $sort =~ /^(?:id)$/; 48 49 $attr{order_by} = { "-$order" => "me.$sort" }; 50 $attr{page} = $req->{page} || 1; 51 $attr{rows} = $req->{num} || 30; 52 $attr{page} = 1 unless $attr{page} =~ /^\d+$/; 53 $attr{rows} = 30 unless $attr{rows} =~ /^(?:30|50|100)$/; 54 \%attr; 55 } Cyclomatic Complexity is ... 12년 2월 1일 수요일
  15. TODO • Another Projects → Jenkins • Check Coding Convention

    • 2tab vs 4tab • Maintable code++ • TRunner + Jenkins 12년 2월 1일 수요일