씬디의 블로그

[정보처리기사 필기] 2. 소프트웨어 개발 본문

Qualifications/정보처리기사

[정보처리기사 필기] 2. 소프트웨어 개발

cyndi 2024. 5. 22. 01:08

정보처리기사

수제비2024 기출문제집으로 공부하면서 틀린 부분 위주로 기록

2-1 데이터 입출력 구현

1. 논리 데이터 저장소 확인

수식의 표기법

  • 전위 표기법(PreFix): 연산자 -> Left -> Right
  • 중위 표기법(InFix): Left -> 연산자 -> Right
  • 후위 표기법(PostFix): Left -> Right -> 연산자

2-2 통합 구현

1. 모듈 구현

테스트 vs 디버그

  • 테스트: 오류를 찾는 작업
  • 디비깅: 오류를 수정하는 작업

Migration

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

Component

  • 명백한 역할을 가지고 독립적으로 존재할 수 있는 시스템의 일부분으로 넓은 의미에서 재사용되는 모든 단위라고 볼 수 있으며 인터페이스를 통해서만 접근할 수 있는 것

화이트박스 테스트

  • 모듈의 원시 코드를 오픈시킨 상태에서 원시 코드의 논리적인 모든 경로를 테스트하여 테스트 케이스를 설계하는 방법
  • 모듈 안의 작동을 직접 관찰한다
  • 화이트박스 테스트의 이해를 위해 논리 흐름도를 이용할 수 있다
  • 테스트 데이터를 이용해 실제 프로그램을 실행함으로써 오류를 찾는 동적 테스트에 해당한다
  • 테스트 데이터를 선택하기 위하여 검증 기준을 정한다

블랙박스 테스트

  • 소프트웨어가 수행할 특정 기능을 알기 위해서 각 기능이 완전히 작동되는 것을 입증하는 테스트로, 기능 테스트라고도 한다
  • 프로그램의 구조를 고려하지 않기 때문에 테스트 케이스는 프로그램 또는 모듈의 요구나 명세를 기초로 결정한다
  • 기능 및 동작 위주의 테스트를 진행하기 때문에 내부 구조나 작동 원리를 알지 못해도 가능하다
  • 블랙박스 테스트를 이용하여 발견할 수 있는 오류
    • 비정상적인 자료를 입력해도 오류 처리를 수행하지 않는 경우
    • 정상적인 자료를 입력해도 요구된 기능이 제대로 수행되지 않는 경우
    • 경곗값을 입력할 경우 요구된 출력 결과가 나오지 않는 경우

2. 통합 구현 관리

형상관리

  • 소프트웨어의 개발 과정에서 소프트웨어의 변경 사항을 관리하기 위해 개발된 일련의 활동이다
  • 소프트웨어 개발의 전체 비용을 줄이고, 개발 과정의 여러 방해 요인이 최소화되도록 보증하는 것을 목적으로 한다
  • 관리 항목에는 소스 코드뿐만 아니라 각종 정의서, 지침서, 분석서 등이 포함된다
  • 형상 관리를 위하여 구성된 팀을 형상 통제 위원회(CCB, Change Control Board)이라고 한다
  • 대표적인 형상 관리 도구에는 Git이 있다

소프트웨어의 버전 등록 관련 주요 기능

  • 체크인: 체크아웃 한 파일의 수정을 완료한 후 저장소의 파일을 새로운 버전으로 갱신함

통합 개발 환경 (IDE, Integrated Development Environment)

  • 통합 개발 환경은 코딩, 디버그, 컴파일, 배포 등 프로그램 개발과 관련된 모든 작업을 하나의 프로그램에서 처리할 수 있도록 제공하는 소프트웨어적인 개발 환경
  • 코딩: C, JAVA 등의 프로그래밍 언어로 프로그램을 작성하는 기능
  • 컴파일: 개발자가 작성한 고급 언어로 된 프로그램을 컴퓨터가 이해할 수 있는 목적 프로그램(저급언어 프로그램)으로 번역하여 컴퓨터에서 실행 가능한 형태로 변환하는 기능
  • 디버깅: 소프트웨어나 하드웨어의 오류나 잘못된 동작, 즉 버그를 찾아 수정하는 기능
  • 배포: 소프트웨어를 사용자에게 전달하는 기능

2-3 제품 소프트웨어 패키징

