3] 실제 상황이 나오기 전에 가상으로 시물레이션해 최종 결과물에 대한 예측이 가능한 모형으로, 폭포수 모형 단점을 보완
4] 요구사항 도출이 용이하며 시스템 이해 용이, 의사소통 향상
5] 사용자의 오해(완제품이라는)와 폐기되는 프로토타입이 나온다는 단점이 존해
6] 과정 : 요구분석 - 프로토타입 개발, 개선 - 검토, 평가 - 승인 - 상세개발 - 설치 or 취소
3) 나선형 모델
1] 폭포수와 프로토타입 모델 장점에 위험분석을 추가한 모델
2] 계획 및 정의 - 위험 분석 - 개발(공학적 개발) - 고객 평가 단계를 계속 반복
3] 보헴이 제안했으며 점진적 모형(위험관리)으로 누락, 추가된 요구사항 첨가 가능하며 유지보수 과정이 불필요
4] 점증적인 개발로 실패할 위험감소, 테스트 용이, 피드백
5] 관리가 복잡한 단점이 존재, 시간과 비용이 많이 소요(대규모 시스템에 적합)
4) 반복 점증적 모델
1] 시스템을 여러번 나누어 릴리즈 하는 방법
2] incremental(점증, 증분, 증가) : 전체 기능을 분해한 뒤 릴리즈마다 기능을 추가개발
3] iterative(반복) : 전체 기능을 대상으로 릴리즈를 진행하면서 기능 개발
4] 위험의 조기 발견 및 최소화 전략이 구현 가능하며 변경 관리가 용이
5] 관리가 어렵고 시간과 비용이 증가
6] 반복적 모델 : 구축대상을 나눠 병렬적으록 ㅐ발 후 통합하거나 반복적으로 개발하여 점증 완성
7] 폭포수 모델이 릴리즈 하기 전에 사용자는 경험하지 못하고 피드백도 못한다는 단점을 보완하는 방법으로, 시스템을 조기에 경험하게 하고 출시를 빠르게 하기 위해 조금씩 점증적으로 개발
8] 증분형 개발모형과 진화적 개발모형으로 분류
5) RAD 모델 = 급속도 애플리케이션 개발
1] 짧은 주기(2~3달) 동안 소프트웨어를 개발하기 위한 순차적 프로세스 모델
2] 고객에게 핵심 요구사항 만족과 개발기간 단축이 목적
3] 꼼꼼하게 테스트나 위험분석을 함 수 없기에 위험이 적고 빠른 개발이 필요한 프로젝트에 적합
4] 우수한 소프트웨어 개발도구(CASE)를 이용해 전총적 개발 방법보다 적은 시간과 비용을 투자하더라도 보다 나은 품질의 소프트웨어를 개발 할 수 있는 과정
5] 전체 개발 과정을 하나로 통합, 기존의 반복적이고 점진적 개발 과정은 그대로 수용하면서도 개발 과정 초기에 사용자에게 실행 가능한 기본적 프로토 타입을 제공하며 사용자의 요구를 훨씬 더 명확하게 수용(자용자 적극 참여)해 하추에 일어날 수 있는 문제를 줄이고 설계 과정을 그대로 개발에 재사용해 전체적 개발 기간의 단축을 꾀함
6] JRP 분석 : 고객과 비즈니스모델 작성, 검토, 반복을 통한 분석
7] JAD 설계 : 고객과 프로토타입 반복을 통한 시스템 설계
8] 컷오버 : 기존에 운영되던 정보시스템을 완전히 중단시키고 새로 구축된 정보시스템을 본격 오픈
9] 요구사항 이해와 범위의 명확한 설정시 신속하고 완전한 기능 구현이 가능하지만 기술적 위험이 높을 경우 부적합하며 적절한 모듈화가 필수고 책임감 있는 구성원이 필요
5. 소프트웨어 개발 방법론
1) 소프트웨어 공학 원리를 소프트웨어 개발 생명주기에 적용한 개념으로, 정보시스템 개발을 위한 작업 활동, 절차,ㅡ 산출물, 기법 등을 체계적으로 정리한 것
2) 시스템 종류, 프로세스, 조직, 사람, 문화에 따라 다르게 선정되어야 함
3) 구성
1] 작업절차 : 작업단계의 체계
2] 작업방법 : 각 단계별 수행할 일
3] 산출물
4] 기법
5] 도구
6. 소프트웨어 개발 방법론 유형
1) 전통적 개발 방식
1] 검토, 승인을 거쳐 순차적하향식(구조적개발)으로 개발이 진행되는 생명주기 모델
2] 이해가 쉬우며 다음단계 진행 시 진행 전에 결과 검증, 관리가 용이
3] 요구도출이 어렵고 설계, 코딩, 테스트 지연이 가능하며 문제발견 지연도 가능
전통적 개발 방식 유형 특징
2) 애자일 방법론
1] 절차보다 사람이 중심이 되어 변화에 유연하고 신속하게 적응, 효율적 개발, 주위 변화 능동, 능동적으로 대응하는 방법
2] 고객의 요구사항 변화에 유연하게 대응하기 위해 일정한 주기를 반복하면서 개발
3] 사용자 스토리 -> 계획 -> 개발 -> 승인, 테스트의 반복
4] 변화 대응 : 계획 준수보다 환경 변화에 즉시 대응
5] 동작소프트웨어 : 포괄적 문서화, 정형적 프로세스를 지양
6] 고객협력 : 계약협상 중심에서 탈치
7] 개인과 상호작용 : 프로세스나 도구보다 구성원간의 의사소통 중시
8] 경험적 프로세스 제어모델로 개발을 관리
9] 제품 백로그(요구사항)을 일정 타입박스 기간 동안 설계, 개발 테스트를 수행, 구현된 소프트웨어를 고객에게 시연하며 이해하기 힘든 산출물이 아닌 경우 동작하는 소프트웨어에 의한 확인 수행을 통해 고객 요구사항을 조기에 명확히 하는 활동을 반복 수행
7. 소프트웨어
1) 하드웨어를 동작 시켜 사용자가 작업을 편리하게 수행하도록 하는 프로그램과 자료구조
2) 프로그램 개발, 운용, 유지보수와 관련된 모든 문서와 정보를 포함
3) 특성
1] 비가시성 : 구조가 외부에 노출되지 않고 코드에 내재
2] 복잡성 : 정형적 구조 없이 복잡, 비규칙, 비정규적
3] 비마모성 " 외부 환경에 의해 마모되지 않고 품질이 나빠짐
4] 복제성 : 간단하고 쉽게 복제 가능
5] 변경성 : 수정 가능한 진화성
6] 순응성 : 요구 및 환경의 변화에 적응하는 유연성
7] 무형성 : 실체적 형체가 없어 FP등으로 유형화하고자 함
4) 소프트웨어 분류
1] 기능에 의한 분류 : 시스템 소프트웨어, 응용 소프트웨어
2] 사용 분야 분류 : 프로그래밍, 문서, 통신, 분산처리, 멀티미디어, 개발, 인공지능
3] 개발 과정 성격 분류 : 프로토타입, 프로젝트 산출물, 패키지
4] 정보처리 방법 번류 : 일관처리, 온라인, 실시간
8. 시스템
1) 특정한 목적을 달성하기 위해 여러가지 관련된 구성요소들이 상호작용하는 유기적 집합체
2) 전체적으로 통일된 하나의 개체를 형성하면서 각각의 고유한 기능을 수행하고 공통적 목표를 달성하기 위해 상호작용하는 요소들의 집합
3) 행위적 관점에서 볼 때 시스템을 투입물을 받아 조직화된 변환과정을 통해 목표에 부합되는 산출물을 만들어내는데 관여되는 요소들의 집합
4) 시스템의 구성 요소
5) 시스템의 구성
1] 입력 : 처리 방법, 데이터, 조건을 시스템에 투입
2] 처리 : 입력된 데이터를 처리 방법과 조건에 따라 처리
3] 출력 : 결과를 시스템에서 산출
4] 제어 : 처리과정이 올바르게 진행되는지 감독
5] 피드백 : 목표 달성을 위해 반복 처리
6) 구조적 측면 특성
1] 입력 - 처리 - 출력 IPO의 구조를 지님
2] 피드백 구조를 지님
3] 계층적 구조를 지님
7) 기능적 측면 특성
1] 목표 지향적 : 시간 지연 유발
2] 상승 작용적 : 시스템 에너지 발생
3] 자기 제어적 : 엔ㅍ트로피 억제
9. 소프트웨어 위기
1) 개발 속도가 하드웨어 개발속도를 따라가지 못해 소프트웨어에 대한 사용자의 요규를 처리할 수 없는 문제가 발생
2) 원인 : 소프트웨어 특징 이해 부족, 소프트웨어 관리 부재, 프로그래밍에만 치중
3) 문제점
1] 개발인력 부족과 인건비 상승
2] 성능 및 신뢰성 부족
3] 개발 기간 지연 및 개발 비용 증가
4] 유지보수가 어려워 비용 증가
5] 소프트웨어 생산성 저하
6] 소프트웨어 품질 저하
10. 소프트웨어 공학의 필요성
1) 소프트웨어 위기를 극복하기 위해 품질과 생산성 향상을 목적으로 함
2) IEEE 정의 : 소프트웨어의 개발, 운용, 유지보수, 폐기 처분에 대한 체계적인 접근 방안
3) FAIRLEY : 체계적으로 생산하고 유지보수
4) BOEHM : 과학적인 지식을 소프트웨어 설계와 제작에 응용
11. 소프트웨어 공학의 접근 방법
1) 도구 : 케이스 도구 사용
2) 방법 : 소프트웨어 구축 기술적 방법 제공
3) 절차 : 개발 방법과 도구가 사용되는 순서, 계층화 기술들을 결합시켜 적잘한 방버으로 개발, 유지
4) 발전과정 : 60년대 소프투에어 공학과 구조적 프로그래밍 시작, 70년대 구조적 분석, 설계 도립, 80년대 하드웨어 가격 하락, 85년 객체지향 기술과 케이스 등의 활용, 재공학 시작
5) 품질
1] 사용자가 요구하는 대로 동작
2] 하드웨어 자원을 효율적으로 이용
3] 일정 시간 내 주어진 조건하에 원하는 기능 실행
4] 처리 정라체 맞게 수행되어 정확한 결과 산출
5] 개발, 유지보수 등이 초기 예상 비용 이내에 수행
6] 적당한 사용자 인터페이스를 제공해 사용 편리
7] 유지보수 용이, 신뢰성 높음
8] 에러 최소화
9] 소프트웨어 사용법, 구조 설명, 성능, 기능이 이해 쉬움
10] 실행 속도 빠르고 기억 용량 적게 차이
6] 생산선
1] 투입된 비용, 노력에 대한 생산량
12. 소프트웨어 공학의 3R
1) 완성된 소프트웨어 프로그램을 기반으로 역공학, 재공학, 재사용을 통해 소프트웨어의 생산성을 극대화 하는 것
2) 필요성
1] SW 위기 극복
2] 개발 생산성 향상
3] 유지보수 비용 절감
4] 소프트웨어 변경 요구사항의 신속한 대응
3) 역공학 : 자동화된 도구의 도움으로 물리적 수준의 소프트웨어 정보를 논리적은 소프트웨어 정보의 서술로 추출하는 프로세스로, 소프트웨어를 분석해 소프트웨어 개발 과정과 데이터 처리 과정을 설명하는 분석 및 설계 정보를 재발견하거나 다시 만들어내는 작업
4) 재공학 : 자동화된 도구로 현존하는 시스템을 점검, 수정하는 프로세스로, 기존 시스템을 이용하여 보다 나은 시스템을 구축하고 새로운 기능을 추가해 소프트웨어 성능을 향상시키는ㄱ ㅓㅅ
5) 재사용 : 이미 개발되어 그 기능, 성능 및 품질을 인정받았던 소프트웨어의 전체 도는 일부분을 다시 사용하는 것