430 likes | 878 Views
소프트웨어 공학 (Software Engineering ) 소개 문양세 강원대학교 IT 대학 컴퓨터과학전공. In this chapter …. 소개. 소프트웨어 공학을 배우기에 앞서서 , 소프트웨어 및 소프트웨어 시스템에 대해서 정의해보고 , 소프트웨어 위기와 이에 따른 소프트웨어 공학의 필요성을 생각해 본다 . 또한 , 좋은 소프트웨어란 무엇인지 정의해보고 , 소프트웨어 공학에서 사용하는 주요 모형들을 살펴본 후 , 소프트웨어 개발에 영향을 미치는 요소들을 생각해 본다 .
E N D
소프트웨어 공학 (Software Engineering) 소개 문양세 강원대학교 IT대학 컴퓨터과학전공
In this chapter … 소개 • 소프트웨어 공학을 배우기에 앞서서, • 소프트웨어 및 소프트웨어 시스템에 대해서 정의해보고, • 소프트웨어 위기와 이에 따른 소프트웨어 공학의 필요성을 생각해 본다. • 또한, • 좋은 소프트웨어란 무엇인지 정의해보고, • 소프트웨어 공학에서 사용하는 주요 모형들을 살펴본 후, • 소프트웨어 개발에 영향을 미치는 요소들을 생각해 본다. • We will cover … • 소프트웨어와 시스템 • 다루는 문제 • 도전 과제 • 접근 방법 • 근본 지식
소프트웨어와 우리 생활 소개 의존성 (dependability)
In this chapter … 소개 1.1 소프트웨어 1.2 다루는 문제 1.3 도전 과제 1.4 접근 방법 1.5 근본 지식
소프트웨어의 중요성 소개 • 실생활과 소프트웨어(컴퓨터) • 리니지? 스타크? 서든어택? 테일즈러너? 블소? Oh, NO! • 일상사에서… 공과금 고지서, 항공기 예약/발권, 병원 기록, 초본/등본, 스마트폰, … • 학교로 보면… 수강 신청, 성적 입력 및 열람, 학사 관리, … • 정보 혁명의 토대는 컴퓨터이며, 그 잠재력은? 물론, 소프트웨어이다. • 소프트웨어는 과거 “편리” 추구에서 현재는 “생존”에 필수적 요소가 되어가고 있다. • 정치, 경제(1차, 2차 3차 산업 공통), 사회, 교육, 국방, 예술, 의료, 오락, … • 경쟁에서의 승리 제품의 적기 공급 제품? 소프트웨어 자체 혹은 내재가 기본… • 소프트웨어의 결함 생명과 재산에 치명적 결과 • 우주왕복선 폭발 • 지진해일(쓰나미) 예보, …
NEIS 오류 소개
소프트웨어의 정의 소개 • 소프트웨어 정의 • 협의: 프로그램 자체 • 광의: 프로그램 + 프로그램의 개발, 운용, 보수에 필요한 정보 일체(소프트웨어 생산 결과물 일체) • 소프트웨어생산 • 소프트웨어는 프로그램의 동적인 실체 • 프로그램은 형식 언어로 표현된 지적 노동의 결과물 • 제조업 vs. 서비스업(소프트웨어는 제작이 아니라 창조적 노력이 포함된 개발) • 닳아 없어지는 것이 아니라 소용없어 못쓰게 됨 • 논리적인 요소로 구성(유지보수가 어려움) • 소프트웨어 산업(2012년 국내 SW 시장은 250억달러 규모)
소프트웨어의 특성 소개 비가시성(Invisibility) 테스트 가능(Testability) 복잡성(Complexity) 특히 제3자가 보았을 경우 변형성(Conformity)/변경성(Changeability) 장수(Longevity) 죽지 않는다. 단지 사라질 뿐이다. 복제 가능(Duplicability) 생명공학의 모태? 응용에 의존(Application dependability) 일반적으로, 몇 개 핵심 부품을 만들어 조립해 쓸 수가 없다.
소프트웨어 시스템 소개 • 유기적으로 상호 작용하는 객체들의 모임 • S/W는 독립적으로 존재하는 것이 아니라 컴퓨터를 기반으로 여러 시스템이 유기적인 관계를 맺고 있다. • 은행의 업무 전산화 예제: 현금 자동 인출기, 중앙 컴퓨터, 계좌 DB, 은행 업무 처리 절차,입출금 전표, 은행원, … • 특징 • 시너지 효과: 독립적인 의미를 갖지 않고, 통합되었을 때 의미를 가짐 • 역동적으로 발전, 변경 • 상충되는 요구와 이해 관계의 절충 (최적의 모범 답안이 아닌 절충안에 해당) 교통체계 • 소프트웨어 자체도 하나의 시스템임
정보 시스템 (Information System) 소개 • 자료의 분류, 저장, 검색에 초점 • 데이터베이스를 대화식(interactive)으로 접근 • 조직의 문제 해결을 위한 도구 • 정보 시스템의 예제 • 항공권 예약 시스템 • 신용 카드 검색 서비스 • 뱅킹시스템 • 정보 시스템의 특징 • 대규모 자료를 관리하며, (일반적으로) 정적이 아님 • 시스템 분석과 유지보수가 중요함 • MIS (Management Information System, 경영 정보 시스템) [위키] • 운영, 관리, 의사결정을 위하여 정보를 제공하는 시스템 • DSS(Decision Support System), KDD(Knowledge Discovery in Database)
제어 시스템 (Control System) 소개 • 사건을 감지하여 처리하고 자동적으로 보고 • 센서의 감지 (Ubiquitous Sensors) • 제어 기기의 상태 보고 • 운영자의 입력 처리 • 사용자 및 운영자 인터페이스 • 제어 시스템 예제 • 교통 제어 • 공정 제어 컨베이어 벨트 제어 • 수치 제어 • 의료 시스템 초음파 검사, 메디슨… • 무기 ( DARPA, FBI, … 테러 방지) • 항공 제어 • 재난, 방재 산업 산불 감지, 지진 감지
(오리지널) 탑재 시스템 (Embedded System) 소개 • 주된 기능이 계산이 아닌 시스템의 구성 요소의 일부(A system that is logically incorporated in a larger system whose primary function is not computation.) • 탑재 시스템 예제 • 전자 기계 장치, 공정 제어 시스템 • 비행기 유도, 스위칭 시스템(교환기 등) • 환자 감시 시스템, 레이다 추적 시스템 • 탑재 시스템 특징 • 대규모, 장기 사용, 테스트하기 어려움 • 인터페이스가 복잡, 비동기, 병렬, 분산 • 대규모 자료를 접근, 변경, 출력 • 실시간 제어인터페이스 • 엄격한 요구: 실시간 반응, 고장에 대한 안전, 신뢰성
(요즘의) Embedded System 소개 • 소형 디바이스에 들어가는 소프트웨어 • PDA, 휴대폰용 운영체제, 게임, 영상 재생, … • 소형 센서에 탑재되는 소프트웨어 • … • Embedded Software를 어떻게 배워~ • 프로그램(C, Java, Assembly, …)을 잘하고, • 운영체제(Windows, UNIX/Linux), DBMS를 잘 이해하는 등의 • 기본에 충실하면 쉽게 적응할 수 있어요… • 안드로이드를 배워 봅시다.
소프트웨어의 분류 (1/2) 소개 • 기능적 분류 • 응용 소프트웨어(Application Software): 증권 처리, 학사 관리, 워드 프로세서, … • 시스템 소프트웨어(System Software): 운영체제, DBMS, Compiler, … • 개발 과정에 따른 분류 • Prototype • Product: 상품화 이전이나 완성된 소프트웨어 • Package: 시험을 거쳐서 상품화된 소프트웨어(주문형 소프트웨어: 고객의 목적에 맞도록 패키지된 소프트웨어) • 하드웨어 환경에 따른 분류 • Mainframe • Parallel Processing or Distributed Processing • PC & Workstation, Fault tolerant system • 모바일 디바이스 스마트폰
소프트웨어의 분류 (2/2) 소개 • 적용 분야에 따른 분류 • 통신용, 프로그래밍 언어, 사용자 인터페이스, 데이터베이스, 분산처리, … • 문서 작성, 거래 처리, 개발 도구, 멀티미디어, … • 전자 정부, 전자 상거래, 가상 도서관, …
시스템 소개 • 네 가지 중요 성질 • 서브 시스템: 밀접한 연관이 있는 여러 서브시스템으로 구성 • 기능적 분할: 규모가 작은 부속 시스템(서브 시스템)들로 나눌 수 있음 • 시스템 경계: 시스템과 주변 환경을 구분하는 경계, 입력과 출력이 만나는 곳 • 자동화 경계: 자동화된 부분과 수동작업 부분을 나누는 경계
In this chapter … 소개 1.1 소프트웨어 1.2 다루는 문제 1.3 도전 과제 1.4 접근 방법 1.5 근본 지식
제품으로 만든 소프트웨어 소개 • 견고한(industrial strength) 소프트웨어 • 학생이나 아마추어가 만든 소프트웨어 수준이 아님 • 이식의 용이함, 사용의 편리함 등 품질 요소가 고려되어야 함 • 견고하지 않으면, 사용자 불편을 넘어서 재산과 인명에 피해를 줄 수 있음 • 소프트웨어 (개발의) 문제점 • 고비용 • 지연과 낮은 신뢰도 • 유지보수와 재작업
(1) 고비용 소개 • LOC로 계산한 소프트웨어 비용 사례 • (작은 프로그램도) 5만 라인은 넘음 5만 라인은 4천만원 내지 1억 2천만원 정도의 비용이 듦 (인건비) • 1억원의 소프트웨어가 1천만원 정도의 하드웨어에서 실행됨 • 소프트웨어 위기
(2) 지연과 낮은 신뢰도 소개 • 계획에서 벗어난 컴퓨터 관련 개발 프로젝트 • 600여 회사를 조사하였더니 35% 이상 • 예상대로 작동하지 않는 사례 • 방위산업 보고: 70% 이상이 소프트웨어 오류에서 기인 • 아폴로 로켓의 초기 실패도 소프트웨어에서 기인 • 자동차 급발진 사고도 소프트웨어 문제일 가능성이 높음 • 다른 요소(하드웨어)와 다름 • 전기, 기계 시스템: 노후화에 의한 물리적 특성에 의해 오류가 발생함 • 소프트웨어: 노후화에 의한 것이 아니며, 주로설계,개발 과정에 유입된 오류에 의한 것 • 챌린저호 사고: 소프트웨어 결함에서 기인
(3) 유지보수와 재작업 소개 • 소프트웨어의 유지보수가 필요한 이유 • 여느 제품처럼 부품이 마모되거나 교체할 필요가 있어서 유지보수 하는 것이 아님 • 시스템에 남아 있는 오류가 있기 때문에 유지보수가 필요함 • 많은 오류가 시스템 가동된 후에, 혹은 오랜 사용 후에 발견됨 • (오류가 아니더라도) 소프트웨어는 자주 변경됨 • 소프트웨어는 자주 업그레이드 됨 (기능 및 서비스 추가) • 하드웨어 등의 동작 환경이 변할 경우도 변경이 필요함 • 코드에 (사용자 및 개발자의) 의도가 잘 드러나지 않음 • 시간이 지날 수록 의도가 숨겨지며, 여러 사람이 관련된 경우 특히 그러함
소프트웨어 개발의 또 다른 문제점 소개 • 개발 예산이 초과되고, 일정이 지연되는 경우가 많다. • 개발 일정과 비용 예측이 부정확하다. • 과거 프로젝트에 대한 경험이 잘 축적되지 않을 뿐 아니라, 과거 데이터가 현재에 잘 적용되지 않는 경우가 많다. • 프로그래머 개인 역량에 따라 소프트웨어 개발 성패가 좌우된다. • 프로그래머 개인의 능력과 경험이 중요하여, 작업의 정량적인 분석이 어렵다. • 잘 키운 슈퍼 프로그래머 하나가 열 … 안 부럽다. • 소프트웨어 품질을 평가하기가 어렵다. • 체계적인 시험이 없으면, 운영 중에 많은 오류가 발생한다. • 다른 공산품과 같은 불량품 관리, 품질 보증에 대한 확실한 정량적 개념이 없다. 다른 공산품의 경우, “불량률 0에 도전,” “무재해 100만시간 달성 목표”
In this chapter … 소개 1.1 소프트웨어 1.2 다루는 문제 1.3 도전 과제 1.4 접근 방법 1.5 근본 지식
소프트웨어 공학 소개 • 소프트웨어 공학의 정의 • 질 좋은 소프트웨어를 경제적으로 생산하기 위하여 공학, 과학 및 수학적 원리와 방법을 적용하는 것 - Watts Humphrey, SEI • 소프트웨어의 개발, 운용, 유지보수 및 소멸에 대한 체계적인 접근 방법 - IEEE Computer Society • 품질, 효율, 비용, 인정에 관한 공학적인 접근 원리 - F. Brooks • 소프트웨어 공학의 목표 • 품질 좋은 소프트웨어를 • 최소의 비용으로 • 계획된 일정에 맞추어 개발한다. 품질(Quality), 생산성(Productivity)
다루는 문제 소개 • 사용자의 요구를 만족시키기 위하여, 소프트웨어를 체계적으로 개발하는 것 • 소프트웨어 공학에서 다루는 주요 요소 • 규모 문제 • 품질과 생산성 • 일관성과 재현성 • 변경
(1) 규모 문제 소개 수십 만, 수백 만 줄의 프로그램은, 수백 줄의 프로그램을 개발하는 데 사용하는 방법과는 다른 방법을 적용해야 함 엔지니어링 식 접근 방법 – 방법, 절차, 도구 사용
(2) 품질과 생산성 소개 엔지니어링 작업에서는 비용, 일정, 품질과 같은 변수가 중요 비용: Man-Month로 측정(인건비와 직결) 일정: 짧은 time-to-market (기술의 급격한 발전에 따라 갈수록 짧아짐) 품질
(3) 일관성과 재현성 소개 • 일관성 • 프로젝트의 결과를 어느 정도 정확하게 예측가능 • 더 높은 품질의 제품을 생산 (기관/회사는 일관성 있는 품질 수준을 유지해야) • 프로세스의 표준화가 필요 • ISO 9001 • CMM(Capability Maturity Model) • 재현성 • 개발하는 시스템 마다 높은 품질과 생산성을 갖도록 만드는 것 • 개발 능력, 결과의 재현성 일관성과 유사한 개념
(4) 변경 소개 소프트웨어는 계속 진화하고 변경됨 비즈니스 환경 및 소프트웨어 기술도 빠르게 발전 변경을 조절하고 수용하는 것이 또 하나의 과제
In this chapter … 소개 1.1 소프트웨어 1.2 다루는 문제 1.3 도전 과제 1.4 접근 방법 1.5 근본 지식
접근 방법 소개 • 프로젝트를 수행하는 동안 얻은 품질과 생산성은 여러 가지 요인에 의해 좌우됨 • 프로젝트 삼각 균형(triangle seesaw) • 높은 품질과 생산성은 좋은 기술, 좋은 프로세스(혹은 방법), 잘 훈련된 인력을 사용하여 얻을 수 있음 • 소프트웨어 공학의 기본 접근법 • 소프트웨어를 개발하는 프로세스를 개발된 제품, 즉 소프트웨어와 분리함 • 적절한 “소프트웨어 프로세스”의 설계와 관리는 소프트웨어 공학의 중요 연구 목표임
단계적 프로세스 소개 제2장에서 소개할 폭포수 모형과 유사
일반적인 개발 단계 소개
In this chapter … 소개 1.1 소프트웨어 1.2 다루는 문제 1.3 도전 과제 1.4 접근 방법 1.5 근본 지식
SWEBOK (1/2) 소개 SWEBOK: Software Engineering Body of Knowledge [IEEE, 2004]
SWEBOK (2/2) 소개
In this chapter … 소개 1.1 소프트웨어 1.2 다루는 문제 1.3 도전 과제 1.4 접근 방법 1.5 근본 지식
Homework #1 소개