2015년 9월 9일 수요일

소프트웨어 개발 생산성 향상을 위한 협업 Tools의 공학적 활용

성공적인 소프트웨어의 개발은 제대로 된 개발 환경을 기반으로 이루어진다. 예를 들어, 구글 드라이브나 Dropbox등의 원활한 활용을 관리해주는 소프트웨어 즉, 소스를 관리해주는 소프트웨어를 잘 활용하면 업무의 효율성은 증폭된다. 현대의 소프트웨어 개발은 예전처럼 한 사람의 개발자에 의해 개발이 진행되는 것과는 달리 그 규모가 상당히 크기 때문에, 여러 개발자의 협업으로 이루어지는 경우가 많다. 그에 따라 협업을 위한 여러 도구들을 사용하게 되는데, 어떤 도구를 어떤 식으로 사용하느냐에 따라 그 능률과 결과물이 눈에 띄게 달라질 수 있다. 

이와 같이 소프트웨어 개발 생산성을 높여주는 협업 도구에 대해 카이스트의 윤종민 연구원을 만나 사례와 함께 사용법에 대한 몇 가지 팁을 들어본다.

윤종민 연구원: (현) 한국과학기술원 정보보호대학원 리눅스커널 보안 연구원
(전) 윈드리버 KDC 수석, 리눅스-안드로이드 플랫폼 개발

Q.  ‘개발환경’이란 구체적으로 어떤 것을 뜻하는 건가요?
개발 환경이란, 프로그래머가 소프트웨어를 개발하는데 있어서 사용하는 모든 환경을 이야기 하는데요.  IDE(Integrated Develop Environment) 뿐만이 아니라, 버전 관리 도구, 협업용 커뮤니케이션 도구, 이슈 관리 도구, 라이선스 검증 도구 등 개발 과정을 도와주는 수 많은 도구가 존재합니다.

협업도구 활용 Tips
1. 의사결정규칙의 명문화
2. 형상관리시스템 활용
3. 소스코드 리뷰

성공적인 요구사항관리를 위해 피해야할 5가지 타입

대다수의 실패한 SW프로젝트는 모호한 요구사항관리에서 비롯됩니다. 모호함은 단일한 정의가 아니라 사람에 따라 여러 가지로 해석할 수 있게 만들어 개발시간을 낭비하고 비용을 소모하여 프로젝트를 실패로 이끄는 주범입니다. 이에 모호함을 만드는 5개 요소를 파악하고 이를 통해 요구사항을 성공적으로 관리하도록 시사점을 제시합니다.

1. 부정적인 표현의 요구사항(Negative requirements)
부정적이거나 전도된 표현의 요구사항은 시스템이 하지 말아야 할 것을 기술하게 됨
2. 경계 조건(Boundary Conditions)의 불명확성
숫자나 날짜 범위의 경계는 흔히 요구사항을 처리하기가 애매함
3. 동의어 등 특정되지 않은 용어 사용
모든 프로젝트 문서에 일관적으로 특정 용어를 사용해야 함
4. 대명사, 부사 등 혼동할 수 있는 표현의 사용
대명사: 선행사가 명확하지 않을 경우에 혼동을 가져올 수 있음
5. 'A/B'같은 다중적 표현
"feature/function"과 같은 A/B식의 표현을 피해야함. 예외) “input/output"

요구사항을 작성하는 목적은 분명하고 효과적인 의사소통이기 때문에 요구사항을 정확하게 기술하는 것은 매우 중요함.
말은 표현에 따라 다양하게 해석될 수 있기 때문에 표현에 주의해야 함.

주목해야 할 9가지 오픈소스 빅 데이터 기술

갈수록 많은 기업들이 더욱더 많은 데이터를 축적하며 경쟁력 향상을 위해 축적된 데이터의 레버리지 효과를 꾀합니다. 최근에 이런 빅 데이터 열풍의 중심에는 오픈소스 기술이 핵심요소로 자리 잡고 있음. 여기에서는 주목해야 할 아홉 개의 오픈소스 빅 데이터 기술을 소개합니다.

1. 아파치 하둡(Apache Hadoop)
데이터 집약적 분산형 애플리케이션(data-intensive distributed application)용 오픈소스 소프트웨어 프레임워크인 아파치 하둡1)은 더그 커팅(Doug Cutting)이 작업 중인 오픈소스 웹 검색 엔진인 넛치(Nutch)를 지원할 목적으로 개발한 것임
2. R
오픈소스 프로그래밍 언어이자 통계 계산과 가상화를 지원하는 소프트웨어 환경임
3. 캐스케이딩(Cascading)
하둡을 위한 오픈소스 소프트웨어 추상화 계층(abstraction layer)이며, 사용자들이 JVM 기반 언어를 사용하여 하둡 클러스터들에서 데이터 프로세싱 워크플로를 제작, 실행할 수 있도록 지원함
4. 스크라이브(Scribe)
스크라이브는 페이스북에서 개발한 서버로 2008년부터 릴리스 되어 사용됨
5. 엘라스틱서치(ElasticSearch)
셰이 바논(Shay Banon)이 아파치 루센(Apach Lucene)을 기반으로 개발한 엘라스틱서치는 분산형 레스트풀(RESTful) 오픈소스 검색 서버임
6. 아파치 H베이스(Apache HBase)
구글의 빅테이블을 모델로 하여 자바로 작성된 오픈소스 비 관계 열지향 분산형 데이터베이스(non-relational columnar distributed database)임
7. 아파치 카산드라(Apache Cassandra)
또 다른 NoSQL 데이터 스토어인 아파치 카산드라는 편지함 검색 기능을 강화할 목적으로 페이스북이 개발한 오픈소스 분산형 데이터베이스 관리 시스템임
8. 몽고DB(MongoDB)
더블클릭(DoubleClick)사의 설립자들이 개발한 몽고DB는 인기있는 또 다른 NoSQL 데이터 스토어로 몽고DB는 정형 데이터를 BSON(Binary JSON)이라고 하는 동적 스키마와JSON 같은 문서에 구조화된 데이터를 저장함
9. 아파치 카우치DB(Apache CouchDB)
아파치 카우치DB 또한 오픈소스 NoSQL 데이터 스토어 중 하나이므로 JSON을 이용해 데이터를 저장하고 있으며 자바스크립트를 질의 언어(query language)로, 맵리듀스와 HTTP를 API로 사용하고 있음