애플리케이션 테스트

정적 테스트

  • 프로그램 실행 없이 명세서나 소스 코드를 대상으로 분석하는 테스트
  • 📌 자료 흐름이나 논리 흐름을 분석하여 비정상적인 패턴을 찾을 수 있다.
  • 📌 하드웨어 뿐만이 아니라 소프트웨어를 이용할 수도 있다.
  • 워크스루, 인스펙션, 코드 검사

동적 테스트

  • 프로그램을 실행하여 오류를 찾는 테스트, 소프트웨어 개발의 모든 단계에서 테스트를 수행
  • 블랙박스 테스트, 화이트박스 테스트

화이트박스 테스트

데이터 흐름 검사, 루프 검사

  • 화이트박스 테스트의 이해를 위해 논리흐름도(Logic-Flow Diagram)를 이용할 수 있다.
  • 테스트 데이터를 이용해 실제 프로그램을 실행함으로써 오류를 찾는 동적 테스트(Dynamic Test)에 해당한다.
  • 테스트 데이터를 선택하기 위하여 검증기준(Test Coverage)을 정한다.

검증과 확인

  • 소프트웨어 테스트에서 검증과 확인을 구별하면 찾고자 하는 결함 유형을 명확하게 하는 데 도움이 된다.

검증

  • 📌 기능을 제대로 수행하고 명세서에 맞게 만들었는지 개발자 입장에서 검증
  • 소프트웨어 개발 과정을 테스트하는 것
  • 작업 제품이 요구 명세의 기능, 비기능 요구사항을 얼마나 잘 준수하는지 측정하는 작업이다.

확인

  • 개발된 소프트웨어가 요구사항을 만족시키는지 사용자 입장에서 확인
  • 소프트웨어 결과를 테스트 것


소프트웨어 모듈화

  • 오류의 파급 효과를 최소화
  • 모듈의 재사용 가능으로 개발과 유지보수가 용이하다
  • 프로그램의 효율적인 관리가 가능하다



소프트웨어 프로젝트 관리

  • 주어진 기간 내에 최소의 비용으로 사용자를 만족시키는 시스템을 개발



ISO/IEC 25000

  • 소프트웨어 품질 평가를 위한 소프트웨어 품질평가 통합모델 표준이다.
  • System and Software Quality Requirements and Evaluation으로 줄여서 SQuaRE라고도 한다.
  • 📌 ISO/IEC 2501n에서는 품질 모델 분야는 시스템 및 소프트웨어 제품의 사용품질 및 데이터에 대한 상세한 품질모델을 설명한다.
  • 기존 소프트웨어 품질 평가 모델과 소프트웨어 평가 절차모델인 ISO/IEC 9126과 ISO/IEC 14598을 통합하였다.



정형 기술 검토(FTR)

  • 📌 의제를 제한한다.
  • 📌 논쟁과 반박을 제한한다.
  • 문제 영역을 명확히 표현한다.
  • 📌 참가자의 수를 제한한다.



Migration

  • 소프트웨어 재공학의 주요 활동 중 기존 소프트웨어 시스템을 새로운 기술 또는 하드웨어 환경에서 사용할 수 있도록 변환하는 작업



코드 인스펙션

  • 프로그램을 수행시켜보는 것 대신에 읽어보고 눈으로 확인하는 방법으로 볼 수 있다.
  • 코드 품질 향상 기법 중 하나이다.



트리구조

이진검색 트리

  • 📌 사향트리가 되는 경우 나쁜 트리 구조가 된다. (한 줄 짜리)
  • AVL 트리는 이런 사향트리가 되는 것을 막는다.

이진 트리 운행법

  • 전위: Root - Left - Right
  • 📌 중위: Left - Root - Right
  • 후위: Left - Right - Root

깊이우선탐색(DFS)



통합테스트

시스템을 구성하는 모듈의 인터페이스와 결합을 테스트하는 것이다.

상향식 통합테스트

하향식 통합테스트

  • 넓이 우선(Breath First) 방식으로 테스트할 모듈을 선택할 수 있다.
  • 모듈 간 인터페이스와 시스템의 동작이 정상적으로 잘 되는지를 파악하고자 할 때



개발 단계에 따른 테스트

단위 테스트, 통합 테스트, 시스템 테스트, 인수 테스트

