Upload
heeseob-kim
View
2.201
Download
4
Embed Size (px)
DESCRIPTION
C++ API 디자인 한국어판 Chapter 8. 버전 관리. 추가 : git에 관한 설명 https://www.atlassian.com/git/ 내용이 괜찮은것 같아요.
Citation preview
API Design for C++Chapter 8. 버전관리
아꿈사김희섭
2014.03.08
Chapter 8. 버전관리
8.1 버전번호
8.2 소프트웨어브랜치전략
8.3 API의수명주기
8.4 호환성수준
8.5 하위호환성유지
8.6 API 리뷰
…
Chapter 8. 버전관리
하위호환성은필수,
코드의안정성과견고함은덤
(이아니라성패를좌우할수도있다)
Chapter 8. 버전관리Case Study : the Bad
https://github.com/cocos2d/cocos2d-x/blob/develop/CHANGELOG
(기억과달리그렇게나쁘진않네요⋯, 죄송, ??? 하지만기억엔…)
http://www.cocos2d-x.org/forums/6/topics/33692?r=33864
(너네너무한다,증말~)
Chapter 8. 버전관리Case Study : the Bad
Refactor #1565: remove VS2008 support
Chapter 8. 버전관리Case Study : the Bad
Refactor #1565: remove VS2008 support
(발표주제와크게상관은없지만,
당시나를가장화나게했던것)
버전번호, 의미 / 규칙 / 버전API
유니크한식별자가필요하다!
일반적인의미Major - remarkable/
incompatible
Minor - functionality /backward compatible
Patch - bug / security fix
Main – Feature – Build/Revision
일부만아는버전규칙TeX
Visual Studio / FIFA / Ubuntu
Linux Kernel / Second Life Server
http://semver.org
버전번호, 의미 / 규칙 / 버전API
34 (2014.03.08)
It’s meaningless!
Version Aversion
잠시만요!
잠깐쉬었다가실게요~
버전번호, 의미 / 규칙 / 버전API
버전 API 생성…
버전번호, 의미 / 규칙 / 버전API
버전 API 생성…
버전번호, 의미 / 규칙 / 버전API
OpenGL!
…
(WebGL)
버전번호, 의미 / 규칙 / 버전API
Windows!
버전번호, 의미 / 규칙 / 버전API
Windows!
DEPRECATED
버전번호, 의미 / 규칙 / 버전API
Windows!
Special Thanks to …
…
버전번호, 의미 / 규칙 / 버전API
Direct X!
브랜치, 전략 / 정책 / 병렬브랜치
http://www.slideshare.net/innover/70-20109362
브랜치, 전략 / 정책 / 병렬브랜치
http://www.slideshare.net/innover/70-20109362각자의상황에맞춰…, 장기프로젝트의경우개발브랜치는트렁크에서분리를권장
브랜치, 전략 / 정책 / 병렬브랜치http://www.tigris.org/scdocs/SVNTips.html
브랜치, 전략 / 정책 / 병렬브랜치http://nvie.com/posts/a-successful-git-branching-model/
Special Thanks to …
브랜치, 전략 / 정책 / 병렬브랜치http://nvie.com/posts/a-successful-git-branching-model/
브랜치, 전략 / 정책/(API와) 병렬브랜치
순차적이고하위호환성을유지하며릴리즈를이어가야한다
대규모소프트웨어프로젝트에서는많은개발자들이동시에여러개의브랜치를생성해서작업하기때문에, 동시다발적인 API 릴리즈를지원하기도한다.
(대규모프로젝트, Always Branch System쪽으로얘기하고있는듯)
•대상개발브랜치
•빈번한트렁크병합
•리뷰프로세스
브랜치, 파일포맷과병렬제품
3.X (Basic)
4.X (Advanced)
5.X (Basic)
6.X (Advanced)
7.X (Basic)
8.X (Advanced)
…
브랜치, 파일포맷과병렬제품
브랜치, 파일포맷과병렬제품
14.03.08 Basic(same manner) (Identifier)
14.03.08 Advanced
API의수명주기
사전릴리즈 –유지보수 –완료 –폐기예약
계획수립 –요구분석 –설계 –개발/구현 –테스트-유지보수
After release, you can evolve an API but not change it.
호환성수준, 하위/기능적/소스/이진/상위
하위호환성 이전버전의 API와같은기능을제공한다.
기능적호환성소스호환성이진호환성클라이언트 / 서버호환성파일포맷호환성
호환성수준, 하위/기능적/소스/이진/상위
기능적호환성
“API는기능적호환성의관점에서 100% 하위호환성을유지하지못한다“ –자로슬라브툴라크
•기능의변화는있지만버그수정이라는유용한예
•기능적호환성은 100% 유지하며내부동작만바뀌는예
호환성수준, 하위/기능적/소스/이진/상위
소스호환성 : 유지 -> 새로운버전출시-클라이언트재컴파일필요
하위호환성을넓은의미에서해석한말.
호환성수준, 하위/기능적/소스/이진/상위
소스호환성 : 유지 -> 새로운버전출시-클라이언트재컴파일필요
하위호환성을넓은의미에서해석한말.
?
호환성수준, 하위/기능적/소스/이진/상위
소스호환성 : 유지 -> 새로운버전출시-클라이언트재컴파일필요
하위호환성을넓은의미에서해석한말.
호환성수준, 하위/기능적/소스/이진/상위
이진호환성 : 새버전 API 정적라이브러리를링크 /혹은 (dll)간단히교체도가능.
API 에서발생하는모든변경사항은라이브러리파일안에있는모든클래스와메서드또는함수의표현형태에영향을미쳐서는안된다. 모든 API의이진형상은모든함수의타입이나크기정렬구조, 기호를동일하게유지해야한다.
:: ABI(Application Binary Interface)
호환성수준, 하위/기능적/소스/이진/상위
이진호환성이유지되지않는 API 변경
호환성수준, 하위/기능적/소스/이진/상위
이진호환성이유지되지않는 API 변경
• 클래스, 메서드혹은함수삭제
• 클래스에멤버변수를추가혹은삭제또는클래스에서멤버변수의순서를다시정렬
• 클래스에서기본클래스추가혹은삭제
• 멤버변수의타입변경
• 어떤경우에서든기존메서드의기호변경
• 템플릿파라미터의추가혹은삭제또는재정렬
• 비인라인메서드를인라인메서드로변경. 그반대의경우도동일
• 가상메서드의순서변경
• 가상메서드가없었던클래스에새로운가상메서드추가
• 새로운가상메서드추가
• 가상메서드오버라이드
호환성수준, 하위/기능적/소스/이진/상위
이진호환성이유지되는 API 변경
호환성수준, 하위/기능적/소스/이진/상위
이진호환성이유지되는 API 변경
• 새로운클래스, 비가상메서드또는자유함수의추가
• 클래스에 새로운정적변수추가
• private 정적변수삭제(인라인메서드에서참조하지않는경우)
• 비가상 private 메서드삭제(…)
• 인라인메서드의구현코드변경(…)
• 인라인메서드를비인라인메서드로변경(…)
• 메서드의기본파라미터변경(…)
• 클래스에서프렌즈선언을추가혹은삭제
• 클래스에새열거형추가
•기존열거형에새요소추가
•비트필드에서사용되지않는존비트의사용
호환성수준, 하위/기능적/소스/이진/상위
상위호환성 : 최신 API를사용해만든코드가아무런변경없이이전버전의 API를적용해서도컴파일될수있다.
호환성수준, 하위/기능적/소스/이진/상위
상위호환성 : 이전버전의 API로다운그레이드할수있으며다운그레이드해도아무런변경필요없이정상작동
•특정메서드에파라미터추가필요 –첫번째예제
•내장형데이터타입변경필요 – typedef, 불투명포인터
•데이터주도 API 설계방법 – ArgList컨테이너를파라미터로
하위호환성유지기능추가 : 는일반적으로별무리없는작업
이진호환성?
하위호환성유지기능변경 : 소스호환성만생각하면 OK / But …
소스호환성? 선택적파라미터, 기존함수에접미어추가
새로운함수로대체, 템플릿
이진호환성? 함수오버로딩(only way)
하위호환성유지기능변경 : 소스호환성만생각하면 OK / But …
함수의기호를변경하지않고 API의행동을변경할수있는보편적인방법
Opt-in
하위호환성유지기능교체 : 새로운함수를개발해서기존함수를대체
보안취약점강화, 좀더강력한기능추가, API 간결화등
~~~ deprecated ~~~ 어쩌고저쩌고하는 warning
해당함수/영향받는함수의명세에도해당내용을추가
하위호환성유지기능제거 : 제거 (보안이슈, 지원불가, API 개선걸림돌)
금지표시 + 경고메시지 --------------------> 제거
급진적인선택이지만불가피할경우에는허용되어야한다
API 기능을제거하되기존사용자들이제거된기능을사용할수있도록하는방법도있다 – e.g Qt라이브러리
API 리뷰http://simpleprogrammer.com/2010/06/09/dont-snub-the-code-review/
API 리뷰, 목적 / 사전릴리즈리뷰 / 사전커밋리뷰
API 리뷰의목적
•하위호환성유지
•설계의일관성유지
•변경관리
•미래를대비한개선준비
•해결방법의재검토
http://www.datamation.com/news/tech-comics-software-development-2.html
API 리뷰, 목적 / 사전릴리즈리뷰 / 사전커밋리뷰
API 리뷰, 목적 / 사전릴리즈리뷰 / 사전커밋리뷰
사전릴리즈리뷰 : 최종릴리즈이전, 대부분릴리즈이전에잘못된것들을바로잡기위한활동들을수행하며대부분좋은결과를만들어낸다. 최종방어선
•제품소유자
•기술리더
•문서화리더
API 리뷰, 목적 / 사전릴리즈리뷰 / 사전커밋리뷰
Focus on the interface being delivered.
DOCUMENTATION
API 리뷰, 목적 / 사전릴리즈리뷰 / 사전커밋리뷰
Focus on the interface being delivered.
은이것의짝퉁?
자기비판과회의에빠졌을때들러봤던곳
http://programming-motherfucker.com/
API 리뷰, 목적 / 사전릴리즈리뷰 / 사전커밋리뷰
api diff http://www.apidiff.com/
API 리뷰, 목적 / 사전릴리즈리뷰 / 사전커밋리뷰
체크리스트 : 이변경사항이…
• 하위호환성을훼손하는가?
• 이진호환성을훼손하는가(그리고그것지목적에부합하는가)?
• 충분히문서화돼있는가?
• 향후개선방향과도어울리는가?
• 성능을떨어뜨리는가?
• 아키텍처모델을따르고있는가?
• API 코딩표준을준수하고있는가?
• 코드내에서순환의존성을만들고있는가?
• 클라이언트가변경된 API를쉽게적용할수있도록 API가업그레이드스크립트또는데이터파일을제공하는가?
• 변경된코드의기능적호환성을검증하기위한자동화된테스트코드가존재하는가?
• 자동화테스트가필요한가? 마련되어있는가?
• 우리가릴리즈하고자했던것이맞는가?
• 새로운 API를테스트로실행해볼수있는예제코드가제공되는가?
API 리뷰, 목적 / 사전릴리즈리뷰 / 사전커밋리뷰
API 리뷰, 목적 / 사전릴리즈리뷰 / 사전커밋리뷰
사전커밋리뷰 : 개발프로세스에서부터경계를!
http://www.kaczanowscy.pl/tomek/2012-08/code-reviews-mindmap
API 리뷰, 목적 / 사전릴리즈리뷰 / 사전커밋리뷰
사전커밋리뷰 : 개발프로세스에서부터경계를!
http://www.methodsandtools.com/archive/archive.php?id=66
epilogue
미흡했던점, 용서를…
QEUSTIONS?
THANKS!
References +α
https://svn.apache.org/repos/asf/subversion/svn-logos/logo.html
http://perforce.com/
http://planetozh.com/blog/2012/11/got-git-tshirts/
http://git-scm.com/downloads/logos
http://www.gamecodi.com/board/zboard.php?id=GAMECODI_Talkdev&page=1&sn1=&divpage=1&sn=on&ss=on&sc=on&keyword=cocos&select_arrange=headnum&desc=asc&no=1836
http://www.firstever.eu/en/google-chrome-goes-64-bit-in-2014/
http://www.tomshardware.com/news/google-chrome-update-download-browser,14249.html
https://news.ycombinator.com/item?id=2189307
http://googlesystem.blogspot.kr/2010/11/google-chromes-version-number-is.html
http://cacm.acm.org/magazines/2010/10/99497-version-aversion/fulltext α는없어요!
빼먹은것이있다면, 용서를…
http://mozilla.github.io/process-releases/draft/development_overview/
http://www.slideshare.net/innover/70-20109362
http://www.tigris.org/scdocs/SVNTips
http://nvie.com/posts/a-successful-git-branching-model/
https://developer.mozilla.org/en-US/docs/Web/WebGL/Using_Extensions
http://msdn.microsoft.com/en-us/library/windows/desktop/ms724832(v=vs.85).aspx
http://msdn.microsoft.com/en-us/library/windows/desktop/ms724832(v=vs.85).aspx
http://msdn.microsoft.com/en-us/library/windows/desktop/ff476876(v=vs.85).aspx
http://msdn.microsoft.com/en-us/library/windows/apps/hh994923.aspx
α는없어요!
-끄읕 -
References +α