• 검색 결과가 없습니다.

소개

N/A
N/A
Protected

Academic year: 2021

Share "소개"

Copied!
42
0
0

로드 중.... (전체 텍스트 보기)

전체 글

(1)

소프트웨어 공학 (Software Engineer- ing)

소개

문양세

강원대학교 IT 대학 컴퓨터과학전공

(2)

Software Engineering by Yang-Sae Moon

Page 2

소프트웨어 공학을 배우기에 앞서서 ,

소프트웨어 및 소프트웨어 시스템에 대해서 정의해보고 ,

소프트웨어 위기와 이에 따른 소프트웨어 공학의 필요성을 생각해 본다 .

또한 ,

좋은 소프트웨어란 무엇인지 정의해보고 ,

소프트웨어 공학에서 사용하는 주요 모형들을 살펴본 후 ,

소프트웨어 개발에 영향을 미치는 요소들을 생각해 본다 .

We will cover …

소프트웨어

소프트웨어 공학의 필요성

소프트웨어 공학이란 ?

소프트웨어 공학의 접근 방법

소프트웨어 공학 지식 체계

In this chapter …

소개

(3)

소프트웨어와 우리 생활

소개

의존성 (dependability)

(4)

Software Engineering by Yang-Sae Moon

Page 4

In this chapter …

1.1 소프트웨어

1.2 소프트웨어 공학의 필요성 1.3 소프트웨어 공학이란 ?

1.4 소프트웨어 공학의 접근 방법 1.5 소프트웨어 공학 지식 체계

소개

(5)

실생활과 소프트웨어 ( 컴퓨터 )

리니지 ? 스타크 ? LOL, 배틀그라운드 ? 클래시오브클랜 ?  Oh, NO!

일상사에서… 공과금 고지서 , 항공기 예약 / 발권 , 병원 기록 , 초본 / 등본 , 스마트폰 ,

학교로 보면… 수강 신청 , 성적 입력 및 열람 , 학사 관리 , …

소프트웨어의 중요성 (1/2)

소개

(6)

Software Engineering by Yang-Sae Moon

Page 6

정보 혁명의 토대는 컴퓨터이며 , 그 잠재력은 ? 물론 , 소프트웨어이 다 .

소프트웨어는 과거 “편리” 추구에서 현재는 “생존”에 필수적 요소가 되어 가고 있다 .

정치 , 경제 , 사회 , 문화 , 교육 , 국방 , 예술 , 의료 , 오락 , …

경쟁에서의 승리  제품의 적기 공급  제품 ?  소프트웨어 자체 혹은 내재가 기본…

소프트웨어의 결함  생명과 재산에 치명적 결과

우주왕복선 폭발

지진해일 ( 쓰나미 ) 예보 , …

소프트웨어의 중요성 (2/2)

소개

(7)

소프트웨어 정의

협의 : 프로그램 자체

광의 : 프로그램 + 프로그램의 개발 , 운용 , 보수에 필요한 정보 일체 ( 소프트웨어 생산 결과물 일체 )

소프트웨어 생산

소프트웨어는 프로그램의 동적인 실체

프로그램은 형식 언어로 표현된 지적 노동의 결과물

제조업 vs. 서비스업 ( 소프트웨어는 제작이 아니라 창조적 노력이 포함된 개발 )

닳아 없어지는 것이 아니라 소용없어 못쓰게 됨

논리적인 요소로 구성 ( 유지보수가 어려움 )

소프트웨어의 정의

소개

(8)

Software Engineering by Yang-Sae Moon

Page 8

비가시성 (Invisibility) 테스트 가능 (Testability)

복잡성 (Complexity) 특히 제 3 자가 보았을 경우

변형성 (Conformity)/ 변경성 (Changeability)

장수 (Longevity) 죽지 않는다 . 단지 사라질 뿐이다 .

복제 가능 (Duplicability) 생명공학의 모태 ?

