코드의 품질 (Code Quality)

Preview:

Citation preview

코드의 품질CODE QUALITY

Created by / Ironhee @이철희

명품이라 불리는 제품들은 공통점이 있습니다.

잘 동작합니다. 또한,

부품 하나하나에는정성과 철학이 담겨있고,

그러한 부품들의 결합은예술로 느껴지기까지 합니다.

우리는 품질이 높다고 말합니다.

소프트웨어는 어떨까요?

GMAIL

STARCRAFT

이러한 소프트웨어들에도 공통점이 있습니다.

코드가 잘 동작할 뿐만 아니라잘 정돈되어 있습니다.

즉 코드의 품질이 높습니다.

코드를 제대로 짜지 않는다면...

코드를 수정하거나 추가하기 힘들어집니다.

코드를 이해하기 힘들어집니다.

팀원들에게 비난받을수 있구요.

당신의 코드를 본 팀원은 질문을 할 겁니다.

그리고 야근을 합니다.

코드의 품질을 높이는 방법

반복하지 않기Don't Repeat Yourself

같은 코드가 중복된다면,수정도 여러번해야 한다.

Example Data<ul> <li class="item" data-id="5">Lee</li> <li class="item" data-id="3">Kim</li> <li class="item" data-id="15">Hong</li></ul>

BADfunction removeItem (id) { $('.item[data-id="' + id + '"]').remove();}

function updateItemText (id, text) { $('.item[data-id="' + id + '"]').html(text);}

GOODfunction getItem (id) { return $('.item[data-id="' + id + '"]');}

function removeItem (id) { getItem(id).remove();}

function updateItemText (id, text) { getItem(id).html(text);}

한가지만 하기Do One Thing

함수는 한 가지를 해야한다.그 한가지를 잘해야 한다.그 한가지만을 해야 한다.

BAD// ... some codeisEdible: function () { if (this.expirationDate > Date.Now() && this.approvedForConsumption === true && this.inspectorId !== null) { return true; } else { return false; }}

GOOD// ... some codeisEdible: function () { return this.isFresh() && this.isApproved() && this.isInspected();}

의미있게 이름짓기Reasonable Naming

BAD// ... some codes

function checkData ( b, c ) {

return a[ b ][ c ].booleanData1 === true;

}

GOOD// ... some codes

function getCell( map, x, y ) {

return map[ x ][ y ];

}

function hasBomb ( cell ) {

return cell.hasBomb === true;

}

지뢰찾기에서 사용되는 코드입니다. Game Options Help

나쁜 주석 피하기Avoiding Bad Comment

나쁜 코드에 주석을 달지 마라.새로 짜라.

BAD/*

이것은 지뢰찾기 맵에서의 한 방에 지뢰가 있는지 없는지를 확인하는 함수입니다.

======Arguments======a: 지뢰찾기 맵입니다.b: 방의 가로 좌표입니다.c: 방의 세로 좌표입니다.

*/

function checkData ( a, b, c ) {

return a[ b ][ c ].booleanData1 === true;

}

GOODfunction getCell( map, x, y ) {

return map[ x ][ y ];

}

function hasBomb ( cell) {

return cell.hasBomb === true;

}

라이브러리 사용하기Using Library

우리가 구현하려는 대부분의 기능은이미 라이브러리로 구현된 경우가 많다.

또한 문서화가 잘 되어있어,학습비용도 줄어든다.

유지보수 또한 활발하게 이루어진다.

개발, 문서화, 학습 비용을 상당히 아낄 수 있다.

코딩 스타일Coding Style

많은 사람이 코드를 작성했더라도마치 한 사람이 작성한 것처럼 보여야 한다.

JQUERY JAVASCRIPT STYLE GUIDE// Badvar foo = true;var bar = false;var a;var b;var c;

// Goodvar a, b, c, foo = true, bar = false, arr = [ a, b, c ];

Full

AIRBNB JAVASCRIPT STYLE GUIDE// badvar items = getItems(), goSportsTeam = true, dragonball = 'z';

// goodvar items = getItems();var goSportsTeam = true;var dragonball = 'z';

Full

자신의 팀에 맞는,하나의 코딩 스타일 가이드를 선택합시다.

테스트 주도 개발Test-Driven Development

테스트를 먼저 짜고, 코드를 작성하는 개발 방법.

자세한내용은 켄트벡의 TDD 검색하기!

보이스카우트 규칙Boy Scout Rule

캠프장은 처음 왔을 때보다더 깨끗하게 해놓고 떠나라.

코드를 Pull 했을 때 보다,더 깨끗하게 해놓고 Push 하라.

단순한 설계규칙 지키기simple design

단순한 설계규칙 4가지1. 모든 테스트를 실행한다.2. DRY원칙에 따라 중복을 제거한다.3. 프로그래머 의도를 표현한다.4. 클래스와 메서드 수를 최소로 줄인다.

한 Commit 에는 하나의 변경사항만 있어야 한다.

코드의 품질을 어떻게 측정하죠?

코드 품질을 측정하는 유일한 척도 = 분당 내지르는 WTF! 횟수

(WTF: What The F**k)

팀에게 존경받는 개발자가 되고싶나요?

팀에게 고통을 주고싶나요?

당신에게 달려있습니다.

감사합니다

Recommended