시험을 위해 필요한 개념을 위주로 정리해볼까해요.
평소에 쓰던 용어랑 조금 헷갈릴 수도 있을 것 같지만, 이 포스팅 내에서 쓰는 용어는 오직 이 과목을 위한 것으로 생각하고...(세뇌)
- 소프트웨어(software)
- 하드웨어를 동작시켜 사용자가 작업을 편리하게 수행하도록 하는 프로그램 및 자료구조
- 프로그램의 개발, 운용 및 유지보수에 관련된 문서와 정보도 포함됨
- 소프트웨어 특징
- 상품성
- 견고성 : 일부 수정이 소프트웨어 전체에 영향
- 복잡성 : 개발과정이 복잡. 비표준화. 이해와 관리 어려움
- 순응성
- 비가시성
- 비마모성 : 사용에 의해 마모되지 않음 (cf. 오랜기간 사용 시 노후, 품질저하)
- 비제조성 : 논리적 절차에 의한 개발
- 비과학성
- 소프트웨어 분류
- by 기능 - 시스템 소프트웨어, 응용 소프트웨어
- by 사용분야 - 프로그래밍용, 문서작성용, 통신용, 분산처리용, 멀티미디어용, 소프트웨어 개발용, 인공지능용 등
- by 개발과정의 성격 - 프로토타입(견본), 프로젝트(연구과정에서 생산, 상품화X), 패키지(상품형)
- by 정보 처리 방법 - 일괄처리 소프트웨어, 온라인 소프트웨어, 실시간 소프트웨어 등
- 시스템
- 공통 목적/목표 달성을 위해 여러 상호 요소가 유기적으로 결합된 것
- 소프트웨어는 컴퓨터를 기반으로 하는 여러 시스템과 관련을 맺어 상호 동작
- 시스템 구성 요소
- 입력 (Input)
- 처리 (Process)
- 출력 (Output)
- 제어 (Control)
- 피드백 (Feedback)
- 소프트웨어 위기 (Software Crisis)
- 여러 원인에 의해 소프트웨어 개발 속도가 하드웨어 개발 속도를 따라가지 못해, 사용자들의 요구사항을 처리할 수 없는 문제 발생 (NATO 협정 (1964)에서 처음 등장한 용어)
- 위기의 원인
- 소프트웨어의 특징에 대한 이해 부족
- 소프트웨어의 관리 부재
- 프로그래밍에만 치중
- 위기의 결과
- 개발 인력 부족으로 인한 인건비 상승
- 성능 및 신뢰성(일관된 결과를 위해 오류없이 수행) 부족
- 개발기간의 지연 및 개발 비용 증가
- 어려운 유지보수 및 해당 비용 증가
- 소프트웨어의 생산성 저하
- 소프트웨어의 품질 저하
- 소프트웨어 공학(Software Engineering, SE)
- 소프트웨어 위기를 극복하기 위한 방안으로 연구된 학문
- 여러 방법론, 도구, 관리 기법들을 통해 소프트웨어의 품질 및 생산성 향상이 목표
- 가장 경제적인 방법으로 양질의 소프트웨어 제품을 생산하는 것
- 안정적, 효율적으로 작동하는 소프트웨어 생성 및 유지보수 활동을 체계적, 경제적으로 수행하기위해 계층화 기술 사용
- 소프트웨어 공학 정의
- 소프트웨어 개발, 운용, 유지보수, 폐기 처분에 대한 체계적 접근 방안 [IEEE 소프트웨어 공학 표준 용어 사전]
- 지정된 비용과 기간 내에 소프트웨어를 체계적으로 생산하고 유지보수하는 데 관련된 기술적, 관리적 원리 [Fairly]
- 과학적인 지식을 소프트웨어 설계와 제작에 응용하는 것이며, 이를 개발운용, 유지보수하는 데 필요한 문서 작성 과정 [Boehm]
- 계층화 기술
- 관리자가 소프트웨어 개발과정을 제어, 기술진이 고품질의 소프트웨어 구축할 수 있도록 하는 기술
- 도구 (Tool)
- 방법과 절차를 자동/반자동으로 처리하는 기능 제공
- 예) CASE(Computer-Aided Software Engineering)
- 방법 (Method)
- 소프트웨어 구축을 위한 기술적 방법 제공
- 절차 (Process)
- 개발에 사용되는 개발방법과 도구가 사용되는 순서
- 소프트웨어 공학의 기본 원칙
- 현대적인 프로그래밍 기술을 계속 적용해야
- 개발된 소프트웨어의 품질이 유지되도록 지속적 검증해야
- 소프트웨어 개발 관련 사항 및 결과에 대한 명확한 기록을 유지해야
- 소프트웨어 공학의 발전
- 1960년대
- 소프트웨어 위기 인식, SE 시작, 구조적 프로그래밍 시도
- 1970년대
- 구조적 분석/설계 개념 도입, 소프트웨어 생명 주기와 개발 도구 등장
- 소프트웨어 상품화
- 1980년대 ~ 80년대 중반
- 다양한 분석/설계 방법론 등장 및 발전
- 시험, 유지보수, 프로젝트 관리 등의 기술 발전
- 하드웨어 가격 하락, 다양한 소프트웨어 공급
- 1980 중반~ 현재
- 객체지향 기술 사용
- 기술 진보 (4GL, 소프트웨어 재사용성, CASE, 형상관리)
- 소프트웨어의 품질과 생산성
- 품질(Quality)
- 주어진 요구사항을 만족시키는 능력을 갖추고 있는 소프트웨어의 측정 가능한 기능 및 특성
- 좋은 품질의 소프트웨어 특징
- 사용자의 요구대로 동작
- 하드웨어 자원을 효율적으로 이용
- 일정 시간 내 주어진 조건 하에서 원하는 기능 실행
- 애매모호함 없이 처리 절차에 맞게 수행되어 정확하게 결과 산출
- 소프트웨어의 개발, 유지보수 등이 초기 예상 비용 이내에서 수행
- 적당한 사용자 인터페이스 제공하여 사용하기 편리
- 유지보수 용이
- 잠재적 에러의 최소화
- 소프트웨어의 사용법, 구조 설명, 성능, 기능 등이 이해하기 쉬움
- 생산성(Productivity)
- 투입된 비용, 노력 등에 대한 생산량
- 생산성에 영향을 미치는 요소
- 개발자의 능력
- 원활한 의사 전달
- 프로젝트의 복잡도와 성격
- 기술 수준
- 관리 기술
- 소프트웨어 생명 주기 (Software life cycle)
- (= 소프트웨어 수명 주기)
- 소프트웨어를 개발하기 위해 정의하고 운용, 유지보수 등의 과정을 각 단계별로 나눈 것
- 소프트웨어 개발 단계와 각 단계별 주요 활동, 활동의 결과에 대한 산출물로 표현
- 소프트웨어 생명 주기의 역할
- 프로젝트 비용 산정과 개발 계획을 수립할 수 있는 기본 골격
- 프로젝트 진행 방향을 명확하게 파악
- 용어 및 기술의 표준화
- 프로젝트 관리 용이
- 여러 소프트웨어 간에 상호 일관성 유지
- 일반적인 소프트웨어 생명 주기
- 정의 단계
- 'What'(무엇)을 처리하는 소프트웨어를 개발할 것인가
- 관리자와 사용자가 가장 많이 참여하는 단계
- 세부 단계
- 타당성 검토 단계 : 실현 가능성 조사
- 개발 계획 단계 : 개발에 사용될 자원과 비용 측정
- 요구사항 분석 단계
- 개발 단계
- 'How'(어떻게) 에 초점을 두고 실제 소프트웨어 개발하는 단계
- 세부 단계
- 설계 단계 : 소프트웨어 구조, 알고리즘, 자료구조 작성. 에러가 가장 많이 발생하는 단계
- 구현 단계 : 설계 단계에 작성된 문서를 기초하여 코딩
- 테스트 단계 : 구현된 소프트웨어에 내재되어 있는 오류를 찾아주는 단계
- 유지보수 단계
- 소프트웨어를 직접 운용하며, 변경(Change)에 초점을 두고 여러 환경 변화에 따라 소프트웨어를 적응 및 유지시키는 단계
- 생명 주기 중 시간과 비용이 가장 많이 소요
- 소프트웨어 생명 주기 모형
- (=소프트웨어 프로세스 모형, 소프트웨어 공학 패러다임)
- 폭포수 모형 (Waterfall Model)
- 특징
- "폭포에서 떨어진 물은 거슬러 올라갈 수 없음"
- 소프트웨어 개발 단계마다 확실히 매듭짓고 그 결과를 철저하게 검토하여 승인과정을 거친 후 다음단계로 진행. 이전 단계로 넘어갈 수 없음.
- 가장 오래되고 폭넓게 사용된 전통적인 생명 주기 모형 (고전적 생명주기 모형)
- 선형 순차적 모형 (개발 과정의 앞 단계가 끝나야만 다음 단계로 넘어갈 수 있음)
- 매뉴얼 작성 필요
- 두 개 이상의 과정이 병행 수행 불가
- 개발 순서
- 타당성 검토
- 계획
- 요구분석
- 설계
- 구현
- 시험
- 유지보수
- 장점
- 모형의 적용 경험과 성공 사례가 많음
- 단계별 정의가 분명, 전체 공조 이해 용이
- 단계별 산출물 정확, 개발 공정의 기준점 제시 용이
- 단점
- 개발 과정 중에 발생하는 새로운 요구나 경험을 반영하기 어려움 --> 처음부터 사용자들이 모든 요구사항을 명확하게 제시해야 함
- 단계별로 오류 없이 다음 단계로 진행하기가 어려움
- 개발된 프로그램을 업무에 운용할 때 검출되지 않은 오류가 있을 수 있음
- 프로토타입 모형 (Prototype Model, 원형 모형)
- 특징
- 사용자의 요구사항을 정확하게 파악하기 위해 실제 개발될 소프트웨어에 대한 견본품을 만들어 최종물을 예측하는 모형
- 프로토타입은 추후 구현 단계에서 사용될 골격 코드가 됨
- 개발이 완료된 시점에서 오류가 발견되는 폭포수 모형의 단점을 보완
- 프로토타입은 요구 분석 단계에서 사용. 평가가 끝나고 개발이 승인되면 다른 모형을 이용하여 본격적인 개발
- 생명주기에서 유지보수가 없어지고, 개발 단계 안에서 유지보수
- 개발 순서 (폭포수)
- 타당성 검토
- 계획
- 요구분석 (프로토타입 모형)
- 요구 수집
- 빠른 설계
- 프로토타입 구축
- 고객평가
- 프로토타입 조정
- 구현
- 설계
- 구현
- 시험
- 유지보수
- 장점
- 요구사항 충실히 반영, 요구사항 변경 용이
- 최종 결과물이 만들어지기 전에 의뢰자가 최종 결과물의 일부 또는 모형 볼 수 있음
- 의뢰자나 개발자 모두에게 공동의 참조 모델 제공
- 단점
- 미리 제작된 소프트웨어를 사용할 경우, 실제 소프트웨어와의 차이가 발생할 수 있어 사용자에게 혼란을 야기할 수 있음
- 단기간에 제작해야하기때문에 비효율적인 언어나 알고리즘을 사용할 수 있음
- 나선형 모델 (Spiral Model, 점진적 모형)
- 특징
- Boehm 제안
- 폭포수 장점 + 프로토 장점 + 위험 분석 기능 추가
- 나선 따라 돌듯, 여러번의 소프트웨어 개발 과정을 거쳐 점진적으로 프로토 타입을 지속적으로 발전시켜 완벽한 최종 소프트웨어를 개발하는 것
- 개발하면서 발생할 수 있는 위험을 관리하고 최소화하는 것이 목적
- 개발 순서
- 계획 및 정의
- 위험 분석
- 공학적 개발
- 고객 평가
- 장단점
- 가장 현실적인 모형, 대규모 프로젝트 및 큰 시스템에 적합
- 개발과정이 반복되므로, 누락되거나 추가된 요구사항을 첨가할 수 있음.
- 정밀함. 유지보수과정 필요 없음
- 위험 분석 단계에서 기술과 관리의 위험 요소들을 하나씩 제거해 나감으로써 환성도 높은 소프트웨어를 만들 수 있음
- 위험성 평가에 크게 의존하기 때문에 이를 발견하지 않으면 문제 발생
- 비교적 최신 기법이라 널리 사용되지 않음
- 4GT 모형 (4th Generation Techniques, 4세대 기법)
- 특징
- 개발자가 쉽게 접근하고 사용할 수 있는 4세대 언어 이용
- cf. 4세대 언어 : CASE를 비롯한 여러 자동화 도구들
- 개발자가 조사한 요구사항 명세서로부터 원시 코드를 자동으로 생성할 수 있게 해주는 모형
- 설계 단계를 축소하고, 요구 분석 단계에서 구현 단계로 전환할 수 있는 비절차적 모형
- 개발 순서
- 요구사항 수집
- 설계 전략
- 4세대 언어를 이용한 구현
- 제품화
- 장단점
- 설계 단계 단축
- 4세대 언어 사용하여 원시 코드 자동 생성
- 종소형 소프트웨어 개발에 사용하면 개발 시간이 감소되지만, 대규모 소프트웨어 개발에서는 자동화로 인해 단축된 시간보다 분석, 설계 단계 등에서 더 많은 시간 필요
'Computers > SW Engineering' 카테고리의 다른 글
day 3. 전통적 S/W 개발방법 - 요구사항 분석, 자동화 도구, 설계 (0) | 2016.03.21 |
---|---|
day 2. 프로젝트 관리 - 위험 관리, 형상 관리 (0) | 2016.03.17 |
day 2. 프로젝트 관리 - 조직 구성, 품질 보증, 신뢰성/가용성 (0) | 2016.03.17 |
day 2. 프로젝트 관리 - 일정 관리 (0) | 2016.03.17 |
day 1. 프로젝트 관리 - 비용 추산 (0) | 2016.03.16 |