Post

Software Engineering

Software Engineering

PART 1. Software 공학

1. SW 정의, 분류, 특성

정의

컴퓨터를 이용, 문제 해결 용이한 컴퓨터 활용 및 운용 기술

분류

응용 SW, 시스템 SW, 주문형 SW, 패키지 SW, 임베디드 SW

특성

비기시성, 비마모성, 복잡성, 복제성, 변경성, 순응성, 무형성, 개발성

2. SW 개념, SW 유형

SW 개념

사용자로 하여금 컴퓨터를 숩고 효율적으로 사용하도록 도와주거나, 컴퓨터를 사용하여 주어진 문제를 용이하게 해결하기 위해 사용되는 컴퓨터 활용 및 운용 기술

SW 유형

-

3. SW 위기와 해결방안

SW 위기의 배경

전문가 부족, SW 개발 방식의 비효율성, SW 개발 비용 증가, SW 품질 저하

SW 위기 해결 방안

  • 공학적 접근: 객체지향 방법론, CBD(Component Based Development), 프로젝트 관리 기법
  • 자동화 도구 활용: CASE, Git
  • 표준화: Data 표준화, Reuse 체제 구축
  • 품질 보증 체제: ISO, CMMI, SPICE

4. SW 공학 정의, 구성요소, 원리

정의

과학적 지식(공학, 과학, 수학)을 이용하여 SW를 개발하는 방법론

구성요소

  • 도구: SW 개발에 필요한 도구
  • 언어

SW공학 원리

정형성과 엄격, 관심사의 분리, 모듈화, 추상화, 변화예측, 일반화, 점진화

5. IEEE 산하 SW공학 표준 위원회에서 SW 공학의 근본 지식을 규정한 SWEBOK(Software Engineering Body of Knowledge)

6. SW산업 육성 전략

R&D 투자 확대, SW 인력 양성, SW 생태계 개선, 국제 협력 강화, 선택과 집중

7. 모듈화

개요

시스템을 분해하고 추상화를 통해 S/W 제품 성능을 향상시키는 기법

결합도의 종류 (낮->높)

자료 결합도: 모듈 간에 순수한 데이터만 전달 스탬프 결합도: 구조체나 객체 전체를 전달하지만 실제로는 일부 필드만 사용 제어 결합도: 모듈 간에 논리적인 제어 정보(flag, bool 등)를 주고받음 외부 결합도: 모듈이 외부 환경 (파일, DB, 디바이스 등)을 공유 공유 결합도: 공통 데이터 영역 (Global 변수 등)을 여러 모듈이 공유 내용 결합도: 한 모듈이 다른 모듈의 내부 로직에 직접 접근

응집도의 종류 (높->낮)

기능적: 하나의 기능을 완전히 수행하기 위한 작업들만 포함 순차적: 하나의 기능 결과가 다음 기능의 입력이 되는 경우 통신적: 동일한 데이터를 사용하거나 동일한 입출력 형식을 사용하는 기능들을 묶음 절차적: 순서에 따라 수행되어야 하는 기능들을 묶음 시간적: 특정 시간에 동시에 실행되어야 할 기능을 묶음 논리적: 비슷한 범주의 기능들을 하나의 모듈로 묶되, 제어 변수에 따라 분기 처리 우연적: 관련 없는 기능들이 하나의 모듈에 우연히 묶여 있음

결합도와 응집도의 각 단계와 특징

8. Software 설계 원리에서 분할과 정복(Divide and Conquer) 에 대해 설명

개요

문제를 작은 단위로 나누어 해결하는 기법

9. 소프트웨어의 난독화(Obfuscation)에 대해 설명

정의

소스코드, 바이너리 코드를 분석하기 어렵게 만드는 소프트웨어 보안 기법

필요성

역공학 방지, 해킹 방지, 국가 자산 보호

역공학이란

어셈블리언어를 디스어셈블러나 디컴파일러를 이용하여 원래 소스코드로 복원하는 과정

난독화 방안

NOP(No Operation) 삽입, 압축, 캡슐화, 암호화 *성능이 저하되거나 디버깅이 어려워질 수 있음

10. SW 재사용(Reuse)의 활용, 목적, 구현방법에 대해 설명