단위 테스트

  • 구현 단계에서 각 모듈의 개발을 완료한 후 개발자가 명세서의 내용대로 정확히 구현되었는지 테스트한다.
  • 테스트할 모듈을 호출하는 모듈도 있고, 테스트할 모듈이 호출하는 모듈도 있다.
  • 모듈 내부의 구조를 구체적으로 볼 수 있는 구조적 테스트를 주로 시행한다.
  • 📌 테스트 도구: JUnit, NUnit, JMockit, EMMA, PHPUnit, CppUnit, IgpUnit

시스템 테스트

  • 개발된 소프트웨어가 해당 컴퓨터 시스템에서 완벽하게 수행되는가를 점검하는 테스트이다.



테스트 하네스 구성요소

테스트 드라이버

  • 상위 모듈, 상향식 테스트
  • 📌 필요 데이터를 인자를 통해 넘겨주고, 테스트 완료 후 그 결과값을 받는 역할을 하는 가상의 모듈
  • 📌 테스트 대상이 되는 하위 모듈을 호출하고, 파라미터를 전달하는 가상의 모듈로 상향식 테스트에 필요한 것
  • 시험대상 모듈을 호출하는 간이 소프트웨어이다.

테스트 스텁

  • 하위 모듈
  • 제어 모듈이 호출하는 타 모듈의 기능을 단순히 수행하는 도구로, 일시적으로 필요한 조건만을 가지고 있는 테스트용 모듈
  • 테스트할 모듈이 호출할 때 인자를 통해 받은 값을 가지고 수행한 후 그 결과를 테스트할 모듈에 넘겨주는 역할을 한다

테스트 슈트

  • 테스트 유닛의 집합

테스트 스크립트

  • 자동화된 테스트 실행 절차에 대한 명세서

테스트 케이스

  • 사용자의 요구사항을 정확하게 준수했는지 확인하기 위한 입력 값, 실행 조건, 기대 결과 등으로 만들어진 테스트 항목의 명세서

목 오브젝트

  • 사전에 사용자의 행위를 조건부로 입력해 두면, 그 상황에 맞는 예정된 행위를 수행하는 객체



요구사항 검증 방법

동료검토

워크스루

  • 검토 회의 전에 요구사항 명세서를 배포하여 사전 검토한 후에 짧은 결함을 발견
  • 사용사례를 확장하여 명세하거나 설계 다이어그램, 원시코드, 테스트 케이스 등에 적용할 수 있다.
  • 복잡한 알고리즘 또는 반복, 실시간 동작, 병행 처리와 같은 기능이나 동작을 이해하려고 할 때 유용하다.
  • 단순한 테스트 케이스를 이용하여 프로덕트를 수작업으로 수행해 보는 것이다.

인스펙션

  • 📌 요구사항 명세서 작성자를 제외한 다른 검토 전문가들이 요구사항 명세서를 확인하면서 결함을 발견

인스펙션의 과정

  • 계획(Planning) - 사전교육(Overview) - 사전검토/준비(Preparation) - 인스펙션 회의(Meeting) - 수정(Re-Work) - 후속 조치(Following)



형상관리

  • 소프트웨어의 개발과정에서 소프트웨어의 변경사항을 관리하기 위해 개발된 일련의 활동을 뜻하는 것

RCS(Revision Control System)

  • 동시에 소스를 수정하는 것을 방지하며 다른 방향으로 진행된 개발 결과를 합치거나 변경 내용을 추적할 수 있는 소프트웨어 버전 관리 도구



테스트 케이스

  • 📌 테스트의 목표 및 테스트 방법을 결정하고 나서 테스트 케이스를 작성해야 한다.
  • 프로그램에 결함이 있더라도 입력에 대해 정상적인 결과를 낼 수 있기 때문에 결함을 검사할 수 있는 테스트 케이스를 찾는 것이 중요하다.
  • 개발된 서비스가 정의된 요구 사항을 준수하는지 확인하기 위한 입력 값과 실행 조건, 예상 결과의 집합으로 볼 수 있다.

테스트 오라클(Test Oracle)

  • 테스트 케이스 실행이 통과되었는지 실패하였는지 판단하기 위한 기준

테스트 케이스 자동 생성 도구

입력 도메인 분석, 랜덤 테스트. 자료 흐름도

  • 📌 스터브와 드라이버는 테스트 모듈이지 자동 생성 도구가 아니다.



