PromleeBlog
sitemap
aboutMe

posting thumbnail
소프트웨어 개발
Software Development

📅

🚀

자료구조의 분류 🔗


🚀

선형 구조 (Linear Structure) 🔗

선형 리스트 (Linear List) 🔗

연속 리스트

스택 (Stack) 🔗

리스트의 한쪽 끝으로만 자료의 삽입, 삭제 작업이 이루어지는 자료 구조

큐 (Queue) 🔗

리스트의 한쪽에서 삽입 작업이 이루어지고 다른 한쪽에서 삭제 작업이 이루어지는 자료 구조

🚀

비선형 구조 (Non-Linear Structure) 🔗

방향/무방향 그래프의 최대 간선 수 🔗

트리의 개요 🔗

트리는 정점(Node, 노드)과 선분(Branch, 가지)을 이용하여 사이클을 이루지 않도록 구성한 그래프의 특수한 형태

트리의 운행법 🔗

➡️

수식 표기법 🔗


🚀

정렬 🔗

삽입 정렬 (Insertion Sort) 🔗

삽입 정렬은 배열을 정렬된 부분과 정렬되지 않은 부분으로 나누고, 정렬되지 않은 부분의 원소를 정렬된 부분에 삽입하는 방식으로 정렬하는 알고리즘이다

선택 정렬 (Selection Sort) 🔗

선택 정렬은 배열을 정렬된 부분과 정렬되지 않은 부분으로 나누고, 정렬되지 않은 부분에서 가장 작은 원소를 선택하여 정렬된 부분의 마지막 원소와 교환하는 방식으로 정렬하는 알고리즘이다

버블 정렬 (Bubble Sort) 🔗

버블 정렬은 인접한 두 원소를 비교하여 정렬하는 방식으로 정렬하는 알고리즘이다

퀵 정렬 (Quick Sort) 🔗

퀵 정렬은 분할 정복 방법을 사용하여 배열을 정렬하는 알고리즘이다
하나의 파일을 부분적으로 나누어 가면서 정렬하는 방법으로 키를 기준으로 작은 값은 왼쪽, 큰 값은 오른쪽으로 이동시킨다
평군 수행 시간 복잡도는 O(n log n)이다
최악의 경우 수행 시간 복잡도는 O(n^2)이다
240507-144832
이미지 출처

힙 정렬 (Heap Sort) 🔗

힙 정렬은 힙 자료구조를 이용하여 정렬하는 알고리즘이다

2-Way 합병 정렬 (Merge Sort) 🔗

2-Way 합병 정렬은 이미 정렬되어 있는 두 개의 파일을 한 개의 파일로 합병하는 정렬 방식이다
평균과 최악의 경우 수행 시간 복잡도는 O(n log n)이다

🚀

검색 알고리즘 (Search Algorithm) 🔗

이분 검색은 정렬된 배열에서 중간 값을 기준으로 검색하는 방식으로 검색하는 알고리즘이다
전체 파일을 두 개의 서브파일로 분리해 가면서 Key 리코드를 검색하는 방식

해싱 함수 (Hashing Function) 🔗

해싱 함수는 키를 해시 테이블의 주소로 변환하는 함수이다

🚀

빌드 자동화 도구 🔗

소스 코드를 소프트웨어로 변환하는 과정에 필요한 전처리, 컴파일 등의 작업 수행
도구설명
Ant(Another Neat Tool)
자바 프로젝트의 공식적 빌드 자동화 도구(XML 기반)
표준이 없어 개발자가 모든 것을 정의함, 스크립트 재사용 어려움
Maven
예외 사항만을 기록하는 표준이 있음(Ant의 대안)
컴파일과 빌드 동시 수행 가능, 의존성 설정 후 라이브러리 관리
Gradle
Groovy 스크립트를 사용하는 빌드 도구
의존성을 활용하며 빌드 캐시 기능 지원 -> 속도 향상
실행할 명령을 모아 태스크로 만든 후 태스크 단위 실행
Jenkins
JAVA 기반 오픈소스 빌드 자동화 도구
서블릿 컨테이너에서 실행
형상 도구 관리와 연동 가능(Git, SVN)

🚀

디지털 저작권 관리 (DRM, Digital Rights Management) 🔗

