전산.정보처리.정보보안/소프트웨어공학

[소프트웨어 공학의 개념] 소프트웨어 공학의 개념

Ethelnoth 2014. 6. 12. 16:00

1. 소프트웨어 공학( Software Engineering )

1) 정의 
① 컴퓨터 하드웨어에서 신뢰성 있게 운용되는 소프트웨어를 경제성 있게 
개발하기 위해 공학적 원리를 응용하고 확립시킨 이론( Bauer )
② 컴퓨터 프로그램을 설계하고 개발하며, 개발,운용,유지보수에 관련된 
문서를 작성하는 데 필요한 과학적인 지식의 실용화 이다.( Boehm )
③ 소프트웨어의 개발, 운용,유지보수 및 폐기처분을 위한 제도적인 접근 방안이다.( IEEE )
④ 전산학, 경제학, 경영과학 및 의사소통기술과 문제해결을 위한 공학적인
접근방안을 토대로 소프트웨어 개발에 임하는 신기술 체계이다.( Fairley )
⑤ 최소의 경비로 품질 높은 소프트웨어 상품의 개발, 유지보수 및 관리를 위한
모든 기법, 도구, 방법론의 총칭으로서, 전산학( 기술적 요소 ), 경영학( 관리적 요소 ), 
심리학( 융합적 요소 )을 토대로 한 종합학문이다.
⑥ 과학적 사고를 소프트웨어 설계와 제작에 응용하며, 개발과 운영, 유지보수에 필요한
문서를 작성하는 모든 작업의 총칭으로 소프트웨어 공학자의 생산성 향상을 위하여
도구와 방법론을 제공한다.

2) 특징
① 비교적 큰 규모의 소프트웨어 시스템을 대상으로 한다.
② 프로그래밍은 개인적인 작업이나 소프트웨어 공학은 팀을 이루어 하는 작업이다.
③ 소프트웨어 제품의 체계적 생산과 유지보수에 관련된 기술적, 관리적인 원리이다.
④ 시스템 개발에 있어서 기술적인 사항과 비기술적인 사항을 통합한다.
⑤ 소프트웨어의 제작부터 운영에 이르기까지 그 생산성을 높이기 위해 기술적인 분야는
물론 인간적인 요소에 대한 개발 및 운영의 방법론을 제공한다.
⑥ 소프트웨어공학은 개발 위주가 아니라 사용자의 요구를 전략적으로 계획하기 위한
준비 단계와 사용자가 시스템을 사용하고 효과를 얻을 수 있는 운용단계를 중시한다.

3) 소프트웨어 공학의 목적
① 소프트웨어의 개발 및 유지보수에 있어서 생산성과 품질향상
② 소프트웨어 개발 과정에서 필요한 지식과 기술을 연습하여 능숙하게 하는 것
③ 유지보수가 용이한 소프트웨어 개발, 재사용 가능한 소프트웨어 개발
④ 비용대비 효과적인 소프트웨어 개발
⑤ 주어진 비용과 자원 안에서 품질 좋은 소프트웨어를 기간 내에 생산하는 것이
소프트웨어 공학의 주된 목적

4) 소프트웨어 공학의 역할
① 소프트웨어 개발의 자동화 및 기계화
② 소프트웨어 품질 보증 방법
③ 소프트웨어 공학자의 기술 향상
④ 소프트웨어의 재사용성( 재사용기술 )
⑤ 소프트웨어 문서 작성
⑥ 정보처리 관련 기술 정보의 제공 및 교환
⑦ 소프트웨어 유통과 사회적인 제도의 뒷받침

※ 소프트웨어 공학의 주요 관심분야
ⓐ 비용 산정 기법 ⓑ Process 개발 공정 관리 기법 ⓒ CASE 의 도구화 ⓓ 소프트웨어 품질 척도 측정 개발

2. 프로세스 , 방법 , 도구
1) 프로세스( Process )
(가) 정의
① 어떤 목표를 수행하는 순차적인 단계로서, 원하는 결과를 만들기 위하여 
사람, 절차, 방법, 도구를 통합시키는 수단이다.
② 어떤 작업의 산출문( work product )이 만들어질 때 행해지는 Activity, Action, task들의 
모임을 말한다.
③ 소프트웨어를 공학화 할 때 채택하는 접근법으로, 명확한 순서를 입력물( Input )을 
원하는 결과( Output )로 전환하는 일련의 과정이다.
④ 기술 계층을 묶어주는 접착제 역할을 하며 컴퓨터 소프트웨어를 합리적으로 빨리 
개발 할 수 있게 해 준다.
⑤소프트웨어 개발과정에서 프로젝트 계획, 설계문서, 코드, 시험사례, 사용자 매뉴얼 등을 개발하고,
유지보수하기 위하여 사용하는 활동, 방법, 기법 등이 일련의 순서를 가지는 집합이다.
⑥ 소프트웨어 프로젝트의 관리 및 제어를 위한 기반을 형성하고 기술적인 방법이 적용 되고 
작업 산출물( 모델, 문서, 데이터, 보고서, 서식 등 )이 만들어지고, 이정표가 수립되고,
품질이 보장되며, 변경이 적절히 관리될 수 있는 상황을 확립한다.
(나) 프로세스 분류