개발관련 자산을 표준화하여 반복사용, 생산성을 향상시키고 품질을 높임

11. SW 관리를 위한 기준선(Baseline)에 대해 설명

소프트웨어 개발 및 관리 과정에서 특정 시점에 공식적으로 승인된 산출물의 스냅샷(고정본)을 의미. 기준선은 소프트웨어 변경을 통제하고 추적 가능하게 만드는 핵심 개념.

12. Module, Component, Service에 대해 각각 설명하고 비교

  • Module: 프로그램의 기능을 논리적으로 분리한 작은 코드 단위로, 재사용성과 유지보수성을 높이기 위한 단위. 일반적으로 하나의 파일이나 클래스, 또는 라이브러리 단위일 수 있음. (ex: Java의 패키지, C의 헤더 파일, Python의 .py 파일, Node.js의 CommonJS/ES6 모듈 등)
  • Component: 컴포넌트는 모듈보다 좀 더 큰 단위의 기능 블록으로, 독립적으로 배포, 업그레이드, 교체가 가능한 소프트웨어 단위. 일반적으로 GUI 컴포넌트, 백엔드 컴포넌트 등 특정 기능을 캡슐화함. (ex: React의 컴포넌트, Java의 EJB, Angular의 컴포넌트 등)
  • Service: 서비스는 특정 비즈니스 기능 또는 작업 단위를 제공하는 독립적인 실행 단위. 서비스는 컴포넌트보다도 높은 수준에서, 네트워크를 통해 호출 가능한 경우도 많다. (ex: 마이크로서비스)

13. 임베디드(Embedded) Software에 대해 설명하시오

개요

특정 기능을 수행하기 위해 하드웨어에 내장되어 동작하는 소프트웨어

특징

소형/경량, 하드웨어 의존성, 실시간성

패키지 소프트웨어 vs 임베디드 소프트웨어

패키지 소프트웨어는 범용 하드웨어에서 동작하는 반면, 임베디드 소프트웨어는 특정 하드웨어에 맞춰 설계됨

14. 역공학(Reverse Engineering)과 재공학(Reengineering) 에 대해 설명

역공학 vs 재공학

역공학은 기존 시스템을 분석하여 설계 및 구현을 이해하는 과정이며, 재공학은 기존 시스템을 개선하거나 새로운 시스템으로 변환하는 과정


PART 2. Software 개발 모형

15. SDLC(Software Development Life Cycle)에 대해 설명하시오

정의

소프트웨어 개발을 위한 일련의 단계와 절차를 정의한 모델 (표준화된 프로세스)

SW 생명주기의 구성

요구사항 분석, 설계, 구현, 테스트, 배포, 유지보수

SW 생명주기 대표 모델

폭포수 모델, 프로토타입 모델(원형 모델), 나선형 모델, 진화형 모델(점증적 모델), Agile 모델 등

모델 선정 기준

규모와 성격, 시간과 비용, 방법과 도구, 개발 통제 수단과 산출물 인도

16. 폭포수(Waterfall) 모델에 대해 설명하시오

정의

하향식 단계별 개발 방식, 순차적 접근법

장점

관리(일정, 비용, 산출물)가 용이함 단계별 전체 진행 일정 예측 가능

단점

요구사항 변경에 유연하지 않음
초기 단계에서의 오류 발견이 어려움
후속 단계에서의 오류 수정 비용이 큼

17. 프로토타입(Prototype) 모델

정의

사전 프로토타입 모델을 제작하여 사용자의 피드백을 받아 요구사항을 명확히 하는 방법

절차

요구분석 -> (프로토타입 설계 -> 프로토타입 제작 -> 프로토타입 평가 -> 요구사항 수정) * n -> 요구사항 확정 -> 구현 -> 테스트

장점

사용자와의 의사소통이 용이해 요구사항을 명확히 할 수 있음
초기 단계에서의 오류 발견이 용이함

단점

프로토타입 제작에 시간과 비용이 소요됨
프로토타입이 완전한 시스템으로 오해될 수 있음

18. 나선형(Spiral) 모델

정의

위험분석 중심의 반복적 개발 모델

절차

“계획 -> 위험 분석 -> 개발/구현 -> 평가 및 피드백”의 4단계를 반복함

