2016년 1월 6일 수요일

동적 분기 커버리지를 위한 테스트 데이터 자동 생성

많은 목적 지향 테스트 데이터 생성 방법들이 진화 알고리즘 (Evolutionary Algorithm, EA) 에 바탕을 두고 있습니다 .  진화 알고리즘은 자연세계의 진화과정을 모델링하여 복잡한 실세계의 문제를 해결하고자 하는 계산모델입니다 .  진화 알고리즘은 구조가 간단하고 방법이 일반적이어서 응용범위가 매우 넓으며 ,  특히 적응적 탐색과 학습 및 최적화를 통한 공학적인 문제의 해결에 많이 이용되고 있습니다 .  진화 알고리즘을 이용하여 테스트 데이터를 생성하는 방법을 진화 테스팅 (Evolutionary Testing, ET) 라 합니다 .

ET 는 후보 테스트 데이터와 원하는 테스트 데이터간의 차이를 평가하기 위해 적합성 함수 (fitness function) 를 이용합니다 [3].  예를 들면 ,  어떤 프로그램에서  x==5 인 분기 조건이 참이 되게 하는 테스트 데이터를 구하는 문제를 생각해 봅니다 .  이와 같은 분기 조건은  F(x) = |5-x| 와 같은 함수로 간주합니다 .  이때 함수  F(x) 를 최소화하는 입력 데이터  x 는 분기 조건  x==5 를 참이 되게 하는 입력 값이 원하는 테스트 데이터가 됩니다 .  여기에서 분기 조건  x==5 의 분기 거리 (branch distance) 는  |5-x| 로 정의되며 해당 분기가 참이 되기 위해 얼마나 가까이 접근했는지를 나타냅니다 .  예를 들면  x 가  7 과  10 을 각각 가졌을 경우에 분기 거리는  2 와  5 가 됩니다 .  이는  x 가  7 일 때  10 인 경우 보다 분기 조건  x==5 을 참이 되게 하는 경우에 보다 더 가까이 접근했음을 의미합니다 .  만약 탐색 알고리즘이  10 을 먼저 생성하였다면 이를 감소하는 방향으로 탐색을 진행할 것입니다 .

소프트웨어 품질평가를 위한 정적코드분석 툴 8선

정적코드분석이란  SW 를 분석하는 방법 가운데 하나로 ,  그  SW 로부터 만들어진 프로그램을 실제로 실행해보지 않고 분석하는 방법입니다 . SW 시스템 내 잠재적으로 취약한 코드를 찾아내기 위한 정적분석이 점차 증가하고 있습니다 .  상용버전과  SaaS (Software as a service) 로 제공되는  8 가지 정적코드분석 툴을 소개합니다.

소프트웨어 품질 평가를 위한 정적코드분석 툴  8 선
 1. HP Fortify Static Code Analyzer (SCA)
 2. Checkmarx CxSuite 
 3. Syhunt Sandcat®
 4. Parasoft 의 정적코드분석 툴   
 5. VeraCode Static 
 6. Coverity Static Analysis
 7. Klockwork Insight 
 8. CodeSonar®

자세히 보기 →

GIT Flow를 활용한 효과적인 소스 형상 관리 Part 2

GIT Flow를 사용할 수 있도록 GIT Flow 설치를 진행하고, 무료 GIT Repository 인 GIT Hub에 GIT Flow를 테스트 해 볼 수 있는 GIT Repository를 생성합니다.

GIT  설치
GIT  프로그램은 운영체제에 자동으로 설치되어 있지 않다 . < 그림  1> 의 다음  URL 에 접속해서 운영체제별로 설치합니다 . http://git-scm.com/downloads
MAC OS X  개발자라면 링크에 접속해서  Mac  아이콘을 선택하고  dmg  설치 파일을 설치하고  GIT 을 설치합니다 . 
GIT 을 설치했다고 해서  GIT Flow 를 바로 사용할 수는 없습니다 . GIT Flow 를 설치해야 합니다 .

$ git flow
git: 'flow' is not a git command. See 'git --help'.
Did you mean one of these?
reflog
show

GIT Flow 는 MAC OS X, Linux(Unix), Windows까지 지원합니다.

보안을 위협하는 소프트웨어 취약성 관리방안

SW 취약성 분석을 통해 이를 보완 할 수 있는 우선순위를 확보하고 각 단계별 대응방안 등을 제시합니다.

1. 소프트웨어 보안 취약성의 우선순위를 정하고 관리하는 방법
2. 취약성의 우선순위를 결정하고 이의 개선을 위해 취약성에 우선순위를 정하는 것에 대한 두 가지 주요 질문을 있는데 , 그것은 취약성이 얼마나 심각한가와 해결할 수 있는 방법은 무엇인가
3. 이러한 질문의 해답은 보안팀 및 개발팀 측면에서 개선되어야할 점은 무엇인지 그 시기는언제가 적절한지를 결정
  • 심각도를 결정
  • 노력의 수준을 결정
  • 계획 개발
