1. 소프트웨어와소프트웨어공학
주요내용 소프트웨어공학이란? 소프트웨어의특징 소프트웨어개발의특징 소프트웨어공학의탄생 소프트웨어공학의필요성 소프트웨어공학의범위 2
소프트웨어공학이란? 소프트웨어란? 프로그램, 프로그래머, 소스코드, 버그, 에러, 노가다, 하드웨어의반대말, 눈에보이지않음, 공학 (engineering) 이란? 컴퓨터, 전기, 전자, 기계, 건축, 엔지니어링, 엔지니어, 공돌이, 공학 (engineering) 과과학 (science) 의차이는무엇이지?
과학, 공학, 예술의차이 공학 과학 예술 4
공학이란? 의미 - 실제적문제 (Practical Problem) 를해결하거나 - 실제적인산출물을생산해내기위해 - 자원과비용을효과적으로활용하면서 - 과학적지식을적용하는것 공학과소프트웨어공학 5 - 공학 업무분야에서문제발생시, 실무자가적절한해답을찾을수있도록체계적으로정리된기술적지식을제공 - 소프트웨어공학 소프트웨어개발기술, 절차및도구의우수한사례 (Best Practice) 들을정리하여소프트웨어개발시, 누구나당면한문제를해결할수있도록체계적인기술적지식을제공
소프트웨어공학이란? (1/3) 소프트웨어공학이란? 어떻게하면적은비용으로소프트웨어를개발할수있을까? 어떻게하면좋은품질의소프트웨어를개발할수있을까? 어떻게하면적기에소프트웨어를개발할수있을까? 어떻게하면시리즈계속 사용자요구만족하는 대박을터트릴수있는 가장재미있는게임을
소프트웨어공학이란? (2/3) 솜머빌 (Sommerville) 의정의 소프트웨어공학은소프트웨어생산의모든측면에관련된공학원칙이다 (Software engineering is an engineering discipline which is concerned with all aspects of software production)
소프트웨어공학이란? (3/3) 정의 - 소프트웨어의개발, 운용, 유지보수및폐기에대한체계적인접근방법 특징 - 소프트웨어개발전과정에걸쳐필요한이론, 개념및기술을다룸 - 소프트웨어개발과정에서생성되는모든산출물이그대상이됨 목표 - 소프트웨어개발이체계적이고공학적인방법으로이루어져추정된비용과기간에고객이원하는품질높은소프트웨어를개발하는것 8
여러분이개발자로나가면 (1/2) 처음 ( 입사후 10년까지 ) 에는 SE가어디에있는지잘보이지않음이때, 주로관리자가 무엇을작성해내라, 무슨계획서를써라, 개발이잘되어가고있느냐 고하는말들에서약간의 SE 냄새가풍김 중간관리자 (10년 ~20년 ) 가되면, 업무의절반이이에해당함위에서 언제까지제안서를써라, 개발중간점검회의를하자, 어디가서발표하고오너라, 언제까지개발할수있느냐? 등의말을실천하는것들이곧 SE에해당함 고급관리자 (20년 ~) 가되면, 모든업무가이에해당함사장님이 ( 혹은고객이 ) 비용을최소화한개발계획을세워라, 필요한인력을산출하고배치하라, 설계발표회의를갖자 등의이야기가곧 SE로볼수있음
여러분이개발자로나가면 (2/2) 초기에는 SE 가그다지중요한작업이아니며, 규모가작은과제 ( 예 : 개인 홈페이지작성회사 ) 의경우필요성을못느낄수도있음 BUT, 중규모이상인경우, 관리자가되면서 SE 관련작업이많아지며, 업무속에서자연스럽게실천하게됨 대학에서아무리잘배워도, 2~3년지나면핵심용어조차다잊어버리므로, 관리자가되었을경우에, 나름대로의재교육이필요함
소프트웨어
모든곳에사용되는소프트웨어 P C 노트북 Mobile PDA 항공기 가전제품 건물 12
소프트웨어프로젝트의예 비행기예약및발권시스템 원자력발전소제어및통제시스템 우주 ( 왕복 ) 선제어, 유도, 통제시스템 은행전산처리시스템 전자정부시스템 음성및데이터통신네트워크시스템 최신운영체제, DBMS 그외, 대규모, 중규모, 소규모모두무수히많음
소프트웨어란? 컴퓨터프로그램과관련된문서들. 소프트웨어제품은특정고객혹은일반시장을위해개발될수있다 (Computer programs and associated documentation. Software products may be developed for a particular customer or may be developed for a general market.) 프레스만 (Pressman) 의정의 - Software is instruction(computer programs) that when executed provide desired function and performance - data structures that enable the programs to adequately manipulate information - documents that describe the operation and use of the programs 14
[ 예 ] Pressman 의소프트웨어의분류 자동차엔진제어 (LabView SignalExpress) (http://zone.ni.com/devzone/cda/tut/p/id/6318) 경영정보시스템 (Bit 사의 Executive Information System) 15 인공위성 3 차원시뮬레이션 (Kaist 의 SpaceModel) 온라인회원관리 (Zeroboard)
소프트웨어의분류 (1/2) 유형 System software ( 시스템소프트웨어 ) Real-time software ( 실시간소프트웨어 ) Business software ( 비즈니스소프트웨어 ) Engineering and scientific software ( 공학및과학용소프트웨어 ) Embedded software ( 내장형소프트웨어 ) Personal computer software ( 개인용소프트웨어 ) Web-based software ( 웹기반소프트웨어 ) Artificial intelligence software ( 인공지능소프트웨어 ) 설명 A collection of programs written to service other programs 예 ) 컴파일러, 에디터, 파일관리자 A software that monitors/analyzes/controls real-world events as they occur is called real time 예 ) 자동차엔진제어소프트웨어 A software that facilitates business operations or management decision making 예 ) MIS(Management Information System, 경영정보시스템 ) A software that have been characterized by number crunching algorithms 예 ) 인공위성궤도분석소프트웨어, CAD(Computer-aided design) A software that perform very limited and esoteric functions in read-only memory 예 ) 전자오븐제어소프트웨어, 자동차브레이크제어소프트웨어, PDA 내장소프트웨어 A software that support personal purpose 예 ) 워드프로세서, 스프레드시트 A software that executes in the web with executable instrunctions(ex, html) and data(ex, text) 예 ) 온라인회원관리소프트웨어 A software that uses nonnumeric algorithms and straightforward analysis to complex problem 에 ) pattern recognition(image and voice) 소프트웨어 출처 : Roger S. Pressman, Software Engineering A Practitioner s Approach, 9p 16
소프트웨어의분류 (2/2) 일반소프트웨어 - 일반적으로 PC 및대형시스템상에서수행되는소프트웨어를말함 - 규격화된하드웨어및 OS를대상으로좋은범용개발환경을갖추고있어, 개발자들은소프트웨어분야의지식만으로도개발이가능 - 예 ) 워드프로세서, 스프레드시트, 미디어플레이어등 임베디드소프트웨어 - 특정기계또는시스템상특정목적만을위해수행되는소프트웨어를말함 - 특정응용을위해설계되고, 확장성이적음 - 처리기한이주어지거나, 외부영향에따라실시간으로대응해야함 - 개발자들은해당도메인, 하드웨어및소프트웨어분야의지식을충분히갖추고있어야함 - 예 ) 전자오븐제어소프트웨어, 자동차브레이크제어소프트웨어 17
소프트웨어의특징 소프트웨어의비가시성 (Invisibility) - 소프트웨어완제품의구조가개발된코드안에숨어있어파악하 기힘든특징 소프트웨어를본적이있는가? 소프트웨어를만져본적이있는가? 소프트웨어이해관계자의소프트웨어인지능력차이발생 18
소프트웨어의특징 소프트웨어의변경성 (Changeability) - 프레스만 (Pressman) 이정의한소프트웨어의특징 - 소프트웨어는고전적인의미의 제조 (Manufacture) 가아니라, 개발 (Development) 외는것이다. - 소프트웨어는닳지않지만, 요구사항의변경과주변환경의변화에따라수정되고진화한다. 19
1. 소프트웨어개요 소프트웨어의특징 1. 소프트웨어의발전과정 1 세대 2 세대 3 세대 4 세대 5 세대 - 일괄처리시스템 - 멀티유저 - 분산시스템 - 객체지향기술 - 인공신경망 - 주문형 SW - 실시간 SW - 내장시스템 - 비주얼 P/G - 병렬컴퓨팅 - 데이터베이스 - 사용자층확대 - 강력한 PC - 그린 SW H/W 고가 - 제품화 S/W 저가 H/W 2. 소프트웨어의특성 구분 내용 비가시성 (Invisibility) 구조가외부에노출되지않고코드에내재되어있음 ( 무형 ) 복잡성 (Complexity) 변경성 (Changeability) 순응성 (Conformity) 무형성 (Intangible) 비마모성 (Longevity) 복제성 (Duplicability) 개발 (Developed) 정형적구조가없이복잡하고비규칙적, 비정규적임필요에따라항상수정이가능한진화성 ( 진화 (evolution)) 사용자요구, 환경변화에적절히변형가능사실형체가없으며 FP(Function Point) 등으로유형화하고자함외부의환경에의해마모되지않고다만품질이나빠질뿐임간단하고쉽게다양한경로와노력으로복제가가능함제조가아닌개발 (developed not manufactured)
소프트웨어의특성으로인한개발의어려움 소프트웨어는, - 물리적인형태가없는무형의논리적인요소 개발과정에대해정확하게이해하기어려움 개발진행상황을파악하기도어려움 - 최종산출물이개발과정에서확인되지않음 오류를발견해야할시기를놓치거나, 오류에대한해결책을못찾는경우가발생 - 프로젝트의지연및예상범위초과로인한프로젝트실패가능 성이높음 21
2001 년미국소프트웨어프로젝트결과 20% 이하지연 : 6% 200% 이상지연 : 6% 21~50% 지연 : 8% 취소됨 : 29% 51~100% 지연 : 9% 101~200% 지연 : 16% 일정준수 : 26% 출처 : Software Industry Benchmarking Study 2001 22
소프트웨어개발
소프트웨어개발 고객의요구 요구사항분석설계구현테스팅 2.3 소프트웨어개발생명주기참조 S/W 제품 24
[ 예 ] 만년달력 (1/4) 1. 고객의요구 - 년 / 월 / 일을입력하면요일을출력하는만년달력프로그램을작성해주시오. 2. 요구사항분석 - 만년달력의입력범위는? 서기 01 년 1 월 1 일부터 10000 년 12 월 31 일까지로함 - 입력의양식은? 년 / 월 / 일을순서대로질문하고, 사용자가응답하게함 입력범위를벗어나면, 다시입력하게함 - 출력의형태는? 요일 25
[ 예 ] 만년달력 (2/4) 3. 설계 만년달력 입력처리출력 입력처리 입력검증 총날짜계산 윤년여부결정 요일결정 출력양식결정 요일출력 26
[ 예 ] 만년달력 (3/4) 4. 구현 ( 예 : 윤년여부결정 ) - 알고리즘 시작 Year 입력 Y = Year Y%400==0 No Y%4==0 AND Y%100!=0 - 소스코드 if((i % 400 == 0) (i%4==0 && i%100!=0)) { IsLeapYear = True; } else { IsLeapYear = False; } Return IsLeapYear; Yes Yes No IsLeapYear = True IsLeapYear = False Return IsLeapYear 종료 27
[ 예 ] 만년달력 (4/4) 5. 테스트 테스트케이스 ID: ST-0001 목적입력에대한올바른출력을확인한다. 테스트조건 1 년 1 월 1 일부터 10000 년 12 월 31 일까지로한다. 테스터한동석테스트일자 2008.02.11~2008.02.11 단계입력값예상출력값실행결과조치사항 조치결과 1-10 년입력오류 : 재입력오류 : 재입력 - - 2 2008 년 2 월 2 일 토요일토요일 - - 28 3 12000 년 1 월 1 일 오류 : 재입력 일요일 디버깅 요구 정상 출력
소프트웨어개발에연관된역할들 (1/2) 고객 계약에따른의무 ( 소프트웨어 / 개발, 데드라인, 유지보수 ) 비용 개발자 요구사항 사용자 소프트웨어 / 시스템 29
소프트웨어개발에연관된역할들 (2/2) 고객 (Customer) 30 - 소프트웨어의개발필요성을결정 - 사업적타당성을판단하여개발자에게소프트웨어시스템개발의뢰, 개발비를제공 사용자 (User) - 개발자에게소프트웨어시스템에대한사용자측면에서의요구사항을제공 - 고객이사용자의역할을같이할수도있음 - 다양한사용자가존재하는소프트웨어의경우 사용자의작업을이해하고, 요구사항을이끌어내는것이매우중요함 개발자 (Developer) - 고객과의계약대로주어진시간및비용내에서사용자들의요구사항을기반으로소프트웨어시스템을개발하는역할 - 1명, 또는팀을구성하여작업
개발자에따라달라지는구현형태 예제프로그램 B 예제프로그램 C 예제프로그램 A 31
과거의소프트웨어개발 소프트웨어프로그래밍 = 예술 개발자에따라다양한방식이존재 사용자 = 프로그래머 = 유지보수담당자??? 체계적방법의부재 정형적인방법론이거의없고, 그것을사용할수있는사람도거의없음 프로그래머는시행착오에의해기술을습득함 32
점점더중요해지는소프트웨어 80% 70% 60% 50% 美공군전투기내장소프트웨어의비율 F-22 B-2 JSF 40% F-16 30% 20% 10% 0% F- 4 A-7 F-15 F-111 1960 1965 1970 1975 1980 1990 1995 2000 2003 Year Source: U.S Airforce 33
대규모프로젝트의어려움 수백명의개발자 - 의사소통및상호협력의어려움 - 조직및팀구조 SM PM Member Member Member 오랜개발시간 - 프로젝트관리 모호하고복잡한요구사항 - 수백페이지의요구사항 - 비용및효과의산정 - 빈번한요구사항의변화 34
소프트웨어공학의대두배경
소프트웨어공학의대두배경 소프트웨어위기 (Software crisis) - 소프트웨어수요증가에비해공급및개발의어려움 소프트웨어위기의해결 - 다른분야에서사용했던공학 (Engineering) 패러다임을이용하자는결론 - 1968년 NATO conference에서소프트웨어공학 (Software Engineering) 제안 36
2. 소프트웨어위기 소프트웨어위기 가. 소프트웨어위기 (Software Crisis) 의정의 - 품질, 생산성, 공수, 납기를만족시키지못해사용자로부터외면당하는현상 - 위기 (Crisis) 라기보다는만성별 (Chronic) 나. 소프트웨어위기의배경 - 소프트웨어프로그래밍에치중, 관리의부재 - 지난 20여년간소프트웨어의수요는 100배이상증가, 개발자의생산성은 1.8배증가, 개발인력은 10배정도신장 - 소프트웨어개발을위한지식과경험을갖춘전문인력의부족 - 컴퓨터및통신장비등방대한규모의소프트웨어활용 ( 복잡도의증가 ) - 프로젝트개발및소요예산예측의어려움 다. 소프트웨어위기인식 - NATO 과학위원회 (1968) 에서최초소프트웨어위기문제인식 - 늘어나는소프트웨어개발및유지보수의요구에비해소프트웨어생산성기술이낙후인식
2. 소프트웨어위기 Chapter 1. 소프트웨어공학일반 소프트웨어위기발생원인 가. 소프트웨어규모의대규모화 ( 공룡화 ), 복잡화에따른개발비용증대나. 하드웨어비용에대한소프트웨어가격상승폭증가 - 낮은소프트웨어품질에따른유지보수비용증가 - 규격화, 품질관리, 품질보증에대한개념과통제방법부재다. 유지보수의어려움과개발적체현상발생 - 새로운제품요구와기존제품의유지보수요구폭주로개발적체발생 - 유지보수비용이전체소프트웨어비용의 2/3 차지라. 프로젝트개발및소요예산예측의어려움 - 다른공학분야에비해축적된경험및관련자료, Know how 부족 - 주먹구구식의계획수립마. 신기술에대한교육및훈련의부족 - 급격히변화하는소프트웨어및관리기술 문제의핵심 - 소프트웨어개발에예산이많이소요 - 개발기간이많이걸림 - 소프트웨어특성이해부족 - 소프트웨어생산성이발전하지못했음 - 소프트웨어품질이미흡
3. 소프트웨어소프트웨어공학개발에공학적접근이필요한 Chapter 1. 이유소프트웨어공학일반 가. 소프트웨어개발은왜어려울까? - 보고만질수없는무형성, 진화성등의소프트웨어의특성과, 제조가아닌개발과정이므로어려움 나. 기타다른이유 - 수시로바뀌는요구사항 - 사람에의존하여개발되는특성 ( 개인의특성 ) - 요구되는신뢰도에따라분석의종류와깊이를알수없음 ( 의사수통의어려움 ) - 프로젝트규모에따른인력, 비용, 의사소통, 복잡도등이기하급수적으로증가 ( 유일성 ) 소프트웨어제품으로서제대로된완성도를가지려면단계별적절한절차와통합작업, 테스트, 문서화등엄청난노력과비용이발생하게된다. 이는결코소프트웨어개발이쉽지않다는것을의미함. 다. 소프트웨어의공학적접근노력 - 소프트웨어개발은공학적접근을통하여생산성, 품질, 비용절감, 만족도를향상하기위한노력이필요함 - 소프트웨어를개발하기위한도구, 방법론, 프로세스등이필요하게됨
소프트웨어공학의원리와영역
3. 소프트웨어공학 Chapter 1. 소프트웨어공학일반소프트웨어공학의원리 (1/2) 공학적으로잘작성된소프트웨어
3. 소프트웨어공학 Chapter 1. 소프트웨어공학일반소프트웨어공학의원리 (2/2) Carlo Ghezzi 의소프트웨어공학의원리
소프트웨어공학의주요영역들 S/W Process (Level 1) 과제시작 과제완료 S/W 분석 S/W 설계 S/W 구현 S/W 통합 S/W 시험 43
소프트웨어공학의주요영역들 S/W Process (Level 2) SW Process 가연계된 SPLC 과제시작 Project Planning Project Management 과제완료 S/W 분석 S/W 설계 S/W 구현 S/W 통합 Test Case 작성 Test 절차수립 S/W 시험 Requirement System Requirements DB Configuration System Source Code DB Defect Tracking System Defect DB 44
소프트웨어공학의영역들 (1/4) 영역요구공학 (Requirement Engineering) 아키텍처 (Architecture) 주요내용 소프트웨어개발에서수행되는첫번째작업 개발될시스템에대한고객의요구를이해하고목표와제약사항을확립하여시스템을만족시킬기능, 성능그리고다른시스템과의인터페이스등을정의하는과정 비용증가, 납기지연, 품질저하를방지하기위한필수요건 요구사항의추출, 저장, 변경프로세스및요구사항관리지원도구등이연구되고있음 아키텍처구성요소와이구성요소들간의관계, 그리고시스템의기능, 속성및제약사항등을적절히반영하는구조가서로조직화되어목표시스템의전체적인형태를표현 적절히반영하는구조란기존의아키텍처스타일을문제영역에적절하게변형또는조합하고해당스타일에서언급하는컴포넌트 (Component) 와커넥터 (Connector) 로시스템을분할하여구조화하는것 아키텍처의유형분류, 아키텍처의정의언어, 아키텍처분석방법론등이연구되고있음 ` 수학과논리학을기반으로하드웨어나소프트웨어시스템을명세하거나검증하는기법 정형기법 (Formal Method) 정형논리 (Formal Logic) 또는수리논리 (Mathematical Logic) 등을이용하여시스템이동작할환경, 시스템이만족해야할요구사항, 요구사항을수행할시스템설계등을기술하는정형명세기법과수식이나기호를사용하여시스템을정형화함으로써보다체계적으로시스템의전체범위를검증할수있는정형검증기법으로분류 45
소프트웨어공학의영역들 (2/4) 영역 주요내용 테스팅 (Testing) 단위테스팅, 통합테스팅, 시스템테스팅등 효과적인테스트케이스산출방법론, 각개발방법론및분산환경에서의다양한테스트방 법이연구되고있음 품질 (Quality) 소프트웨어분야에서품질은제품품질 (Product quality) 과프로세스품질 (Process quality) 로분류됨 제품품질은제품자체가가지는품질을의미하며, 프로세스품질은소프트웨어를개발하는프로세스가정확하고우수하면좋은품질의소프트웨어를생산할가능성이높다는것을의미 SQA(Software Quality Assurance) 활동, 제품검사, 검토등을지원하는평가모델, 국제표준등이연구되고있음 형상관리 (Configuration Management) 소프트웨어구성요소에대한변경관리대상인형상항목을식별하고변경을통제, 기록함 형상식별, 형상통제, 형상상태확인, 형상감사등의활동이있음 46
소프트웨어공학의영역들 (3/4) 영역 주요내용 소프트웨어가고객에게인도된후에폐기될때까지개선을목적으로소프트웨어부분또는 전반적으로수정, 보완하는일 유지보수 (Maintenance) 잘못된것을수정하는목적으로수행되는수정유지보수 (corrective maintenance), 시스템을새로운환경에적응시키는목적으로수행되는적응유지보수 (adaptive maintenance), 새로운기능을추가하거나시스템의구조와성능을개선하여소프트웨어완전하게만드는목적으로수행하는완전유지보수 (perfective maintenance), 소프트웨어의잠재적인결함을사전에예방할목적으로수행하는예방유지보수 (preventive maintenance) 로분류 재사용 (Reuse) 코드뿐만아니라응용분야에관한지식, 개발경험, 설계에관한결정, 시스템에대한지식, 요구분석사항, 설계, 문서등의재사용 코드재사용의한계를극복하기위해코딩단계이전의분석및설계단계에서만들어진산출물을재사용하려는노력이계속되고있음 47
소프트웨어공학의영역들 (4/4) 영역 주요내용 소프트웨어의개발및진화에사용되는활동, 방법및실무활동 (practice) 들의집합 프로세스 (Process) 개발방법론 (Development Methodology) 최종소프트웨어제품을생산하기위하여요구되는인력, 절차, 방법, 장치및도구들을통합하는수단 프로세스정의방법, 프로세스관리조직및관리기반구조등에대해연구되고있음 소프트웨어프로세스의특성을설명하는모형및효과적인소프트웨어프로세스실현을위한단계적접근방법을명시하는모델에관해연구되고있음 시스템을개발하기위해어떠한방법으로진행할것인가를다루는분야 구조적방법론, 객체지향방법론, 컴포넌트방법론등 개발기술의진화에따라계속적으로연구, 발전되고있음 개발조직의특성및여건에맞게조정 / 재정의될수있음 프로젝트관리 (Project Management) 프로젝트의일정및인력, 예산등을관리하여프로젝트를성공적으로이끌기위해요구되는영역 프로젝트통합, 범위, 일정, 비용, 품질, 인적자원, 의사소통, 위험, 조달관리의 9가지영역으로분류함 [PMBOK(Project Management Body of Knowledge)] 48
연습문제 1. 소프트웨어가가지고있는특성에대해설명하라. 2. 소프트웨어공학이란무엇인가? 3. 소프트웨어공학이나타나게된배경은무엇인가? 4. 소프트웨어위기를설명하라. 5. 소프트웨어공학의분야들을나열하라. 6. 소프트웨어와관련된고객, 사용자, 개발자의역할에대하여설명하라. 49