티스토리 뷰

21) 클린 코드(Clean Code)를 작성하기 위한 원칙

  1. 추상화 : 상위 클래스 ; 프로그램(어플리케이션) 특성만 간략하게
               하위 클래스 ; 세부적 내용(메소드,함수) 구현 
  2. 의존성(배제) : 다른 모듈(덩어리 혹은 어떠한 단위)에 미치는 영향을 최소화하여 코드 변경시 영향이 가지 않도록
  3. 중복성(최소화) : 코드의 중복을 최소화
  4. 가독성 : 누구든지 읽기 쉽게 작성
  5. 단순성 : 코드를 단순하게 작성(프로그램을 최소단위로 분리해 작업을 한번에 하나씩 처리하도록)

22) 

  • 테스트 스텁(Test Stub) - 제어 모듈이 호출하는 타 모듈의 기능을 단순히 수행하는 도구로, 일시적으로 필요한 조건만을 가지고 있는 테스트용 모듈
  • 테스트 슈트(Test Suites) - 테스트 대상 컴포넌트나 모듈, 시스템에 사용되는 테스트 케이스의 집합
  • 테스트 케이스(Test Case) - 사용자의 요구사항을 정확히 준수했는지 확인하기 위한 입력 값, 실행조건, 기대결과 등으로 만들어진 테스트 항목의 명세서
  • 테스트 드라이버(Test Driver) - 단위 테스트에서 테스트의 대상이 되는 하위 모듈을 호출하고, 파라미터를 전달하는 가상의 모듈로 상향식 테스트에 사용

23) 자료구조 중 하나인 스택(Stack)에 대한 내용

스택은 "쌓다"라는 의미로, 데이터를 차곡차곡 쌓아 올린 형태의 자료구조를 말합니다.

간단한 예시로 포개 둔 일회용 종이컵을 하나하나 꺼내서 사용하는 것으로 예를 들수 있습니다. 따라서 가장 마지막에 삽입된 자료가 가장 먼저 삭제되는 구조를 가지고 있습니다.

또한 스택은 정해진 방향으로만 쌓을 수 있으며, top으로 정한 곳을 통해서만 접근가능합니다.

그리고 스택에서는 삽입 연산을 push, 삭제 연산을 pop이라고 하며, 이러한 스택의 구조를 후입 선출의 구조하고 하며, 줄여서 LIFO(Last in First Out)이라고 부릅니다.

인터럽트(끼어들다, 중단하다) 처리 , 서브루틴 호출 작업 등에 응용된다.

ex) 웹 브라우저 방문기록 (뒤로 가기) / 실행 취소(undo) / 역순 문자열 만들기 / 후위 표기법 계산

 

<-> 큐(Queue) : 선입선출, FIFO(First In First Out)  ex) 은행 업무 / 대기열 순서와 같은 우선순위 작업 예약 / 서비스 센터의 대기시간 / 프로세스 관리


 

24) 소프트웨어 모듈화의 장점

  1. 프로그램의 효율적인 관리가 가능하다.
  2. 소프트웨어를 이해하기가 쉬워진다.
  3. 모듈의 재사용 가능으로 개발과 유지보수가 용이하다.
  4. 소프트웨어 시험, 통합, 수정 시 용이하다.
  5. 모듈 재사용 가능
  6. 오류의 파급력 최소화

25) 스프트웨어 프로젝트 관리

  • 주어진 기간 내에 최소의 비용으로 사용자를 만족시키는 시스템을 개발하기 위한 전반적인 활동
  • 소프트웨어 개발 계획을 세우고 분석, 설계, 구현 등의 작업을 통제하는 것으로 소프트웨어 생명 주기의 전 과정에 걸쳐 진행된다.
  • 소프트웨어 프로젝트를 성공적으로 수행하기 위해서는 수행할 작업의 범위, 필요한 자원, 수행 업무, 이정표, 비용 추진 일정들을 알아야 한다.
  • 소요인력은 최소화 하는 것이 좋다.
  • 프로젝트 관리는 제한된 시간과 비용으로 좋은 품질의 시스템을 개발하여 고객에게 제공해야 한다.

26) 정형 기술 검토(FTR)의 지침

  • 제품 검토의 집중성 : 오류 검출에 초점을 두고 해결책을 나중으로 미룬다
  • 사전 준비성 : 검토를 위한 자료를 사전에 배포하여 검토하도록 한다
  • 의제의 제한성 : 의견을 제한하되 충분히 받아들인다
  • 안건 고수성 : 안건을 세우면 고수한다
  • 논쟁 반박의 제한성 : 논쟁과 반박을 제한한다.
  • 문제 공개성 : 문제 영역을 공개한다
  • 참가 인원의 제한성 : 참가자의 수를 제한한다.
  • 문서성 : 발견된 오류를 문서화한다.

27) 소프트웨어 재공학의 종류와 특징

소프트웨어 재공학이란?

