본문 바로가기
  • 문과생의 백엔드 개발자 성장기
|Developer_Study/정보처리기사

[정보처리기사 실기] 1과목 - 요구사항 확인

by 케리's 2023. 1. 6.

00. 소프트웨어 공학 

1) 소프트웨어 공학

소프트웨어 위기를 극복하고 효율적으로 품질 높은 소프트웨어를 개발하기 위한 학문

 

2) 소프트웨어 공학 3R

완성된 소프트웨어를 기반으로 역공학, 재공학, 재사용을 통해 소프트웨어의 생산성을 극대화 하는 기법

 

(1) 역공학 (Reverse Engineering) 

  • 기존 개발된 시스템을 CASE도구를 이용하여 사양서, 설계서 등의 문서로 추출하는 작업 
  • 개발 단계를 역으로 올라가 기존 개발된 시스템의 코드나 데이터로부터 설계 명세서나 요구 분석서 등을 도출하는 작업
 

(2) 재공학 (Re-Engineering) 

  • 기존 시스템을 널리 사용되는 프로그래밍 표준에 맞추거나 고수준의 언어로 재구성하고, 이기종에서 사용할 수 있도록 변환하는 작업
  • 현 시스템의 유지보수성 향상 (예방 유지보수)
  • 과정 
    • 분석 (Analysis) → 재구성 (Restructuring) → 역공학 (Reverse Engineering) → 이관 (Migration)

(3) 재사용(Reuse)

  • 이미 개발되어있는 소프트웨어의 전체 또는 일부분을 다시 사용

 

01.  요구사항 확인

 

1) 현행 시스템 파악 

현재 개발하고자 하는 시스템의 개발 범위를 설정하기 위해 구성과 기능, 연계정보, 소프트웨어, 하드웨어 네트워크 구성을 파악하는 과정 

 

⭕️ 현행 시스템 파악 절차

단계 절차 설명
1단계 구성/기능 및 인터페이스 파악 구성 : 조직의 주요 업무를 처리하는 기간 업무와 이를 지원하는 지원업무 구분하여 파악
기능 : 단위 업무 시스템이 현재 제공하고 있는 기능 파악
인터페이스 : 단위 업무 시스템이 다른 시스템과 주고받는 데이터의 종류, 데이터 형식, 프로토콜, 연계유형, 주기파악 
2단계 아키텍처 및 소프트웨어 구성 파악 아키텍처 : 기간 업무를 수행하기 위해 계층별로 어떠한 기술 요소들을 사용하고 있는지 최상위 수준에서 파악
소프트웨어 구성 : 단위 업무 시스템의 업무 처리를 위해 설치되어 있는 소프트웨어들의 제품명, 용도, 라이센스 적용팡식, 라이센스 수 파악 (Apache Tomcat, MySQL)
3단계 하드웨어 및 네트워크 구성 파악 하드웨어 : 서버의위치, 운용서버의 주요사양 과 수량, 이중화 구현여부 (AP서버, DB서버)
네트워크 : 어떤 네트워크 장비 사용하여 구성되어있는지 파악 (IPS, 라우터)

* IPS(Intrusion Prevention System : 침입 차단 시스템)

네트워크에 대한 공격이나 침입을 실시간 적으로 차단하고 유해 트래픽에 대한 조치를 능동적으로 처리하는 시스템

 

 


2) 소프트웨어 아키텍처

소프트웨어 아키텍처는 여러가지 소프트웨어 구성요서와 그 구성요소가 가진 특성중에서 외부에 드러나는특성, 구성요소간의 관계를 표현하는 시스템의 구조나 구조체

 

⭕️ 소프트웨어 아키텍처 4+1 뷰

고객의 요구사항을 정리해 놓은 시나리오를 4개의 관점에서 바라보는 소프트웨어적인 접근방법이다.

 

 

설명
유스케이스뷰
(Usecase View)
유스케이스 또는 아키텍처를 도출하고 설계하며 다른 뷰를 검증하는데 사용되는 뷰
* 사용자, 설계자, 개발자, 테스트 관점
논리뷰 (Logical View) 시스템의 기능적 요구사항이 어떻게 제공되는지 설명해주는 뷰
* 설계자, 개발자 관점
프로세스뷰 (Process View) 시스템의 비기능적인 속성으로서 자원의 효율적인 사용, 병행실행, 비동기, 이벤트 처리등 표현한 뷰
* 개발자, 시스템 통합자 관점
구현뷰 (Implementation V-) 개발 환경 안에서 정적인 소프트웨어 모듈의 구성을 보여주는 뷰
컴포넌트 구조와 의존성을 보여주고 컴포넌트에 관한 부가적인 정보 정의
배포뷰 (Deployment View) 컴포넌트가 물리적인 아키텍처에 어떻게 배치되는가를 매핑해서 보여주는 뷰

 

 

⭕️ 소프트웨어 아키텍처 패턴

소프트웨어 아키텍처 패턴은 소프트웨어를 설계할 때 참조할 수 있는 전형적 해결방식

 

