SlideShare uma empresa Scribd logo
1 de 49
SEEG Software Engineering Expert Group The Road To Code Craft 김진 태 2011. 07. 05
SEEG is … 2 도메인 전문기술 요구공학 / 설계 기법 패키지솔루션 프로세스 임베디드시스템 엔터프라이즈 시스템 재공학 품질 보증 SW 프로 세스 개선 컨설팅 영역 SW 품질보증 SW 개발 방법론
내가 듣고 싶은 ‘나’ 3 개발자 코더 엔지니어 장인
공학의 특징은 재현가능, 반복 가능하다는 점이다. 그 방법, 그 프로세스대로 하면 동일한 결과가 나와야 한다.  그런데 SW는 실제 그렇게 안 된다. 즉, 공학으로 설명 안 되는 중요한 요인이 있다 4 Why Code Craft ? 공학으로 SW를 설명하기에는 난처한 점들이 많다
SW는 자동차와 같은 그런 종류의 자본 상품이 아니다 SW는 차의 디자인에 상응하는 어떤 것이다 기계적인 세계에서는, 무엇인가를 디자인한다는 것과, 그 디자인에 의거하여 상품을 생산한다는 것은, 서로 구분된 두 개의 활동이다 SW도 유사하다. 전자의 경우 지적인 작업이라고 하고 후자의 경우 사무적인 작업으로 비교할 수 있다 5 Why Code Craft ?
SW 개발은 반복적이고 재현 가능한 경우가 별로 없다 SW 개발은 매우 지적인 작업들이기 때문이다 SW 개발은 혼자만의 지적인 작업이 아니다 수 많은 커뮤니케이션을 필요로 하는 협력적이고 사회적인 작업이다 6 Why Code Craft ?
SW 공학 접근은 소프트웨어 개발 프로젝트의 부분을 설명할 수 있다 “왜 사람들은 우리가 가르치는 것을 실행하지 않는가?” –Watts Humpries- “우리가쓴 논문은 실제 SW 개발에 사용되지 않는다” –David Parnas- 실제 SW 이해하고 적용하기 위한 비유 모델은 CRAFT 7 Engineering에서 Craft로 이해해야 합니다
진정, 코드는 잘 쓰십니까(write)? 구글: 6-7번 걸친 논리적 해결 능력과 코딩 실력 테스트 애플: Unit Test code 작성 의무 다른 산출물은 없을 수 있지만 코드는 있다! 기초적인 컴퓨팅 능력 없이 분석, 설계자, 아키텍트가 길러질 리 만무하다. 우린 SW의 기초인 code에서 다시 시작해야 합니다 8 Code Craft는 SW Craft로 가기 위한 출발점
The Road To Code Craft 9
코드의 장인으로 가는 길은 동행길입니다
11 코드장인이 되는 길과 무술 장인이 되는 길이 유사합니다
12 각 주체가 해야 할 몫이 있습니다 지적 개인 조직 사무적
13 개인의 지적인 역량은 SW 개발의 핵심입니다 ,[object Object]
20代 이상 : 비용 대비 효과 미흡
그 사람이 그 사람이다
복잡성 핸들링문제
읽기, 말하기
듣기, 쓰기
구조를 어떻게 잡을까?
고객이 원하는 것이 이것인가?
이걸 어떻게 테스트할까?
2개의 서브함수로 나누자지적 개인 조직 사무적
14 개인의 사무적인 영역은 충분히 향상이 가능합니다 ,[object Object]
20代 이상 : 비용 대비 효과 탁월
그 사람이 다른 사람이다
습관의 문제
연습에 의해 달라 질 수 있다
이름을 직관적으로 작성하라
예쁘게 작성하라
방어적 프로그래밍을 하라
도구를 최대한 활용하라
체크인 전에 코드를 한번 훑어봐라지적 개인 조직 사무적
15 조직의 사무적인 역량은 지적인 역량이 발휘하도록 환경을 조성하는 것 지적 ,[object Object]
지적인 역량이 높은 개발자 채용 채용방식의 변화요구개인 조직 사무적
16 조직의 사무적인 역량은 지적인 역량이 발휘하도록 환경을 조성하는 것 조직이실제  할 수 있는 사무적인 일
17 조직의 사무적인 역량은 지적인 역량이 발휘하도록 환경을 조성하는 것 쉽게  조직이실제  할 수 있는 사무적인 일 ,[object Object]
Issue tracking
Daily Build
Daily meeting,[object Object]
무엇이 best practice인지 식별,발굴,전파사무적
19 조직은 개인이 사무적인 일에서 자유하도록개인은 지적인 일이 집중하도록 지적 어렵고, 고비용 쉽고, 저비용 개인 조직 사무적
20 -프로그래머의 길,멘토에게 묻다-
코드 장인으로 가는 기초 practices 21
22 Practice 1: 사람이이해할 수 있는 코드를 짜라 컴퓨터가 이해하는 코드는 어느 바보나 다 짤 수 있다.  훌륭한 프로그래머는 사람이 이해할 수 있는 코드를 짠다  - 마틴파울러-
가독성이 뛰어나다. 간단하고 작다. 의존성을 최대한 줄였다. 의도와 목적이 명확한 코드 타인에 의해 변경이 용이 한 코드 중복이 없는 코드 개체(Class, Method)가 한가지 작업만 수행하는 코드 23 사람이 이해할 수 있는 코드란 무엇일까요? For people For people For people For people For people For people For people
24 왜 사람이 이해하는 코드를 만들어야 하나요 ? 사람 SW 공장은 (         )이기 때문입니다 행태 일반적인 SW 개발 (         )때문입니다
25 일반적인 SW 개발은 기존 코드에서 시작합니다 Evolution Enhanced More complex Modified Drift away  from its original design Adapted
26 기능만 추가할 뿐 코드 품질의 개선 작업은 미비합니다 Product 1 productization Product 2 Product 3 Base Code update
27 개선되지 않은 SW는 늙게 되어 Dirty code 가 됩니다 Dirty code는 SW Aging을 가속화 The Spiral of Complex

