소프트웨어 공학
소프트웨어
프로그램 + 문서 + 데이터(정보)
프로그램
컴퓨터에게 작업 수행시키기 위한 명령의 집합체
소프트웨어의 특징
- 비가시성
- 전체적인 구조 파악이 어렵다
- 복잡성
- 정형화된 구조가 없어 이해하고 관리가 어려움
- 순응성
- 화녕 변화에 따라 적절한 변형 용이
- 비제조성
- 소프트웨어는 개발이다
- 비마모성
- 시간이 지나면, 품질이 저하된다.
- 비조립성
- 주문 제작에 의해 개발된다.
소프트웨어의 분류
응용 소프트웨어
- 사용자의 작업 수행을 돕기 위한 소프트웨어
시스템 소프트웨어
- 응용 소프트웨어 개발자를 위한 소프트웨어
소프트웨어 공학의 정의
실 세계에서 사용자의 실질적인 문제 해결을 위해 소프트웨 어 개발에 과학적인 원리를 체계적으로 적용하는 학문 분야
(체계적, 통제적, 정량적)
소프트웨어 공학과 시스템 공학
소프트웨어 공학 | 시스템 공학 |
소프트웨어 개발에 중점 | – 소프트웨어, 하드웨어, 네트워크, 사용자 상호작용, 주변 환경 고려 – 시스템 전체 구조 설계, 다른 구성 요소들과의 상호작용에 의한 통합에 더욱 관심 |
소프트웨어 공학 기술발전
다른 사이트에서 보면 많이 나온다.
소프트웨어 공학 3가지 주제
process, method, tool
process
제품 생산을 위해 수행되는 일련의 순차적인 활동
계획 -> 분석 -> 설계 -> 구현 -> 테스트 -> 유지보수
이중에서 구현이 제일중요하다.
process의 중요성
일관된 구조 제공
관리를 위한 하부 구조 제공
개선 및 자동화 가능
용어 표준화
process의 주요 활동
계획
- 시스템 정의, 위험 분석, 일정수립
분석
- 사용자 요구를 수집하고, 이해
설계
- 사용자의 기능/비기능 how를 어떻게 제공할 것인지 고민한다.
구현
- 설계 문서를 바탕으로 코드로 변환
테스트
유지보수
Method
프로세스에 적용되는 기술적인 절차
방법과 방법론
-방법
- 단일 활동에 적용
-방법론=페러다임
- 여러 활동에 적용되거나 프로세스 전반에 걸쳐 적용
방법론
- 구조적 방법론
- 시스템의 데이터 흐름에 기초하여 기능 중심으로 분할하고 하향식으로 분석
- 정보공학 방법론
- 데이터 중심의 분석/설계에 의한 데이터 모델링을 중시한다.
- 객체지향 방법론
- 구조적 방법론과 다르게 데이터와 데이터 관련 기능을 하나로 묶어 객체로 정의하여 객체중심으로 분석/설계하는 방법론이다.
- 애자일 방법론
- 문서 작성이나 프로세스, 동구 적용에 치중하는 것과 비교하여 고객과의 상호작용에 중점을 두는 방법론이다.
- 컴포넌트 기반 방법론
- 독립적으로 개발되고 배포될 수 있는 단위인 컴포넌트들을 중심으로 시스템을 조립하여 짧은 시간에 구축하는 방법론이다.
- 정형화 방법론
- 수학적인 이론에 기초하는 방법론
- 논리 표기법은 더욱 일관되며 정확한 명세를 이끌어 낼 수 있다.
tool
CASE
개발 활동, 프로세스, 방법을 지원하는 컴퓨터 시스템
CASE 분류
– 프로젝트 계획 수립 도구
– 분석/설계 모델링 지원 도구
– 소프트웨어 형상 관리 도구
– 요구사항 추적 도구
– 변경관리 도구
– 프로토타이핑 도구
– 프로그래밍 도구
– 테스트 도구
– 재공학 도구
– 프로그램 분석 도구
– 프로젝트 관리 도구
다양한 관점
• 유지보수
• 분석/설계
• 계획
• 테스트
• 문서화
유지보수 관점
과거 프로젝트
- 문제 단순, 단기간 개발
- 개발 후 유지보수
현대 프로젝트
- 문제 복잡, 장기간 개발
- 빈번한 사용자 요구 변경, 실 세계 변화 반영
- 개발 중 유지보수 + 개발 후 유지 보수
분석/설계
유지보수 비용 절감 위해 개발 초기 결함 발견과 수정 필요
- 개발 초기 단계의 오류 발견과 수정은 단지 문서 수정
계획 관점
계획 없이 프로젝트를 통제, 관리하는 것은 불가능하다.
초기 계획 필수적, 그러나 영역 정보 부족으로 정 확한 세부 계획 수립 어려움
테스트 관점
개발 후반부에 수행되는 오류 검사는 개발 초기 에 수행하는 검사에 비해 비용 증가
구현 후 수행되는 독립된 활동이 아니라 소프트웨어 개발 프로세스 전 과정에 걸 쳐 수행되는 활동
- 문서 검토
문서화 관점
- 각 활동의 결과물은 문서로 작성하는 것이 필요
- 만일 작성되지 않는다면 유지보수와 테스트 어 려움
- 문서화 과정 역시 시스템 개발 전 과정을 통하여 수행하는 활동