유형 설명
계층화패턴 (Layered Pattern) 계층화 패턴은 시스템을 계층으로 구분하여 구성하는 패턴
서로 마주보는 두개의 계층 사이에서만 상호작용 이루어짐
클라이언트 - 서버 패턴 
(Client-Server Pattern)
클라이언트-서버 패턴은 하나의 서버와 다수의 클라이언트로 구성된 패턴
사용자가 클라이언트를통해 서버에 서비스를 요청하면 서버는 클라이언트에게 서비스를 제공
(ex, 웹브라우저와 웹서버)
파이프-필터 패턴
(Pipe - Filter Pattern)
파이프-필터패턴은 데이터 스트림을 생성하고 처리하는 시스템에서 사용가능
서브시스템이 입력 데이터를 받아 처리하고 결과를 다음 서브시스템으로 넘겨주는 과정을 반복
필터 컴포넌트는 재사용성이 좋고 추가가 쉽기 때문에 확장이 용이 ( ex, 이미지 처리 파이프라인)
브로커패턴 (Broker Pattern) 분리된 컴포넌트들로 이루어진 분산 시스템에서 사용되고 이 컴포넌트들은 원격 서비스 실행을 통해 상호작용이 가능한 패턴
컴포넌트간의 통신을 조정하는 역할 수행
브로커라고하는 구성요소가 클라이언트라고 하는 다른 구성요소 사이에서 중개자 역할을 하여 공유 (ex, 주식거래플랫폼)
모델-뷰-컨트롤러
(MVC; Model View Controller Pattern)
MVC패턴, 대화형 애플리케이션을 모델, 뷰, 컨트롤러 3개의 서브시스템으로 구조화하는 패턴

 

⭕️ 소프트웨어 아키텍처 비용 평가 모델 

소프트웨어 아키텍처 비용 평가 모델은 아키텍처 접근법이 품질 속성에 미치는 영향을 판단하고 아키텍처의 적합성을 평가하는 모델이다.

(소프트웨어 시스템 개발 및 유지 비용을 추정하는 데 사용되는 기술입니다)

예를 들어 고객 데이터를 저장하기 위해 데이터베이스가 필요한 소프트웨어 프로젝트를 생각해 보자.

SAAM을 사용하면 RDBMS(관계형 데이터베이스 관리 시스템)와 NoSQL 데이터베이스 관리 시스템을 사용하여 데이터베이스를 개발하는 비용을 추정할 수 있다.
ATAM을 사용하여 개발 비용 대 확장성 증가의 잠재적 이점과 같은 각 옵션의 장단점을 평가한다.
CBAM을 사용하면 비용과 이점을 비교하여 가장 비용 효율적인 옵션을 결정할 수 있다.
종류 설명
SAAM
(Software Architecture Analysis Method)
변경 용이성과 기능성에 집중,
평가가 용이하여 경험이 없는 조직에서도 활용가능한 비용평가 모델
아키텍처 및 개발중에 내린 설계 결정을 기반으로 소프트웨어 시스템의 비용을 평가
ATAM
(Architecture Trade-off Analysis Method)
아키텍처 품질 속성을 만족시키는지 판단 및 품질 속성들의 이해 상충관계까지 평가하는 모델
다양한 아키텍처 대안의 비용과 이점을 평가하는 위험 기반 접근 방식.
CBAM
(Cost Benefit Analysis Method)
ATAM 바탕의 시스템 아키텍처 분석 중심으로 경제적 의사 결정에 대한 요구를 충족하는 비용 평가 모델
다양한 아키텍처 대안의 비용과 편익을 평가하여 가장 비용 효율적인 옵션을 결정합니다.
ADR (Active Design Review) 소프트웨어 아키텍처 구성요소 간 응집도를 평가하는 모델
ARID
(Active Revies for Intermediate Designs)
전체 아키텍처가 아닌 특정 부분에 대한 품질 요소에 집중하는 비용 평가 모델

3) 디자인패턴

디자인 패턴은 소프트웨어 공학의 소프트웨어 설계에서 공통으로 발생하는 문제에 대해 자주 쓰이는 설계 방법을 정리한 패턴이다.

 

⭕️ 디자인 패턴 유형 

구분 유형 설명
목적 생성 객체 인스턴스 생성에 관여, 클래스 정의와 객체 생성 방식을 구조화, 캡슐화를 수행하는 패턴
구조 더 큰 구조형성 목적으로 클래스나 객체의 조합을 다루는 패턴
행위 클래스나 객체들이 상호작용하는 방법과 역할 분담을 다루는 패턴
범위 클래스 클래스간 관련성 (상속관계를 다루는 패턴), 컴파일 타임에 정적으로 결정
객체 객체간 관련성을 다루는 패턴, 런타임에 동적으로 결정

 

 

⭕️ 디자인 패턴 종류

생성패턴 : 생빌프로팩앱싱