Mais conteúdo relacionado

Mais procurados

Policy based Class Design
Policy based Class DesignPolicy based Class Design
Policy based Class Designlactrious
 
우아하게 준비하는 테스트와 리팩토링 - PyCon Korea 2018
우아하게 준비하는 테스트와 리팩토링 - PyCon Korea 2018우아하게 준비하는 테스트와 리팩토링 - PyCon Korea 2018
우아하게 준비하는 테스트와 리팩토링 - PyCon Korea 2018Kenneth Ceyer
 
Working Effectively With Legacy Code - xp2005
Working Effectively With Legacy Code - xp2005Working Effectively With Legacy Code - xp2005
Working Effectively With Legacy Code - xp2005Ryan Park
 
TDD.JUnit.조금더.알기
TDD.JUnit.조금더.알기TDD.JUnit.조금더.알기
TDD.JUnit.조금더.알기Wonchang Song
 
JavaEE6 - 설계 차원의 단순성
JavaEE6 - 설계 차원의 단순성JavaEE6 - 설계 차원의 단순성
JavaEE6 - 설계 차원의 단순성Jay Lee
 
Legacy code refactoring video rental system
Legacy code refactoring   video rental systemLegacy code refactoring   video rental system
Legacy code refactoring video rental systemJaehoon Oh
 

Mais procurados (9)

S66 goos-w7
S66 goos-w7S66 goos-w7
S66 goos-w7
 
Policy based Class Design
Policy based Class DesignPolicy based Class Design
Policy based Class Design
 
우아하게 준비하는 테스트와 리팩토링 - PyCon Korea 2018
우아하게 준비하는 테스트와 리팩토링 - PyCon Korea 2018우아하게 준비하는 테스트와 리팩토링 - PyCon Korea 2018
우아하게 준비하는 테스트와 리팩토링 - PyCon Korea 2018
 
Working Effectively With Legacy Code - xp2005
Working Effectively With Legacy Code - xp2005Working Effectively With Legacy Code - xp2005
Working Effectively With Legacy Code - xp2005
 
TDD with JUnit 2
TDD with JUnit 2TDD with JUnit 2
TDD with JUnit 2
 
TDD.JUnit.조금더.알기
TDD.JUnit.조금더.알기TDD.JUnit.조금더.알기
TDD.JUnit.조금더.알기
 
