2015년 9월 25일 금요일

자바스크립트(Javascript) UI Part 2 - 재사용 패턴

코드 재사용
코드 재사용은 대부분의 언어에서 필요한 기능입니다 . 비슷한 요구사항에 맞춰서 동일한 기능을 반복적으로 개발하는 것은 중복코드를 증가시켜 결국 낭비로 이어집니다 . UI 개발과정에서도 이런 문제는 존재하며 다른 언어와 마찬가지로 그 해법도 크게 다르지 않습니다 .
UI 개발의 경우는 재사용을 위해서 자바스크립트 코드를 재사용할 수 있고 , CSS Framework(less 나 Sass 등 ) 을 통한 CSS 코드를 재사용하는 방법들도 존재합니다 .
자바스크립트의 경우 객체 지향적으로 모듈화를 통해 개발 할 수 있음에도 불구하고 , Java 와 같이 ‘extend’ 와 같은 명시적인 상속을 위한 기능이 존재하지 않습니다 . 다행히 이런 부분이 최근 ECMAScript 6 에 반영되고 있는 중입니다 .
물론 지금 상속을 구현하기 위해서 아무것도 할 수 없는 것은 아닙니다 . 이미 대부분의 자바스크립트 라이브러리와 이를 기반으로 제작된 많은 UI 콤포넌트들은 ‘prototype’ 이라는 속성을 통해 상속을 구현하고 있으며 , 결과적으로 이것을 활용해 코드 재사용이라는 목적을 달성할 수 있습니다 .
본 문서에서는 자바스크립트의 대표적인 재사용패턴을 설명하며 , 그에 앞서 prototype 이 문서에의 prototype 은 prototype 이라는 자바스크립트 코어에 해당하는 핵심 개념을 설명합니다 .
  • 왜 Prototype 인가 ?
  • Prototype 을 통한 상속
  • Object.create() 를 활용한 Prototypal inheritance
데이터는 데이터 그 자체로서가 아니라 데이터로부터 의미 있는 지식을 발견하고 이를 활용할 수 있을 때 그 가치가 입증되며, 그 가치는 개인보다는 다수, 그리고 공공의 이익을 도모할 수 있을 때 빛을 발합니다. 그렇기 때문에 지금이 공공의 자원으로서의 빅데이터의 역할을 다시 한번 주목하고, 그 활용방안에 대해 고민할 시기입니다.

  • 공공분야에서의 빅데이터 중요성
  • 공공 빅데이터 활용을 위한 지식자산 구축
  • 공공 빅데이터를 활용한 대국민 서비스 사례

iOS 애플리케이션의 GUI 테스트 자동화 방법

2007 년 아이폰 출시 이후 , 안드로이드 , 윈도우폰 7, 바다 등 다양한 플랫폼에서 동작하는 스마트폰이 등장 하였고 , 애플 앱 스토어 , 안드로이드 마켓 등이 등장 하면서 많은 개발자들이 스마트폰 애플리케이션 개발에 뛰어들고 있습니다 . 이러한 현상은 각각의 플랫폼 제공 회사에서 애플리케이션 개발을 위한 강력한 소프트웨어 개발 킷 (SDK) 를 제공하여 개발자들이 자유롭게 애플리케이션을 개발할 수 있도록 하고 , 사용자가 직접 애플리케이션을 설치 할 수 있는 환경을 제공하고 있기 때문입니다 . 스마트폰은 터치스크린을 내장하고 있으며 , 스마트폰 애플리케이션은 사용자의 터치에 의해 동작한다 . 따라서 스마트폰 애플리케이션 개발 프레임워크 ( 라이브러리 ) 에는 시각적으로 쉽게 이해하고 사용할 수 있는 그래픽 유저 인터페이스 (GUI) 를 사용자 인터페이스로 사용하며 , 터치에 의해 동작 가능하도록 하는 기능들이 포함되어 있습니다 . 즉 , 스마트폰 애플리케이션에서 GUI 는 높은 비중을 차지하고 있으며 , 스마트폰 애플리케이션의 품질을 확보하기 위해서는 GUI 테스트가 반드시 필요하다는 것을 알 수 있습니다
현재 iOS 애플리케이션 테스트 관련 연구는 거의 없으며 , 테스트를 위한 프레임워크 및 도구들만 제공되고 있습니다 . 그 예로 애플에서 제공하는 단위 테스트 프레임워크인 OCUnit 과 UI 테스트 도구인 UIAutomation 이 있습니다 . 하지만 이러한 프레임워크 및 도구를 이용하여 테스트를 수행하기 위해서는 테스트 케이스를 설계하고 테스트 코드를 작성해야 하며 , 이런 작업에 많은 시간과 노력을 필요로 합니다 . 그리고 테스트의 성공여부는 테스트 케이스 설계에 따라 결정 되며 , 이것은 테스트 케이스를 설계하는 테스터의 능력에 따라 좌우됩니다 . 따라서 테스트에 소모되는 비용을 줄이고 테스트 케이스의 품질을 확보하여 테스트를 성공적으로 수행하기 위해 테스트 케이스를 자동으로 생성하는 방법이 필요합니다 .
본 논문에서는 iOS 애플리케이션의 특징을 설명하고 테스트 대상을 파악합니다 . 그리고 GUI 구성 정보를 저장하는 파일에서 GUI 정보를 추출하여 iOS 애플리케이션 GUI 테스트를 위한 테스트 케이스 자동 생성 방법을 제안하고 이를 구현합니다 .
  • iOS 애플리케이션
  • iOS 애플리케이션 GUI 테스트 케이스