패턴 설명
빌더 (Builder) ' 복잡한 인스턴스를 조립하여 만드는 구조, 복합 객체를 생성할 때 객체를 생성하는 방법과 객체를 구현하는 방법을 분리함으로써 동일한 생성 절차에서 서로다른 표현 결과를 만들 수 있는 디자인 패턴
' 생성과 표기를 분리해서 복잡한 객체를 생성 (.builder())
프로토타입
(Prototype)
' 처음부터 일반적인 원형을 만들어놓고 그것을 복사한 후 필요한 부분만 수정하여 사용하는 패턴
' 기존 객체를 복제함으로써 객체를 생성 (.clone())
팩토리 메서드 
(Factory Method)
'상위 클래스에서 객체를 생성하는 인터페이스를 정의하고 하위 클래스에서 인스턴스로 생성하도록 하는방식
'상위클래스에서는 인스턴스를 만드는 방법만 결정하고, 하위 클래스에서 그 데이터의 생성을 책임지고 조작하는 함수들을 오버라이딩하여 인터페이스와 실제 객체를 생성하는 클래스를 분리할 수 있는 특성을 갖는 패턴
'생성할 객체의 클래스를 국한하지 않고 객체를 생성
추상팩토리
(Abstract Factory)
'구체적인 클래스에 의존하지 않고 서로 연관되거나 의존적인 객체들의 조합을 만드는 인터페이스를 제공하는 패턴
' 이 패턴을 통해 생성된 클래스에서는 사용자에게 인터페이스를 제공하고, 구체적인 구현은 Concreate Product 클래스에 이루어지는 특징을 갖는 패턴
' 동일한 주제의 다른 팩토리를 묶음
(ex,CarFactory - 부품생성 LuxuryCarFactory, EconomyCarFactory - 부품반환)
싱글톤
(Singleton)
'전역 변수를 사용하지 않고 객체 하나만 생성하도록 하며, 생성된 객체를 어디서든지 참조할 수 있도록 하는 디자인 패턴
'한 클래스에 한 객체만 존재하도록 제한

팩토리 메서드 패턴은 단일 유형의 개체를 만드는 데 중점을 두는 반면 추상 팩토리 패턴은 관련 개체의 패밀리를 만드는 데 중점을 둡니다.

 

구조패턴 : 구브데퍼플프록컴어

패턴 설명
브릿지 (Bridge) '기능의 클래스 계층과 구현의 클래스 계층을 연결하고, 구현부에서 추상계층을 분리하여 추상화된 부분과 실제 구현 부분을 독립적으로 확장할 수 있는 디자인 패턴
'구현뿐만 아니라, 추상화된 부분까지 변경해야 하는경우 활용
데코레이터(Decorator) '기존에 구현되어 있는 클래스에 필요한 기능을 추가해 나가는 설계 패턴
' 기능 확장이 필요할 때 객체간의 결합을 통해 기능을 동적으로 유연하게 확잘할 수 있게 해주어 상속의 대안으로 사용하는 디자인 패턴
'객체의 결합을 통해 기능을 동적으로 유연하게 확장 (원래 코드를 수정하지 않고 기능 추가)

Coffee myCoffee = new Milk(new Sugar(new SimpleCoffee())); System.out.println("Cost of the coffee: $" + myCoffee.cost());
퍼사이드(Facade) '복잡한 시스템에 대하여 단순한 인터페이스를 제공함으로써 사용자와 시스템간 또는 다른 시스템과의 결합도를 낮추어 시스템 구조에 대한 파악을 쉽게 하는 패턴
' 오류에 대해 단위별로 확인할 수 있게 하며 사용자의 측면에서 단순한 인터페이스 제공을 통해 접근성을 높일 수 있는 디자인 패턴
' 통합된 인터페이스 제공 (ATM기 - ATM 기계에는 카드 판독기, 디스펜서 및 키패드와 같은 여러 구성 요소가 있습니다. 사용자는 하위 시스템의 기본 복잡성을 숨기고 통합 인터페이스를 제공하는 간단한 인터페이스인 파사드를 통해 ATM 기계와 상호 작용합니다.)
플라이웨이트(Flyweight) '다수의 객체로 생성될 경우 모두가 갖는 본질적인 요소를 클래스 화하여 공유함으로써 메모리를 절약하고 '클래스의경량화'를 목적으로 하는 디자인패턴
'여러개의 '가상인스턴스'를 제공하여 메모리 절감
(게임의 각 나무에는 참나무, 단풍나무 또는 소나무와 같은 유형과 크기, 위치 및 색상과 같은 속성 집합이 있습니다. 게임의 각 나무에 대해 별도의 개체를 만드는 대신 Flyweight 패턴을 사용하여 나무 유형을 나타내는 적은 수의 공유 개체를 만든 다음 이러한 개체를 여러 컨텍스트에서 사용할 수 있습니다.)
프록시(Proxy) '실체 객체에대한 대리객체' 실체 객체에 대한 접근 이전에 필요한 행동을 취할 수 있게 만듬
'미리 할당하지 않아도 상관없는 것들을 실제 이용할 때 살당하게 하여 메모리 용량을 아낄 수 있음
'실체 객체를 드러나지 않게하여 정보 은닉의 역할 수행
'특정 객체로의 접근을 제어하기 위한 용도로 사용
public void display() { if (realImage == null) { realImage = new RealImage(file); } realImage.display(); }
컴포지트(Composite) '객체들의 관계를 트리구조로 구성하여 부분-전체 계층을 표현하는 패턴
'사용자가 단일 객체와 복합객체로 모두 동일하게 다루도록 하는 패턴
'복합 객체와 단일 객체를 동일하게 취급
어댑터(Adapter) '기존에 생성된 클래스를 재 사용할 수 있도록 중간에서 맞춰주는 역할을 하는 인터페이스를 만드는 패턴
'상속을 이용하는 클래스 패턴과 위임을 이용하는 인스턴스 패턴의 두가지 형태로 사용됨
'인터페이스가 호환되지 않는 클래스들을 함께 이용할 수 있도록 타 클래스의 인터페이스를 기존 인터페이스에 덧씌움

 