① 비정형( informal ) : 상세 프로세스 모델이 없다. 개발 팀은 그들만의 방식을 선택한다.

예) 프로토타입 , 단기 lifetime 시스템 , 4GL 비즈니스 시스템, 소/중규모 시스템

② 관리( managed ) : 개발 프로세스를 이끌 프로세스 모델을 정의한다.

예) 대규모 시스템 , 장기 lifetime 제품 

③ 방법적( Methodical ) : UP와 같은 특정 개발 방법론이 프로세스를 지원한다.

예) well-understood application domain, re-engineered system.

개선( improving ) : 자동화된 CASE 도구가 프로세스를 지원한다.


2) 방법( Methods )

- 기법( Techniques ) : 일종의 알고리즘으로, 보편적으로 논문도서를 통해 공개한 기술

① 기법의 실용화 방안 즉, 어떤 결과를 생성하기 위하여 적용하는 기법과 절차를 의미한다.

구조적 분석.설계나 객체지향 분석.설계 등 개발.유지보수 절차와 문서화 등이 포함된 개념이다.

② 커뮤니케이션, 요구분석, 설계 모델링, 프로그램 작성, 테스팅 그리고 지원을 포함하는

넓은 범위의 테스크들로 이루어진다.

③ 소프트웨어 개발 여러단계 중 한 단계에만 관심을 둔 것을 방법( method )이라 하고

전체 단계를 지원하는 것을 방법론( methodology )이라 부른다.


3) 방법론( Methodologies )

- 기법 , 방법 , 교육 , 자문 등을 포함한 실무적인 관점에서 하나의 체계로 묶어진 것을 말한다.

① 프로세스 중심 방법론 : 1970년대에 제시되어 지금까지 가장 많이 알려진 것으로 자료의 변환과정,

즉 프로세스를 강조하여 설계하는 방법이다.( 하향식 )

= 자료흐름 방법론 , 절차식 방법론 , 구조적 방법론

② 자료중심 방법론 : 먼저 자료의 구조가 정의되면 데이터베이스에서 중요하게 사용되는

E-R다이어그램을 토대로 프로세스를 파악한다.( 하향식 ) = 정보공학 방법론

③ 객체지향 방법론 : 자료와 프로세스를 묶어 생각하는 방법이다. 1980년 후반부터 모듈화,

정보은닉, 재사용 가능성이 인정되면서 급속도로 전파되었다.( 상향식 )


* 개발방법론 패러다임

방법론의 암흑기 19070년( 프로그램은 예술이다. ) ->

구조적 방법론의 시대 1980년( 데이터의 흐름이 설계의 기본 ) ->

정보공학 방법론의 시대 1990년( 데이터가 시스템 구성의 안정적 요소

 , 사업을 지원할 수 있는 시스템 개발이 목표 ) ->

객체지향 방법론의 시대 2000년( 데이터 , 프로세스 , 행동의 통합 )


4) 도구( Tool )

① 기법이 방법으로 실용화 될 수 있고 도구(tools)로 발전해 자동화를 꾀할 수 있다.

② 프로세스와 방법을 위해 자동적 또는 반자동적 지원을 한다.

③ 하나의 도구에 의해 생성된 정보가 다른 도구에 의해 사용될 수 있도록 도구들이

통합되면 소프트웨어 개발 지원 시스템이 구축된다.


3. 소프트웨어 공학의 역사

1) 1960년대

① IBM 360/OS 개발 시 사태의 심각성 제기

② 1968년에 NATO회의에서 "소프트웨어 공학" 이라는 단어를 탄생시키면서

소프트웨어 위기를 인식하기 시작

③ Dijkstra는 이 무렵 GOTO 문의 유해성의 제기 -> 소프트웨어 개발에 구조적이고

공학적인 접근방안의 시도


2) 1970년대

① 소프트웨어 공학이 학문으로 정착되었으며, 소프트웨어 품질과 생산성 문제 대두

② 구조적 프로그래밍에서 더 나아가 구조적 분석 및 설계의 개념이 소프트웨어

위기의 극복 수단으로 각광 받기 시작

③ 소프트웨어 생명주기( life-cycle )와 개발도구( tools )의 제안

④ 미국 전기전자공학회( IEEE )의 소프트웨어 신뢰성과 공학기법에 관한 심포지엄


3) 1980년대 전반

① 구조적 방법, Jackson 방법, Warnier-Orr 방법 등 분석.설계 방법들의 활용과 시험,

유지보수, 프로젝트 관리, 개발환경 등 소프트웨어 개발 기술의 발전

② 소프트웨어 공장 개념 탄생


4) 1980년대 후반

① 객체지향 분석.설계.프로그래밍, 4세대 언어, 소프트웨어 재사용, CASE, 피플웨어( peopleware ),

정보공학, 품질보증, 형상관리, 프로토타이핑 등으로 개발 및 관리

② 소프트웨어 생산보다는 사람과 도구와 관리기술의 병행이 중요하다는 방법론 등장