JavaEE6 - 설계 차원의 단순성
JavaEE6 - 설계 차원의 단순성JavaEE6 - 설계 차원의 단순성
JavaEE6 - 설계 차원의 단순성
 
Legacy code refactoring video rental system
Legacy code refactoring   video rental systemLegacy code refactoring   video rental system
Legacy code refactoring video rental system
 
Tdd with JUnit 1
Tdd with JUnit 1Tdd with JUnit 1
Tdd with JUnit 1
 

Destaque

Bnf seeg ws
Bnf seeg wsBnf seeg ws
Bnf seeg wsbbongcsu
 
Refactoring tutorial 1주차[refactoring 개요]
Refactoring tutorial 1주차[refactoring 개요]Refactoring tutorial 1주차[refactoring 개요]
Refactoring tutorial 1주차[refactoring 개요]bbongcsu
 
Refactoring tutorial
Refactoring tutorialRefactoring tutorial
Refactoring tutorialBingu Shim
 
애자일 개발 프로세스를 이용한 고품질 소프트웨어 개발
애자일 개발 프로세스를 이용한 고품질 소프트웨어 개발애자일 개발 프로세스를 이용한 고품질 소프트웨어 개발
애자일 개발 프로세스를 이용한 고품질 소프트웨어 개발Jaehoon Oh
 
애자일 마인드셋
애자일 마인드셋애자일 마인드셋
애자일 마인드셋Jaehoon Oh
 
인수테스트 주도 개발
인수테스트 주도 개발인수테스트 주도 개발
인수테스트 주도 개발Jaehoon Oh
 
Tdd 왜 배우기 어려운가
Tdd 왜 배우기 어려운가Tdd 왜 배우기 어려운가
Tdd 왜 배우기 어려운가Jaehoon Oh
 
Robot framework 을 이용한 기능 테스트 자동화
Robot framework 을 이용한 기능 테스트 자동화Robot framework 을 이용한 기능 테스트 자동화
Robot framework 을 이용한 기능 테스트 자동화Jaehoon Oh
 

Destaque (9)

Bnf seeg ws
Bnf seeg wsBnf seeg ws
Bnf seeg ws
 
Refactoring tutorial 1주차[refactoring 개요]
Refactoring tutorial 1주차[refactoring 개요]Refactoring tutorial 1주차[refactoring 개요]
Refactoring tutorial 1주차[refactoring 개요]
 
Refactoring tutorial
Refactoring tutorialRefactoring tutorial
Refactoring tutorial
 
애자일 개발 프로세스를 이용한 고품질 소프트웨어 개발
애자일 개발 프로세스를 이용한 고품질 소프트웨어 개발애자일 개발 프로세스를 이용한 고품질 소프트웨어 개발
애자일 개발 프로세스를 이용한 고품질 소프트웨어 개발
 
애자일 마인드셋
애자일 마인드셋애자일 마인드셋
애자일 마인드셋
 
Bnf seeg
Bnf seegBnf seeg
Bnf seeg
 
인수테스트 주도 개발
인수테스트 주도 개발인수테스트 주도 개발
인수테스트 주도 개발
 
Tdd 왜 배우기 어려운가
Tdd 왜 배우기 어려운가Tdd 왜 배우기 어려운가
Tdd 왜 배우기 어려운가
 
Robot framework 을 이용한 기능 테스트 자동화
Robot framework 을 이용한 기능 테스트 자동화Robot framework 을 이용한 기능 테스트 자동화
Robot framework 을 이용한 기능 테스트 자동화
 

Semelhante a The roadtocodecraft

카사 공개세미나1회 W.E.L.C.
카사 공개세미나1회  W.E.L.C.카사 공개세미나1회  W.E.L.C.
카사 공개세미나1회 W.E.L.C.Ryan Park
 
HolubOnPatterns/chapter2_2
HolubOnPatterns/chapter2_2HolubOnPatterns/chapter2_2
HolubOnPatterns/chapter2_2SeungHyun Hwang
 
Refactoring Tutorial 1주차[ Refactoring 개요]
Refactoring  Tutorial 1주차[ Refactoring 개요]Refactoring  Tutorial 1주차[ Refactoring 개요]
Refactoring Tutorial 1주차[ Refactoring 개요]Bingu Shim
 
