SlideShare uma empresa Scribd logo
1 de 41
Baixar para ler offline
CHIP 2학년 수업
프로젝트 관리 및 지켜야 할 사항들
2018년 1학기 4주차
목차
1. 설계
2. 구현 및 테스트
3. Github
설계
설계란?
• 계획을 세움, 또는 그 계획
• 건축, 토목, 기계 제작 따위에서, 그 목적에 따라 실제적인 계획
을 세워 도면 따위로 명시하는 일
- 네이버 사전 참고 – ‘설계’
개발 환경 관련 설계
• 운영체제나 환경
• 개발 언어 및 툴
• 사용할 소프트웨어 버전
• 사용할 프레임워크
-> Win10, CentOS, MacOS, AWS Cloud 등
-> C – VS / C++ - VS Code / Java – InteliJ 등
-> APM Setup7, MySQL 8.0 등
-> Java의 Spring, Python의 Django 등
개발 환경은 왜 맞춰야 할까?
• 운영체제마다 작동방법이 다르기 때문
• 소프트웨어 버전마다 지원안되는 기능이 있을 수도 있음
• 프레임워크는 소스코드의 흐름을 바꾸기 때문
구현 관련 설계
• 디자인 패턴
• 클래스 정의
• 함수 정의
• 변수 정의
-> 3학년 1학기 소프트웨어 공학에서 자세히 배움
개별적으로 공부하자면 MVC, MVP, MVVC 정도..?
-> 당장 2학기부터 중요함!
구현 설계를 왜 해야할까?
• Code Coverage 를 높이기 위해
• 우아한 코드(Graceful Code)를 위해
• 팀원들간의 Code Conflict를 막기 위해
디자인 패턴
• 소스 코드를 구성하는 형태 혹은 패턴
• MVC 패턴의 예를 들어보자
• M – Model : 프로그램이 실질적으로 돌아가는 것을 말함
• V – View : 프로그램이 보이는 곳을 말함 (Button, TextView 등등)
• C - Controller : 프로그램을 어떻게 돌릴 것인가 분기하는 곳
디자인 패턴 – MVC
switch(버튼)
case: 버튼1
case: 버튼2
case: 버튼3
버튼1 관련 실행버튼 1
버튼 2
버튼 3
버튼2 관련 실행
버튼3 관련 실행
View
Controller
Model
클래스 정의
• 클래스 간의 관계 정의
• 클래스의 역할을 정의
• 클래스 내부 함수 정의
• 클래스 내부 변수 정의
클래스 정의 - 예시
사람
한국인 미국인 일본인
대학생 직장인
금오공대 서울대 포항공대 카이스트
클래스 정의 - 예시
private boolean 불보쌈;
private int 나이;
private int 키;
private double 학점;
public 건희();
public boolean 불보쌈사줌();
private boolean 살아있냐;
private int 나이;
private int 키;
private double 학점;
public 우진();
public boolean 불보쌈먹을수있냐();
class 건희 class 우진
금오공대
함수 정의
• 어떤 역할을 하는 함수인가?
• 어떤 Parameter를 쓰는가?
• 어떤 값을 Return 하는가?
함수 정의 – 예시
• 건희 class의 불보쌈사줌 메서드 정의
public boolean 불보쌈사줌( int 오늘의만족도 ) {
// 오늘의 만족도에 따라서
// 불보쌈을 사줄지 결정해주는 메서드.
// args : 오늘의만족도 : 얼마나 기분이 좋냐
// return : 사줌? 안사줌?
if (만족도 >= 80) return true;
else /*(만족도 < 80)*/ return true;
}
함수의 return 정의 함수의 parameter 정의
함수의 역할 정의
함수 설명
변수 정의
• 어떤 것을 가리키는 것인가?
• 어떤 속성을 나타는 것인가?
각 컴포넌트별 네임 규칙
• 프로젝트를 진행함에 따라서 무작위의 이름을 쓰는 것을 방지
• 한 눈에 무슨 역할을 하는지 알기 쉽게 정할 것
• 가급적이면 상수를 쓰는 행위는 하지 말 것
(하더라도 #define이나 final형으로 정의하고 쓰자)
네이밍 정의 방법
• 클래스명 : 첫 문자는 대문자로 써주자
• 함수명 : (동사)+(목적어) or (명사)+(동사)
: 띄어쓰기가 필요한 경우 ‘_’ 혹은 대문자를 쓰자
• 변수명 : (명사)_(명사) or (명사)
: 띄어쓰기는 ‘_’를 쓰고, 소문자로 표기
• 상수명 : 대문자의 명사로 표기
네이밍 정의 방법 – 예시 (Java 스타일)
public class Keonhee {
private int money;
private boolean bool_bossam;
private int key;
public boolean getBool_bossam(int status);
public int printMoney();
};
네이밍 정의 방법 – 예시 (C++ 스타일)
class Keonhee {
private:
int money;
boolean bool_bossam;
int key;
public:
boolean get_bool_bossam(int status);
int print_money();
};
구현 및 테스트
구현은 어떻게 하면 효율적일까?
• 작은 컴포넌트 -> 큰 컴포넌트로 구현
• 함수나 클래스를 구현하면서 테스트 케이스를 놓자
• 역할군 혹은 클래스 별로 파일을 나누자 - 모듈화
왜 구현을 작은 단위부터 할까?
• 큰 단위의 계획은 설계에서 했다.
• 작은 곳부터 에러나 버그없이해야 한다.
• 역할군을 명확하게 하기 위해서
컴포넌트가 구현되면?
• 반드시 테스트를 진행해야 한다.
• 안하게 되면 추후에 버그가 겉잡을 수 없을 정도로 터진다.
• 테스트 케이스를 반드시 만들자. ( printf 등을 적극적으로 활용 )
• 주석이나 문서로 반드시 설명을 적어주자.
- Contributing이나 프로젝트 진행에 따라서 매우 중요함
왜 파일을 나누는 것일까?
• 효율적인 소스코드 관리를 위해서
• 팀원이 만약 main함수에 소스코드를 모두 작성했다면 너의 기분은?
• 팀원이 1000줄이 넘는 소스코드를 인계 해줬다면?
왜 파일을 나누는 것일까?
• 효율적인 소스코드 관리를 위해서
• 팀원이 만약 main함수에 소스코드를 모두 작성했다면 너의 기분은?
• 팀원이 1000줄이 넘는 소스코드를 인계 해줬다면?
각 컴포넌트 테스트 및 구현이 끝나면?
• 팀원들끼리 컴포넌트를 합친다.
• 합친 후의 코드를 작성한다.
• 테스트 및 테스트 케이스를 작성한다.
• 만약 팀원들 간의 네이밍 규칙이나 정의를 안해놨다면?
각 컴포넌트 테스트 및 구현이 끝나면?
• 팀원들끼리 컴포넌트를 합친다.
• 합친 후의 코드를 작성한다.
• 테스트 및 테스트 케이스를 작성한다.
• 만약 팀원들 간의 네이밍 규칙이나 정의를 안해놨다면?
테스트 케이스는 왜 작성해야죠?
• 버그가 터지는지 안터지는지 어떻게 알죠?
• 어떻게 이 함수나 변수를 사용해야죠?
• 즉, 예제를 작성하는 것이 테스트 케이스
만약 테스트가 안된 코드를 합친다면?
만약 테스트가 안된 코드를 합친다면?
Github
Github 의 기능들
• 소스 코드 저장
• 소스 코드 버전별 정리 - tag / version
• 소스 코드 분기별 관리 - branch
• 프로젝트 전반적인 관리
• 해당 프로젝트에 이슈 남기기 기능 – Issue 카테고리
• 소스코드 수정 건의 기능 – Pull requests 카테고리
• 소스코드 문서화
branch
• 나뭇가지, 나뭇가지 모양의 물건
• Subversion
• 소스코드 분기
branch 활용 예제
Main
Pull requests
– Merge
이게 그럼 중요할까?
실전에서 매우 중요하다
• 설계 과정이 제대로 안되면 구현에서 문제가 나온다.
• 이전 버전 관리를 안해놓으면 처음부터 다시 짤지도 모른다.
• 안하면 소스코드가 미친듯이 꼬인다.
Github는 왜 알려주었는가?
• 프로젝트 관리를 메인으로 하는 가장 유명한 툴이다.
• 잘 사용하면 이만큼 편한 툴이 없다.
(특히 리눅스, Mac환경에선 매우 편리함)
• 취업 준비할 때 이만큼 좋은 포트폴리오가 없다.
그 외에 알아둬야할 점
• 창설 혹은 팀 단위의 경진대회 같은데에서
싸우기 싫으면 알아두는게 가장 좋음.
• 디자인 패턴은 전부 다 알필욘 없다.
하지만 실전에서 자주 쓰이는 패턴 정도는 알아두자.(특히 MVC)
• 실제로 개발자들이 중요하게 생각하는 과목
- 운영체제, 네트워크, 소프트웨어공학, 데이터베이스, 자료구조
그 외에 팀 프로젝트할때 쓸만한 것
• Goorm IDE - 소스코드 공유 및 실시간 작성 툴
• AWS Cloud - 원격 서버. 실제로 배그도 여기에 서버 둠
• PuTTy, 팀 뷰어 – 원격 제어 프로그램
• Eclipse Coverage 기능 – 소스코드 활용도 체크 기능
컴공에게 중요한 것
1. 버그 없는 것
2. 버그 없애는 것
3. 버그 없이 잘 돌아가는 것

Mais conteúdo relacionado

Mais procurados

간단하게 알아보는 좋은 코드 서영훈
간단하게 알아보는 좋은 코드   서영훈간단하게 알아보는 좋은 코드   서영훈
간단하게 알아보는 좋은 코드 서영훈Seo YoungHoon
 
깨끗한 코드 (클린 코드, Clean Code)
깨끗한 코드 (클린 코드, Clean Code)깨끗한 코드 (클린 코드, Clean Code)
깨끗한 코드 (클린 코드, Clean Code)Jay Park
 
개발을잘하고싶어요-네이버랩스 송기선님
개발을잘하고싶어요-네이버랩스 송기선님개발을잘하고싶어요-네이버랩스 송기선님
개발을잘하고싶어요-네이버랩스 송기선님NAVER D2
 
5.yobi를 활용한 개발자 협업 및 배포 프로세스
5.yobi를 활용한 개발자 협업 및 배포 프로세스5.yobi를 활용한 개발자 협업 및 배포 프로세스
5.yobi를 활용한 개발자 협업 및 배포 프로세스NAVER D2
 
D2 캠퍼스 세미나 - 학생 개발자에서 신입 개발자로 한단계 업그레이드 하기
D2 캠퍼스 세미나 - 학생 개발자에서 신입 개발자로 한단계 업그레이드 하기D2 캠퍼스 세미나 - 학생 개발자에서 신입 개발자로 한단계 업그레이드 하기
D2 캠퍼스 세미나 - 학생 개발자에서 신입 개발자로 한단계 업그레이드 하기Soojin Ro
 
초보 개발자를 위한 웹 프론트엔드 개발 101
초보 개발자를 위한 웹 프론트엔드 개발 101초보 개발자를 위한 웹 프론트엔드 개발 101
초보 개발자를 위한 웹 프론트엔드 개발 101Chang W. Doh
 
[D2 CAMPUS] Dodge the Dodge - GoN
[D2 CAMPUS] Dodge the Dodge - GoN[D2 CAMPUS] Dodge the Dodge - GoN
[D2 CAMPUS] Dodge the Dodge - GoNNAVER D2
 
TDD: Test Driven Development 첫번째 이야기
TDD: Test Driven Development 첫번째 이야기TDD: Test Driven Development 첫번째 이야기
TDD: Test Driven Development 첫번째 이야기Ji Heon Kim
 
코드 리뷰 시스템 소개
코드 리뷰 시스템 소개코드 리뷰 시스템 소개
코드 리뷰 시스템 소개Young-Ho Cha
 
TDD&Refactoring Day 02: TDD
TDD&Refactoring Day 02: TDDTDD&Refactoring Day 02: TDD
TDD&Refactoring Day 02: TDDSuwon Chae
 
회사에서 새로운 기술_적용하기
회사에서 새로운 기술_적용하기회사에서 새로운 기술_적용하기
회사에서 새로운 기술_적용하기Dexter Jung
 
IoT 개발자를 위한 Embedded C에서 TDD를 해보자
IoT 개발자를 위한 Embedded C에서 TDD를 해보자IoT 개발자를 위한 Embedded C에서 TDD를 해보자
IoT 개발자를 위한 Embedded C에서 TDD를 해보자Taeyeop Kim
 
Ui test 자동화하기 - Selenium + Jenkins
Ui test 자동화하기 - Selenium + JenkinsUi test 자동화하기 - Selenium + Jenkins
Ui test 자동화하기 - Selenium + JenkinsChang Hak Yeon
 
[부스트캠프 Tech Talk] 최재필_P 스테이지에서 Git으로 협업하기
[부스트캠프 Tech Talk] 최재필_P 스테이지에서 Git으로 협업하기[부스트캠프 Tech Talk] 최재필_P 스테이지에서 Git으로 협업하기
[부스트캠프 Tech Talk] 최재필_P 스테이지에서 Git으로 협업하기CONNECT FOUNDATION
 
Zeropage - wikinote 발표자료
Zeropage - wikinote 발표자료Zeropage - wikinote 발표자료
Zeropage - wikinote 발표자료NAVER D2
 
학교에선 알려주지 않는 오픈소스이야기 - 박치완님
학교에선 알려주지 않는 오픈소스이야기 - 박치완님학교에선 알려주지 않는 오픈소스이야기 - 박치완님
학교에선 알려주지 않는 오픈소스이야기 - 박치완님NAVER D2
 

Mais procurados (19)

Tdd ver.2
Tdd ver.2Tdd ver.2
Tdd ver.2
 
간단하게 알아보는 좋은 코드 서영훈
간단하게 알아보는 좋은 코드   서영훈간단하게 알아보는 좋은 코드   서영훈
간단하게 알아보는 좋은 코드 서영훈
 
깨끗한 코드 (클린 코드, Clean Code)
깨끗한 코드 (클린 코드, Clean Code)깨끗한 코드 (클린 코드, Clean Code)
깨끗한 코드 (클린 코드, Clean Code)
 
개발을잘하고싶어요-네이버랩스 송기선님
개발을잘하고싶어요-네이버랩스 송기선님개발을잘하고싶어요-네이버랩스 송기선님
개발을잘하고싶어요-네이버랩스 송기선님
 
5.yobi를 활용한 개발자 협업 및 배포 프로세스
5.yobi를 활용한 개발자 협업 및 배포 프로세스5.yobi를 활용한 개발자 협업 및 배포 프로세스
5.yobi를 활용한 개발자 협업 및 배포 프로세스
 
D2 캠퍼스 세미나 - 학생 개발자에서 신입 개발자로 한단계 업그레이드 하기
D2 캠퍼스 세미나 - 학생 개발자에서 신입 개발자로 한단계 업그레이드 하기D2 캠퍼스 세미나 - 학생 개발자에서 신입 개발자로 한단계 업그레이드 하기
D2 캠퍼스 세미나 - 학생 개발자에서 신입 개발자로 한단계 업그레이드 하기
 
초보 개발자를 위한 웹 프론트엔드 개발 101
초보 개발자를 위한 웹 프론트엔드 개발 101초보 개발자를 위한 웹 프론트엔드 개발 101
초보 개발자를 위한 웹 프론트엔드 개발 101
 
[D2 CAMPUS] Dodge the Dodge - GoN
[D2 CAMPUS] Dodge the Dodge - GoN[D2 CAMPUS] Dodge the Dodge - GoN
[D2 CAMPUS] Dodge the Dodge - GoN
 
TDD: Test Driven Development 첫번째 이야기
TDD: Test Driven Development 첫번째 이야기TDD: Test Driven Development 첫번째 이야기
TDD: Test Driven Development 첫번째 이야기
 
Tdd with JUnit 1
Tdd with JUnit 1Tdd with JUnit 1
Tdd with JUnit 1
 
코드 리뷰 시스템 소개
코드 리뷰 시스템 소개코드 리뷰 시스템 소개
코드 리뷰 시스템 소개
 
Work With Engineer
Work With EngineerWork With Engineer
Work With Engineer
 
TDD&Refactoring Day 02: TDD
TDD&Refactoring Day 02: TDDTDD&Refactoring Day 02: TDD
TDD&Refactoring Day 02: TDD
 
회사에서 새로운 기술_적용하기
회사에서 새로운 기술_적용하기회사에서 새로운 기술_적용하기
회사에서 새로운 기술_적용하기
 
IoT 개발자를 위한 Embedded C에서 TDD를 해보자
IoT 개발자를 위한 Embedded C에서 TDD를 해보자IoT 개발자를 위한 Embedded C에서 TDD를 해보자
IoT 개발자를 위한 Embedded C에서 TDD를 해보자
 
Ui test 자동화하기 - Selenium + Jenkins
Ui test 자동화하기 - Selenium + JenkinsUi test 자동화하기 - Selenium + Jenkins
Ui test 자동화하기 - Selenium + Jenkins
 
[부스트캠프 Tech Talk] 최재필_P 스테이지에서 Git으로 협업하기
[부스트캠프 Tech Talk] 최재필_P 스테이지에서 Git으로 협업하기[부스트캠프 Tech Talk] 최재필_P 스테이지에서 Git으로 협업하기
[부스트캠프 Tech Talk] 최재필_P 스테이지에서 Git으로 협업하기
 
Zeropage - wikinote 발표자료
Zeropage - wikinote 발표자료Zeropage - wikinote 발표자료
Zeropage - wikinote 발표자료
 
학교에선 알려주지 않는 오픈소스이야기 - 박치완님
학교에선 알려주지 않는 오픈소스이야기 - 박치완님학교에선 알려주지 않는 오픈소스이야기 - 박치완님
학교에선 알려주지 않는 오픈소스이야기 - 박치완님
 

Semelhante a 프로젝트 관리 및 지켜야 할 사항들

청강대 특강 - 프로젝트 제대로 해보기
청강대 특강 - 프로젝트 제대로 해보기청강대 특강 - 프로젝트 제대로 해보기
청강대 특강 - 프로젝트 제대로 해보기Chris Ohk
 
[오픈소스컨설팅]Session 6. scrum과 jira 기반의 소프트웨어 개발 프로세스
[오픈소스컨설팅]Session 6. scrum과 jira 기반의 소프트웨어 개발 프로세스[오픈소스컨설팅]Session 6. scrum과 jira 기반의 소프트웨어 개발 프로세스
[오픈소스컨설팅]Session 6. scrum과 jira 기반의 소프트웨어 개발 프로세스Hee Jae Lee
 
[네이버오픈소스세미나] egjs-view360 개발기 - 김희재
[네이버오픈소스세미나] egjs-view360 개발기 - 김희재[네이버오픈소스세미나] egjs-view360 개발기 - 김희재
[네이버오픈소스세미나] egjs-view360 개발기 - 김희재NAVER D2
 
커뮤니티와 함께한 예비개발자 성장기- 조성수님
커뮤니티와 함께한 예비개발자 성장기- 조성수님커뮤니티와 함께한 예비개발자 성장기- 조성수님
커뮤니티와 함께한 예비개발자 성장기- 조성수님NAVER D2
 
VSTS와 Azure를 이용한 팀 프로세스 관리
VSTS와 Azure를 이용한 팀 프로세스 관리VSTS와 Azure를 이용한 팀 프로세스 관리
VSTS와 Azure를 이용한 팀 프로세스 관리Gyuwon Yi
 
성장하는 스타트업의 프로세스 개척기
성장하는 스타트업의 프로세스 개척기성장하는 스타트업의 프로세스 개척기
성장하는 스타트업의 프로세스 개척기DomainDriven DomainDriven
 
[NDC12] 변화량 분석을 중심으로 한 저비용 고효율의 지속가능한 코드퀄리티 관리법 - 송창규
[NDC12] 변화량 분석을 중심으로 한 저비용 고효율의 지속가능한 코드퀄리티 관리법 - 송창규[NDC12] 변화량 분석을 중심으로 한 저비용 고효율의 지속가능한 코드퀄리티 관리법 - 송창규
[NDC12] 변화량 분석을 중심으로 한 저비용 고효율의 지속가능한 코드퀄리티 관리법 - 송창규ChangKyu Song
 
애자일 스크럼과 JIRA
애자일 스크럼과 JIRA 애자일 스크럼과 JIRA
애자일 스크럼과 JIRA Terry Cho
 
소프트웨어 개발 프로세스 배경 설명
소프트웨어 개발 프로세스 배경 설명소프트웨어 개발 프로세스 배경 설명
소프트웨어 개발 프로세스 배경 설명Andrew Sungjin Kim
 
레가시 프로젝트의 빌드 자동화
레가시 프로젝트의 빌드 자동화레가시 프로젝트의 빌드 자동화
레가시 프로젝트의 빌드 자동화Jaehoon Choi
 
이승재, M2 AI코드 개발 생산성 향상 사례, NDC2013
이승재, M2 AI코드 개발 생산성 향상 사례, NDC2013이승재, M2 AI코드 개발 생산성 향상 사례, NDC2013
이승재, M2 AI코드 개발 생산성 향상 사례, NDC2013devCAT Studio, NEXON
 
객체지향프로그래밍 특강
객체지향프로그래밍 특강객체지향프로그래밍 특강
객체지향프로그래밍 특강uEngine Solutions
 
애자일과 애자일 테스트 소개 (테스트기본교육 3장 2절)
애자일과 애자일 테스트 소개 (테스트기본교육 3장 2절)애자일과 애자일 테스트 소개 (테스트기본교육 3장 2절)
애자일과 애자일 테스트 소개 (테스트기본교육 3장 2절)SangIn Choung
 
홍성우, 게임 프로그래머는 어떻게 가르치나요?, NDC2018
홍성우, 게임 프로그래머는 어떻게 가르치나요?, NDC2018홍성우, 게임 프로그래머는 어떻게 가르치나요?, NDC2018
홍성우, 게임 프로그래머는 어떻게 가르치나요?, NDC2018devCAT Studio, NEXON
 
Python Korea 2014년 6월 세미나 - Windows 환경에서 Python 개발환경 세팅하기
Python Korea 2014년 6월 세미나 - Windows 환경에서 Python 개발환경 세팅하기Python Korea 2014년 6월 세미나 - Windows 환경에서 Python 개발환경 세팅하기
Python Korea 2014년 6월 세미나 - Windows 환경에서 Python 개발환경 세팅하기Joongi Kim
 
개발이 테스트를 만났을 때(Shift left testing)
개발이 테스트를 만났을 때(Shift left testing)개발이 테스트를 만났을 때(Shift left testing)
개발이 테스트를 만났을 때(Shift left testing)SangIn Choung
 
메이븐 기본 이해
메이븐 기본 이해메이븐 기본 이해
메이븐 기본 이해중선 곽
 
EMOCON 2015 - 품질과 테스트는 다르다
EMOCON 2015 - 품질과 테스트는 다르다EMOCON 2015 - 품질과 테스트는 다르다
EMOCON 2015 - 품질과 테스트는 다르다이상한모임
 
[NDC13] 70명이 커밋하는 라이브 개발하기 (해외 진출 라이브 프로젝트의 개발 관리) - 송창규
[NDC13] 70명이 커밋하는 라이브 개발하기 (해외 진출 라이브 프로젝트의 개발 관리) - 송창규[NDC13] 70명이 커밋하는 라이브 개발하기 (해외 진출 라이브 프로젝트의 개발 관리) - 송창규
[NDC13] 70명이 커밋하는 라이브 개발하기 (해외 진출 라이브 프로젝트의 개발 관리) - 송창규ChangKyu Song
 
경희대 해커 기술 세미나 - Git hub으로 학교 팀프로젝트 하기(조성수)
경희대 해커 기술 세미나 - Git hub으로 학교 팀프로젝트 하기(조성수)경희대 해커 기술 세미나 - Git hub으로 학교 팀프로젝트 하기(조성수)
경희대 해커 기술 세미나 - Git hub으로 학교 팀프로젝트 하기(조성수)NAVER D2
 

Semelhante a 프로젝트 관리 및 지켜야 할 사항들 (20)

청강대 특강 - 프로젝트 제대로 해보기
청강대 특강 - 프로젝트 제대로 해보기청강대 특강 - 프로젝트 제대로 해보기
청강대 특강 - 프로젝트 제대로 해보기
 
[오픈소스컨설팅]Session 6. scrum과 jira 기반의 소프트웨어 개발 프로세스
[오픈소스컨설팅]Session 6. scrum과 jira 기반의 소프트웨어 개발 프로세스[오픈소스컨설팅]Session 6. scrum과 jira 기반의 소프트웨어 개발 프로세스
[오픈소스컨설팅]Session 6. scrum과 jira 기반의 소프트웨어 개발 프로세스
 
[네이버오픈소스세미나] egjs-view360 개발기 - 김희재
[네이버오픈소스세미나] egjs-view360 개발기 - 김희재[네이버오픈소스세미나] egjs-view360 개발기 - 김희재
[네이버오픈소스세미나] egjs-view360 개발기 - 김희재
 
커뮤니티와 함께한 예비개발자 성장기- 조성수님
커뮤니티와 함께한 예비개발자 성장기- 조성수님커뮤니티와 함께한 예비개발자 성장기- 조성수님
커뮤니티와 함께한 예비개발자 성장기- 조성수님
 
VSTS와 Azure를 이용한 팀 프로세스 관리
VSTS와 Azure를 이용한 팀 프로세스 관리VSTS와 Azure를 이용한 팀 프로세스 관리
VSTS와 Azure를 이용한 팀 프로세스 관리
 
성장하는 스타트업의 프로세스 개척기
성장하는 스타트업의 프로세스 개척기성장하는 스타트업의 프로세스 개척기
성장하는 스타트업의 프로세스 개척기
 
[NDC12] 변화량 분석을 중심으로 한 저비용 고효율의 지속가능한 코드퀄리티 관리법 - 송창규
[NDC12] 변화량 분석을 중심으로 한 저비용 고효율의 지속가능한 코드퀄리티 관리법 - 송창규[NDC12] 변화량 분석을 중심으로 한 저비용 고효율의 지속가능한 코드퀄리티 관리법 - 송창규
[NDC12] 변화량 분석을 중심으로 한 저비용 고효율의 지속가능한 코드퀄리티 관리법 - 송창규
 
애자일 스크럼과 JIRA
애자일 스크럼과 JIRA 애자일 스크럼과 JIRA
애자일 스크럼과 JIRA
 
소프트웨어 개발 프로세스 배경 설명
소프트웨어 개발 프로세스 배경 설명소프트웨어 개발 프로세스 배경 설명
소프트웨어 개발 프로세스 배경 설명
 
레가시 프로젝트의 빌드 자동화
레가시 프로젝트의 빌드 자동화레가시 프로젝트의 빌드 자동화
레가시 프로젝트의 빌드 자동화
 
이승재, M2 AI코드 개발 생산성 향상 사례, NDC2013
이승재, M2 AI코드 개발 생산성 향상 사례, NDC2013이승재, M2 AI코드 개발 생산성 향상 사례, NDC2013
이승재, M2 AI코드 개발 생산성 향상 사례, NDC2013
 
객체지향프로그래밍 특강
객체지향프로그래밍 특강객체지향프로그래밍 특강
객체지향프로그래밍 특강
 
애자일과 애자일 테스트 소개 (테스트기본교육 3장 2절)
애자일과 애자일 테스트 소개 (테스트기본교육 3장 2절)애자일과 애자일 테스트 소개 (테스트기본교육 3장 2절)
애자일과 애자일 테스트 소개 (테스트기본교육 3장 2절)
 
홍성우, 게임 프로그래머는 어떻게 가르치나요?, NDC2018
홍성우, 게임 프로그래머는 어떻게 가르치나요?, NDC2018홍성우, 게임 프로그래머는 어떻게 가르치나요?, NDC2018
홍성우, 게임 프로그래머는 어떻게 가르치나요?, NDC2018
 
Python Korea 2014년 6월 세미나 - Windows 환경에서 Python 개발환경 세팅하기
Python Korea 2014년 6월 세미나 - Windows 환경에서 Python 개발환경 세팅하기Python Korea 2014년 6월 세미나 - Windows 환경에서 Python 개발환경 세팅하기
Python Korea 2014년 6월 세미나 - Windows 환경에서 Python 개발환경 세팅하기
 
개발이 테스트를 만났을 때(Shift left testing)
개발이 테스트를 만났을 때(Shift left testing)개발이 테스트를 만났을 때(Shift left testing)
개발이 테스트를 만났을 때(Shift left testing)
 
메이븐 기본 이해
메이븐 기본 이해메이븐 기본 이해
메이븐 기본 이해
 
EMOCON 2015 - 품질과 테스트는 다르다
EMOCON 2015 - 품질과 테스트는 다르다EMOCON 2015 - 품질과 테스트는 다르다
EMOCON 2015 - 품질과 테스트는 다르다
 
[NDC13] 70명이 커밋하는 라이브 개발하기 (해외 진출 라이브 프로젝트의 개발 관리) - 송창규
[NDC13] 70명이 커밋하는 라이브 개발하기 (해외 진출 라이브 프로젝트의 개발 관리) - 송창규[NDC13] 70명이 커밋하는 라이브 개발하기 (해외 진출 라이브 프로젝트의 개발 관리) - 송창규
[NDC13] 70명이 커밋하는 라이브 개발하기 (해외 진출 라이브 프로젝트의 개발 관리) - 송창규
 
경희대 해커 기술 세미나 - Git hub으로 학교 팀프로젝트 하기(조성수)
경희대 해커 기술 세미나 - Git hub으로 학교 팀프로젝트 하기(조성수)경희대 해커 기술 세미나 - Git hub으로 학교 팀프로젝트 하기(조성수)
경희대 해커 기술 세미나 - Git hub으로 학교 팀프로젝트 하기(조성수)
 

Mais de Lee Geonhee

Python을 이용한 패키지 테스트 및 배포해보기
Python을 이용한 패키지 테스트 및 배포해보기Python을 이용한 패키지 테스트 및 배포해보기
Python을 이용한 패키지 테스트 및 배포해보기Lee Geonhee
 
자료구조 복습 및 트리기초
자료구조 복습 및 트리기초자료구조 복습 및 트리기초
자료구조 복습 및 트리기초Lee Geonhee
 
연결리스트 복습 및 스택
연결리스트 복습 및 스택연결리스트 복습 및 스택
연결리스트 복습 및 스택Lee Geonhee
 
연결 리스트(기초)
연결 리스트(기초)연결 리스트(기초)
연결 리스트(기초)Lee Geonhee
 
HTTPS를 이용한 챗봇 웹 어플리케이션
HTTPS를 이용한 챗봇 웹 어플리케이션HTTPS를 이용한 챗봇 웹 어플리케이션
HTTPS를 이용한 챗봇 웹 어플리케이션Lee Geonhee
 
AES 알고리즘
AES 알고리즘AES 알고리즘
AES 알고리즘Lee Geonhee
 
허프만 압축 알고리즘 및 비교
허프만 압축 알고리즘 및 비교허프만 압축 알고리즘 및 비교
허프만 압축 알고리즘 및 비교Lee Geonhee
 
Shortest path algorithms
Shortest path algorithmsShortest path algorithms
Shortest path algorithmsLee Geonhee
 
5th Naver D2 FEST 결승전 발표 자료(IoT-Pet-Home-System)
5th Naver D2 FEST 결승전 발표 자료(IoT-Pet-Home-System)5th Naver D2 FEST 결승전 발표 자료(IoT-Pet-Home-System)
5th Naver D2 FEST 결승전 발표 자료(IoT-Pet-Home-System)Lee Geonhee
 
오픈소스 라이선스
오픈소스 라이선스오픈소스 라이선스
오픈소스 라이선스Lee Geonhee
 
GitHub로 프로젝트 운영하기
GitHub로 프로젝트 운영하기GitHub로 프로젝트 운영하기
GitHub로 프로젝트 운영하기Lee Geonhee
 

Mais de Lee Geonhee (12)

Python을 이용한 패키지 테스트 및 배포해보기
Python을 이용한 패키지 테스트 및 배포해보기Python을 이용한 패키지 테스트 및 배포해보기
Python을 이용한 패키지 테스트 및 배포해보기
 
자료구조 복습 및 트리기초
자료구조 복습 및 트리기초자료구조 복습 및 트리기초
자료구조 복습 및 트리기초
 
연결리스트 복습 및 스택
연결리스트 복습 및 스택연결리스트 복습 및 스택
연결리스트 복습 및 스택
 
연결 리스트(기초)
연결 리스트(기초)연결 리스트(기초)
연결 리스트(기초)
 
HTTPS를 이용한 챗봇 웹 어플리케이션
HTTPS를 이용한 챗봇 웹 어플리케이션HTTPS를 이용한 챗봇 웹 어플리케이션
HTTPS를 이용한 챗봇 웹 어플리케이션
 
AES 알고리즘
AES 알고리즘AES 알고리즘
AES 알고리즘
 
허프만 압축 알고리즘 및 비교
허프만 압축 알고리즘 및 비교허프만 압축 알고리즘 및 비교
허프만 압축 알고리즘 및 비교
 
Shortest path algorithms
Shortest path algorithmsShortest path algorithms
Shortest path algorithms
 
5th Naver D2 FEST 결승전 발표 자료(IoT-Pet-Home-System)
5th Naver D2 FEST 결승전 발표 자료(IoT-Pet-Home-System)5th Naver D2 FEST 결승전 발표 자료(IoT-Pet-Home-System)
5th Naver D2 FEST 결승전 발표 자료(IoT-Pet-Home-System)
 
오픈소스 라이선스
오픈소스 라이선스오픈소스 라이선스
오픈소스 라이선스
 
Web server
Web serverWeb server
Web server
 
GitHub로 프로젝트 운영하기
GitHub로 프로젝트 운영하기GitHub로 프로젝트 운영하기
GitHub로 프로젝트 운영하기
 

프로젝트 관리 및 지켜야 할 사항들

  • 1. CHIP 2학년 수업 프로젝트 관리 및 지켜야 할 사항들 2018년 1학기 4주차
  • 2. 목차 1. 설계 2. 구현 및 테스트 3. Github
  • 4. 설계란? • 계획을 세움, 또는 그 계획 • 건축, 토목, 기계 제작 따위에서, 그 목적에 따라 실제적인 계획 을 세워 도면 따위로 명시하는 일 - 네이버 사전 참고 – ‘설계’
  • 5. 개발 환경 관련 설계 • 운영체제나 환경 • 개발 언어 및 툴 • 사용할 소프트웨어 버전 • 사용할 프레임워크 -> Win10, CentOS, MacOS, AWS Cloud 등 -> C – VS / C++ - VS Code / Java – InteliJ 등 -> APM Setup7, MySQL 8.0 등 -> Java의 Spring, Python의 Django 등
  • 6. 개발 환경은 왜 맞춰야 할까? • 운영체제마다 작동방법이 다르기 때문 • 소프트웨어 버전마다 지원안되는 기능이 있을 수도 있음 • 프레임워크는 소스코드의 흐름을 바꾸기 때문
  • 7. 구현 관련 설계 • 디자인 패턴 • 클래스 정의 • 함수 정의 • 변수 정의 -> 3학년 1학기 소프트웨어 공학에서 자세히 배움 개별적으로 공부하자면 MVC, MVP, MVVC 정도..? -> 당장 2학기부터 중요함!
  • 8. 구현 설계를 왜 해야할까? • Code Coverage 를 높이기 위해 • 우아한 코드(Graceful Code)를 위해 • 팀원들간의 Code Conflict를 막기 위해
  • 9. 디자인 패턴 • 소스 코드를 구성하는 형태 혹은 패턴 • MVC 패턴의 예를 들어보자 • M – Model : 프로그램이 실질적으로 돌아가는 것을 말함 • V – View : 프로그램이 보이는 곳을 말함 (Button, TextView 등등) • C - Controller : 프로그램을 어떻게 돌릴 것인가 분기하는 곳
  • 10. 디자인 패턴 – MVC switch(버튼) case: 버튼1 case: 버튼2 case: 버튼3 버튼1 관련 실행버튼 1 버튼 2 버튼 3 버튼2 관련 실행 버튼3 관련 실행 View Controller Model
  • 11. 클래스 정의 • 클래스 간의 관계 정의 • 클래스의 역할을 정의 • 클래스 내부 함수 정의 • 클래스 내부 변수 정의
  • 12. 클래스 정의 - 예시 사람 한국인 미국인 일본인 대학생 직장인 금오공대 서울대 포항공대 카이스트
  • 13. 클래스 정의 - 예시 private boolean 불보쌈; private int 나이; private int 키; private double 학점; public 건희(); public boolean 불보쌈사줌(); private boolean 살아있냐; private int 나이; private int 키; private double 학점; public 우진(); public boolean 불보쌈먹을수있냐(); class 건희 class 우진 금오공대
  • 14. 함수 정의 • 어떤 역할을 하는 함수인가? • 어떤 Parameter를 쓰는가? • 어떤 값을 Return 하는가?
  • 15. 함수 정의 – 예시 • 건희 class의 불보쌈사줌 메서드 정의 public boolean 불보쌈사줌( int 오늘의만족도 ) { // 오늘의 만족도에 따라서 // 불보쌈을 사줄지 결정해주는 메서드. // args : 오늘의만족도 : 얼마나 기분이 좋냐 // return : 사줌? 안사줌? if (만족도 >= 80) return true; else /*(만족도 < 80)*/ return true; } 함수의 return 정의 함수의 parameter 정의 함수의 역할 정의 함수 설명
  • 16. 변수 정의 • 어떤 것을 가리키는 것인가? • 어떤 속성을 나타는 것인가?
  • 17. 각 컴포넌트별 네임 규칙 • 프로젝트를 진행함에 따라서 무작위의 이름을 쓰는 것을 방지 • 한 눈에 무슨 역할을 하는지 알기 쉽게 정할 것 • 가급적이면 상수를 쓰는 행위는 하지 말 것 (하더라도 #define이나 final형으로 정의하고 쓰자)
  • 18. 네이밍 정의 방법 • 클래스명 : 첫 문자는 대문자로 써주자 • 함수명 : (동사)+(목적어) or (명사)+(동사) : 띄어쓰기가 필요한 경우 ‘_’ 혹은 대문자를 쓰자 • 변수명 : (명사)_(명사) or (명사) : 띄어쓰기는 ‘_’를 쓰고, 소문자로 표기 • 상수명 : 대문자의 명사로 표기
  • 19. 네이밍 정의 방법 – 예시 (Java 스타일) public class Keonhee { private int money; private boolean bool_bossam; private int key; public boolean getBool_bossam(int status); public int printMoney(); };
  • 20. 네이밍 정의 방법 – 예시 (C++ 스타일) class Keonhee { private: int money; boolean bool_bossam; int key; public: boolean get_bool_bossam(int status); int print_money(); };
  • 22. 구현은 어떻게 하면 효율적일까? • 작은 컴포넌트 -> 큰 컴포넌트로 구현 • 함수나 클래스를 구현하면서 테스트 케이스를 놓자 • 역할군 혹은 클래스 별로 파일을 나누자 - 모듈화
  • 23. 왜 구현을 작은 단위부터 할까? • 큰 단위의 계획은 설계에서 했다. • 작은 곳부터 에러나 버그없이해야 한다. • 역할군을 명확하게 하기 위해서
  • 24. 컴포넌트가 구현되면? • 반드시 테스트를 진행해야 한다. • 안하게 되면 추후에 버그가 겉잡을 수 없을 정도로 터진다. • 테스트 케이스를 반드시 만들자. ( printf 등을 적극적으로 활용 ) • 주석이나 문서로 반드시 설명을 적어주자. - Contributing이나 프로젝트 진행에 따라서 매우 중요함
  • 25. 왜 파일을 나누는 것일까? • 효율적인 소스코드 관리를 위해서 • 팀원이 만약 main함수에 소스코드를 모두 작성했다면 너의 기분은? • 팀원이 1000줄이 넘는 소스코드를 인계 해줬다면?
  • 26. 왜 파일을 나누는 것일까? • 효율적인 소스코드 관리를 위해서 • 팀원이 만약 main함수에 소스코드를 모두 작성했다면 너의 기분은? • 팀원이 1000줄이 넘는 소스코드를 인계 해줬다면?
  • 27. 각 컴포넌트 테스트 및 구현이 끝나면? • 팀원들끼리 컴포넌트를 합친다. • 합친 후의 코드를 작성한다. • 테스트 및 테스트 케이스를 작성한다. • 만약 팀원들 간의 네이밍 규칙이나 정의를 안해놨다면?
  • 28. 각 컴포넌트 테스트 및 구현이 끝나면? • 팀원들끼리 컴포넌트를 합친다. • 합친 후의 코드를 작성한다. • 테스트 및 테스트 케이스를 작성한다. • 만약 팀원들 간의 네이밍 규칙이나 정의를 안해놨다면?
  • 29. 테스트 케이스는 왜 작성해야죠? • 버그가 터지는지 안터지는지 어떻게 알죠? • 어떻게 이 함수나 변수를 사용해야죠? • 즉, 예제를 작성하는 것이 테스트 케이스
  • 30. 만약 테스트가 안된 코드를 합친다면?
  • 31. 만약 테스트가 안된 코드를 합친다면?
  • 33. Github 의 기능들 • 소스 코드 저장 • 소스 코드 버전별 정리 - tag / version • 소스 코드 분기별 관리 - branch • 프로젝트 전반적인 관리 • 해당 프로젝트에 이슈 남기기 기능 – Issue 카테고리 • 소스코드 수정 건의 기능 – Pull requests 카테고리 • 소스코드 문서화
  • 34. branch • 나뭇가지, 나뭇가지 모양의 물건 • Subversion • 소스코드 분기
  • 35. branch 활용 예제 Main Pull requests – Merge
  • 37. 실전에서 매우 중요하다 • 설계 과정이 제대로 안되면 구현에서 문제가 나온다. • 이전 버전 관리를 안해놓으면 처음부터 다시 짤지도 모른다. • 안하면 소스코드가 미친듯이 꼬인다.
  • 38. Github는 왜 알려주었는가? • 프로젝트 관리를 메인으로 하는 가장 유명한 툴이다. • 잘 사용하면 이만큼 편한 툴이 없다. (특히 리눅스, Mac환경에선 매우 편리함) • 취업 준비할 때 이만큼 좋은 포트폴리오가 없다.
  • 39. 그 외에 알아둬야할 점 • 창설 혹은 팀 단위의 경진대회 같은데에서 싸우기 싫으면 알아두는게 가장 좋음. • 디자인 패턴은 전부 다 알필욘 없다. 하지만 실전에서 자주 쓰이는 패턴 정도는 알아두자.(특히 MVC) • 실제로 개발자들이 중요하게 생각하는 과목 - 운영체제, 네트워크, 소프트웨어공학, 데이터베이스, 자료구조
  • 40. 그 외에 팀 프로젝트할때 쓸만한 것 • Goorm IDE - 소스코드 공유 및 실시간 작성 툴 • AWS Cloud - 원격 서버. 실제로 배그도 여기에 서버 둠 • PuTTy, 팀 뷰어 – 원격 제어 프로그램 • Eclipse Coverage 기능 – 소스코드 활용도 체크 기능
  • 41. 컴공에게 중요한 것 1. 버그 없는 것 2. 버그 없애는 것 3. 버그 없이 잘 돌아가는 것