행위패턴 : 행 미인이 템옵 스테 비커 스트메체

패턴 설명
미디에이터(Mediator) '객체지향설계에서 객체의 수가 너무 많아지면 서로 간 통신을 위해 복잡해져서 객체지향에서 가장 중요한 느슨한 결합의 특성을 해칠 수 있기 때문에 이를 해결하는 방법으로 중간에 이를 통제하고 지시할 수 있는 역할을 하는 중재자를 두고, 중재자에게 모든것을 요구하여 통신의 빈도수를 줄여 객체 지향의 목표를 달성하게 해주는 디자인 패턴
'상호작용의 유연한 변경을 지원 
인터프리터(Interpreter) '언어의 다양한 해석, 구체적으로 구문을 나누고 그 분리된 구문의 해석을 맡는 클래스를 각각 작성하여 여러 형태의 언어 구문을 해석할 수 있게 만드는 디자인 패턴
'문법 자체를 캡슐화 하여 사용 (스크립팅 언어의 수학적 표현이나 명령 집합과 같은 간단한 언어나 표현을 해석)
이터레이터(Iterator) '컬랙션 구현방법을 노출시키지 않으면서도 그 집합체 안에 들어있는 모든 항목에 접근할 방법을 제공하는 패턴
' 내부구조를 노출하지 않고 복잡객체의 원소를 순차적으로 접근 가능하게 해주는 행위패턴
int[] list = {1, 2, 3, 4, 5}; IntegerList integerList = new IntegerList(list); Iterator iterator = integerList.getIterator(); while (iterator.hasNext()) { System.out.println(iterator.next()); }
템플릿 메서드
(Template Method)
'어떤 작업을 처리하는 일부분을 서브클래스로 캡슐화해 전체 일을 수행하는 구조는 바꾸지 않으면서 특정 단계에서 수행하는 내역을 바꾸는 패턴
'일반적으로 상위클래스(추상)에는 추상메서드를 통해 기능의 골격 제공, 하위클래스(구체)의 메서드에는 세부 처리를 구체화하는 방식으로 사용
'코드의 양을 줄이고 유지보수를 용이하게 만드는 특징을 갖는 패턴
'상위 작업의 구조를 바꾸지 않으면서 서브클래스로 작업의 일부분을 수행
알고리즘의 단계를 정의하고 하위 클래스가 이러한 단계 중 일부에 대해 자체 구현을 제공할 수 있도록 하는 데 중점을 둡니다.
옵저버(Observer) '한 객체의 상태가 바뀌면 그 객체에 의존하는 다른객체들에 연락이가고 자동으로 내용이 갱신되는 방법
'일대 다의 의존성을 가지며 상호작용하는 객체사이에서 가능하면 느슨하게 결합하는 패턴
'객체의 상테에 따라 행위 내용을 변경
스테이트(State) '객체의 상태를 캡슐화하여 클래스화 함으로써 그것을 참조하게 하는 방식으로 상태에 따라 다르게 처리할 수 있도록 행위 내용을 변경하여 변경시 원시코드의 수정을 최소화 할 수 있고 유지보수의 편의성도 갖는 디자인패턴
'객체의 상태에 따라 행위 내용을 변경
비지터(Visitor) '각 클래스 데이터 구조로 부터 처리기능을 분리하여 별도의 클래스를 만들어놓고 해당 클래스의 메서드가 각 클래스를 돌아다니며 특정작업을 수행하도록 만드는 패턴
'객체의 구조는 변경하지 않으면서 기능만 따로 추가하거나 확장할 때 사용하는 디자인 패턴
'특정 구조를 이루는 복합 객체의 원소 특성에 따라 동작을 수행할 수 있도록 지원하는 행위
커맨드(Command) '실행될 기능을 캡슐화 함으로써 주어진 여러 기능을 실행할 수 있는 재사용성이 높은 클래스를 설계하는 패턴
'하나의 추상 클래스에 메서드를 만들어 각 명령이 들어오면 그에 맞는 서브클래스가 선택되어 실행되는 특징을 갖는 패턴
'요구사항을 객체로 캡슐화
스트레티지(Strategy) '알고리즘군을 정의하고(추상) 같은 알고리즘을 각각 하나의 클래스로 캡슐화한다음 필요할때 서로 교환해서 사용할 수 있게하는 패턴
'행위를 클래스로 캡슐화해 동적으로 행위를 자유롭게 바꿀 수 있게 해줌
'행위 객체를 클래스로 캡슐화해 동적으로 행위를 자유롭게 변환
'사용하는 알고리즘을 변경하여 런타임 시 개체의 동작을 변경할 수 있습니다.
Duck mallard = new Duck(new FlyWithWings()); mallard.performFly(); // outputs: "I'm flying with my wings!" mallard.setFlyBehavior(new FlyNoWay()); mallard.performFly(); // outputs: "I can't fly."
메멘토(Memento) '클래스 설계 관점에서 객체의 정보를 저장할 필요가 있을때 적용하는 디자인 패턴
'Undo 기능을 개발할때 사용
'객체를 이전 상태로 복구시켜야하는경우, Undo 요청 가능
책임연쇄
(Chain of Responsibility)
'정적으로 어떤 기능에대한 처리의 연결이 하드코딩 되어있을때 기능처리의 연결 변경이 불가능한데 이를 동적으로 연결되어있는 경우에 따라 다르게 처리될 수 있도록 연결한 디자인 패턴
'한 요청을 2개이상의 객체에서 처리 (Java 에서의 try catch 문)

 