Refactoring Tutorial 1주차[ Refactoring 개요]
Refactoring  Tutorial 1주차[ Refactoring 개요]Refactoring  Tutorial 1주차[ Refactoring 개요]
Refactoring Tutorial 1주차[ Refactoring 개요]Bingu Shim
 
애자일 테스트 프랙티스와 사례들 (부제: 협업의 힘)
애자일 테스트 프랙티스와 사례들 (부제: 협업의 힘)애자일 테스트 프랙티스와 사례들 (부제: 협업의 힘)
애자일 테스트 프랙티스와 사례들 (부제: 협업의 힘)SangIn Choung
 
GraphQL in Action - REST와 이별할 때 생각해야 하는 것들
GraphQL in Action - REST와 이별할 때 생각해야 하는 것들GraphQL in Action - REST와 이별할 때 생각해야 하는 것들
GraphQL in Action - REST와 이별할 때 생각해야 하는 것들Kivol
 
회사에서 써보는 SQLAlchemy
회사에서 써보는 SQLAlchemy회사에서 써보는 SQLAlchemy
회사에서 써보는 SQLAlchemyJc Kim
 
Devon 2011-b-5 효과적인 레거시 코드 다루기
Devon 2011-b-5 효과적인 레거시 코드 다루기Devon 2011-b-5 효과적인 레거시 코드 다루기
Devon 2011-b-5 효과적인 레거시 코드 다루기Daum DNA
 
Effective Unit Testing
Effective Unit TestingEffective Unit Testing
Effective Unit TestingYeon Soo Kim
 
개발이 테스트를 만났을 때(Shift left testing)
개발이 테스트를 만났을 때(Shift left testing)개발이 테스트를 만났을 때(Shift left testing)
개발이 테스트를 만났을 때(Shift left testing)SangIn Choung
 
테스트가 뭐예요?
테스트가 뭐예요?테스트가 뭐예요?
테스트가 뭐예요?Kyoung Up Jung
 
About Visual C++ 10
About  Visual C++ 10About  Visual C++ 10
About Visual C++ 10흥배 최
 
Java 유지보수 가능한 개발 원칙
Java 유지보수 가능한 개발 원칙Java 유지보수 가능한 개발 원칙
Java 유지보수 가능한 개발 원칙Hyosang Hong
 
[114]angularvs react 김훈민손찬욱
[114]angularvs react 김훈민손찬욱[114]angularvs react 김훈민손찬욱
[114]angularvs react 김훈민손찬욱NAVER D2
 
프로젝트 Xxx에 적용하고 싶은 개발방법
프로젝트 Xxx에 적용하고 싶은 개발방법프로젝트 Xxx에 적용하고 싶은 개발방법
프로젝트 Xxx에 적용하고 싶은 개발방법도형 임
 
[0820 석재호]headfirst디자인패턴
[0820 석재호]headfirst디자인패턴[0820 석재호]headfirst디자인패턴
[0820 석재호]headfirst디자인패턴Jaeho Seok
 
자동화된 Test Case의 효과
자동화된 Test Case의 효과자동화된 Test Case의 효과
자동화된 Test Case의 효과도형 임
 
초보개발자의 TDD 체험기
초보개발자의 TDD 체험기초보개발자의 TDD 체험기
초보개발자의 TDD 체험기Sehun Kim
 
소프트웨어 개선 그룹(Sig) 개발 원칙
소프트웨어 개선 그룹(Sig) 개발 원칙소프트웨어 개선 그룹(Sig) 개발 원칙
소프트웨어 개선 그룹(Sig) 개발 원칙Hong Hyo Sang
 

Semelhante a The roadtocodecraft (20)

카사 공개세미나1회 W.E.L.C.
카사 공개세미나1회  W.E.L.C.카사 공개세미나1회  W.E.L.C.
카사 공개세미나1회 W.E.L.C.
 
HolubOnPatterns/chapter2_2
HolubOnPatterns/chapter2_2HolubOnPatterns/chapter2_2
HolubOnPatterns/chapter2_2
 
Refactoring Tutorial 1주차[ Refactoring 개요]
Refactoring  Tutorial 1주차[ Refactoring 개요]Refactoring  Tutorial 1주차[ Refactoring 개요]
Refactoring Tutorial 1주차[ Refactoring 개요]
 