장점

정확한 요구사항 분석을 통해 위험부담 감소
품질확보가 용이함으로 대규모 시스템 개발에 적합

단점

개발 장기화, 비용 증가 가능성,
위험 관리 능력이 프로젝트 성공에 큰 영향을 미침 <br로 프로젝트 관리가 복잡함

19. 증분형(Incremental)과 진화형(Evolutionary) 모델에 대해 설명

정의

증분형: 요구사항 일부분 -> 제품 일부분 -> 반복개발 -> 최종 제품 완성 (병렬 개발이 가능)
진화형: 핵심 기능 개발 -> 각 구성요소 지속적 발전 -> 최종 제품 완성 (프로토타입을 만들고 점진적으로 발전시킴, 요구사항 변경에 유연함)

20. RAD(Rapid Application Development) 모델

정의

빠른 개발을 위한 프로토타입 모델

21. Clean Room 개발 모델의 3가지 Box구조에 대해 설명

Clean Room 의 정의

“결함 없는 소프트웨어 개발”을 목표로 하는 고신뢰성 중심의 개발 모델. 초기 단계부터 정확성을 검증하여, 결함을 사전에 제거하는 것을 목표로 하는 개발 모델

Blax Box 분석 기법

내부 동작은 알지 못하고, 외부에서 입력과 출력만을 분석하여 소프트웨어의 동작을 이해하는 기법

State Box 분석 기법

시스템 내부 상태와 상태 전이만을 분석하여 소프트웨어의 동작을 이해하는 기법

Clear Box 분석 기법 (White Box와 유사)

로직 기반 분석 기법으로, 소프트웨어의 내부 동작을 분석하여 소프트웨어의 동작을 이해하는 기법

22. SDLC 모델 선정기준과 각 모델의 상관관계에 대해 설명

SDLC 모델 선정기준

요구사항의 명확성, 시스템의 규모, 개발팀의 경험, 프로젝트의 위험도, 개발 환경과 도구

SDLC 모델간의 상관관계

폭포수 모델 (요구사항 도출 어려움) -> 프로토타입모델 (반복적 개념 부족) -> 나선형 모델 (정형성 부족) -> 클린룸 모델

23. SDLC(Software Development Life Cycle)과정에서 구현 단계에서의 Action Item(Activity)과 일정 지연이 발생되었을 때 PM(Project Manager)입장에서의 대처방안

-

24. SDLC 과정에서 필요한 Review, Inspection, Walkthrough에 대해 설명

Review, Inspection, Walkthrough의 목적

Review: 요구사항 누락, 불일치, 불완전, 모호함등을 팀자하여 제거하는 검토회의
Inspection: 특정 주제에 대하여 세부적으로 검토하는 회의
Walkthrough: 요구사항명세서의 전반적인 면을 검토하는 회의

25. 전통적인 SW 개발 모델과 OSS(Open Source Software) 개발 모델의 차이점에 대해 설명

전통적인 SW 개발: 분석, 설계, 구현, 테스트, 배포의 과정을 순차적으로 접근 (폭포수 모델, 프로토타입 모델 등) OSS 개발: In-House 개발과는 달리, 공개된 소스코드를 기반으로 개발자들이 자발적으로 참여하여 소프트웨어를 개발하는 모델.


PART 3. Software 개발 방법론

26. SW 개발 방법론에 대해 설명

SW개발 방법론의 정의

소프트웨어 개발에 관한 정형화된 방법과 절차, 도구등이 공학적인 기법으로 체계화된 표준이론

SW개발 방법론의 진화

구조적기법 -> 정보공학 -> 객체지향 -> 컴포넌트 기반

SW개발 방법론의 구성요소 및 종류

작업절차, 작업방법, 산출물, 관리, 기법, 도구

개발방법론 비교

  • 구조적: 기능 중심, 절차적 흐름 → 과거의 전통적 방식
  • 정보공학: 데이터 중심, 대규모 시스템 분석에 강점
  • 객체지향: 객체 중심, 유지보수와 확장에 강함 (요즘 대세)
  • 컴포넌트 기반: 잘게 나눈 독립 모듈 조합 → 재사용 극대화