기존 소프트웨어를 버리지 않고 기능을 개선시키거나 기능을 새로운 소프트웨어로 재활용하는 등 소프트웨어 재사용 공법

  • Analysis(분석)
    - 기존 소프트웨어 명세를 확인하여 동작을 이해하고 재공학 대상을 선정
    - 재공학 가치판단 및 재공학 여부 판단
  • Restructuring(재구성)
    - 소프트웨어 구조를 향상시키기 위해 코드를 재구성
    - 소프트웨어의 기능과 외적인 동작은 변경되지 않음
  • Reverse Engineering(역공학)
    - 소프트웨어 동작 과정 및 설계 정보를 재발견 혹은 재생성
    - 소프트웨어를 구성하는 원시 코드를 복구하는 작업
    - 원시 코드로부터 설계정보 추출 및 절차 설계표현, 프로그램과 데이터 구조 정보 추출
    - 역공학의 가장 오래된 형태는 재문서화
  • Migration(이관)
    - 기존 소프트웨어를 다른 운영체제, 하드웨어, 프레임워크 등에서 사용할 수 있도록 변환
    - 재구성 또는 재개발을 통한 새로운 소프트웨어에 기존 데이터를 옮겨 담는 작업
  • Reuse(재사용)

28) 프로그래밍 언어의 선정 기준

  • 친밀감, 언어의 능력, 처리의 효율성, 프로그램 구조, 프로그램의 길이, 이식성, 과거의 개발 실적, 알고리즘과 계산상의 난이도, 자료 구조의 난이도, 성능 고려 사항들, 대상 업무의 성격, 소프트웨어의 수행 환경, 개발담당자의 경험과 지식, 사용자의 요구사항, 컴파일러의 이용 가능성

29) 소프트웨어 패키징

  • 개발자가 아니라 소비자(사용자) 중심으로 진행한다.
  • 모듈별로 생성한 실행 파일들을 묶어 배포용 설치 파일을 만드는 것.
  • 소스 코드는 향후 관리를 고려하여 모듈화하여 패키징 한다.
  • 사용자가 소프트웨어를 사용하게 될 환경을 이해하여, 다양한 환경에서 소프트웨어를 손쉽게 사용할 수 있도록 일반적인 배포 형태로 패키징한다.
  • 사용자가 중심으로 진행되는 작업이므로 사용자의 편의성 및 실행 환경을 우선적으로 고려해야 한다.

30) 자료 구조의 종류 분류

  • 선형 구조 : Array(어레이), LinkedList, Stack(스택), Queue(큐), Deque(데크), Hash(해쉬)
  • 비선형 구조 : Graph(그래프) - Directed/Undirected(그래프의 분류), Tree(트리)-Binary Tree, TreeHeap
  • 파일 구조 : 순차파일, 색인파일, 직접파일

31) Code관련 용어들

Alien Code : 개발자가 퇴사를 했거나 현재 사용하지 않는 환경 및 언어로 작성되었거나 프로그램의 관련 문서나 주석이 없는 상태에서 시간이 흐른 뒤 유지보수가 불가능하거나 힘든 프로그램 소스 코드를 일켣는다.

Source Code(원시 코드) : 프로그래밍 언어로 작성된 텍스트, 원시코드로 작성된 파일은 컴파일러에 의해 파일이 컴파일 된다.

Object Code(목적 코드) : 또는 목적파일이라고 불린다. 소스코드 컴파일의 결과물, 즉 컴파일된 파일

  • 프로그램이 Compiler에 의해 compile 되기 '이전'과 '이후'
  • Compile(컴파일) : 사람이 작성한 소스코드(프로그래밍 언어)를 컴퓨터가 이해할 수 있게 기계어로 해석하는 과정. (프로그래밍 언어 → 기계어)
  • Compiler(컴파일러) : 언어 번역 프로그램

32) 소프트웨어 재사용시 장/단점들

  • 소프트웨어를 재사용함으로써 얻을 수 있는 이점들
    1. 개발 시간과 비용 단축
    2. 소프트웨어 품질 및 생산성 향상
    3. 프로젝트 실패 위험 감소
    4. 시스템 구축 방법에 대한 지식 공유
  • 소프트웨어를 재사용함으로써 얻을 수 있는 문제점들
    1. 재사용할 소프트 웨어 선정 필요
    2. 시스템에 공통적으로 사용되는 요소 발견 필요
    3. 프로그램의 표준화 부족
    4. 새로운 개발 방법론 도입이 어려움
    5. 재사용을 위한 관리 및 지원 부족
    6. 기존 소프트웨어에 재사용 소프트웨어를 추가하기 어려움

