Jenkins is the leading open source continuous integration tool. It builds and tests our software continuously and monitors the execution and status of remote jobs, making it easier for team members and users to regularly obtain the latest stable code.
Jenkins is the leading open source continuous integration tool. It builds and tests our software continuously and monitors the execution and status of remote jobs, making it easier for team members and users to regularly obtain the latest stable code.
"손코딩뇌컴파일눈디버깅" 모임을 소개합니다.
백문이 불여일런, 트라이얼앤에러(Trial and Error) 식의 몹쓸 교육을 받아 온 개발자들이 코딩하기 전에 신중하고 꼼꼼하게 생각해보기란 쉽지 않습니다.
개발 시간 중 디버깅 시간이 절반 이상을 차지하고 있는 실정에 버그를 줄이기 위해 TDD니 유닛테스트니 많은 방법들이 개발되고 있지만 가장 일차적으로 중요한 것은 개발자들이 꼼꼼히 따져보는 것이 아니겠는지요?
미국의 선진 SW회사들은 이미 화이트보드에 PS문제를 푸는 것을 인터뷰 방식으로 채택하고 있습니다. 이는 이와 같은 풀이 방식이 개발자들의 기본 역량을 측정하기에 알맞은 지표라는 것이고, 개발자들이 기본적으로 갖춰야 할 역량이기도 하다는 것 입니다.
또한 자신의 생각을 명확하게 정리하고 다른 사람이 이해할 수 있도록 전달하는 Communication Skill 도 개발자가 갖춰야 할 역량 중 하나 입니다. 알고리즘을 어떻게 구현할 것인가를 팀원들과 소통하면서 자연스럽게 생각을 정리하고 전달하는 연습도 할 수 있습니다.
컴퓨터에 앉아 코딩하기 전 펜과 종이를 들고 눈과 머리와 손을 굴려 보시는 것은 어떠신지요??
for more details contact:
SR INFO SYSTEMS
Firestation Square, Baramunda, Bhubaneswar
You can visit our website :
www.bputproject.com
www.liveprojects.co.in
www.srinfosystems.com
Workflows are a key component of server side of IoT solution along with Analytics, Rule Engine and IoT device management. IoT focused Workflow tools draw their inspiration of classical workflow tools that exist in market, but focus more on IoT use cases. For example they are able to connect with IoT devices using IoT specific protocols like CoAP or MQTT. Node-RED is a visual tool for wiring together hardware devices, APIs and online services in new and interesting ways. It’s build by IBM Emerging Technology team from group for IoT, though it’s not limited only to IoT.
Emergent Narrative: What We Can Learn From Dungeons & DragonsFITC
Presented at FITC Toronto 2016
See details at www.fitc.ca
Interactive narrative hasn’t changed much in forty years – it’s still ruled by limited options and predestined outcomes. While digital RPG gameplay has become more sophisticated, the stories remain rather basic (albeit better disguised). Remarkably, we still haven’t matched the tabletop role-playing experience.
We need to approach interactive story from a different angle, one that’s natively digital and that takes full advantage of the new content platform paradigm. It won’t be easy, it’ll take a lot of time… but WE’RE WIZARDS, right?!
Objective
To explore the potential of a truly emergent narrative, and explain how playing tabletop role-playing games can get us there.
Target Audience
Storytellers, creators, writers, game developers, and gamers.
Five Things Audience Members Will Learn
An abbreviated history of interactive storytelling
Different approaches to interactive narrative; their pros and cons
Sneaky tricks good Game Masters use to get players invested in a game
How to convert player agency into dramatic agency (also great for GMs)
That they want to play a tabletop RPG (if they haven’t already).
"손코딩뇌컴파일눈디버깅" 모임을 소개합니다.
백문이 불여일런, 트라이얼앤에러(Trial and Error) 식의 몹쓸 교육을 받아 온 개발자들이 코딩하기 전에 신중하고 꼼꼼하게 생각해보기란 쉽지 않습니다.
개발 시간 중 디버깅 시간이 절반 이상을 차지하고 있는 실정에 버그를 줄이기 위해 TDD니 유닛테스트니 많은 방법들이 개발되고 있지만 가장 일차적으로 중요한 것은 개발자들이 꼼꼼히 따져보는 것이 아니겠는지요?
미국의 선진 SW회사들은 이미 화이트보드에 PS문제를 푸는 것을 인터뷰 방식으로 채택하고 있습니다. 이는 이와 같은 풀이 방식이 개발자들의 기본 역량을 측정하기에 알맞은 지표라는 것이고, 개발자들이 기본적으로 갖춰야 할 역량이기도 하다는 것 입니다.
또한 자신의 생각을 명확하게 정리하고 다른 사람이 이해할 수 있도록 전달하는 Communication Skill 도 개발자가 갖춰야 할 역량 중 하나 입니다. 알고리즘을 어떻게 구현할 것인가를 팀원들과 소통하면서 자연스럽게 생각을 정리하고 전달하는 연습도 할 수 있습니다.
컴퓨터에 앉아 코딩하기 전 펜과 종이를 들고 눈과 머리와 손을 굴려 보시는 것은 어떠신지요??
for more details contact:
SR INFO SYSTEMS
Firestation Square, Baramunda, Bhubaneswar
You can visit our website :
www.bputproject.com
www.liveprojects.co.in
www.srinfosystems.com
Workflows are a key component of server side of IoT solution along with Analytics, Rule Engine and IoT device management. IoT focused Workflow tools draw their inspiration of classical workflow tools that exist in market, but focus more on IoT use cases. For example they are able to connect with IoT devices using IoT specific protocols like CoAP or MQTT. Node-RED is a visual tool for wiring together hardware devices, APIs and online services in new and interesting ways. It’s build by IBM Emerging Technology team from group for IoT, though it’s not limited only to IoT.
Emergent Narrative: What We Can Learn From Dungeons & DragonsFITC
Presented at FITC Toronto 2016
See details at www.fitc.ca
Interactive narrative hasn’t changed much in forty years – it’s still ruled by limited options and predestined outcomes. While digital RPG gameplay has become more sophisticated, the stories remain rather basic (albeit better disguised). Remarkably, we still haven’t matched the tabletop role-playing experience.
We need to approach interactive story from a different angle, one that’s natively digital and that takes full advantage of the new content platform paradigm. It won’t be easy, it’ll take a lot of time… but WE’RE WIZARDS, right?!
Objective
To explore the potential of a truly emergent narrative, and explain how playing tabletop role-playing games can get us there.
Target Audience
Storytellers, creators, writers, game developers, and gamers.
Five Things Audience Members Will Learn
An abbreviated history of interactive storytelling
Different approaches to interactive narrative; their pros and cons
Sneaky tricks good Game Masters use to get players invested in a game
How to convert player agency into dramatic agency (also great for GMs)
That they want to play a tabletop RPG (if they haven’t already).
[FEConf 2018] Front-End 프로젝트의 Test code 작성경험기Ahreum Kim
2018. 11. 03 'FEConf 2018' 발표자료입니다.
---
처음으로 프론트엔드 프로젝트에 (유닛)테스트코드를 작성해보며 느낀 경험을 공유합니다. 어떤 관점으로 접근 했는지부터, 테스트코드 작성을 하며 만난 고민과 해결책은 어떤 방식으로 풀어 냈는지 코드와 함께 다뤄보려 합니다. 저는 테스트 숙련자가 아니지만, 저와 비슷한 위치에서 테스트에 입문하시려는 분들께 어떻게 테스트에 입문하고 코드를 작성했는지에 대해서 구체적인 경험을 공유하는 것도 의미있을 거라 생각했습니다. 제가 드릴 얘기들이 정답이 아닐 수 있지만, 더 좋은 방향을 고민하면서 같이 생각해볼 수 있다면 좋겠습니다.
2. 레거시 코드 활용 전략
저자 서문이 모든 것을 말해준다:
레거시 코드라는 말을 들으면 여러분은 어떤 생각이 드는가? 나와 비슷한 생각이 든다면,
여기저기 얽힌 난해한 구조 때문에 제대로 이해하지 못하면서도 수정해야만 하는 코드가
떠오를 것이다. 겉보기에는 쉬워 보였던 기능을 추가하느라 며칠 밤을 지샌 추억이 떠오를
수도 있고, 더 이상 어떻게 할 수 없는 코드에 질려서 무력감에 빠진 모습이 떠오를 수도
있다. 이런 상황에서 당신의 노력은 무가치한 일처럼 느껴진다. 레거시 코드의 정의는 사
실 누가 그 코드를 작성했는가와 무관하다. 코드는 다양한 방법으로 부패하며, 대부분의
경우 다른 팀으로부터 가져온 코드인지 여부와는 무관하다.
소프트웨어 업계에서 레거시 코드란 이해할 수 없고 수정하기도 힘든 코드를 지칭하는 속
어처럼 사용될 때가 많다. 하지만 지난 수년간 고객들과 심각한 코드 문제들을 해결하는
공동 작업을 통해 나는 레거시 코드를 다르게 정의하게 됐다.
내게 레거시 코드란, 단순히 테스트 루틴이 없는 코드다. 다만 이 정의는 다소 불완전하다.
코드의 좋고 나쁨이 테스트와 어떤 관계가 있을까? 이 질문에 대한 답은 간단하다. 이것이
바로 이 책 전반에 걸쳐 자세히 설명할 핵심이다.
2004년도에 처음 출간된 이 책을 굳이 2021년에 소개하는 이유
3. 레거시 코드 활용 전략
이 책의 목차
오늘도 현장에서 레거시 코드와 전투를 벌이고 있는 모든 개발자들을 위한 종합 선물 세트
• 1장 코드 변경의 메커니즘
• 2장 소프트웨어 변경
• 3장 피드백 활용
• 4장 감지와 분리
• 5장 도구
• 6장 고칠 것은 많고 시간은 없고
• 7장 코드 하나 바꾸는 데 왜 이리 오래 걸리지
• 8장 어떻게 기능을 추가할까?
• 9장 뚝딱! 테스트 하네스에 클래스 제대로 넣기
• 10장 테스트 하네스에서 이 메소드를 실행할 수 없다
• 11장 코드를 변경해야 한다
• 12장 클래스 의존 관계, 반드시 없애야 할까?
• 13장 변경해야 하는데, 어떤 테스트를 작성해야 할지 모르겠다
• 14장 나를 미치게 하는 라이브러리 의존 관계
• 15장 애플리케이션에 API 호출이 너무 많다
• 16장 변경이 가능할 만큼 코드를 이해하지 못하는 경우
• 17장 내 애플리케이션은 뼈대가 약하다
• 18장 테스트 코드가 방해를 한다
• 19장 내 프로젝트는 객체 지향이 아니다
• 20장 이 클래스는 너무 비대해서 더 이상 확장하고 싶지 않다
• 21장 반복되는 동일한 수정, 그만할 수는 없을까?
• 22장 ‘괴물 메소드’를 변경해야 하는데 테스트 코드를 작성하지
못하겠다
• 23장 기존 동작을 건드리지 않았음을 어떻게 확인할 수 있을까?
• 24장 어찌해야 할지 모르겠다. 나아질 것 같지 않아
4. 레거시 코드 활용 전략
무엇이 이 책을 흥미롭게 만드는가?(1)
우리가 항상 고민해야 하는 사항
1. 코드 변경을 최소화하면서 테스트 루틴을 넣을 장소는 어디인가?
✓ 코드를 직접 편집하지 않고도 프로그램의 동작을 변경할 수 있는 위치인 봉합 지점 확보(전처리 봉합,
링크 봉합, 객체 봉합)
2. 어디서나 테스트가 가능한 단독 환경을 구축하기 위한 방법은 무엇인가?
✓ 데이터베이스, 네트워크, 각종 입출력 시스템 등 외부 의존성 줄이기
3. 테스트끼리 상호 작용을 최소로 만드는 방법은 무엇인가?
✓ 모듈 사이에서 강결합을 제거하는 방법으로 내부 의존성 줄이기
4. 최대한 빨리 빌드하고 최대한 빨리 테스트하기 위한 방법은 무엇인가?
✓ 인터페이스나 플러그인 아키텍처를 도입해 개방-확장 원칙을 추구하는 방법으로 빌드 의존성 줄이기
5. 단위 테스트가 없는 상황에서 리팩터링을 위한 부트스트래핑을 하는 방법은 무엇인가?
✓ 적절한 IDE의 리팩터링 기능 활용
✓ 꼼꼼한 작업
5. 레거시 코드 활용 전략
무엇이 이 책을 흥미롭게 만드는가?(2)
레거시 코드를 이렇게 뜯고 저렇게 뜯고 아무튼 수정이 가능하게 만드는 해법을 제공한다
• 코드를 수정하려니까 테스트가 필요하고, 테스트를 넣으려니까 코드를 수정해야 하는 절대절명의 위기에서 우리는 무엇을 어떻게 해야
하나?
• 기존 코드와 정확하게 동일한 동작을 보증하기 위해 개발과 QA 담당자들은 무엇에 신경을 써야 하나?
• 의존성을 어떻게 격리하고 핵심 비즈니스 논리를 어떻게 정 중앙에 격리(클린 아키텍처)할지에 대한 실질적인 방안은 무엇인가?
• 마이크로서비스 아키텍처로 가기 위해 모놀리스를 분해할 때 업무의 경계면을 어떻게 따라가는지 머리가 아팠다면, 실제 코드에서 낮
은 결합도와 높은 응집력을 유지한채로 기능을 분리하는 묘수는 무엇인가?
• 콘웨이의 법칙에 따라 조직의 형태를 그대로 닮아가는(으악!) 코드 기반을 어떻게 정상화를 시킬 것인가?
• 여러 가지 다양한 패턴으로 실제 어떻게 코드를 수정해서 (볼츠만) 엔트로피를 줄이는지에 대한 실무적인 팁과 힌트가 가득 들어 있다!
6. 레거시 코드 활용 전략
대상 독자
레거시 코드라면 질린 개발자
• 레거시와 함께 평화롭게 살고 싶은 개발자
• 리팩토링과 테스트의 중요성을 머리로는 이해하지만 아직 가슴까지 내려오지 않은 개발자
• 야근에 특근에 철야를 하지 않고서 유지보수를 어떻게 할 수 있는지 궁금한 개발자
• 기존 코드를 기반으로 마이크로서비스 아키텍처를 도입하는 과정에서 멘붕이 온 개발자
• 개발자들에게 마음의 평화를 주는 멋진 책
7. 레거시 코드 활용 전략
결론
레거시는 함께 살아가야 하는 집이고 터전이다.
• 지속적으로 레거시 코드가 펌웨어화되어 하드웨어 발전에 따라 낡아 가는 상황에서 방어해야 한다.
• 리팩터링과 기능 추가 과정에서 테스트가 가능하게 개선해야 한다.
• 이 과정에서 클린 코드 기법을 도입해 가독성을 높여 유지보수가 가능하게 해야 한다.
• 마이클 페더스의 힌트: Michael Feathers: I think the main one(의존성을 깨기 위한 가장 중요한 기법) really is parameterized
constructor. – InfoQ 2021년 Podcast에서
• 여기서 잠깐 자체 광고: 클린코드/리팩터링과 레거시 코드의 개선을 위한 (초/중급 개발자 대상) 강의와 세미나가 필요하시면 언제든지
저에게 문의 주세요(다음 페이지 참고).
8. 발표자 소개
기술 배경
전문 검색 엔진, 임베디드 시스템(리눅스 커널 디바이스 드라이버), 빅데이터/인공지능 연구 개발,
고성능 고가용성 데이터베이스
주요활동
IT 전문서 번역 (클린 코드, 피플웨어, 해커: 광기의 랩소디, 게임 엔진 블랙 북 등)
개발강의 (삼성전자, SK C&C, 삼성SDC, 현대자동차 기술 세미나와 교육)
활동채널
블로그: https://jhrogue.blogspot.com
슬라이드 셰어: https://www.slideshare.net/jrogue/presentations
유튜브: https://www.youtube.com/c/박재호dev
문의 jrogue@gmail.com
박재호