응용에 의존 (Application dependability)

 일반적으로 , 몇 개 핵심 부품을 만들어 조립해 쓸 수가 없다 .

소프트웨어의 특성

소개

(9)

소프트웨어의 유형

소개

(10)

Software Engineering by Yang-Sae Moon

Page 10

유기적으로 상호 작용하는 객체들의 모임

S/W 는 독립적으로 존재하는 것이 아니라 컴퓨터를 기반으로 여러 시스템이 유기적인 관 계를 맺고 있다 .

은행의 업무 전산화 예제 : 현금 자동 인출기 , 중앙 컴퓨터 , 계좌 DB, 은행 업무 처리 절차 , 입출금 전표 , 은행원 , …

특징

시너지 효과 : 독립적인 의미를 갖지 않고 , 통합되었을 때 의미를 가짐

역동적으로 발전 , 변경

상충되는 요구와 이해 관계의 절충 ( 최적의 모범 답안이 아닌 절충안에 해당 ) 교통체계

소프트웨어 시스템

소개

(11)

기능적 분류

응용 소프트웨어 (Application Software): 증권 처리 , 학사 관리 , 워드 프로세서 , …

시스템 소프트웨어 (System Software): 운영체제 , DBMS, Compiler, …

개발 과정에 따른 분류

Prototype

Product: 상품화 이전이나 완성된 소프트웨어

Package: 시험을 거쳐서 상품화된 소프트웨어

( 주문형 소프트웨어 : 고객의 목적에 맞도록 패키지된 소프트웨어 )

하드웨어 환경에 따른 분류

Mainframe

Parallel Processing or Distributed Processing

PC & Workstation, Fault tolerant system

Real time system, In-memory system, mobile system

소프트웨어의 분류 (1/2)

소개

(12)

Software Engineering by Yang-Sae Moon

Page 12

적용 분야에 따른 분류

통신용 , 프로그래밍 언어 , 사용자 인터페이스 , 데이터베이스 , 분산처리 , …

문서 작성 , 거래 처리 , 개발 도구 , 멀티미디어 , …

전자 정부 , 전자 상거래 , 가상 도서관 , …

소프트웨어의 분류 (2/2)

소개

(13)

서브 시스템 : 밀접한 연관이 있는 여러 서브시스템으로 구성

기능적 분할 : 규모가 작은 부속 시스템 ( 서브 시스템 ) 들로 나눌 수 있음

시스템 경계 : 시스템과 주변 환경을 구분하는 경계 , 입력과 출력이 만나는 곳 자동화 경계 : 자동화된 부분과 수동작업 부분을 나누는 경계

시스템의 네 가지 중요 성질

소개

(14)

Software Engineering by Yang-Sae Moon

Page 14

In this chapter …

1.1 소프트웨어

1.2 소프트웨어 공학의 필요성 1.3 소프트웨어 공학이란 ?

1.4 소프트웨어 공학의 접근 방법 1.5 소프트웨어 공학 지식 체계

소개

(15)

제품으로 만든 소프트웨어

견고한 (industrial strength) 소프트웨어

학생이나 아마추어가 만든 소프트웨어 수준이 아님

이식의 용이함 , 사용의 편리함 등 품질 요소가 고려되어야 함

견고하지 않으면 , 사용자 불편을 넘어서 재산과 인명에 피해를 줄 수 있음

소프트웨어 ( 개발의 ) 문제점

(1) 고비용

(2) 지연과 낮은 신뢰도 (3) 유지보수와 재작업

소개

(16)

Software Engineering by Yang-Sae Moon

Page 16

(1) 고비용

LOC(Lines of Code): 소프트웨어 규모를 측정하는데 가장 널리 사용됨 MM(Man-Month): 소프트웨어 개발에 드는 인적 비용

소프트웨어 생산성 : MM 당 생산하는 프로그램의 LOC

경험적 사례 : 5 만 라인은 4 천만 - 1 억 2 천만원 정도의 비용이 듦 ( 인건비 )

소프트웨어 위기

소개