33) 인터페이스 간의 통신을 위해 이용되는 테이터 포맷들

  • JSON(Javascript Object Notation)
    속성- 값 쌍 또는 "키- 값 쌍"으로 이루어진 데이터 오브젝트를 전달하기 위해 인간이 읽을 수 있는 텍스트를 사용하는 개방형 표준 포맷,  AJAX에서 많이 사용되고 XML을 대체하는 주요 데이터 포맷
  • XML(Extensible Markup Language)
    HTML의 단점을 보완한 인터넷 언어, SGML의 복잡한 단점을 개선한 특수한 목적을 갖는 마크업 언어
  • AJAX(Asynchronous Javascript And XML)
    자바스크립트를 사용하여 웹 서버와 클라이언트 간 비동기적으로 XML 데이터를 교환하고 조작하기 위한 웹 기술, XMLHttpRequest  객체를 이용해 전체 페이지를 새로 로드하지 않고 필요한 부분만 로드한다.
  • REST(Representational State Transfer)
    - 웹과 같은 분산 하이퍼미디어 환경에서 자원의 존재/상태 정보를 표준화된 http 메서드로 주고받는 웹 아키텍처(리소스, 메서드, 메시지)
    - http url을 통해 자원을 명시하고, http 메서드(POST, GET, PUT, DELETE)를 통해 해당 자원에 대한 생성, 조회, 갱신, 삭제 등의 명령을 적용할 수 있는 분산 하이퍼미디어 시스템을 위한 소프트웨어 아키텍처이다.
  • YAML
    XML, C, 파이썬, 펄, RFC2822에서 정의된 e-mail 양식에서 개념을 얻어 만들어진 '사람이 쉽게 읽을 수 있는' 데이터 직렬화 양식

34) 프로그램 설계도의 하나인 NS-Chart(Nassi-Schneiderman Chart)

  • 3가지 기본구조만으로 논리를 표현(표준화 가능)
  • Flow Chart의 최대 단점인 화살표가 표시되지 않음
  • 기본구조의 입구와 출구는 각 하나씩
  • 전체적인 알고리즘을 일목요연하게 볼 수 있음

추가 보충 설명 필요******************************


35) 스택 연산 실습

  • 순서가 A, B, C, D로 정해진 입력자료를 push, push, pop, push, push, pop, pop, pop 순서로 스택연산을 수행하는 경우 출력 결과는?

  • 입구 및 출구가 하나, A B C D 순으로 입력되었을때 출력순서는 D C B A 순
    push : 입력 pop : 출력
    push A
    push A B
    pop_ A / B
    push A C / B
    push A C D / B
    pop_ A C / B D
    pop_ A / B D C
    pop_ / B D C A

36) 정렬이란? 여러 개의 자료를 순서에 따라 나열하는 방법

  • 8개 종류 : [선택, 버블, 삽입, 쉘, 퀵, 힙, 이진병합, 버킷정렬]

 

난이도 있어서 잠시 패스~ **********************


37) 화이트박스 테스트와 블랙박스 테스트

화이트박스 테스트란?

블랙박스 테스트란?

  • 화이트박스 테스트의 종류
    1. 기초경로 검사
    2. 제어구조 검사
  • 화이트박스 테스트 검증 기준
    1.문장 검증 기준
    2.분기 검증 기준
    3.조건 검증 기준
    4.분기/조건 기준

 

  • 블랙박스 테스트의 종류
    1.동치(동등) 분할 검사
    2.경계값 분석
    3.원인-효과 검사
    4.오류 예측 검사
    5.비교검사

38) 소프트웨어 품질 관련 국제 표준인 ISO/IEC 25000

  • SW 품질 평가 통합 모델
  • SQuaRE로도 불림
  • ISO 9126, ISO 12119, ISO 14598의 3개의 표준 문서를 통합하고 재구성하여 만든 표준 문서
    - 2500n : 개요 및 품질 관리
    - 2501n : 품질 모델
    - 2502n : 품질 측정
    - 2503n : 품질 요구
    - 2504n : 품질 평가
    - 2505n : 확장 분야

39) 코드 익스펙션

  • 프로그램 소스코드를 실행하지 않고 코드 상에 잠재적인 오류/표준 미준수 결함(Defect)를 찾아내고 이를 개선하는 일련의 과정을 말한다.
  • 결함 뿐만 아니라 모든 것이 표준대로 되어 있는 지 확인하기 위한 검토
  • 표준이나 명세서에 서술한 내용과 비교하여 편차와 에러를 식별하기 위해 산출물을 근거로 수행하는 검사
  • 정적 테스트에 가깝다.

40) 프로젝트 모델링 기법들

  • Critical Path Method(CPM, 임계 경로법)
    - 네트워크를 중심의 논리적 구성, 시간과 비용 문제를 취급
    - 프로젝트를 일정 기일 내에 완성시키고 해당 계획이 원가의 최소값에 의해 보증되는 등의 최적 스케줄을 구하는 관리 방법(주로 건설과 설계를 포함하는 복잡한 일에 이용되어 효과를 발휘한다)
  • Work Breakdown Structure(업무 분업 구조)
    - 성과 목표 완전 달성을 위한 프로그램
    - 산업 관리 간접 부문의 기술 혁신형 업무(목표를 설정하여 소정 기간, 자원 내에서 달성하는 형태의 업무)를 효과적으로 수행하기 위한 수법
  • Waterfall Model(폭포수 모델)
    - S/W 개발 생명주기에 기반하고 있는 소프트웨어 개발 기법 중 하나.
    - 한 번 떨어지면 다시 거슬러 올라갈 수 없는 폭포수처럼, 각 개발 단계를 확실히 매듭 짓고 다음 단계로 넘어간다는 의미