1. 제품 소프트웨어 패키징

디지털 저작권 관리의 기술요소 [암키식저 파정크인]

  • 호화 /  관리 / 별 기술 / 작권 표현 / 일 생성 / 책 관리 / 랙 방지 / 

2. 제품 소프트웨어 매뉴얼 작성

소프트웨어 품질 목표

  • 이식성(Portability)
    • 하나 이상의 하드웨어 환경에서 운용되기 위해 쉽게 수정될 수 있는 시스템 능력
  • 효율성(Efficiency)
    • 명시된 조건에서 사용되는 자원의 양에 따라 요구된 성능을 제공하는 소프트웨어 제품의 능력
    • 품질 부특성으로 시간반응성, 자원효율성, 준수성 등을 갖는다

소프트웨어 품질 측정을 위해 개발자 관점에서 고려해야할 항목

  • 정확성, 무결성, 사용성 등

브룩스 법칙

  • S/W Project 일정이 지연된다고 해서 Project 말기에 새로운 인원을 추가 투입하면 Project는 더욱 지연되게 된다

파레토의 법칙

  • 소프트웨어 테스트에서 오류의 80%는 전체 모듈의 20% 내에서 발견된다

3. 제품 소프트웨어 버전 관리

분산 저장소 방식

  • 버전 관리 자료가 원격 저장소와 로컬 저장소에 함께 저장되어 관리된다
  • 로컬 저장소에서 버전 관리가 가능하므로 원격 저장소에 문제가 생겨도 로컬 저장소의 자료를 이용하여 작업할 수 있다
  • 대표적인 버전 관리 도구로 Git이 있다

제품 소프트웨어의 형상 관리 역할

  • 형상 관리를 통해 이전 리비전이나 버전에 대한 정보에 접근 가능하여 배포본 관리에 유용
  • 불필요한 사용자의 소스 수정 제한
  • 동일한 프로젝트에 대해 여러 개발자 동시개발 가능

2-4 애플리케이션 테스트 관리

1. 애플리케이션 테스트 케이스 설계

인수 테스트의 종류

  • 알파 테스트
    • 개발자의 장소에서 사용자가 개발자 앞에서 행하는 테스트 기법
    • 테스트는 통제된 환경에서 행해지며, 오류와 사용상의 문제점을 사용자와 개발자가 함께 확인하면서 기록함
  • 베타 테스트
    • 선정된 최종 사용자가 여러 명의 사용자 앞에서 행하는 테스트 기법
    • 실업무를 가지고 사용자가 직접 테스트 하는 것 
    • 개발자에 의해 제어되지 않은 상태에서 테스트가 행해지며, 발견된 오류와 사용상의 문제점을 기록하고 개발자에게 주기적으로 보고함

단위 테스트(Unit Test)

  • 코딩 직후 소프트웨어 설계의 최소 단위인 모듈이나 컴포넌트에 초점을 맞춰 테스트
  • 단위 테스트로 발견 가능한 오류
    • 알고리즘 오류에 따른 원치 않은 결과, 탈출구가 없는 반복문의 사용, 틀린 계산 수식에 의한 잘못된 결과

목적에 따른 테스트

  • 강도(Stress)
    • 시스템 처리 능력 이상의 부하, 즉 임계점 이상의 부하를 가하여 비정상적인 상황에서의 처리를 테스트
    • 시스템에 과도한 정보량이나 빈도 등을 부과하여 과부하 시에도 소프트웨어가 정상적으로 실행되는지를 확인하는 테스트

테스트 케이스

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

테스트 오라클

  • 테스트의 결과가 참인지 거짓인지를  판단하기 위해서 사전에 정의된 참값을 입력하여 비교하는 기법 및 활동
  • 종류에는 참, 샘플링, 휴리스틱, 일관성 검사가 존재

코드 인스펙션

  • 프로그램을 수행시켜보는 것 대신에 읽어보고 눈으로 확인하는 방법으로 볼 수 있다
  • 코드 품질 향상 기법 중 하나이다
  • 정적 테스트 시 활용하는 기법이다
  • 결함과 함께 표준 준수 여부,  효율성 등의 다른 품질 이슈를 검사하기도 한다