(17)

(2) 지연과 낮은 신뢰도

계획에서 벗어난 컴퓨터 관련 개발 프로젝트

600 여 회사를 조사하였더니 35% 이상

예상대로 작동하지 않는 사례

방위산업 보고 : 70% 이상이 소프트웨어 오류에서 기인

아폴로 로켓의 초기 실패도 소프트웨어에서 기인

자동차 급발진 사고도 소프트웨어 문제일 가능성이 높음

다른 요소 ( 하드웨어 ) 와 다름

전기 , 기계 시스템 : 노후화에 의한 물리적 특성에 의해 오류가 발생함

소프트웨어 : 노후화에 의한 것이 아니며 , 주로 설계 , 개발 과정에 유입된 오류에 의한 것

챌린저호 사고 : 소프트웨어 결함에서 기인

소개

(18)

Software Engineering by Yang-Sae Moon

Page 18

(3) 유지보수와 재작업

소프트웨어의 유지보수가 필요한 이유

여느 제품처럼 부품이 마모되거나 교체할 필요가 있어서 유지보수 하는 것이 아님

시스템에 남아 있는 오류가 있기 때문에 유지보수가 필요함

많은 오류가 시스템 가동된 후에 , 혹은 오랜 사용 후에 발견됨

( 오류가 아니더라도 ) 소프트웨어는 자주 변경됨

소프트웨어는 자주 업그레이드 됨 ( 기능 및 서비스 추가 )

하드웨어 등의 동작 환경이 변할 경우도 변경이 필요함

코드에 ( 사용자 및 개발자의 ) 의도가 잘 드러나지 않음

시간이 지날 수록 의도가 숨겨지며 , 여러 사람이 관련된 경우 특히 그러함

소개

(19)

소프트웨어 개발의 또 다른 문제점

개발 예산이 초과되고 , 일정이 지연되는 경우가 많다 .

개발 일정과 비용 예측이 부정확하다 .

과거 프로젝트에 대한 경험이 잘 축적되지 않을 뿐 아니라 , 과거 데이터가 현재에 잘 적용되지 않는 경우가 많다 .

프로그래머 개인 역량에 따라 소프트웨어 개발 성패가 좌우된다 .

프로그래머 개인의 능력과 경험이 중요하여 , 작업의 정량적인 분석이 어렵다 .

잘 키운 슈퍼 프로그래머 하나가 열 … 안 부럽다 .

소프트웨어 품질을 평가하기가 어렵다 .

체계적인 시험이 없으면 , 운영 중에 많은 오류가 발생한다 .

다른 공산품과 같은 불량품 관리 , 품질 보증에 대한 확실한 정량적 개념이 없다 .

 다른 공산품의 경우 , “ 불량률 0 에 도전 ,” “ 무재해 100 만시간 달성 목표”

소개

(20)

Software Engineering by Yang-Sae Moon

Page 20

In this chapter …

1.1 소프트웨어

1.2 소프트웨어 공학의 필요성 1.3 소프트웨어 공학이란 ?

1.4 소프트웨어 공학의 접근 방법 1.5 소프트웨어 공학 지식 체계

소개

(21)

소프트웨어 공학

소프트웨어 공학의 정의

질 좋은 소프트웨어를 경제적으로 생산하기 위하여 공학 , 과학 및 수학적 원리와 방법을 적용하는 것 - Watts Humphrey, SEI

소프트웨어의 개발 , 운용 , 유지보수 및 소멸에 대한 체계적인 접근 방법 - IEEE Computer Society

품질 , 효율 , 비용에 관한 공학적인 접근 원리 - F. Brooks

소프트웨어 공학의 목표

품질 좋은 소프트웨어를

최소의 비용으로

계획된 일정에 맞추어 개발한다 .

 품질 (Quality), 생산성 (Productivity)

소개

(22)

Software Engineering by Yang-Sae Moon

Page 22

다루는 문제

사용자의 요구를 만족시키기 위하여 , 소프트웨어를 체계적으로 개발하는 것