2015년 9월 24일 목요일

성공적인 요구사항 관리를 위한 SW개발팀 간 4가지 협업전략

요구사항이라는 것은 애자일이건 아니건 상관없이 모든 소프트웨어 팀이 직면하게 되는 이슈입니다. 요구사항의 세목을 만드는 것은 많은 시간을 요구하기 때문에, 부적절한 결과를 초래할 수 있습니다. 즉 적절한 시기에 “적절한” 요구사항을 얻기 어렵기 때문에, 각 팀은 요구사항 프로세스를 향상시키기 위한 방법을 발견하기 위해 노력해야 합니다.  

요구사항 관리는 프로젝트의 방향을 결정짓는 매우 중요한 프로세스이나 요구사항 수집을 위한 왕도가 없음에 따라 개발팀 간 이해공유, 우선순위설정, 표준문서화 등을 통해 충분한 협업을 수행하는 방안 등이 중요합니다.

Ⅰ. 이해공유(Shared understanding)
Ⅱ. 우선순위설정(Prioritizing)
Ⅲ. 테스트를 포함한 코딩(Driving coding with tests)
Ⅳ. 요구사항 표준문서화(Documenting requirements)

자바스크립트(Javascript) UI Part 1 - 모듈 패턴

자바스크립트 유효범위의 문제
HTML5 나 웹앱 등 웹 기술로 만들어진 어플리케이션이 속속 등장하고 있습니다 . 이런 웹 어플리케이션을 구현하는 핵심기술은 자바스크립트이나 , 실제로 많은 개발자들은 자바스크립트의 특성을 잘 이해하지 못하여 생기는 문제가 많이 발생하고 있습니다 .
자바스크립트의 특성 중 아쉬운 점은 유효범위가 다소 혼란스러운 점입니다 . 특히 자바나 C 언어를 다루는 개발자가 자바스크립트를 접하게 되면 더욱 그렇게 느껴질 수 있습니다 . 예를 들어 자바스크립트는 블록 유효범위가 없으며 함수 유효범위가 있을 뿐입니다 . 이런 차이를 잘 이해하지 못해서 생기는 문제는 실제로 매우 많습니다 .
이런 특징은 결국 중요 함수나 변수가 공개된 영역 ( 자바스크립트에서는 이를 scope 이라고 표현 ) 으로 노출 된다는 점입니다 . 자바스크립트는 public 이나 private 과 같은 함수나 변수의 노출 범위를 명시적으로 표현 할 수 있는 키워드가 존재하지 않습니다 . 하지만 자바스크립트의 다양한 표현방법을 활용하여 이를 모듈화하면 어느 정도 보호 할 수가 있습니다 .
이러한 방법을 설명할 것이며 , 여기에 나와 있는 방식은 대부분의 실제 웹서비스나 자바스크립트 라이브러리 등에서 많이 사용되고 있는 방법들입니다 .
‘ 어떤 문제가 실제 발생하는 것인지 ?’, ‘ 어떻게 해결 할 수 있는지 ?’ 를 알아보겠습니다.