디지털 저작물의 저작권을 보호하고 관리하는 기술

🚀

소프트웨어 형상 관리 (Software Configuration Management, SCM) 🔗

소프트웨어 개발 과정에서 발생하는 변경 사항을 체계적으로 관리하는 활동 -> 개발 전체 단계 적용
단계활동
형상 식별
관리 대상에 이름/번호 부여 후 계층 구조로 구분 → 수정/추적 용이
형상 제어
식별된 형상 항목에 대한 변경 요구 검토(기준선 반영)
형상 감사
기준선(Base Line)의 무결성 평가를 위해 확인/검증/검열 과정 진행
형상 기록
형상 식별/통제/감사 작업 결과를 기록/관리하고 보고서 작성

🚀

소프트웨어 버전 등록 용어 🔗

용어설명
저장소(Repository)
최신 버전 및 변경 내역 관련 정보 저장소
가져오기(Import)
버전 관리 미진행 상태의 초기 저장소에 처음으로 파일을 복사
체크아웃(Checkout)
프로그램 수정을 위해 저장소에서 파일을 받아옴
체크인(Checkin)
체크아웃한 파일 수정 후 저장소에 새로운 버전으로 파일 갱신
커밋(Commit)
체크인 시 이전 갱신된 내용이 있는 경우 conflict를 알린 후 Diff 도구를 이용해 수정 후 갱신 완료
동기화(Update)
저장소의 변경 사항을 로컬에 반영하는 작업

🚀

소프트웨어 버전 관리 도구 🔗

도구설명
공유폴더
파일 공유를 통한 로컬에서의 버전 관리
ex) SCCS,
RCS
(Revision Control System), PVCS, QVCS
클라이언트/서버
중앙 서버에 저장소를 두고 클라이언트가 서버에 접속해 파일 관리
ex) CVS,
SVN
(Subversion), Perforce, ClearCase
분산 저장소
로컬 저장소를 갖고 중앙 서버와 연결해 파일 관리
ex)
Git
, Mercurial, Bazaar
SVN(Subversion)
CVS의 개선 버전
커밋 할 때마다 리비전 1씩 증가
CVS의 한계인
파일이나 디렉터리의 이름 변경, 이동 가능
Git
원격 저장소: 여러 사람들이 협업을 위해 버전을 공동 관리하는 장소
로컬 저장소: 개발자들이 본인의 실제 개발을 진행하는 장소
브랜치 이용 시 기존 버전 관리 틀에 영향없이 다양한 기능 테스트 가능, 파일의 변화를 SnapShot으로 저장

🚀

소스 코드 품질분석 도구 🔗


🚀

EAI (Enterprise Application Integration) 🔗

기업 내 각종 앱/플랫폼 간 정보 전달/연계/통합 등 상호작용 연동하는 모듈 연계 방식
방식설명
포인트-투-포인트(Point-to-Point)
데이터 간 포인트-포인트 개별 연결 → 변경 및 재사용 어려움
허브&스포크(Hub&Spoke)
중앙 집중식 허브를 통해 각 시스템 연결 → 확장/유지보수에 유리하나, 중앙 허브 장애 발생 시 전체 시스템에 영향
메시지 버스(Message Bus)
앱 사이에 미들웨어를 두고 처리/확장성 및 대용량 처리 가능
Hybrid
허브-스포크, 메시지 버스 방식 혼합 → 데이터 병목 현상 최소

🚀

어플리케이션 테스트 기본 원리 🔗


🚀