* 팩토리 메서드패턴과 템플릿 메서드 패턴의 차이점 

우리는 피자 배달 시스템을 구축하고 있다고 가정해보자

팩토리 메서드 패턴에는 피자를 만드는 메서드를 정의하는 PizzaFactory 인터페이스와
다양한 유형의 피자(예: NewYorkStylePizza, ChicagoStylePizza)를 만드는 팩토리의 다양한
구체적인 구현(예: NewYorkPizzaFactory, ChicagoPizzaFactory)이 있다.

템플릿 메서드 패턴에서 반죽을 준비하는 단계의 순서를 포함하여 피자를 만들기 위한 템플릿을 정의하는 피자 클래스가 있다. 토
핑을 추가하고 피자를 굽습니다. 그런 다음 하위 클래스는 특정 단계를 재정의하여 고유한 피자 스타일을 만들 수 있습니다.

 

 


4) 소프트웨어 개발 방법론 

 

⭕️ 소프트웨어 생명주기 (SDLC : Software Development Life Cycle)

시스템의 요구 분석부터 유지보수까지 전 공정을 체계화 한 절차 

 

⭕️ 소프트웨어 생명주기 모델 프로세스

 

요구사항분석 ✔️ 다양한 이해 관계자의 상충되는 요구 사항을 고려하여 새로운 제품이나 변경된 제품에 부합하는 요구와 조건 결정하는 단계
✔️ 개발할 소프트웨어의 기능과 제약 조건, 목표 등을 소프트웨어 사용자와 함께 명확히 정의하는 단계
ex) 기능 요구사항, 비기능 요구사항
설계 ✔️ 시스템 명세 단계에서 정의한 기능을 실제 수행할 수 있도록 수행방법을 논리적으로 결정하는 단계
ex) 시스템 구조 설계, 프로그램 설계, 사용자 인터페이스 설계
구현 ✔️ 설계 단계에서 논리적으로 결정한 문제 해결 방법을 특정 프로그래밍 언어를 사용하여 실제 프로그램을 작성하는 단계
✔️ 프로그래밍 언어 선택, 기법, 스테일, 순서 등 결정 단계
ex) 인터페이스 개발, 자료구조 개발, 오류 처리
테스트 ✔️ 시스템이 정해진 요구를 만족하는지 예상과 실제 결과가 어떤 차이를 보이는지 검사하고 평가하는 단계
ex) 단통시인 : 단위테스트, 통합 테스트, 시스템 테스트, 인수 테스트
유지보수 ✔️ 시스템이 인수되고 설치된 후 일어나는 모든 활동
ex) 예방, 완전, 교정, 적응 유지보수

 

⭕️ 소프트웨어 생명주기 모델 종류

폭포수 모델 (Waterfall) 가장 오래된 모델, 각 단계를 확실히 마무리 지은 후 다음 단계로 넘어감 (계,요,설,구,테,유)
프로토 타이핑 모델
(Prototyping)
주요 기능을 프로토 타입으로 구현하여 고객의 피드백을 반영하여 소프트웨어를 만들어가는 모델
나선형 모델 (Spiral) 위험을 최소화 하기 위해 점진적으로 시스템 개발 
계위개고 : 계획 및 정의 → 위험분석 → 개발 → 고객평가
반복적 모델 (Iteration) 구축 대상을 나누어 병렬적으로 개발 후 통합 또는 반복적 개발 
RAD (Rapid Application D-) 매우 짧은 개발 주기를 강조하는 점진적 소프트웨어 개발방식
CASE(Computer Adied Software Engineering) 도구를 이용해 시스템 개발
V 모형 폭포수 모델에 시스템 검증과 테스트 작업 강조
높은 신뢰성이 요구되는 분야에 적합

reference : https://cafe.naver.com/sosozl

⭕️ 소프트웨어 개발 방법론 

소프트웨어 개발의 시작 ~ 시스템을 사용하지 않는 과정의 전 과정을 형상화 한 방법 

 

⭕️ 소프트웨어 개발 방법론 종류

