Event storming based msa training commerce example add_handson_v3
소프트웨어 개발과 Agile skill set
1. 소프트웨어 개발과
Agile Skill Set
소프트웨어를 잘 만드는 Skill Set
이세영 (effectiveprogramming.tistory.com)
2. /12
어떻게 해야 소프트웨어를 잘 만들 수 있을까?
Product
People
Process
: Software
: Software 개발자들
: Software 개발 방법
1
3. /12
Product : 소프트웨어 산업의 성장
소프트웨어는 지속적으로 적용 분야와 규모가 확장되어 왔음.
관련도서
* 존 폰 노이만 그리고 현대 컴퓨팅의 기원(윌리엄 어스프레이)
* 누가 소프트웨어의 심장을 만들었나(박지훈)
* 구글의 미래(토마스 슐츠)
2
1930~
1940~
1950~
1960~
1970~
1980~
1990~
2000~
2010~
컴퓨터 (암호해독)
군사(탄도궤적,폭발계산)
과학연구(일기예보)
고등제조(우주선)
PC출현
PC시대(GUI, 마우스)
WWW
SNS, 집단지성
IoT, 빅데이터
2016. 3. 9~ 인공지능
4. /12
Product : 소프트웨어가 가져야 할 특성
좋은 소프트웨어는 1. 하드웨어 자원 사용을 최소화하고(효율성),
2. 요구사항을 쉽게 반영할 수 있어야 한다(유연성).
Computer : 빠른 범용 계산 기계
Software
소통성
Communication
효율성
Efficiency
유연성
Flexibility
소프트웨어의 규모는 계속 커지고,
개발자 간의 “협력”을 필요로 한다.
하드웨어 자원 사용의 최소화
(속도, 메모리)
새로운 요구사항을 쉽게 반영할 수 있는
소프트웨어의 구조적 특성
: 가장 빠른 컴퓨팅 요소 : 가장 유연한 컴퓨팅 요소
소프트웨어가 가져야 할 특성
관련도서
* 켄트 벡의 구현패턴(켄트 벡)
Hardware
3
5. /12
사람들의 데이터를 나이 순서로 정렬하는 방법?
전제 : 200 살 이상 사는 사람은 없다
자료구조와 알고리즘 : 효율성(Efficiency)
“효율적인 알고리즘은 전제를 통해 더 단순한 해결책을 제시하고, 오차와 비용 사이의
trade-off를 통해 기회를 제공한다.” - Brian Christian, Tom Griffiths -
Time Complexity
8 4 6 2 5
1 2 3 4 5 6 7 8 200……
……나이 :
4
Quick Sort /
Merge Sort
O(NlogN)
O(logN)
O(N)
O(N)
메모리주소 :
연결리스트 :
Bucket Sort
O(N)
O(1)
6. /12
객체지향(Object Oriented Programming) : 유연성(Flexibility)
이상적인 소프트웨어 : (새로운 요구사항이 와도) 수정할 필요가 없는 소프트웨어
좋은 소프트웨어 : (새로운 요구사항이 와도) 기존의 코드를 수정할 필요가 없는 소프트웨어
요구사항 변경 시 기존 코드에 대한 수정을 최소화하여 유연성을 높여주는 언어적 특성
1. 추상화(Abstraction)
2. 캡슐화(Encapsulation = 대상화)
3. 상속(Inheritance)
4. 다형성(Polymorphism)
추가 삭제
유연성(Flexibility)
변경
5
7. /12
디자인 패턴(Design Patterns) : 유연성(Flexibility) + 소통성(Communication)
소프트웨어의 설계적인 문제를 해결하는 검증된 구조에 명칭을 부여한 것
트라야누스 다리(101~103년 건축)
아치 패턴(퐁 뒤 가르 수도교, AD 1세기) 로마 가도(BC 5세기 ~ 로마시대)
교각에는 “아치 패턴”을 썼군.
그래서 튼튼하고 물이 흐를 공
간이 넓어.
상판에는 “가도 패턴”을 썼어.
그래서 가도와의 연결과
왕복 이동이 원활해.
관련도서
* 로마인 이야기(시오노 나나미)
6
8. /12
UML(Unified Modeling Language, 그래디 부치) : 소통성(Communication)
조직의 업무를 파악하기 위해서
• 조직 구성팀 전체를 만나봐야 한다면?
- 시간이 많이 걸린다.
• 조직도가 있다면 업무 파악에 도움이 된다.
UML : 소프트웨어의 구조를 파악하기 위함
• 개발자 간의 의사소통, 소프트웨어에 대한 가시성, 복잡한 구조에 대한 명확한 설명이 가능.
객체 지향 소프트웨어의 설계를 시각적인 기호로 표현해주는 표준 언어
개발센터
기획팀
개발팀
특허팀
구매팀
사업부
동적 다이어그램정적(구조) 다이어그램
7
9. /12
Unit Test(켄트 벡, 에릭 감마) : 유연성(Flexibility)
간접 검증 원리
• 소프트웨어의 로직을 직접 들여다 보지 않는다.
• 검증용 소프트웨어로 제품 소프트웨어를 검증한다.
불완전한 소프트웨어로 소프트웨어를 검증한다?
• 검증용 소프트웨어가 (검증 대상 보다) 단순하고 간결하다.
• 테스트 되지 않은 소프트웨어보다 테스트 된 소프트웨어가 더 낫다.
검증 전략
• 객체 단위로 테스트한다.(작은 소프트웨어)
• 자주, 빠르게 테스트 한다.(수정에 의한 오류 발생 방지)
복잡한 소프트웨어를 테스트 소프트웨어로 반복적으로 테스트한다.
소프트웨어
검증용 소프트웨어
(Unit Test)
복잡하다
스스로 검증이 불가능하다
간결하다
단순하다
다른 소프트웨어를 검증할 수 있다
소리를 통해 엔진을 진단한다
(엔진을 직접 들여다 보지 않는다.)
8
10. /12
리팩토링(Refactoring) : 유연성(Flexibility)
“디자인 패턴은 리팩토링의 지향점이고, 리팩토링은 다른 상태에서 그 지향점까지 도달하는 방법이다.”
(새로운 요구사항을 반영하기 위해) 이미 만들어진 소프트웨어의 기능을 그대로 두고
설계를 개선하는 기법
*노트르담 대성당의 벽 날개(Flying Buttresses). 초기 설계에 의해서 만들어진
것이 아니라 시공 시 발생한 균열을 해결하기 위해 덧붙였다. 현재는 그 조형미
를 인정 받고 있다.
- 리팩토링(마틴 파울러)
9
11. /12
Process : Agile 방법론
목표 : 소프트웨어의 효율성 / 유연성 / 소통성 확보
결함의 개수 = 시간 X 복잡도
“문제의 복잡성이 25% 증가하면 솔루션의 복잡성은 100% 증가한다.”
객체지향
디자인패턴
리팩토링
Unit Test
설계요구사항 UML
요구사항1
요구사항2
요구사항3
설계 구현
설계 구현 테스트
리팩토링설계 구현 테스트
“Agile Skill Set”
유연성 + 소통성 효율성
관련도서
* 우리가 미처 알지 못한 SW 공학의
사실과 오해(로버트 L. 글래스)
* 토비의 스프링 3.1(이일민)
코드 수정 안전망
구현 테스트
자료구조
알고리즘
테스트
10
12. /12
People : 인사제도
“소프트웨어 직업에서 가장 중요한 요소는 프로그래머의 자질이다.”
“최고의 프로그래머는 최하의 프로그래머보다 28배 뛰어나다.”
효율성/유연성/소통성을 위한 기술을 갖추고 다른 사람과 협력할 줄 아는 사람을 키워
가는 인사제도를 지향해야 함.
업무 교육 및 학습평가채용
효율 유연소통
동료평가, 다면평가 사내 스터디그룹,
SW 강의 체계
Agile Process
Agile Skill Set
P1
P3
P4
코딩 면접
채용 프로세스 개선 피드백
관련도서
* 우리가 미처 알지 못한 SW 공학의 사실과 오해(로버트 L. 글래스)
* 구글의 아침엔 미래가 열린다(라즐리 복)
11
13. /12
소프트웨어를 잘 만드는 방법
Product : Software
Process : Agile 방법론
People : 인사제도
소프트웨어를 이해하고 인간을 존중하는 문화 속에서 좋은 소프트웨어가 만들어진다.
리팩토링요구사항n 설계 구현 테스트
Unit Test
효율성 유연성 소통성
Hardware Software
Computer Human
대규모 소프트웨어 개발은
개발자 간 소통과 협력이
원활해야 가능하다.
인간은 크고 복잡한 것을
이해하는 능력이 떨어지고,
오래된 것은 잊어버린다.
효율성/유연성/소통성을 갖추고
다른 사람과 협력할 줄 아는
사람을 키워가야 한다.
업무 교육 및 학습평가채용
채용 프로세스 개선 피드백
반복
객체지향
디자인패턴
리팩토링
Unit Test
UML자료구조
알고리즘
12
“Agile Skill Set”