어플리케이션 테스트 분류 🔗

  1. 프로그램 실행 여부
    분류설명
    정적 테스트(Static Test)
    소스 코드 분석을 통해 테스트
    ex) 워크 스루, 인스펙션, 코드 검사
    동적 테스트(Dynamic Test)
    프로그램 실행을 통해 테스트
    ex) 화이트/블랙박스 테스트
  2. 테스트 기반
    분류설명
    명세 기반
    사용자의 요구사항 명세서를 기반으로 테스트
    ex)동등 분할/경계값 분석(블랙박스)
    구조 기반
    소프트웨어 구조를 기반으로 테스트
    ex)구문 기반/결정 기반/조건 기반(화이트박스)
    경험 기반
    테스터의 경험을 기반으로 테스트
    ex)에러 추정, 체크리스트, 탐색적 테스팅
  3. 시각(관점) 기반
    분류설명
    검증(Validation)
    개발자
    의 시각에서 제품의 생산성 과정 테스트
    ex)단위/통합/시스템 테스트
    확인(Verification)
    사용자
    의 시각에서 생산된 제품의 결과 테스트
    ex)인수 테스트 (알파/베타)
  4. 목적 기반
    분류설명
    회복(Recovery)
    시스템에 인위적 결함 부여 후 정상으로 회복되는 과정 확인
    안전(Security)
    외부 불법 침입으로부터 시스템을 보호할 수 있는지 확인
    강도(Stress)
    과부하 시 SW 정상 구동 여부 확인
    성능(Performance)
    실시간 성능 및 전체적인 효율성 진단(응답시간, 업무 처리량)
    구조(Structural)
    SW 내부 논리적 경로 및 소스 코드 복잡도 평가
    회귀(Regression)
    SW 내 변경 또는 수정된 코드에 새로운 결함이 없음을 확인
    병행(Concurrent)
    변경 및 기존 SW에 동일한 데이터 입력 후 결과 비교

🚀

화이트박스 테스트 (White Box Test) 🔗


🚀

블랙박스 테스트 (Black Box Test) 🔗


🚀

개발 단계에 따른 어플리케이션 테스트 🔗

  1. 단위 테스트(Unit Test)
    • 개별 모듈(컴포넌트)이 정상적으로 작동하는지 확인
    • 주로
      구조 기반 테스트
      진행 / 기능성 테스트 최우선
  2. 통합 테스트(Integration Test)
    • 단위 테스트 후 모듈을 통합하는 과정에서 발생하는 오류 확인
    • 상향식 통합 테스트
      : 모듈을 하나씩 통합 /
      스텁
      (Stub): 모듈의 기능을 단순히 수행하는 도구(시험용 모듈)
    • 하향식 통합 테스트
      : 모듈을 하나씩 분리 / 하나의 주요 제어 모듈과 관련된 종속 모듈의 그룹인
      클러스터
      (Cluster)와
      드라이버
      (Driver)를 사용, 스텁은 미사용
  3. 시스템 테스트(System Test)
    • 개발된 SW의 컴퓨터 시스템 내 작동여부를 점검
    • 실제 사용 환경과 유사한 테스트 환경 →
      기능적
      (블랙박스) 및
      비기능적
      (화이트박스) 테스트 구분
  4. 인수 테스트(Acceptance Test)
    • 사용자가 요구사항을 만족하는지 확인
    • 알파 테스트
      : 통제된 환경에서 사용자가 개발자와 함께 확인
    • 베타 테스트
      : 통제되지 않은 환경에서
      개발자 없이
      여러 명의 사용자가 검증

🚀

테스트 케이스 (Test Case) 🔗


🚀

테스트 시나리오 (Test Scenario) 🔗

테스트 케이스를 적용하는 구체적인 절차를 명세한 문서
유의사항: 시스템/모듈/항목별 여러 개의 시나리오로 분리해 작성/사용자의 요구사항과 설계 문서 등을 토대로 작성

🚀

테스트 오라클 (Test Oracle) 🔗

테스트 결과가 올바른지 판단하기 위한 기준

🚀

테스트 하네스 (Test Harness) 🔗

용어설명
테스트 드라이버(Test Driver)
시험 대상의 하위 모듈 호출 / 모듈 테스트 수행 후의 결과 도출
→ 상향식 통합 테스트에서 사용
테스트 스텁(Test Stub)
제어 모듈이 호출하는 하위 모듈의 역할 단순 수행
→ 하향식 테스트에서 사용
테스트 슈트(Test Suite)
시스템에 사용되는 테스트 케이스의 집합(컴포넌트/모듈)
테스트 케이스
사용자의 요구사항 준수 여부 확인 목적 테스트 항목 명세서
→ 입력값, 실행조건, 기대결과
테스트 스크립트
자동화된 테스트 실행 절차에 대한 명세서
목 오브젝트(Mock Object)
사용자의 행위 조건부 입력 시 계획된 행위를 수행하는 객체

🚀