구조적 방법론
(Structured D-)
' 전체 시스템을 기능에 따라 나누어 개발하고 이를 통합하는 방법론
' 프로세스 중심의 하향식 방법론
' 구조적 프로그래밍 표현을 위해 나씨-슈나이더만 차트 사용
정보공학 방법론
(Information Engineering D-)
' 정보 시스템 개발에 필요한 관리 절차와 작업 기법을 체계화 한 방법론 
' 개발 주기를 이용해 대형 프로젝트를 수행하는 체계적인 방법론
객체지향 방법론
(Object Oriented D-)
' 객체라는 기본단위로 시스템을 분석 및 설계하는 방법론
' 복잡한 현실 세계를 사람이 이해하는 방식으로 시스템에 적용하는 방법론
' 객체, 클래스, 메세지를 사용
컴포넌트 기반 방법론 
(Component Based D-)
' 소프트웨어를 구성하는 컴포넌트를 조립해서 하나의 새로운 응용 프로그램을 작성하는 방법론
' 개
발 기간 단축으로 인한 생산성 향상
' 새로운 기능 추가 쉬움(확장성)
' 소프트웨어 재사용이 가능
애자일 방법론
(Agile D-)
' 절차보다는 사람이 중심이 되어 변화에 유연하고 신속하게 적응하면서 효율적으로 시스템을 개발할 수 있는 신속 적응적 경량 개발 방법론
' 애자일은 개발 과정의 어려움을 극복하기 위해 적극적으로 모색한 방법론
제품 계열 방법론 (Product Line D-) ' 특정 제품에 적용하고 싶은 공통된 기능을 정의하여 개발하는 방법론
' 임베디드 소프트웨어를 작성하는 데 유용한 방법론
' 영역 공학과 응용 공학으로 구분
  - 영역 공학: 영역 분석, 영역 설계, 핵심 자산을 구현하는 영역
  - 응용 공학: 제품 요구분석, 제품 설계, 제품을 구현하는 영역

 

나씨-슈나이더만

https://ko.wikipedia.org/wiki/%EB%82%98%EC%8B%9C%EC%8A%88%EB%82%98%EC%9D%B4%EB%8D%94%EB%A7%8C%EB%8F%84

  • 논리 기술에 중점을 둔 도형식 표현 방법
  • 연속, 선택, 및 다중 선택, 반복 등의 제어 논리 구조로 표현
  • 조건이 복합되어 있는 곳의 처리를 시각적으로 명확히 식별하는데 적합

 

⭕️ 애자일 방법론

 

절차보다 사람이 중심이 되어 변화에 유연하고 신속하게 적응하면서 효율적으로 시스템을 개발할 수 있는 신속 적응적 경량 개발 방법론 

 

⭕️ 애자일 방법론 유형

XP

(eXtreame Programming)

' 의사소통 개선과 즉각적인 피드백으로 소프트웨어 품질을 높이기 위한 방법론
' 1~3주의 반복 개발 주기
  XP 5가지 가치 용기 (Courage) 용기를 가지고 자신감 있게 개발
    단순성 (Simplicity) 필요한 것만 하고 그 이상의 것들은 하지 않음
    의사소통 (Communication) 개발자, 관리자, 고객간의 원활한 소통
    피드백 (Feedback) 의사 소통에 대한 빠른 피드백
    존중 (Respect) 팀원간의 상호 존중
  XP 12가지 기본원리 짝 프로그래밍(Pair Programming) 개발자 둘이서 짝으로 코딩하는 원리
    공동 코드 소유 (Collective Ownership) 시스템에 있는 코드는 누구든지 언제라도 수정 가능
    지속적인 통합 (Continuous Integration) 매일 여러번씩 소프트웨어를 통합하고 빌드
    계획세우기 (Planning Process) 고객이 요구하는 비즈니스 가치 정의, 개발자가 필요한것은 무엇이며 어떤 부분에서 지연될 수 있는지 알려주어야 한다는 원리
    작은릴리즈 ( Small Release) 작은 시스템을 먼저 만들고, 짧은 단위로 업데이트 한다
    메타포어 (Metaphor) 공통적인 이름 체계와 시스템 서술서를 통해 고객과 개발자간의 의사소통을 원활하게 한다는 원리
    간단한디자인(Simple Desing) 현재의 요구사항에 적합한 가장 단순한 시스템을 설계한다는 원리
    테스트 기반 개발 (TDD; Test Driven Develop) 작성해야 하는 프로그램에 대한 테스트를 먼저 수행하고 이 테스트를 통과할 수 있도록 실제 프로그램의 코드를 작성
    리팩토링 (Refactoring) 프로그램의 기능을 바꾸지 않으면서 중복제거, 단순화 등을 위해 시스템 재구성 한다는 원리
    40시간 작업 (40-Hour-Work) 개발자가 피곤으로 인해 실수하지 않도록 일주일에 40시간이상을 일하지 말아야 한다는 원리
    고객상주 (On Site Customer) 개발자들의 질문에 즉각 대답해 줄 수 있는 고객을 프로젝트에 풀타임으로 상주시켜야한다는 원리
    코드표준 (Coding Standard) 효과적인 공동 작업을 위해 모든 코드에 대한 코딩 표준을 정의해야 한다는 원리

 

스크럼

(Scrum)

' 매일 정해진 시간, 장소에서 짧은 시간의 개발을 하는 팀을 위한 프로젝트 관리 중심 방법론
  백로그 (Backlog) 제품과 프로젝트에 대한 요구사항
  스프린트 (Sprint) 2~4주의 짧은 개발기간으로 반복적 수행으로 개발 품질 향상
  스크럼 미팅 (Scrum Meeting) 매일 15분 정도 미팅으로 To-Do-List 계획수립
  스프린트회고 (Sprint Retrospective) 스프린트 주기를 되돌아보며 정해놓은 규칙 준수여부, 개선점 등을 확인 및 기록