27. Agile 방법론에 대해 설명

정의

절차보다는 사람이 중심이 되는 방식으로, 변화에 유연하고 신속하게 적응하면서 효율적으로 소프트웨어를 개발하는 방법론

특징

변화 적응, 사람 중심, 고객과의 협력, 지속적인 피드백, 짧은 개발 주기, 팀워크 강조

종류

XP(Extreme Programming), Scrum, DSDM(Dynamic Systems Development Method), FDD(Feature Driven Development), Crystal

전통적 방법론과의 차이점

전통적 방법론은 계획과 문서화에 중점을 두는 반면, Agile 방법론은 사람과 상호작용, 고객과의 협력, 변화에 대한 적응을 중시함

28. Agile 방법론의 정의, 특징, 장단점을 설명

정의

절차보다는 사람이 중심이 되는 방식으로, 변화에 유연하고 신속하게 적응하면서 효율적으로 소프트웨어를 개발하는 방법론

특징

변화 적응, 사람 중심, 고객과의 협력, 지속적인 피드백, 짧은 개발 주기, 팀워크 강조

장단점

장점: ROI(Return On Investment, 투자대비효과) 극대화, 고객과의 협력으로 품질 향상, 팀워크와 의사소통 증진
단점: 문서화 부족, 요구사항 변경에 따른 업무량 증가, 감리 대응 어려움, 개발자의 피로감

29. 모바일 앱 개발의 특성과 이슈에 대해 설명하고, 애자일 기반 모바일 앱 개발 프로세스에 대해 설명

정의

모바일 앱 개발은 스마트폰, 태블릿 등 모바일 기기에서 실행되는 애플리케이션을 개발하는 과정

특징

다양한 플랫폼과 기기, 제한된 자원(메모리, 배터리 등), 사용자 경험(UX) 중시, 다양한 네트워크 환경

개발 이슈

플랫폼 호환성, 신규 OS와 기존 개발 환경의 호환성, 잦은 OS 업데이트, App 등록 기간 소요, test 환경 구축 어려움(기기 다양성)

30. TDD(Test Driven Development) 개발 방법론에 대해 설명

정의

test를 먼저 작성하고, 그에 맞춰 테스트를 통과하는 코드를 작성, 리팩토링하며 진화시켜 나가는 개발 방법론

31. SPL(Software Product Line) 개발 방법론에 대해 설명

정의

SW 재사용을 극대화 방안, core asset을 미리 개발하여, 실제 개발 시점에 core asset을 조합하여 제품을 개발하는 방법론

32. XP(eXtreme Programming)에 대해 설명

정의

요구사항의 변화에 유연하게 대응하고, 고객과의 협력을 통해 품질 높은 소프트웨어를 개발하는 방법론

특징

고객과의 협력, 짧은 개발 주기, 지속적인 피드백, 팀워크 강조

4가지 핵심 가치

용기, 단순성, 소통, 피드백

12가지 실천 방법

Pair Programming, Test First Programming, Continuous Integration, Refactoring, Simple Design, Collective Code Ownership, Coding Standards, On-Site Customer, Sustainable Pace, 40-Hour Week, Metaphor, Planning Game

33. RUP(Rational Unified Process) 에 대해 설명

반복적이고 점진적인 개발 방법론

34. XP(eXtreme Programming) vs RUP(Rational Unified Process) 비교

구분RUPXP
개발 접근법반복적, 점진적반복적, 점진적
요구사항명확히 정의고객과의 피드백을 통해 유연하게 수정
문서화문서화 강조문서화 최소화
팀규모대규모 팀에 적합소규모 팀에 적합
프로세스엄격한 단계와 절차유연하고 단순한 접근

35. Scrum 개발 방법론에 대해 설명

개요

Agile 방법론의 일종으로, 팀원 간의 협업과 의사소통을 통해 소프트웨어를 개발하는 방법론

특징

짧은 개발 주기(Sprint), 스크럼 미팅, 역할 분담(스크럼 마스터, 제품 책임자, 팀원), 백로그 관리, 지속적인 피드백 스프린트 회고, 스프린트 리뷰 스프린트 계획 회의, Daily Scrum

36. MDD(Model Driven Development)