Refactoring Tutorial 1주차[ Refactoring 개요]
Refactoring  Tutorial 1주차[ Refactoring 개요]Refactoring  Tutorial 1주차[ Refactoring 개요]
Refactoring Tutorial 1주차[ Refactoring 개요]
 
애자일 테스트 프랙티스와 사례들 (부제: 협업의 힘)
애자일 테스트 프랙티스와 사례들 (부제: 협업의 힘)애자일 테스트 프랙티스와 사례들 (부제: 협업의 힘)
애자일 테스트 프랙티스와 사례들 (부제: 협업의 힘)
 
GraphQL in Action - REST와 이별할 때 생각해야 하는 것들
GraphQL in Action - REST와 이별할 때 생각해야 하는 것들GraphQL in Action - REST와 이별할 때 생각해야 하는 것들
GraphQL in Action - REST와 이별할 때 생각해야 하는 것들
 
회사에서 써보는 SQLAlchemy
회사에서 써보는 SQLAlchemy회사에서 써보는 SQLAlchemy
회사에서 써보는 SQLAlchemy
 
Devon 2011-b-5 효과적인 레거시 코드 다루기
Devon 2011-b-5 효과적인 레거시 코드 다루기Devon 2011-b-5 효과적인 레거시 코드 다루기
Devon 2011-b-5 효과적인 레거시 코드 다루기
 
Effective Unit Testing
Effective Unit TestingEffective Unit Testing
Effective Unit Testing
 
개발이 테스트를 만났을 때(Shift left testing)
개발이 테스트를 만났을 때(Shift left testing)개발이 테스트를 만났을 때(Shift left testing)
개발이 테스트를 만났을 때(Shift left testing)
 
테스트가 뭐예요?
테스트가 뭐예요?테스트가 뭐예요?
테스트가 뭐예요?
 
About Visual C++ 10
About  Visual C++ 10About  Visual C++ 10
About Visual C++ 10
 
Java 유지보수 가능한 개발 원칙
Java 유지보수 가능한 개발 원칙Java 유지보수 가능한 개발 원칙
Java 유지보수 가능한 개발 원칙
 
[114]angularvs react 김훈민손찬욱
[114]angularvs react 김훈민손찬욱[114]angularvs react 김훈민손찬욱
[114]angularvs react 김훈민손찬욱
 
프로젝트 Xxx에 적용하고 싶은 개발방법
프로젝트 Xxx에 적용하고 싶은 개발방법프로젝트 Xxx에 적용하고 싶은 개발방법
프로젝트 Xxx에 적용하고 싶은 개발방법
 
Custom assert
Custom assertCustom assert
Custom assert
 
[0820 석재호]headfirst디자인패턴
[0820 석재호]headfirst디자인패턴[0820 석재호]headfirst디자인패턴
[0820 석재호]headfirst디자인패턴
 
자동화된 Test Case의 효과
자동화된 Test Case의 효과자동화된 Test Case의 효과
자동화된 Test Case의 효과
 
초보개발자의 TDD 체험기
초보개발자의 TDD 체험기초보개발자의 TDD 체험기
초보개발자의 TDD 체험기
 
소프트웨어 개선 그룹(Sig) 개발 원칙
소프트웨어 개선 그룹(Sig) 개발 원칙소프트웨어 개선 그룹(Sig) 개발 원칙
소프트웨어 개선 그룹(Sig) 개발 원칙
 