해당 스프린트가 끝난 시점이나 일정 주기로 시행
  번다운차트 (Burn Down Chart) 남아있는 백로그 대비시간을 그래픽적으로 표현한 차트
백로그는 보통 수직축에 위치하며 시간은 수평축에 위치 

 

https://upload.wikimedia.org/wikipedia/commons/8/8e/SampleBurndownChart.svg

 

 



(LEAN)

' 도요타의 린 시스템 품질기법을 소프트웨어 개발 프로세스에 적용해서 낭비 요소를 제거하여 품질을 향상시킨 방법론
' JIT(Just In Time), 칸반(Kanban)보드 사용

' JIT(Just-in-Time)는 필요한 제품을 필요한 시간에 필요한 수량만큼만 생산하여 낭비를 최소화하고 효율성을 높이는 것을 목표로 하는 Lean 방법론의 생산 전략
  7가지 원칙 낭비제거, 품질 내재화, 지식창출, 늦은 확정, 빠른 인도, 사람 존중, 전체 최적화

 

⭕️ 애자일 vs 전통적 방법론

비교대상 애자일 방법론 전통적 방법론
계획수립 유동적 범위 설정 확정적 범위 설정
업무수행 팀 중심 업무수행 관리자 주도적 명령과 통제
개인 단위로 업무 수행
개발/검증 반복 주기 단위로 소프트웨어를 개발/검증 분석 / 설계 / 구현/ 테스트를 순차적으로 수행
팀관리 업무 몰입, 팀 평가 경쟁, 개별평가
문서화 문서화보다는 코드를 강조 상세한 문서화를 강조
성공요소 고객 가치 전달 계획 / 일정 준수
유형 XP, 스크럼, 린 폭포수, 프로토타입, 나선형

5) 객체 지향 분석 방법론

 

⭕️ 객체 지향 분석 

객체 지향 분석 (OOA; Object Oriented Analysis)은

사용자의 요구사항을 분석하여 요구된 문제와 관련된 모든 클래스(객체), 속성과 연산, 관계를 정의하여 모델링하는 기법


6) 비용산정, 일정관리 모형

 

⭕️ 비용산정 모형

소프트웨어 규모파악을 통한 투입자원, 소요시간을 파악하여 실행 가능한 계획을 수립하기위해 비용을 산정하는 방식

 

⭕️ 비용산정 모형 분류

분류 설명 종류
하향식 산정기법 ↓ 경험이 많은 전문가에게 비용산정 의로, 여러 전문가와 조정자를 통해 산정하는 방식 전문가 판단, 델파이 기법
델파이 기법 ? 전문가의 경험적 지식을 통한 문제 해결 및 미래 예측을 위한 기법 = 전문가 합의법
상향식 산정기법↑ 세부적인 요구사항과 기능에 따라
필요한 비용을 계산하는 방식
코드라인수(Loc)
Man Month
COCOMO
푸트남
기능점수(FP)

 

1) 코드라인수 (LoC; Lines of Code)

Loc 모형은 소프트웨어 각 기능의 원시코드라인수의 낙관치(가장 적은 라인 수), 중간치 (기대치, 평균 라인수) 비관치 (가장 많은 라인 수) 측정하여 예측치를 구하고 이를 이용하여 비용을 산정하는 방식이다.

* 추정 LoC = (낙관치 + (4*중간치) + 비관치) / 6

 

2) Man Month 모형

한 사람이 1개월 동안 할 수 있는 일의 양을 기준으로 프로젝트 비용 산정

* MM(Man Month) = (Loc)/(프로그래머의 월간 생산성)

* 프로젝트 기간 = MM / 프로젝트 인원

 

3) COCOMO (COnstructive COst MOdel) 모형

보헴이 제안한 모형, 프로그램 규모에 따라 비용 산정 

유형 설명
조직형(Organic Mode) 기관 내부에서 개발된 중 소규모의 소프트웨어
일괄 자료처리나 과학기술 계산용, 비즈니스 자료 처리개발
5만(50KDSI)라인 이하의 소프트웨어 개발
반 분리형 (Semi-Detached Mode) 단순형과 임베디드 중간형
트랜잭션 처리 시스템, 데이터베이스 관리 시스템, 컴파일러, 인터프리터 = 유틸 개발 
30만(300KDSI)라인 이하의 소프트웨어 개발
내장형 = 임베디드 (Embedded Mode) 초대형 규모의 트랜잭션 처리 시스템이나 운영체제, 실시간 처리시스템 등의 시스템 프로그램 개발
30만(300KDSI)라인 이상 소프트웨어 개발

 

4) 푸트남 (Putnam) 모형

소프트웨어 개발 주기의 단계별로 요구할 인력의 분포를 가정하는 방식

생명주기 예측 모형

시간에 따른 함수로 표현되는 Rayleigh-Norden 곡선의 분호도를 기초로 함

 

5) 기능점수 (FP; Function Point) 모형

기능 점수 모형은 요구기능을 증가시키는 인자별로 가중치를 부여하고

요인별 가중치를 합산하여 총 기능의 점수를 계산하여 비용 산정하는 방식

