Software Engineering (Introduction) 2014. 3
강의 정보 홈페이지 교수: 김한준 조교: 유한묵 http://datamining.uos.ac.kr Email: khj@uos.ac.kr Office: 19408호 Tel: 6490-2339 조교: 유한묵 Email: daum1064@gmail.com Office: 19415호 Tel: 6490-5715
강의 구성 실습 강의 구조적 분석 및 설계 UML 기반 설계 (StarUML) 객체지향 프로그래밍 (디자인 패턴) 소프트웨어 프로세스(개발 Life cycle) 프로젝트 계획 구조적 분석 및 설계 테스팅 방법 객체지향 분석 및 설계(UML) 기타 최근 기술 동향
Textbook: 강의 새로 쓴 소프트웨어공학 (6차 개정판) (저자: 최은만, 정익사, 2015) Chapter 01 소개 Chapter 02 프로세스와 방법론 Chapter 03 프로젝트 관리와 계획 Chapter 04 요구 분석 Chapter 05 모델링 Chapter 06 아키텍처 설계 Chapter 07 상세 설계 Chapter 08 코딩 Chapter 09 테스팅 Chapter 10 유지보수 Chapter 11 품질 보증
UML: 실습 예: StarUML tool
Software Engineering을 위한 modeling language: UML
소프트웨어 소프트웨어 엔지니어링 작업의 결과 프로그램 그리고, 프로그램의 개발, 운용, 유지/보수에 필요한 제반 정보 프로그램 그리고, 프로그램의 개발, 운용, 유지/보수에 필요한 제반 정보 엔지니어링 작업의 결과 프로그램 이외의 정보 (문서, 개발환경 등)도 중요 S/W가 복잡해지면서 설계가 중요 => 객체지향 소프트웨어 공학
소프트웨어의 발달 제 1세대 제 2세대 제 3세대 제 4세대 제 5세대 1950 1960 1970 1980 1990 2000 일괄처리 지향 한정된 분포 주문소프트웨어 제 2세대 다중 사용자 지향 실시간 처리 데이터베이스 제품 소프트웨어 제 3세대 분산 시스템 저가의 하드웨어 고객 소프트웨어 -processor출현 제 4세대 강력desktop 시스템 객체지향 기술 전문가 시스템 병렬 컴퓨팅 인공지능 제 5세대 Recognition Thinking Touch/Voice Mobile App. Personalization … 1950 1960 1970 1980 1990 2000
소프트웨어의 발달의 추이 IT 발전 웹 환경의 소프트웨어 수요 급증 => 웹공학 기술 소프트웨어의 복잡도 증가 상품에서 소프트웨어가 차지하는 비중이 커짐 예) 승용차 개발: 15% 이상이 소프트웨어 비용 웹 환경의 소프트웨어 수요 급증 => 웹공학 기술 E-commerce Mobile network 분산 소프트웨어 소프트웨어의 복잡도 증가 개발 과정과 기술이 더욱 중요해짐 내장형 소프트웨어 (embedded software) 수요 증가
소프트웨어 공학이란? 고객의 문제를 해결해 주기 위하여 대규모의 품질 좋은 소프트웨어 시스템을 정해진 시간과 비용으로 개발하거나 발전시키는 체계적인 접근 방법 Production Craft Commercial Science Professional Engineering
소프트웨어 공학이란? 질 좋은 소프트웨어를 경제적으로 생산하기 위하여 공학, 과학 및 수학적 원리와 방법을 적용하는 것 Watts Humphrey, SEI 소프트웨어의 개발, 운용, 유지보수 및 소멸에 대한 체계적인 접근 방법 IEEE Computer Society 품질, 효율, 비용, 인정에 관한 공학적인 접근 원리 F. Brooks
소프트웨어공학의 세부 분야 분 야 의 미 사 례 요리와의 비유 방법(method) 소프트웨어 제작에 사용하는 기법이나 절차 구조적 분석, 설계 방법, 객체지향 분석, 설계 방법 익히는 방법 (구이, 찜, 훈제 등) 도구(tools) 자동화된 시스템 설계 도구 프로그래밍 도구 테스트 도구 요리도구 (프라이팬, 압력 솥, 오븐 등) 프로세스(process) 도구와 기법을 사용하여 작업하는 순서 Unified Process eXtreme Programming 조리 순서(recipe) 패러다임(paradigm) 접근 방법, 스타일 구조적 방법론 객체지향 방법론 음식 스타일 (한식, 일식, 중식, 퓨전 등)
소프트웨어공학의 차별성 소프트웨어 엔지니어링은 주로 설계/개발과정에서 대부분의 비용이 소요됨 소프트웨어는 물리적인 부품이 없음 제품을 찍어내는데 드는 비용은 아주 적음 한 번 개발하면 쉽게 대량 생산 소프트웨어는 물리적인 부품이 없음 제품 신뢰도는 생산(manufacturing)과정이 아닌 설계(design) 과정에 의해 결정 제품의 결함 탐지를 위한 테스팅이 설계과정에 포함될 수 있음 가시성(visibility)이 낮음 진척도를 보여주기 어려움 제품의 구조가 쉽게 드러나지 않음 소프트웨어는 특성상 설계와 구현이 연쇄적이 아님 작은 오류가 심각한 영향을 미칠 수 있음 ‘약간’의 설계 수정이 ‘약간’의 구현 수정으로 이어지지 않음
소프트웨어 프로세스
소프트웨어 공학의 핵심기술 Abstraction Analysis & Design Prototyping Software Architecture Software Development Process Reuse Measurement Development Environment …
소프트웨어 개발의 Myths 개발은 주로 프로그래밍 작업이다. 소프트웨어는 융통성이 많아 고치기 쉽다. 최신 첨단 기술을 사용하면 모든 개발 문제가 해결된다. 개발 및 문서화 표준이 개발 문제를 해결해 준다. 소프트웨어를 고객에게 전달하면 개발자의 작업은 끝난다. 개발자는 프로그램의 기능이 명세에 대하여 맞는지만 보이면 된다. 프로그래머의 능력은 모두 동일하다.
소프트웨어 개발의 특수성 문제가 항상 잘 정의되어 있는 것은 아님: Requirement Engineering 요구를 정확히 정의하지 않아 발생하는 오류가 많음 요구되는 품질이 서로 상충됨 오류가 늦게 발견될수록 수정비용이 커짐 프로그래밍 작업이 디자인보다 오류가 적음 지연된 프로젝트에 인력을 투입하는 것은 완성을 더 느려지게 함 소프트웨어가 적절한 유지보수 정책하에 관리되지 않으면 “dirty system” 으로 변모
좋은 소프트웨어의 조건 Product Quality 사용용이성(usability) 빨리 배우고 작업을 쉽게 하는 성질 효율성(efficiency) CPU 시간과 메모리 같은 자원을 낭비하지 않음 신뢰성(reliability) 요구한 기능을 실패 없이 할 수 있는 성질 유지보수성(maintainability) 쉽게 변경할 수 있음 재사용성(reusability) 부품이 다른 프로젝트에서 사용될 수 있는 성질.
좋은 소프트웨어의 조건 Process Quality 향상 방안 개발 과정이 품질에 많은 영향을 준다는 학설 프로세스 개선 모델 CMM, SPICE 향상 방안 특정 오류가 언제 어디서 발견되는가? 어떻게 하면 개발 과정에 오류를 조기에 발견할 수 있는가? 어떻게 하면 오류에 대한 내성이 있는 시스템, 즉 오류가 소프트웨어를 정지시키는 확률이 적은 시스템으로 만들 수 있는가? 프로세스가 좋은 품질을 보장하는 더 효율적이며 효과적인 다른 방법이 있는가?
성적 평가 중간시험: 40% 낙제(F학점) 처리 기말시험: 40% 과제: 15% 출석: 5% 8주차 4월말 예정 16주차 6월중순 예정 과제: 15% Quiz 및 연습문제 풀이 기말프로젝트: UML 활용 출석: 5% 낙제(F학점) 처리 무단 결석 일수 5일 초과 프로젝트 과제 미제출 중간시험 또는 기말시험 무단결시
유의사항 리포트 제출: 기한 엄수해야 하며, 지각 제출은 예외없이 0점 처리 리포트 표절: 쌍방 모두 F학점 처리 (부분 표절도 동일하게 처리) 결석: 5회 이상 무단결석시 F학점 처리 (20분 이상 지각은 결석) 시험 무단 결시: 중간 또는 기말고사 무단 미응시 경우 F학점 처리 시험 부정행위: 시험 시행과정에서 부정행위자 퇴장 및 F학점 처리 Quiz 및 시험 답안지 내용에서 부정 행위가 확인되는 경우 부정 행위자 F학점 처리
유의사항 컴퓨터는 수업을 위한 목적으로만 활용해야 함 강의 슬라이드 자료는 프린트해서 오기 바람 강의 슬라이드는 수업 교재가 아님. 교재를 바탕으로 공부해야 함 강의 노트 작성을 권고 의문사항은 강의 중이라도 수시로 교수에게 하기 바람 수업시간 중 학우들간의 대화는 가급적 자제하기 바람 수업 외 시간에 질문사항은 이메일 또는 직접 교수 연구실 방문
강의 구성 실습 강의 구조적 분석 및 설계 UML 기반 설계 (StarUML) 객체지향 프로그래밍 (디자인 패턴) 소프트웨어 프로세스(개발 Life cycle) 프로젝트 계획 구조적 분석 및 설계 테스팅 방법 객체지향 분석 및 설계(UML) 기타 최근 기술 동향