시스템의 설계와 구현을 모델을 통해 추상화하고, 그 모델로부터 자동으로 코드를 생성하는 것을 목표으로 하는 개발 방법론

37. MDA(Model Driven Architecture)

모델 중심 아키텍처로, MDD의 발전된 형태. 소프트웨어 아키텍처와 모델링을 강조하는 방법론으로, 모델을 사용해 애플리케이션 아키텍처를 설계하고, 자동으로 다양한 플랫폼에 맞는 코드를 생성하는 것을 목표로 함.
MDA는 모델을 플랫폼 독립적인 형식으로 정의하고, 이 모델에서 플랫폼 특화된 코드로 변환하는 방식.

38. DevOps (Development + Operations) 개발 방법론에 대해 설명

개발과 운영을 통합하여 소프트웨어 개발과 운영의 효율성을 높이는 방법론

39. Kanban SW 개발 방법론에 대해 설명

작업을 시각화하고, 진행 상태를 추적하며, 팀의 작업 흐름을 최적화하는 데 초점을 맞추는 프로세스 관리 기법

vs Scrum

작업 흐름:
칸반은 지속적인 작업 흐름에 초점을 맞추며, 각 작업 항목을 시각적으로 추적. 작업 항목이 끝날 때마다 새로운 작업을 시작함.
스크럼은 스프린트라는 고정된 주기 내에서 작업을 끝내는 것을 목표로 하고, 그 안에서 계획과 실행을 반복함.

유연성:
칸반은 작업 항목을 계속 추가할 수 있어 변화에 빠르게 대응할 수 있다.
스크럼은 정해진 기간 동안 작업을 끝내는 고정된 스프린트가 있으므로, 변화에 대응하기 위한 재조정이 필요할 수 있다.

팀 회의:
칸반은 정기적인 회의가 없고, 필요 시 회고와 개선이 이루어진다.
스크럼은 다양한 정기 회의(일일 스크럼, 스프린트 계획 회의 등)를 통해 팀의 진척 상황을 공유하고 피드백을 받는다.

40. CASE(Computer Aided Software Engineering)에 대해 설명

개요

소프트웨어 개발의 모든 과정—요구 사항 분석, 설계, 개발, 테스트, 유지 보수 등을 지원하고 자동화하는 도구들을 통칭하는 개념

목적

생산성 향상, 품질 향상, 유지 보수 용이성, 문서화 자동화

Case의 유형

Upper CASE: 요구사항 분석, 설계 단계에서 사용되는 도구들 (ex: UML, DFD, ERD 작업 도구) Lower CASE: 구현, 테스트, 유지 보수 단계에서 사용되는 도구들 (ex: IDE, 디버거, 테스트 도구) Integrated CASE: 상기 모든 단계를 지원하는 도구들 (ex: Eclipse, Visual Studio (종합 개발 환경))

41. 린(Lean) SW 개발 방법론에 대해 설명

효율성과 가치 창출에 중점을 두고 불필요한 낭비를 최소화하며 소프트웨어 개발을 최적화하려는 접근 방식 (필요한 것만 만들고, 필요한 만큼만 만드는 것)


PART 4. UML(Unified Modeling Language)

  1. Modeling
    • 정의, 목적, 필요한 이유

      구축할 시스템의 모습, 사양, 행동을 명세화하고 시각화, 문서화하는 과정

  2. UML(Unified Modeling Language)
    • 정의, 특징, 개발 방법론과의 관계