* 기능점수 (FP) = 총 기능점수 * [0.65 + (0.1 * 총 영향도)]

 

⭕️ 일정 관리 모형

주공정법, PERT, 중요 연쇄 프로젝트 관리 

모델 설명
주 공정법 (CPM; Critical Path Method) 여러 작업의 수행 순서가 얽혀있는 프로젝트 일정을 계산하는 기법
모든 자원 제약사항을 배제한 상태로 프로젝트의 시작과 끝을 나타내는 노드와 노드간 연결을 통해 공정 계산하기 위한 액티비티 표기법
PERT (Program Evaluation And Review Technique) 일의 순서를 계획적으로 정리하기 위한 수렴기법
비관치, 중간치, 낙관치 3점 추정방식을 통해 일정 관리 
중요 연쇄 프로젝트 관리 (CCPM; Critical Chain Project Management) 주 공정 연쇄법으로 자원 제약 사항을 고려하여 일정을 작성하는 기법 

 

7) 개발 기술 환경 정의

 

1) 운영체제 현행 시스템 분석

운영체제란?

컴퓨터 시스템이 제공하는 모든 하드웨어, 소프트웨어를 사용할 수 있도록 해주고 컴퓨터 사용자와 컴퓨터 하드웨어간의 인터페이스를 담당하는 프로그램 

 

2) 네트워크 현행 시스템 분석

네트워크는 컴퓨터 장치들의 노드간 연결을 사용하여 서로에게 데이터를 교환할 수 있또록 하는 기술

데이터링크들은 광케이블과 같은 유선매체 또는 와이파이와 같은 무선 매체를 통해 확립됨

 

⭕️ OSI 계층 (Layer)

네트워크 통신에서 생긴 여러가지 충돌문제를 완화하기위해 국제 표준화기구(ISO)에 제시한 네트워크 기본 모델

계층 설명 프로토콜 전송단위
응용 (Application) 사용자와 네트워크 간 응용 서비스 연결, 데이터 생성 HTTP/FTP 데이터(DATA)
표현 (Presentation) 데이터 형식 설정과 부호교환, 암/복호화 JPEG/MPEG  
세션(Session) 연결 접속 및 동기제어 SSH/TLS  
전송(Transport) 신뢰성있는 ㅌ통신보장, 데이터 분할과 제조립 흐름제어, 오류제어, 혼잡제어담당 TCP/UDP 세그먼트(Segment)
네트워크(Network) 단말간 데이터 전송을 위한 최적화된 경로제공 IP/ICMP 패킷(Packet)
데이터링크(Data Link) 인접 시스템간 데이터 전송, 전송 오류제어 이더넷 프레임(Frame)
물리(Physical) 0과1비트의 정보를 회선에 보내기 위한 전기적 신호변환  RS-232C 비트(Bit)

 

* 백본망 (Backbone Network) : 다양한 네트워크를 상호 연결하는 컴퓨터 네트워크의 일부로서 각기 다른 LAN이나 부분망간에 정보를 교환하기 위한 경로를 제공하는 망이다. 

 

3) DBMS 현행 시스템 분석

* DBMS? 데이터베이스라는 데이터 집합을 만들고 저장 및 관리할 수 있는 기능들을 제공하는 응용 프로그램이다.

 

4) 미들웨어의 현행 시스템 분석

* 미들웨어란? 미들웨어는 분산 컴퓨팅 환경에서 응요프로그램과 프로그램이 운영되는 환경간에 원만한 통신이 이루어질 수 있도록 제어해주는 소프트웨어.

운영체제와 소프트웨어 어플리케이션 사이에 위치하고있다.

 

⭕️ WAS (Web Application Server)

WAS는 서버계층에서 어플리케이션이 동작할 수 있는 환경을 제공하고 안정적인 트랜잭션 처리와 관리, 다른 이기종 시스템과의 애플리케이션 연동을 지원하는 서버이다.

 


https://velog.io/@y55nms/1.-%EC%86%8C%ED%94%84%ED%8A%B8%EC%9B%A8%EC%96%B4-%EA%B0%9C%EB%B0%9C-%EB%B0%A9%EB%B2%95%EB%A1%A0

 

 

 

 

 

SOLID - 단개리의인 단 개리는 의인이다

SOLID는 객체 지향 프로그래밍을 하면서 지켜야하는 5대 원칙으로 각각 SRP (단일 책임 원칙), OCP (개방-폐쇄 원칙), LSP (리스코프 치환 원칙), DIP (의존 역전 원칙), ISP (인터페이스 분리 원칙)의 앞글자를 따서 만들어졌습니다12. 이 원칙들은 소프트웨어 개발에서 유지보수성, 확장성, 재사용성 등을 높이기 위해 사용됩니다2.

SRP(Single Responsibility Principle): 단일 책임 원칙
OCP(Open Closed Priciple): 개방 폐쇄 원칙
LSP(Liskov Substitution Principle): 리스코프 치환 원칙
DIP(Dependency Inversion Principle): 의존 역전 원칙
ISP(Interface Segregation Principle): 인터페이스 분리 원칙
객체 지향 설계에서는 이러한 SOLID 원칙을 지키면서 설계를 해야합니다2.

댓글