2015년 9월 11일 금요일

소프트웨어 테스팅 관점에서 본 소프트웨어 기능안전성 표준 비교

현대사회는 시장에서 소비자의 권리가 강화되고 있으며 , 소비자의 권익을 증진하기 위한 소비자 기본법 및 제조물 책임법이 유럽에서는 1980 년대 후반부터 , 국내에서는 2002 년 시행에 들어갔습니다 . 이런 사회 · 경제적 움직임으로 인해 제품을 개발하고 양산하는 과정에서 제품의 결함을 없애려는 노력이 강제화 되는 상황에서 , 기존제품에 소프트웨어가 결합된 임베디드 제품이 시장에 전면 등장함에 따라 소프트웨어가 탑재된 제품에 대한 안전성확보가 시급하게 되었습니다 .
그러나 기존 제품의 안정성이 장애율 (Probability of failure) 로 계산되어 관리되는 반면 , 소프트웨어는 동일한 개념을 적용하는 것에 무리가 있어 안전등급에 따라 개발 단계별로 기법과 지표를 제시하는 방향으로 안전성을 확보하는 방향으로 진행되게 됩니다 .
본 연구에서는 이런 소프트웨어의 안전성을 확보하려는 노력의 일환인 기능안전성 표준을 대표적인 산업별로 살펴보고 , 이들의 소프트웨어 안전성 확보 방법을 비교하여 소프트웨어 테스팅 관점에서의 시사점을 도출하였습니다 .

  • 기능안전성 [Functional safety] 의 정의
  • 소프트웨어와 관련된 기능안전성 표준과 유사한 표준
  • 소프트웨어와 관련된 기능안전성 표준
  • 기능안전성 표준에서의 소프트웨어 테스팅

2015년 9월 10일 목요일

모바일 컴퓨팅을 위한 소프트웨어 아키텍처

스마트폰의 보급과 무선 네트워크 속도의 급격한 향상으로 사용자가 주로 사용하는 디바이스가 PC에서 모바일로 이동하는 큰 변화가 일어나고 있다. 이에 따라 소프트웨어 서비스도 PC에서 모바일로 이동하고 있는 추세이다. 이러한 변화는 모바일 디바이스에 더 다양한 서비스를 갖춘 소프트웨어를 요구하게 되고, 이를 뒷받침하는 효율적인 아키텍처의 필요성이 증가하고 있다.

 모바일 서비스는 대부분 PC 기반에서 운영하는 서비스에 모바일의 특성이 가미된 것이 많다. 이렇다 보니 PC 기반의 아키텍처를 재활용하여 모바일 아키텍처를 구성하는 경우가 있다. 이 경우, PC 기반의 요소가 모바일에 그대로 탑재되는 경우도 발생하여 제한적인 자원을 가지고 있는 모바일 디바이스의 부하가 높아질 수 있다. 따라서 모바일 아키텍처를 설계할 때, 이런 부분을 고려하여 모바일 디바이스의 요소를 최소한으로 줄일 필요가 있다.

 소프트웨어 아키텍처의 역할

소프트웨어 개발에서 사용자가 원하는 요구사항이 점점 많아지고 복잡해지면서 체계적으로 시스템 구성을 살펴볼 수 있게 하는 소프트웨어 아키텍처(Software Architecture)가 필요하다. 물론 소프트웨어 아키텍처는 세부적으로 더 다양한 아키텍처로 구분할 수 있다. 일반적으로 소프트웨어 아키텍처는 아래와 같은 역할을 한다.

 - 시스템의 전체 구성을 결정한다.
 - 프로젝트 초기 단계의 의사 결정 도구이다.
 - 프로젝트 업무 분장의 수단이다.
 - 시스템의 품질 요소를 결정한다.
 - 시스템 구성의 변경 사항을 관리한다.
 - 프로젝트 의사 소통의 수단이다.
 - 시스템의 완성 모습을 예측한다.

자세히 보기 →

애자일 스크럼 팀이 SW 품질과 테스팅에 주력하게 만드는 3가지 방안

SW품질과 테스팅은 애자일 방법론을 도입하는 된 핵심적인 이유입니다. 애자일을 도입한 개발팀이 산출물의 품질향상을 위해 필요한 의사소통라인 구축, 유연한 테스트 타이밍, 빠르고 효과적인 테스트 방법을 살펴봅니다.

1.강력한 의사소통 라인 구축하기
  • 개인 간 소통만이 아니라 팀의 비즈니스 의사소통도 혁신시킬 필요가 있음
  • 개발하면서 결함이 발견되기 전에, 요구사항단계부터 변화가 발생하면 테스트 팀과 소통을 하는 것이 좋음
  • 의사소통의 원활함을 위해서는 스크럼 팀 구성원을 편안하게 만드는 것이 중요함

2. 유연한 테스트 타이밍
  • 테스트 팀 매니저로서 회의를 계획하고 진행하는데 시간을 좀 더 투자하는 것이 중요
  • 엄격함보다는 유연성을 가지고 결정하기
  • 테스팅을 수행하는 인력을 관찰하는데 시간을 투자하기

3.빠르고 효과적인 테스트 방법 적용하기
빠르고 효과적인 테스트를 수행하는 테스터는 부지불식간에 수동적(자동화 반대 개념 측면에서의)이고 자기만의 기술을 활용하여 테스트를 수행하는 경향이 있음에 따라 그들이 일을 하는 것을 관찰하여 어떻게 테스트를 수행하는지를 배워야 함

소프트웨어 취약점 , 보증 및 보안 테스팅

소프트웨어 (SW) 를 위협하는 요소들에는 직접적인 취약점 공격 , SW 내에 탑재된 악성 코드 실행 , 개발 중인 SW 에 악의적 로직이나 의도적 취약점들 주입 등이 있습니다 . SW 취약점은 코드 내의 결함 (defect) 또는 실수 (flaw) 로 보안 공격에 악용될 수 있습니다 . SW 보증 (Software assurance, SwA) 은 SW 가 의도적이거나 우연한 취약점들로부터 자유롭다는 것과 SW 가 의도한대로 수행된다는 것을 확신 (confidence) 하는 레벨입니다 . SwA 은 SW 안전성과 보안 , 테스트와 평가 , SW 공학 , 정보 보증 , 정보시스템보안공학 , 프로젝트 관리 , 시스템 공학 등 여러 학제 간 협력 (multi-disciplinary collaboration) 을 필요로 하며 , 그 중심에 위치합니다 . SW 보안 테스팅은 보안 요구사항이 만족되었는지 그리고 안전한 설계와 코딩 가이드라인을 준수하였는지를 확인하는 과정으로 , SW 신뢰성 및 보증을 검증하기 위한 최고 실무지침 중의 하나입니다 .


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로 사용하고 있음