소프트웨어 공학에서 다루는 주요 요소

(1) 규모 문제 (2) 품질과 생산성 (3) 일관성과 재현성 (4) 변경

소개

(23)

(1) 규모 문제

수십 만 , 수백 만 줄의 프로그램은 , 수백 줄의 프로그램을 개발하는 데 사용하는 방법과는 다른 방법을 적용해야 함

엔지니어링 식 접근 방법 – 방법 , 절차 , 도구 사용

소개

(24)

Software Engineering by Yang-Sae Moon

Page 24

(2) 품질과 생산성 (1/2)

엔지니어링 작업에서는 비용 , 일정 , 품질과 같은 변수가 중요 비용 : Man-Month 로 측정

( 인건비와 직결 )

일정 : 짧은 time-to-market ( 기술의 급격한 발전에 따라 갈수록 짧아 짐 )

품질

소개

(25)

(2) 품질과 생산성 (2/2)

소개

품질을 나타내는 속성

기능성 (functionality):

소프트웨어가 사용될 때 원래 정한 또는 내재된 요구를 만족하는 기능을 제공하는 능력

신뢰성 (reliability):

소프트웨어가 정해진 수준의 성능을 유지할 수 있는 능력

사용용이성 (usability):

쉽게 이해되고 배울 수 있고 사용될 수 있는 능력

효율성 (efficiency):

사용되는 자원의 양에 따라 적절한 성능을 제공할 수 있는 능력

유지보수성 (maintainability):

정정 , 개선 , 적응시킬 목적으로 수정될 수 있는 능력

이식성 (portability):

별도의 작동이나 수단 없이 다양한 환경에서 적응될 수 있는 능력

(26)

Software Engineering by Yang-Sae Moon

Page 26

(3) 일관성과 재현성

일관성

프로젝트의 결과를 어느 정도 정확하게 예측가능

더 높은 품질의 제품을 생산 ( 기관 / 회사는 일관성 있는 품질 수준을 유지해야 )

프로세스의 표준화가 필요

ISO 9001

CMM(Capability Maturity Model)

재현성

개발하는 시스템 마다 높은 품질과 생산성을 갖도록 만드는 것

개발 능력 , 결과의 재현성  일관성과 유사한 개념

소개

(27)

(4) 변경

소프트웨어는 계속 진화하고 변경됨

비즈니스 환경 및 소프트웨어 기술도 빠르게 발전

변경을 조절하고 수용하는 것이 또 하나의 과제

소개

(28)

Software Engineering by Yang-Sae Moon

Page 28

In this chapter …

1.1 소프트웨어

1.2 소프트웨어 공학의 필요성 1.3 소프트웨어 공학이란 ?

1.4 소프트웨어 공학의 접근 방법 1.5 소프트웨어 공학 지식 체계

소개

(29)

소프트웨어 공학의 접근 방법 (1/2)

프로젝트를 수행하는 동안 얻은 품질과 생산성은 여러 가지 요인에 의해 좌우됨

품질을 좌우하는 세 가지 :

인력 , 프로세스 , 기술  프로젝트 삼각 균형 (triangle seesaw)

높은 품질과 생산성은 좋은 기술 , 좋은 프로세스 ( 혹은 방법 ), 잘 훈련 된 인력을 사용하여 얻을 수 있음

소개

(30)

Software Engineering by Yang-Sae Moon

Page 30

소프트웨어 공학의 접근 방법 (2/2)

소프트웨어 공학의 기본 접근법

소프트웨어를 개발하는 프로세스를 개발된 제품 , 즉 소프트웨어와 분리함

적절한 “소프트웨어 프로세스”의 설계와 관리는 소프트웨어 공학의 중요 연구 목표임

소프트웨어 공학은 소프트웨어 제작 과정에 집중

알고리즘 , 운영체제 , 데이터베이스 등은 소프트웨어 제품 자체에 초점

소프트웨어 엔지니어링 작업의 종류