The roadtocodecraft

  • 1. SEEG Software Engineering Expert Group The Road To Code Craft 김진 태 2011. 07. 05
  • 2. SEEG is … 2 도메인 전문기술 요구공학 / 설계 기법 패키지솔루션 프로세스 임베디드시스템 엔터프라이즈 시스템 재공학 품질 보증 SW 프로 세스 개선 컨설팅 영역 SW 품질보증 SW 개발 방법론
  • 3. 내가 듣고 싶은 ‘나’ 3 개발자 코더 엔지니어 장인
  • 4. 공학의 특징은 재현가능, 반복 가능하다는 점이다. 그 방법, 그 프로세스대로 하면 동일한 결과가 나와야 한다. 그런데 SW는 실제 그렇게 안 된다. 즉, 공학으로 설명 안 되는 중요한 요인이 있다 4 Why Code Craft ? 공학으로 SW를 설명하기에는 난처한 점들이 많다
  • 5. SW는 자동차와 같은 그런 종류의 자본 상품이 아니다 SW는 차의 디자인에 상응하는 어떤 것이다 기계적인 세계에서는, 무엇인가를 디자인한다는 것과, 그 디자인에 의거하여 상품을 생산한다는 것은, 서로 구분된 두 개의 활동이다 SW도 유사하다. 전자의 경우 지적인 작업이라고 하고 후자의 경우 사무적인 작업으로 비교할 수 있다 5 Why Code Craft ?
  • 6. SW 개발은 반복적이고 재현 가능한 경우가 별로 없다 SW 개발은 매우 지적인 작업들이기 때문이다 SW 개발은 혼자만의 지적인 작업이 아니다 수 많은 커뮤니케이션을 필요로 하는 협력적이고 사회적인 작업이다 6 Why Code Craft ?
  • 7. SW 공학 접근은 소프트웨어 개발 프로젝트의 부분을 설명할 수 있다 “왜 사람들은 우리가 가르치는 것을 실행하지 않는가?” –Watts Humpries- “우리가쓴 논문은 실제 SW 개발에 사용되지 않는다” –David Parnas- 실제 SW 이해하고 적용하기 위한 비유 모델은 CRAFT 7 Engineering에서 Craft로 이해해야 합니다
  • 8. 진정, 코드는 잘 쓰십니까(write)? 구글: 6-7번 걸친 논리적 해결 능력과 코딩 실력 테스트 애플: Unit Test code 작성 의무 다른 산출물은 없을 수 있지만 코드는 있다! 기초적인 컴퓨팅 능력 없이 분석, 설계자, 아키텍트가 길러질 리 만무하다. 우린 SW의 기초인 code에서 다시 시작해야 합니다 8 Code Craft는 SW Craft로 가기 위한 출발점
  • 9. The Road To Code Craft 9
  • 10. 코드의 장인으로 가는 길은 동행길입니다
  • 11. 11 코드장인이 되는 길과 무술 장인이 되는 길이 유사합니다
  • 12. 12 각 주체가 해야 할 몫이 있습니다 지적 개인 조직 사무적
  • 13.
  • 14. 20代 이상 : 비용 대비 효과 미흡
  • 15. 그 사람이 그 사람이다
  • 22. 2개의 서브함수로 나누자지적 개인 조직 사무적
  • 23.
  • 24. 20代 이상 : 비용 대비 효과 탁월
  • 25. 그 사람이 다른 사람이다
  • 27. 연습에 의해 달라 질 수 있다
  • 32. 체크인 전에 코드를 한번 훑어봐라지적 개인 조직 사무적
  • 33.
  • 34. 지적인 역량이 높은 개발자 채용 채용방식의 변화요구개인 조직 사무적
  • 35. 16 조직의 사무적인 역량은 지적인 역량이 발휘하도록 환경을 조성하는 것 조직이실제 할 수 있는 사무적인 일
  • 36.
  • 39.
  • 40. 무엇이 best practice인지 식별,발굴,전파사무적
  • 41. 19 조직은 개인이 사무적인 일에서 자유하도록개인은 지적인 일이 집중하도록 지적 어렵고, 고비용 쉽고, 저비용 개인 조직 사무적
  • 43. 코드 장인으로 가는 기초 practices 21
  • 44. 22 Practice 1: 사람이이해할 수 있는 코드를 짜라 컴퓨터가 이해하는 코드는 어느 바보나 다 짤 수 있다. 훌륭한 프로그래머는 사람이 이해할 수 있는 코드를 짠다 - 마틴파울러-
  • 45. 가독성이 뛰어나다. 간단하고 작다. 의존성을 최대한 줄였다. 의도와 목적이 명확한 코드 타인에 의해 변경이 용이 한 코드 중복이 없는 코드 개체(Class, Method)가 한가지 작업만 수행하는 코드 23 사람이 이해할 수 있는 코드란 무엇일까요? For people For people For people For people For people For people For people
  • 46. 24 왜 사람이 이해하는 코드를 만들어야 하나요 ? 사람 SW 공장은 ( )이기 때문입니다 행태 일반적인 SW 개발 ( )때문입니다
  • 47. 25 일반적인 SW 개발은 기존 코드에서 시작합니다 Evolution Enhanced More complex Modified Drift away from its original design Adapted
  • 48. 26 기능만 추가할 뿐 코드 품질의 개선 작업은 미비합니다 Product 1 productization Product 2 Product 3 Base Code update
  • 49. 27 개선되지 않은 SW는 늙게 되어 Dirty code 가 됩니다 Dirty code는 SW Aging을 가속화 The Spiral of Complex
  • 50. 28 SW 노후화는 품질을 급격히 떨어뜨립니다
  • 51. Practice 2: 이름 좀 제발 잘지으라 29
  • 52. 의도를 분명히 하라 30 주석이 필요 없는 코드를 작성하라 //Login Client으로부터의 Login요청을 처리함. void CMessageProcFunc::Net_CLIENT_INFO() void CMessageProcFunc::processLoginRequestFromClient() public List<int[]> getList(){ List<int[]> list1 = new ArrayList<int []>(); for(int[] x : theList) { if(x[0] == 4) { list1.add(x); } } return list1; } public List<Cell> getFlaggedCell(){ List<Cell> flaggedCells = new ArrayList<Cell>(); for(Cell cell : gameBoard){ if(cell.isFlagged()){ flaggedCells.add(cell); } } return flaggedCell; }
  • 53. 그릇된 정보를 피하라 31 길고 서로 흡사한 이름은 피하라 public Class Vehicle { controllForEfficientHandlingOfString (); controllForEfficientStorageOfString (); } public Class Y { private Vehicle vehicle = new Vehicle(); public void method A(){ vehicle.controllForEfficientStorageOfString(); } } IDE 자동완성기능에서 선택할 때 실수의 여지가 있음
  • 54. 그릇된 정보를 피하라 32 연속적인 숫자를 붙인 이름을 피하라 public class Car{ private Tire tire1 = new Tire(); private Tire tire2 = new Tire(); private Tire tire3 = new Tire(); private Tire tire4 = new Tire(); } public class Car{ private Tire leftFrontTire = new Tire(); private Tire rightFrontTire = new Tire(); private Tire leftBackTire = new Tire(); private Tire rightBackTire = new Tire(); } public class Vehicle{ public moveControl(intmoveType){ if(moveType==0){ }else if(moveType==1){ } else if(moveType==2){ }else{ throw Exception(); } } } public class Vehicle{ Const int GO_STRAIGHT = 0; Const int TURN_LEFT = 1; Const int TURN_RIGHT = 2; Const int STOP = 3; public controlMovement(intmoveType){ if(moveType== GO_STRAIGHT){ }else if(moveType== TURN_LEFT){ } else if(moveType== TURN_RIGHT){ }else{ throw Exception(); } } }
  • 55. 클래스 이름을 일관성 있게 작성하라 33 클래스이름은 명사또는 명사구로 작성하라 : 클래스는 행위(멤버함수)의 주체로서 명사 또는 명사구로 표현됨
  • 56. 함수 이름을 일관성 있게 작성하라 34 함수 이름은 동사 또는 동사구로 작성하라 : 함수는 클래스가 행하는 행위로서 동사 또는 동사구로 표현됨 SRP Test: 클래스가 스스로 멤버함수 한다.
  • 57.
  • 58. 클래스나 모듈을 변경할 이유가 하나 뿐이어야 함
  • 59. 큰 클래스  작은 클래스 여럿작은 클래스와 협력해 시스템에 필요한 동작 수행SRP 35 ____________가 스스로 ___________ 한다. 각 줄의 첫 번째 공백에 모듈명을 적습니다. 두 번째 공백에 모듈의 메소드/함수 중 하나를 적습니다. 모듈의 모든 함수/메소드마다 이를 수행합니다. 각 줄을 소리 내어 읽습니다. 읽은 내용을 이해할 수 있습니까? 실제로 모듈의 함수/메소드가 의미하는 내용에 책임을 갖고 있어야 합니까?
  • 60. SRP(Single-Responsibility Principle) SRP Test 예 Automobile 모듈(혹은 클래스)에 SRP 적용하기 Automobile start(); stop(); changeTires(tires []); drive(); wash(); checkOil(); getOil(); SRP 준수 SRP 위반       
  • 61. Why에대한 답변으로 주석 그 외에 달지 말 것 37 Practice 3: 주석시간에 Clean code에 신경 써라
  • 62. 주석대신 코드로 의도를 표현해라 38 코드만으로는 의도를 표현하기 힘들 때만 주석을 사용해라 그러나 될 수 있으면 코드로 표현해라 //플레그된 셀을 반환 public List<int[]> getList(){ //플래그된 셀을 List형태로 저장 List<int[]> list1 = new ArrayList<int []>(); for(int[] x : theList) { if(x[0] == 4) { //플래그 되어있다면 list1.add(x); // 리스트에 저장 } } return list1; } public List<Cell> getFlaggedCell(){ List<Cell> flaggedCells = new ArrayList<Cell>(); for(Cell cell : gameBoard){ if(cell.isFlagged()){ flaggedCells.add(cell); } } return flaggedCell; }
  • 63. 이런 주석은 삭제해야 합니다 39 없어도 되는 주석 PublicintgetDayOfMonth(){ private intdayOfMonth; return dayOfMonth; } /** The name */ Private String name; /** The version */ Private String version; /** The licenceName */ Private String LicenceName; /** * 달중 날짜를 반환한다. * *@return 달중 날짜 */ //달중 날짜
  • 64. 이런 주석은 삭제해야 합니다 40 이력 및 저자를 기록하는 주석 SCM 도구를 사용해서 해결할 것 /* 11-Oct-2001 작성자: 김민수 변경내용: 클래스를 다시 정리 하고 새로운 패키지 인 com.jrefinery.date로 옮김 02-Nov-2001: 작성자: 홍길동 변경내용: com.jrefinery.date로 옮김 NoitableDate클래스 제거 getDescription() 메소드 추가 */ l_hFile = CreateFile(strName, GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_ALWAYS /*CREATE_ALWAYS*/,//youyou_2009_03_18_OPEN_ALWAYSFILE_ATTRIBUTE_NORMAL, NULL);
  • 65. 이런 주석은 삭제해야 합니다 41 주석 처리한 코드
  • 66. 한국 소프트웨어 산업 경쟁력 OECD 19개국 중 14위 절대 규모 측면에서 미국, 일본, 영국 등 소프트웨어 선진국에 비해 크게 낮은 상황 투입 대비 산출을 나타내는 효율성은 63점으로 영국, 일본, 미국 등의 소프트웨어 선진국보다 약 26∼37점 낮은 수준 한국의 소프트웨어 활용도선진국의 3분의 1 수준 생산에서 소프트웨어를 얼마나 활용하고 있는지를 측정하는 소프트웨어 활용도지수에서 한국의 점수는 소프트웨어 선진국의 34.2%에 불과 - 한국의 소프트웨어 활용도는 13점으로 미국(41점), 영국(40점), 일본(33점) 등 소프트웨어 선진국보다 낮은 상황 42 Practice 4: 도구를 활용하라
  • 67. 43 전 산업에 걸쳐 SW에 의한 업무 수행 안됩니다 출처:SERI 보고서
  • 68. Tool chain 이라는 의미 조차 많은 개발자가 모릅니다 요구분석, 설계, 구현, 테스트, 유지보수, 관리, 빌드, 형상을 통합하는 tool chain 구축 필요 44 소프트웨어 개발도 마찬가지입니다
  • 69. 45 쿵후 팬더로부터 배웁니다 작업에 집중할 수 있는 환경을 만들어 주세요
  • 70. 46 쿵후 팬더로부터 배웁니다 멘토가 있어야 합니다
  • 71. 47 쿵후 팬더로부터 배웁니다 도구를 활용하세요
  • 72. 48 쿵후 팬더로부터 배웁니다 기본기를 다지세요 읽혀지는 코드 작성
  • 73. 시간 제약으로 5일 과정을 40분 분량으로 정리했습니다. 더 관심이 있으시거나 오해 소지가 있는 부분은 따로 아래에 연락주세요. 김진태 jtkim@swexpertgroup.com Twitter: @swexpertgroup 49 알립니다