개발과정에서 생성되는 산출물을 명세화하고 시각화, 문서화하기 위하여 사용되는 표준화된 언어 플랫폼 독립적인 모델링 언어로 (방법론 x) 개발과정에서 의사소통을 위한 표준화된 언어 생각과 행위를 구조화하는 명시적인 방법

  1. SW공학에서 모델링의 개념과 UML이 필요한 이필

    이해 당사자들 사이의 원활한 의사소통 구조와 행위를 명시적으로 표명, 분석/설계의 문서화.

  2. UML(Unified Modeling Language)의 구성요소

    사물, 관계, 다이어그램으로 구성

  3. UML의 각 구성요소의 세부 내용

  4. 모델링 vs 프로그래밍

  5. UML의 4+1 모형
    • 개요
    • 4+1 view 적용 과정
  6. 4+1 모형이 SDLC(Software Development Life Cycle)과 어떻게 연관되는지 설명

  7. UML 관계 종류
    • 종류 + 예시
  8. UML 다이어그램
  9. -
  10. -
  11. 시퀀스 다이어그램
    • 정의, 구성
  12. -

  13. UML2.0
    • 정의
  14. -
  15. -

  16. UML 의 확장 메커니즘

  17. UML의 스테레오 타입
    • 정의, 종류
  18. -

  19. UML 연관(Association) 관계, 방향성이 있는 연관(Directed Association) 관계

  20. UML 일반화 관계
    • 예시 및 설명, coding
  21. UML 실제화 관화
    • 예시 및 설명, coding
  22. UML 의존 관계
    • 예시 및 설명, coding

PART 5. 디자인 패턴(Design Pattern)

  1. 디자인 패턴(Design Pattern)
    • 정의
    • 특징
    • 유형
  2. 디자인 패턴의 종류와 각 패턴 설명, 활용 예 | 구분 | 종류 | 설명 | 예시 | |—|—|—|—| | ? | ? | ? | ? |

  3. Prototype 패턴
    • 개념, class diagram, 예시
  4. Singleton 패턴
    • 개념, class diagram, 예시
  5. 객체 지향 - 추상화
    • 추상화의 정의
    • 구체화의 정의
    • 추상 class 사용한 코드 작성
  6. Abstract Factory 패턴
    • 개념, class diagram, 예시
  7. Iterator 패턴
    • 개념, 예시
  8. Iterator 패턴을 사용해 Factory Method 패턴을 구현.

  9. Adapter 패턴

PART 6. 객체 지향 언어

  1. 객체지향
    • 개념
    • 구성요소
    • 객체(Object), 클래스(Class), 기능(Method, Message), 속성(Attribute) 에 대해 각각 설명
  2. 상속 (Inheritance)에 대한 정의, 예시
  3. 추상화 (Abstraction)에 대한 정의, 예시
  4. JAVA 언어
    • 개요, 특징
  5. JAVA 주요 구현 분야와 개발 환경
    • 주요 구현 분야 | 구분 | 분야 | 설명 | |—|—|—| | ? | ? | ? |
  • 개발 환경
  1. JAVA 특징, 실행순서
    • java 언어의 특징
    • java 프로그램의 실행순서
  2. JVM(Java Virtual Machine)
    • 개요
    • Jvm의 내부 구조
  3. API(Application Programming Interface)와 JAPI(Java API)
    • API 정의, 특징
    • JAPI 정의, 특징
    • JAPI의 종류
  4. 객체지향 설계원칙
    • 객체지향 특징
    • 객체지향 설계원칙 종류 및 실생활 예시
  5. 객체지향 언어
    • 특징
    • 설계원칙
    • vs 구조적 프로그래밍
    • 접근제어자
  6. 객체지향언어의 특징

  7. 오버라이딩, 오버로딩
    • 각각의 정의, 예시
  8. -
  9. Static Linking vs Dynamic Linking | 구분 | Static Linking | Dynamic Linking | |—|—|—| | 특징 | ? | ? | | 장단점 | ? | ? |

  10. AOP(Aspect Oriented Programming)
    • 개요, 특징

7. 아케텍처 스타일

  1. IEEE 1471
    • 개요
  2. MVC(Model-View-Controller) 아키텍처
    • 개요, 특징
  3. 저장소(Repository) 아키텍처
    • 개요, 특징
  4. 계층형 (Layered) 아키텍처
    • 개요, 특징
  5. 파이트 필터 (Pipe and Filter) 아키텍처
    • 개요, 특징
  6. PHP(Personal Home Page, Hypertext Preprocessor)
    • 개요
    • 동작원리
    • 특징
    • vs ASP, JSP
  7. P2P(Peer to Peer)
    • 개요
  8. -
  9. -

PART 8. OSS(Open Source Software)와 License의 종류

PART 9. Project Management

PART 10. Process와 Product 검증에 대한 국제 표제

PART 11. 품질관리

PART 12. 기성고 관리

This post is licensed under CC BY 4.0 by the author.