자세히 보기 →

소프트웨어공학센터 전문위원 채용 공고



직위: 상근 전문위원
상근: 1명(계약기간 2년)

자격요견
  • 산업분야에서 15년 이상의 실무경험(해당 전문분야에 대한 프로젝트 또는 컨설팅 실적 등)을 보유한 분
  • 해당 전문 분야에서 국제적 수준의 탁월한 업적을 이루거나 특수기술을 보유한 분
  • 기술 또는 논문 수상경력, 기술 또는 방법론 개발 등 해당 전문분야에서 대외적으로 그 업적을 인정받은 분
  • 국제적 감각과 미래지향적 비전을 가진분
  • 해당 전문분야에 대한 국제 유명학회 Fellow 수준에 준하는 학문적 탁월성을 성취한 박사학위 소지자 우대
  • 국내 및 해외 거주 외국인으로서 소프트웨어 공학분야의 권위 있는 전문가 우대
직무수행 요건
  • 센터에서 추진하는 프로젝트 및 연구개발에 참여 또는 기술자문 수행
  • 센터의 프로젝트 및 연구 성과의 국내외 컨퍼런스와 학회 발표 등을 통한 SW공학 기술 보급화 확산 노력
서류 제출기간: 2016.01.13(수) 18:00까지

모바일 개발을 위한 데브옵스(DevOps) 적용방안

개인 또는 기업을 막론하고 모바일 컴퓨팅은 사용자뿐만 아니라 개발팀과 운영팀에게도 가장 뜨거운 화두 중 하나입니다 . 이에 따라 각각의 운영체제와 각각의 기기에서 발생하는 수많은 이슈들을 개발과 운영 측면에서 대응할 수 있도록 데브옵스를 모바일 환경에 적용할 수 있는 기본적인 방안을 제시합니다 .

본 원고에서는 데브옵스를 통해 각기 다른 모바일 기기에 설치된 다른 버전의 애플리케이션들의 활용 방법에 관한 이슈들을 다루는 방법에 관해 살펴보고자 합니다.
따라서 기업들이 단순히 모바일 앱 개발뿐만 아니라 환경변화 속에서도 배포방법과 기능의 연속성과 안정성을 담보할 수 있는 방법을 모색하는 것이 중요합니다. 전 세계 기업들은 모바일 컴퓨팅을 더 쉽게 만드는 애플리케이션을 고객들과 사용자들에게 제공하는 것으로 모바일 시장을 더욱 확장하고 보편화되길 원합니다.
모바일 컴퓨팅은 요즘 개발팀과 운영팀에서 가장 인기 있는 주제일 것이며 , 크고 작은 회사들의 대부분 직원들도 작업 수행에 개인 소유의 다양한 모바일 기기를 활용하고 있습니다.
  • 모바일 애플리케이션: 새로운 모색 과정과 행동
  • 모바일 애플리케이션 개발의 위험성
  • 데브옵스의 성능

2016년 1월 5일 화요일

소프트웨어 생산성 향상 - 자동화 도구 편

최근의 소프트웨어는 개발 환경이 일반화되어 있어 프로세스나 개발 도구들이 거의 유사하기 때문에 소프트웨어 개발에 필요한 많은 자동화 도구들이 개발되고 있습니다. 개발자가 직접 하던 일들을 대신하는 자동화 도구는 시간과 장소의 제약을 없애주고 개발자가 하는 것보다 더 많고 정확한 결과를 제공하고 있습니다. 최근 들어 자동화 도구 사용을 필수로 하는 프로젝트가 점차 늘어나고 있습니다.

소프트웨어 개발 프로젝트는 사람이 하기 때문에 완벽한 개발과 일관된 테스트를 할 수 없었고, 시스템 구성과 인터페이스도 개발자의 성향에 따라 결정되기도 하였습니다. 자동화 도구는 수많은 케이스를 일관되게 적용할 수 있어 사람이 직접 하는 것보다 빠르고 정확한 결과를 나타냅니다.
테스트 분야에서 시작된 자동화 도구는 개발 효율을 높이기 위한 자동화 도구에 이어 컴포넌트 기반의 개발, UI/UX 자동화 도구까지 선을 보이고 있습니다. 이러한 자동화 도구를 통해 소프트웨어 생산성을 탁월하게 높였다는 다양한 사례가 발표되고 있습니다.

자동화에 많은 발전을 보이고 있는 테스트와 성능 측정, 빌드를 중심으로 자동화 도구의 종류와 구동 방법에 대해서 살펴보도록 합니다.

테스트 자동화
  • 외부 요인에 접근하지 않고 영향을 받지 않아야 한다.
  • 리소스가 반드시 있다고 전제하지 않는다.
  • 테스트 중에 사용자가 개입을 하지 않는다.
  • 테스트 수행 시간이 오래 걸리지 않도록 한다.
소프트웨어 성능 검증 자동화
  • 목표 TPS(Transaction per Second)
  • 목표 응답 시간
  • System Utilization
  • Availability
  • 지표의 품질