소프트웨어 개발 프로세스 – 시스템에 대한 비전과 개념을 목표로 하는 컴퓨터 환경에 실 행되는 소프트웨어로 바꾸는 작업

품질 보증 – SQA(Software Quality Assurance) 개발작업이 적절히 수행되었는지 확 인

프로젝트 관리 – 개발과 품질보증 작업을 관리하고 감독

소개

(31)

단계적 개발 프로세스 (1/3)

소개

단계적 개발 프로세스를 따르는 이유

소프트웨어의 문제를 나눠 여러 개발 단계에서 다른 관점을 다루기 때문

개발하는 동안 정해진 시점에 품질과 진행을 체크할 수 있음

(32)

Software Engineering by Yang-Sae Moon

Page 32

단계적 개발 프로세스 (2/3)

소개

요구분석 : 소프트웨어 시스템이 풀어야 할 문제를 이해하기 위한 작업

시스템이 목표를 어떻게 성취 ? Vs 시스템으로부터 무엇이 필요한가 ?

문제 분석 : 문제와 그 배경을 잘 이해하고 개발할 시스템의 요구 찾기

요구 정리 : 요구명세서 (requirement specification)

 시스템의 기능 이외에도 설계에 영향을 주는 모든 요인을 문서에 기술

설계 : 요구문서에 기술된 문제의 솔루션을 계획

요구를 어떻게 만족시킬 것인지 추구

아키텍처 설계 : 시스템을 여러 컴포넌트의 집합체로 보고 각 컴포넌트들이 요청한 결과 를 위하여 어떻게 상호작용 하는지에 초점

상세설계 : 각 모듈의 내부 논리를 작성

(33)

단계적 개발 프로세스 (3/3)

소개

코딩

시스템 설계를 프로그래밍 언어로 변환

코딩 작업 중에는 읽기 쉽고 이해하기 쉬운 프로그램이 되어야함

단순함과 명확성을 추구

테스팅 : 소프트웨어의 결함을 찾아냄

소프트웨어의 문제를 나눠 여러 개발 단계에서 다른 관점을 다루기 때문

소프트웨어 개발 단계에서 사용되는 중요한 품질 제어 수단

프로그램에 포함된 요구 , 설계 , 코딩 오류를 밝힘

단위 테스팅 (unit testing): 모듈이나 컴포넌트를 개별적으로 시험

통합 테스팅 (integration testing): 모듈 사이의 연결을 시험

인수 테스팅 (acceptance testing): 시스템이 잘 실행되는지 고객에게 데모

(34)

Software Engineering by Yang-Sae Moon

Page 34

일반적인 개발 단계

소개

단계 초점 주요작업과 기술 결과물

분석 시스템을 위하여 무엇을 만들 것인가 ?

1. 분석 전략 수립 (3 장 ) 2. 요구 결정 (3 장 ) 3. 사용 사례 분석 (4 장 ) 4. 구조적 모델링 (6 장 ) 5. 동적 모델링 (6 장 )

요구 명세서

설계 시스템을 어떻게 구축할 것인가 ?

6. 설계 전략 수립 (7 장 ) 7. 아키텍처 설계 (5 장 ) 8. 인터페이스 설계 (7 장 ) 9. 프로그램 설계

10. 데이터베이스 , 파일 설계 (7 장 )

설계 명세서

구현 시스템의 코딩과 단위 시험

11. 프로그래밍 (8 장 ) 12. 단위 테스팅 (9 장 )

13. 시스템 안정화 및 유지보수 (10 장 )

새 시스템 , 유지보수 계

테스팅 시스템이 요구에 맞게 실행되나 ?

14. 통합 테스팅 (9 장 ) 15. 시스템 테스팅 (9 장 ) 16. 인수 테스팅 (9 장 ) 17. 시스템의 설치 (9 장 ) 18. 프로젝트 관리 계획

테스팅 결과 보고서

(35)

품질 보증

소개