접근 제어를 위한 모듈화
실제 자바스크립트로 어떻게 구현되는지를 알기 위해서, 실제 코드를 살펴봅니다. 예제 코드에서는 ‘현재 사과의 개수를 확인하는 것’ 과 ‘현재 사과의 개수를 하나 증가’ 하는 함수를 간단히 구현합니다.

예제 1

예제 2

모듈의 재활용
모듈화 패턴은 재활용될 수가 있습니다. 예를 들어 위에서 나온 즉시실행함수에서 어떤 결과를 반환할 수도 있을 것입니다. 그 반환 값에 공개된 함수를 포함하면 되는 것입니다. 코드를 살펴보겠습니다.

예제 5

애자일 적용과 프로젝트를 실패하게 만드는 5가지 공통요인

신속하고 민첩한 개발을 위해 도입한 애자일 개발방법론이 오히려 프로젝트를 실패하게 만드는 경우가 있습니다. 애자일 방법론에 대한 반감은 변화에 대한 단순한 반응은 아닌 애자일을 형편없이 실행하는 조직에 대한 반응일 경우가 대부분임. 애자일 프로젝트는 알지 못하는 사이에 CEO, PM, 계획·교육관련 실수를 하는 사람들, 애자일과 관계없는 개발측면의 문제들로 인해 큰 어려움을 겪고 있습니다.    
이에 따라 애자일 전문가들이 지적하는 애자일의 도입과 실행에서 불거지는 공통적인 실패요인들에 대해 다음과 같이 살펴 도록 합니다.

Ⅰ. 명확한 이유 없이 애자일을 도입하는 경우
Ⅱ. 사업부와 개발부를 별도로 관리하는 경우
Ⅲ. 팀원에게 문화적 변화에 적응할 충분한 시간이 주어지지 않을 경우
Ⅳ. 전체적으로 불충분한 교육을 받게 되는 경우
Ⅴ. 애자일과 상관없는 실패를 애자일 탓으로 돌리는 경우

2015년 9월 23일 수요일

성공적인 프로젝트팀 구성을 위한 5가지 Tip

성공적인 SW프로젝트 수행을 위해서는 조직구성이 가장 중요한 요소임에 따라 효율적/효과적인 팀 운영을 위한 조직원의 규모, 전문성, 고용형태 등에 대한 유용한 의견을 제시합니다.

우선 제너럴리스트 ( Generalist) 를 배치하고 나중에 필요하면 스페셜리스트로 보충하기

*제너럴리스트는 프로젝트 전반에 걸쳐 긍정적인 영향을 미침
  • 제너럴리스트는 프로젝트 전반에 도움을 주기 때문에 프로젝트 일정관리가 매우 용이함
  • 그러나 ! 팀원 전체를 제너럴리스트로 구성할 경우에는 프로젝트가 최상경로 (Critical Path) 에서 벗어나서 일정이 길어질 수 있을 수도 있기 때문에 주의를 해야 함

*가능하면 스페셜리스트는 필요한 부분에만 활용하기
  • 스페셜리스트들은 전체적인 팀웍을 완성하기 보다는 본인 영역의 일만을 하고 그 외의 다른 일을 하기를 꺼려하는 경향이 일부 ! 있음
  • 스페셜리스트의 전문분야에 적합한 일이 주어지지 않은 경우에는 낭비되는 자원이 되기도 하는 등 전체 프로젝트 차원에서 예산낭비가 되기도 함
  • 이러한 상황 하에서는 리스크의 증가로 프로젝트가 실패할 수도 있고 전체 스케줄 관리가 힘들어지는 원인이 될 수 있음
Ⅰ. 제너럴리스트의 우선 배치
Ⅱ. 파트타임보다는 풀타임 팀원을 우선 고려
Ⅲ. 사공이 많으면 배가 산으로 간다
Ⅳ. 작은 교실이 더욱 좋다
Ⅴ. 허수아비 팀원을 과감히 제외 한다