DRM(Digital Rights Management)

  • 디지털 콘텐츠와 디바이스의 사용을 제한하기 위해 하드웨어 제조업자, 저작권자, 출판업자 등이 사용할 수 있는 접근 제어 기술을 의미한다.
  • 디지털 미디어의 생명 주기 동안 발생하는 사용 권한 관리, 과금, 유통 단계를 관리하는 기술로도 볼 수 있다.

클리어링 하우스

  • 사용자에게 콘텐츠 라이센스를 발급하고 권한을 부여해주는 시스템을 말한다.



알고리즘

선형검색

  • 검색 수행 전 데이터가 정렬되어 있을 필요는 없다.

버블검색

  • PASS 1의 결과 찾기

Tree 구조에 대하여 후위 순회(Postorder)

  • 맨 마지막이 lead가 되도록 하는 순회방법
  • 📌 왼쪽 자식 노드부터 오른쪽 자식 노드를 거쳐 부모 노드로 가는 방식이다.

퀵 정렬(Quick Sort)

  • 📌 분할 정복(Divide and Conquer)에 기반한 알고리즘으로 피벗(pivot)을 사용하며 최악의 경우 n(n-1)/2 회의 비교를 수행해야 하는 정렬(Sort)



클린코드

  • 추상화: 상위 클래스/메소드/함수를 통해 애플리케이션의 특성을 간략하게 나타내고, 하위 내용은 상위 클래스/메소드/함수에서 구현
  • 의존성: 📌 다른 모듈에 미치는 영향을 최소화하도록 작성
  • 가독성: 누구든지 읽기 쉽게 코드를 작성
  • 중복성: 중복을 최소화할 수 있도록 코드를 작성



자료구조

  • FIFO
  • 순서 리스트의 뒤(Rear)에서 노드가 삽입되며, 앞(Front)에서 노드가 제거된다.

스택

  • 📌 선형 리스트의 양쪽 끝에서 삽입과 삭제가 모두 가능한 자료 구조이다.
  • 나중에 넣은 데이터가 먼저 나온다
  • 인터럽트 처리, 서브루틴 호출 작업 등에 응용된다.
  • 📌📌 연산수행시 자료 출력순서
If Top=0 Then
    Underflow
Else {
    remove S(Top)
    Top=Top-1
}
  • Underflow: 스택 저장공간에 데이터가 없는데 데이터를 꺼내려고 할 경우



소프트웨어 패키징

  • 📌 개발이 완료된 제품 소프트웨어를 고객에게 전달하기 위한 형태로 패키징
  • 신규 및 변경 개발 소스를 식별하고, 이를 모듈화하여 상용제품으로 패키징 한다.



기타 용어정리

Alien Code

  • 아주 오래되거나 참고문서 또는 개발자가 없어 유지보수 작업이 아주 어려운 프로그램

Risk Analysis

  • 프로젝트에 내재된 위험 요소를 인식하고 그 영향을 분석하여 이를 관리하는 활동으로서, 프로젝트를 성공시키기 위하여 위험 요소를 사전에 예측, 대비하는 모든 기술과 활동을 포함하는 것

Critical Path Method

  • 프로젝트를 끝내는 데 필요한 작업을 파악할 수 있는 기술입니다. 프로젝트 관리에서 크리티컬 패스는 가장 경로(Path)가 긴 일련의 활동으로, 프로젝트 전체를 끝내기 위해 반드시 기한 내에 완료되어야 하는 활동입니다.

Fault

  • 📌 소프트웨어 개발 활동을 수행함에 있어서 시스템이 고장(Failure)을 일으키게 하며, 오류(Error)가 있는 경우 발생하는 것

Portability

  • 소프트웨어 품질 목표 중 하나 이상의 하드웨어 환경에서 운용되기 위해 쉽게 수정될 수 있는 시스템 능력을 의미하는 것



NS(Nassi-Schneiderman) Chart

  • 모듈 명세서 대체
  • 논리의 기술에 중점을 두고 도형을 이용한 표현 방법이다.
  • 이해하기 쉽고 코드 변환이 용이하다.
  • 📌 GOTO 구조가 어렵다 - 임의의 제어 이동이 어렵다
  • 연속, 선택, 반복 등의 제어 논리 구조를 표현한다.



인터페이스 간의 통신을 위해 이용되는 데이터 포맷

JSON, XML, YAML

  • YAML: 구성 파일 작성에 사용되는 데이터 직렬화 언어이며 데이터 표현 양식(config.yml)
댓글