품질 보증 : 개발되고 있는 소프트웨어가 요구와 품질 수준을 만족시킬 것이라는 것을 보장하는 작업

검토 (verification)

개발작업이 프로젝트를 위해 선택된 프로세스와 방법에 맞게 수행되었는지 체크

요구된 소프트웨어 결과물이 품질 수준에 맞게 생산되었는지 검사

확인 (validation) : 개발 프로세스에 의해 생성된 결과물의 정확성을 체 크

정적 확인 (static validation): 소프트웨어를 실행시키지 않고 결과물의 정확성을 체크

동적 확인 (dynamic validation) : 소프트웨어를 실행시켜 잘 작동하는지 확인

테스팅

동적 확인 작업 , 테스트 결과가 예상되는 결과와 일치하는지 체크

(36)

Software Engineering by Yang-Sae Moon

Page 36

프로젝트 관리

소개

프로세스와 관련된 이슈를 적절히 관리

진행 과정에 자원을 어떤 작업에 할당할 것인지 기술

소프트웨어 계획은 프로젝트의 개발 프로세스를 모니터링하고 제어하는데 사용되는 기준이 됨

프로세스 관리

객관적인 데이터가 필요  소프트웨어 메트릭이 사용

프로덕트 메트릭 : 개발한 프로덕트 , 소프트웨어 자체의 특성을 계량화

프로세스 메트릭 : 소프트웨어 개발에 사용된 프로세스의 생산성을 계량화

(37)

In this chapter …

1.1 소프트웨어

1.2 소프트웨어 공학의 필요성 1.3 소프트웨어 공학이란 ?

1.4 소프트웨어 공학의 접근 방법 1.5 소프트웨어 공학 지식 체계

소개

(38)

Software Engineering by Yang-Sae Moon

Page 38

SE 와 다른 분야와의 관계

소개

(39)

SWEBOK (1/2)

소개

SWEBOK: Software Engineering Body of Knowledge [IEEE, 2004]

(40)

Software Engineering by Yang-Sae Moon

Page 40

SWEBOK (2/2)

소개

(41)

In this chapter …

1.1 소프트웨어

1.2 소프트웨어 공학의 필요성 1.3 소프트웨어 공학이란 ?

1.4 소프트웨어 공학의 접근 방법 1.5 소프트웨어 공학 지식 체계

소개

(42)

Software Engineering by Yang-Sae Moon

Page 42

Homework #1

소개

참조

관련 문서

 시스템 소프트웨어는 컴퓨터 하드웨어의 작동을 통제하고 응용 프로그램의 실행을 지원한다.  운영체제는 컴퓨터 하드웨어를 통제하고

실용 연구자: 실생활에 적용가능한 소프트웨어 개발.B. 소프트웨어 수요는

• 제품을 개발하거나 유지보수하는 과정에서 변경(change) 을 통제하는 절차는 소프트웨어 개발 과정의 산출물들을 관 리하고 고품질의 소프트웨어를 얻기

– 협업활동을 지원하기 위한 기능과 서비스로 문서작성, 논평, 정보공유, 화상회의, 일정관리, 이메일 및 네트워크 기반의 협업 지원 소프트웨어

z 프로그램 + 프로그램의 개발, 운용, 보수에 필요한 정보 일체(소프트웨어 생산 결과물 일체).

정보 시스템 사용자로부터 정보를 입수하고, 이를 가공하여 저장하고 적 절한 양식으로 사용자에게 출력하는 작업이 주인 시스템이 다.. 각종 공공 기관, 금융기관, 회사에서

③ 과업심의위원회는 별표 1 소프트웨어 개발사업의 적정 사업기간 산정기준에 따라 적정 사업기간을 산정하고 별지 제3호서식 소프트웨어 개발사업의 적정 사업기간

소프트웨어 업그레이드는 http://www.comfile.co.kr/download.html 방문하셔서 PIC TOOL 관련 소프트웨어 및 사용설명서 다운로드에서 다운 받을 수