데이터 통신을 이용한 인터페이스 구현 🔗


🚀

인터페이스 구현 검증 도구들 🔗

도구설명
xUnit
Java, C++, Net등 다양한 언어를 지원하는 단위 테스트 프레임워크
STAF
서비스 호출
,
컴포넌트 재사용
등 다양한 환경을 지원
Fitness
웹 기반
테스트케이스 설계/실행/결과 확인 지원
NTAF
STAF의 재사용성 및 확장성 + Fitness의 협업 기능 통합(현재는 폐기)
Selenium
다양한 브라우저 및 개발 언어를 지원하는
웹 애플리케이션
테스트
watir
Ruby 기반 애플리케이션 테스트 프레임워크

🚀

인스펙션 (Inspection) 🔗


🚀

리팩토링 (Refactoring) 🔗

겉으로 보이는 동작 변화 없이 내부 구조 변경 (SW 쉽게 이해, 적은 비용으로 수정 가능하게)

🚀

SW 구현 단계 🔗


🚀

제품 SW 패키징 시 고려사항 🔗


🚀

인터페이스 보안을 위한 네트워크 영역에 적용될 수 있는 Solution 🔗


💡

기출 오답 정리 🔗


🚀

2020년 06년 06월 🔗

➡️

23. 소프트웨어 품질 측정을 위해 개발자 관점에서 고려해야 할 항목으로 거리가 먼 것은? 🔗

  1. 정확성
  2. 무결성
  3. 사용성
  4. 간결성
답: 4
➡️

24. 인터페이스 구현 검증도구 중 아래에서 설명하는 것은? 🔗

  1. xUnit
  2. STAF
  3. Fitness
  4. RubyNode
답: 2
링크
➡️

29. 반정규화(Denormalization) 유형중 중복 테이블을 추가하는 방법에 해당하지 않는 것은? 🔗

  1. 빌드 테이블의 추가
  2. 집계 테이블의 추가
  3. 진행 테이블의 추가
  4. 특정 부분만을 포함하는 테이블의 추가
답: 1
(집)계 테이블 추가 - sum,avg 등의 계산 미리 수행
(중)복 테이블 추가 - 서버 분리 또는 업무 구별
(이)력 테이블 추가 - 레코드 중복 저장
(부)분 테이블 추가 - 접근 시도가 많은 자료만 모아두기
(진)행 테이블 추가 - A에 접근하기위해 다수의 테이블을 거칠 경우 간소화
➡️

31. 다음 트리의 차수(degree)와 단말 노드(terminal node)의 수는? 🔗

240508-172437w
  1. 차수: 4, 단말 노드: 4
  2. 차수: 2, 단말 노드: 4
  3. 차수: 4, 단말 노드: 8
  4. 차수: 2, 단말 노드: 8
답: 2
트리의 차수: 노드가 가질 수 있는 자식 노드의 최대 개수
➡️

33. 소프트 웨어 테스트에서 오류의 80%는 전체 모듈의 20% 내에서 발견된다는 법칙은? 🔗

  1. Brooks의 법칙
  2. Boehm의 법칙
  3. Pareto의 법칙
  4. Jackson의 법칙
답: 3
링크
➡️

36. 소스코드 품질분석 도구 중 정적분석 도구가 아닌 것은? 🔗

  1. pmd
  2. cppcheck
  3. valMeter
  4. checkstyle
답: 3
링크
➡️

38. 하향식 통합에 있어서 모듈 간의 통합 시험을 위해 일시적으로 필요한 조건만을 가지고 임시로 제공되는 시험용 모듈을 무엇이라고 하는가? 🔗

  1. Stub
  2. Driver
  3. Procedure
  4. Function
답: 1
링크
➡️

40. 외계인코드(Alien Code)에 대한 설명으로 옳은 것은? 🔗

  1. 프로그램의 로직이 복잡하여 이해하기 어려운 프로그램을 의미한다.
  2. 아주 오래되거나 참고문서 또는 개발자가 없어 유지보수 작업이 어려운 프로그램을 의미한다.
  3. 오류가 없어 디버깅 과정이 필요 없는 프로그램을 의미한다.
  4. 사용자가 직접 작성한 프로그램을 의미한다.
답: 2