소프트웨어 생명주기 모델 중 V 모델

  • 요구 분석 및 설계 단계를 거쳐 구현, 테스트 등 각 단계를 연결하여 V 형태를 이루는 모델
  • Perry에 의해 제안되었으며 세부적인 테스트 과정으로 구성되어 신뢰도 높은 시스템을 개발하는데 효과적이다
  • 개발 작업과 검증 작업 사이의 관계를 명확히 들어내 놓은 폭포수 모델의 변형이라고 볼 수 있다
  • 폭포수 모델이 산출물 중심이라면 V모델은 작업과 결과의 검증에 초점을 둔다

2. 애플리케이션 통합 테스트

테스트 드라이버

  • 시험대상 모듈을 호출하는 간이 소프트웨어이다
  • 필요에 따라 매개 변수를 전달하고 모듈을 수행한 후에 결과를 보여줄 수 있다
  • 상향식 통합 테스트에서 사용된다
  • 하위 모듈을 호출하는 상위 모듈의 역할을 한다

3. 애플리케이션 성능 개선

시간복잡도에 따른 알고리즘 분류

정렬 종류
O(nlog2n) 퀵, 힙, 병합
O(n2) 버블, 삽입, 선택

 

해싱 함수의 종류

  • 제곱법
  • 숫자 분석법
  • 제산법
  • 폴딩법
    • 레코드 키를 여러 부분으로 나누고, 나눈 부분의 각 숫자를 더하거나 XOR한 값을 홈 주소로 사용하는 방식

알고리즘

  • 주어진 작업을 수행하는 컴퓨터 명령어를 순서대로 나열한 것

퀵 정렬

  • 레코드의 많은 자료 이동을 없애고 하나의 파일을 부분적으로 나누어 가면서 정렬하는 방법
  • 키를 기준으로 작은 값은 왼쪽에, 큰 값은 오른쪽 서브파일로 분해시키는 방식

선택 정렬

  • 정렬되지 않은 데이터들에 대해 가장 작은 데이터를 찾아 정렬되지 않은 부분의 가장 앞의 데이터와 교환해나가는 알고리즘

알고리즘 설계 기법 [분동탐백]

  • 할과 정복(Divide and Conquer)
  • 적 계획법(Dynamic Programming)
  • 욕법(Greedy)
  • 트래킹(Backtracking)

소스 코드 품질분석 도구 중 정적분석 도구

  • 소스 코드의 잠재적인 문제를 발견한다
  • 주로 도구로는 pmd, checkstyle, cppcheck가 있다

이분 검색

  • 이분 검색은 전체 파일을 두 개의 서브파일로 분리해 가면서 Key 레코드를 검색하는 방식
  • 반드시 순서화된 파일이어야 검색할 수 있다
  • 비교 횟수를 거듭할 때마다 검색 대상이 되는 데이터의 수가 절반으로 줄어듦으로 탐색 효율이 좋고 탐색 시간이 적게 소요된다

선형 검색(순차 검색: Sequential Search)

  • 배열의 처음부터 끝까지 차례대로 비교하여 원하는 데이터를 찾아내는 알고리즘
  • 검색할 리스트의 길이가 길면 비효율적이지만, 검색 방법 중 가장 단순하여 구현이 쉽고, 정렬되지 않은 리스트에서도 사용할 수 있다는 장점

2-5 인터페이스 구현

1. 인터페이스 설계 확인

EAI(Enterprise Application Integration)의 구축 유형

  • Point-to-Point
  • Hub & Spoke
  • Message Bus
    • 애플리케이션 사이 미들웨어를 두어 연계하는 미들웨어 통합 방식
  • Hybrid
    • Hub & Spoke와 Message Bus의 혼합방식
    • 필요한 경우 한 가지 방식으로 EAI 구현 가능
    • 데이터 병목현상 최소화

2. 인터페이스 기능 구현

인터페이스 구현 검증 도구 [엑스피 엔셀웨]

  • xUnit
    • CppUnit(C++)
    • JUnit(Java)
    • HttpUnit(Web)
  • STAF
    • 서비스 호출, 컴포넌트 재사용 등 다양한 환경을 지원하는 테스트 프레임워크
    • 각 테스트 대상 분산 환경에 데몬을 사용하여 테스트 대상 프로그램을 통해 테스트를 수행하고, 통합하여 자동화하는 검증 도구
  • Fitnesse
  • NTAF
  • Selenium
  • watir