소프트웨어 공학의 개요
소프트웨어 소프트웨어공학의 개요 소프트웨어 프로그램 + 프로그램의 개발, 운용, 보수에 필요한 서비스 일체 (소프트웨어 생산 결과물 일체) 오픈소스 소프트웨어의 비즈니스 모델은? 소프트웨어 생산 프로그램은 형식 언어로 표현된 지적 노동의 결과물 생산성이 일정하지 않음 제조업 vs. 서비스업 소프트웨어는 제작이 아니라 창조적 노력이 포함된 개발 닳아 없어지는 것이 아니라 소용없어 못쓰게 됨 논리적인 요소로 구성 유지 보수가 복잡 금오공과대학 컴퓨터공학부 컴퓨터공학전공
소프트웨어의 특성 특징 분류의 따른 특성 비가시성(Invisibility) 복잡성(Complexity) 소프트웨어공학의 개요 특징 비가시성(Invisibility) 복잡성(Complexity) 변경성(Changeability) 복제 가능(Duplicability) 응용에 의존(Application Dependability) 분류의 따른 특성 응용 소프트웨어, 시스템 소프트웨어 패키지 소프트웨어, 주문형 소프트웨어 대형, 중형, 소형.. 통신용, 과학기술연산용, 오락용.. 금오공과대학 컴퓨터공학부 컴퓨터공학전공
소프트웨어 시스템 시스템적 관점에서의 접근이 필요함 시스템은 유기적으로 상호 작용하는 개체들의 모임 소프트웨어공학의 개요 시스템적 관점에서의 접근이 필요함 시스템은 유기적으로 상호 작용하는 개체들의 모임 소프트웨어는 컴퓨터를 기반으로 하는 여러 시스템과 관계를 맺고 있음 소프트웨어 자체도 하나의 시스템 금오공과대학 컴퓨터공학부 컴퓨터공학전공
소프트웨어의 위기 (Software Crisis) 소프트웨어공학의 개요 소프트웨어 위기 소프트웨어의 요구와 그 공급 능력 간의 차이가 갈수록 심화 1965-1985 1983년의 증가율 요구의 증가 100배 12% 생산성 2배 4% 인력 공급 10배 4% 소프트웨어 공정의 문제점 비용 초과 및 일정 지연 개발자의 역량에 따라 개발의 성패가 좌우되어 예측 불가 품질에 대한 정량적 개념이 없어 신뢰성 부족 소프트웨어 공학의 목적 공학적 접근 방법으로 원리를 적용하고 체계적으로 개발하여 소프트웨어 위기를 극복 금오공과대학 컴퓨터공학부 컴퓨터공학전공
소프트웨어의 비용 금오공과대학 컴퓨터공학부 컴퓨터공학전공
소프트웨어는 예술인가? 금오공과대학 컴퓨터공학부 컴퓨터공학전공
소프트웨어 공학 소프트웨어공학의 개요 정의 질 좋은 소프트웨어를 경제적으로 생산하기 위하여 공학, 과학 및 수학적 원리와 방법을 적용하는 것 - Watts Humphrey, SEI 소프트웨어의 개발, 운용, 유지보수 및 소멸에 대한 체계적인 접근 방법 - IEEE Computer Society 품질, 효율, 비용, 인정에 관한 공학적인 접근 원리 - F. Brooks 목표 품질(Quality) 생산성(Productivity) 금오공과대학 컴퓨터공학부 컴퓨터공학전공
소프트웨어 품질 (Software Quality) 소프트웨어공학의 개요 소프트웨어를 대하는 입장에 따라 품질에 대한 관점이 달라짐 발주자 사용자 기능의 정확성 이해 용이성 사용 용이성 일관된 통합 최소 비용 생산성 융통성 효율성 신뢰성 이식성 재사용성 유지보수성 상호 운용성 유지보수자 금오공과대학 컴퓨터공학부 컴퓨터공학전공
F22와 소프트웨어 미국의 록히드 마틴에서 만드는 최신예 F22 Raptor 전투기의 기능의 80%가 소프트웨어로 제어 소프트웨어가 총 천만 라인 휴대폰의 소프트웨어 몇 백만 라인 부가 가치와 소프트웨어 공학 금오공과대학 컴퓨터공학부 컴퓨터공학전공
소프트웨어 품질 (Software Quality) 소프트웨어공학의 개요 정확성(Correctness) 요구 분석서의 기능과 일치하는지 점검 기능적으로 맞게 동작, 표준에 적합 Validation .vs. Verification 신뢰성(Reliability) 소프트웨어가 주어진 기간동안 제대로 작동할 확률 오류에 반 비례(MTBF; Mean time between failure) 강인성(Robustness) Fault tolerance 요구 명세에 표시하지 않은 상황(오류 입력)에서도 제대로 작동하는 성질 성능(Performance) 수행 속도 알고리즘의 시간 복잡도 시뮬레이션, 스트레스 테스트 금오공과대학 컴퓨터공학부 컴퓨터공학전공
소프트웨어 품질 (Software Quality) 소프트웨어공학의 개요 사용 용이성(Usability) 시스템을 친근하게 느낄 수 있는 성질 사용 대상에 따라 달라질 수 있음 사용자 인터페이스, Human factor 유지보수성(Maintainability) 보수성 (repairability) 정해진 기간에 소프트웨어 결함을 해결할 수 있는 성질 진화성 (evolvability) 잠재적 발전 가능성 재사용성(Reusability) 소프트웨어 부품(라이브러리, 클래스 등)의 성질 확장 가능성 - openness 적응성 – adaptability Message 소프트웨어 개발은 다양한 품질 측면에서의 고려가 필요 깊이 있는 경험이 요구되며 끊임 없는 결정의 연속 고품질의 소프트웨어 개발이 고부가가치를 창출하며 고연봉을 제공함 웹 프로그래머와 SAP 개발자의 연봉 비교 금오공과대학 컴퓨터공학부 컴퓨터공학전공
소프트웨어 생산성(Software Productivity) 소프트웨어공학의 개요 생산 과정(process)의 효율 Process Improvement 개발 경험의 성숙도에 의해 좌우 CMM(Capability Maturity Model): Level 1~5 생산성에 영향을 미치는 요소 프로그래머의 능력 팀 의사 전달 제품의 복잡도 기술 수준 관리 기술 금오공과대학 컴퓨터공학부 컴퓨터공학전공
개발 방법론 소프트웨어의 개발 단계 프로세스 중심 방법론(70년대) 구조적 프로그래밍 언어의 영향을 받음 프로세스를 먼저 정의 프로세스는 자주 변할 수 있다는 문제점 DFD (Data Flow Diagram) 금오공과대학 컴퓨터공학부 컴퓨터공학전공
개발 방법론 자료 중심 방법론(80년대) 데이터베이스의 보급으로 출현 비교적 프로세스보다 안정된 자료 구조를 먼저 정의 Martin의 정보공학 방법론 ER-Diagram 금오공과대학 컴퓨터공학부 컴퓨터공학전공
객체지향 방법론(90년대) CBD SOA etc. 객체지향 프로그래밍에서 시작하여 전체 범위까지 확대 개발 방법론 객체지향 방법론(90년대) 객체지향 프로그래밍에서 시작하여 전체 범위까지 확대 모듈화, 정보 은익, 재사용 CBD 객체 지향 방법론이 보다 발전된 형태 SOA 서비스 기반 구조 etc. 금오공과대학 컴퓨터공학부 컴퓨터공학전공
소프트웨어 개발 모형 소프트웨어 개발 주기 개발 프로세스 중요한 모형 SDLC (Software Development Life Cycle) 개발 프로세스 개발 단계(작업) 입력 자료 수행 결과 중요한 모형 폭포수 모형: 전통적 방법 프로토타이핑 모형: 사용자의 피드백 중시 점증적 모형 금오공과대학 컴퓨터공학부 컴퓨터공학전공
폭포수모형(Waterfall Model) 소프트웨어 개발 모형 계 획 요구 분석 설 계 구 현 시 험 인수설치 금오공과대학 컴퓨터공학부 컴퓨터공학전공
폭포수모형(Waterfall Model) 소프트웨어 개발 모형 최초의 체계적으로 설정된 단계 1970년대 소개 항공 방위 소프트웨어 개발 경험으로 습득 각 단계가 다음 단계 시작 전에 끝나야 함 원래는 각 단계 사이에 중복이나 상호작용이 없음 각 단계의 결과는 다음 단계가 시작 되기 전에 점검 바로 전 단계로 피드백 단순하거나 응용 분야를 잘 알고 있는 경우 적합 한 번의 과정, 비전문가가 사용할 시스템 개발에 적합 특징 결과물 정의가 중요 Methodology: 개발 조직의 특수성을 고려한 개발 순서 및 원리 최신의 방법론은 아니지만, 가장 중요하고 기본적인 개념 제공 금오공과대학 컴퓨터공학부 컴퓨터공학전공
소프트웨어 엔지니어의 역할 분석 설계 개발 기타 문제의 분석, 정확한 요구 사항 도출 소프트웨어 구조, 입출력, 인터페이스 설계 알고리즘, 데이터 구조, 데이터 베이스 설계 성능 측정과 모델 설계 개발 양질의 프로그램을 생산 기타 테스트 및 통합 기술 사용자 지침서 및 개발 문서 작성 유지보수 프로젝트 계획 및 관리 금오공과대학 컴퓨터공학부 컴퓨터공학전공
폭포수모형의 프로세스 프로세스 및 결과물 분석과 설계의 차이는? 소프트웨어 개발 모형 계획 요구 분석 설계 문제정의 타당성 분석 비용, 일정예측 DFD 자료사전 소단위명세서 시스템구조설계 프로그램설계 UI 설계 기본설계서 상세설계서 계획서 요구 분석서 (활동) (결과물) 구현 시험 인수/설치 통합시험 기능시험 성능시험 프로그래밍 단위테스트 통합된 프로그램 설치된 소프트웨어 프로그램 설치 인수 시험 금오공과대학 컴퓨터공학부 컴퓨터공학전공
폭포수모형의 결과물(Deliverable) 소프트웨어 개발 모형 금오공과대학 컴퓨터공학부 컴퓨터공학전공
폭포수모형의 장단점 단점 텍스트 표현의 애매성과 상위단계의 실수에 대한 비용 과다 소프트웨어 개발 모형 단점 텍스트 표현의 애매성과 상위단계의 실수에 대한 비용 과다 개발 중 사용자의 의사 반영이 어려워 의도대로 완성되었는지 확인이 어려움 정보가 충분치 않을 경우 자원의 정확한 예측이 어려움 처음 단계의 지나치게 강조하면 코딩, 테스트가 지연 소용 없는 다종 다량의 문서를 생산할 가능성 있음 금오공과대학 컴퓨터공학부 컴퓨터공학전공
질문: 1,000라인 짜리 프로그램을 작성하는데 1 M/M 가 필요하다고 가정하자. 다음 중 정답과 가장 근접한 답을 고르시오. 5 M/M 10 M/M 20 M/M 금오공과대학 컴퓨터공학부 컴퓨터공학전공
프로젝트의 규모와 요구사항 변경의 관계 소프트웨어 개발 모형 요구사항 변화에 대한 해결방법은? 분석을 잘해서 요구사항을 확실하게 도출한다. 분석, 설계 단계에서 변화되는 요구사항을 포함할 수 있게 대비한다. 금오공과대학 컴퓨터공학부 컴퓨터공학전공
프로토타이핑 모형 Rapid Prototyping Model(RAD) 요구 분석 소프트웨어 개발 모형 프로토타입 개발/개선 평가 구현 인수/설치 금오공과대학 컴퓨터공학부 컴퓨터공학전공
프로토타이핑 모형 시범 시스템의 적용 프로토타이핑 도구 공동의 참조 모델 제공 단점 목적: 사용자의 요구를 더 정확히 추출 소프트웨어 개발 모형 시범 시스템의 적용 목적: 사용자의 요구를 더 정확히 추출 알고리즘의 타당성, 운영체제와의 조화, 인터페이스의 시험 제작 일반적으로 프로토타이핑은 재사용되지 않음 프로토타이핑 도구 화면 생성기 비주얼 프로그래밍, 4세대 언어 등 공동의 참조 모델 제공 단점 오해, 기대심리 유발 관리가 어려움(중간 산출물 정의가 난해) 개발공수의 중복 투자 금오공과대학 컴퓨터공학부 컴퓨터공학전공
나선형 모형 (Spiral Model) 소프트웨어 개발 모형 금오공과대학 컴퓨터공학부 컴퓨터공학전공
나선형 모형(Spiral Model) 프로토타입 모델을 좀더 체계화 시킨 방법론 소프트웨어의 기능을 나누어 점증적으로 개발 소프트웨어 개발 모형 프로토타입 모델을 좀더 체계화 시킨 방법론 소프트웨어의 기능을 나누어 점증적으로 개발 목적: 실패의 위험을 줄임 여러 개의 프로젝트로 나누어 개발 Critical Success Factor를 고려하여 먼저 개발할 기능을 선택 테스트 및 피드백 용이 여러 번의 점증적인 릴리즈(incremental releases) Boehm이 제안 진화 단계 계획 수립(planning): 목표, 기능 선택, 제약 조건의 결정 위험 분석(risk analysis): 기능 선택의 우선순위, 위험요소의 분석 개발(engineering): 선택된 기능의 개발 평가(evaluation): 개발 결과의 평가 금오공과대학 컴퓨터공학부 컴퓨터공학전공
나선형 모형(Spiral Model) 대규모 시스템 개발에 적합 반복적인 개발 및 테스트 단점 소프트웨어 개발 모형 대규모 시스템 개발에 적합 Risk Reduction Mechanism 반복적인 개발 및 테스트 강인성 향상 단점 관리가 중요 위험 분석이 중요 새로운 모형 어느 모형이 가장 좋은가? 금오공과대학 컴퓨터공학부 컴퓨터공학전공
소프트웨어 프로젝트 성패에 영향을 미치는 요소 의사소통(Communication skill) 프로젝트의 성격 프로그래머의 역량(Maturity) 관리(Management) 팀의 프로젝트 경험(Experience) 금오공과대학 컴퓨터공학부 컴퓨터공학전공
Communication Skill 발주자와 개발자의 의사 소통 개발자들 사이의 의사 소통 인터뷰 기술, 프로토타입 소프트웨어 프로젝트 성패에 영향을 미치는 요소 발주자와 개발자의 의사 소통 인터뷰 기술, 프로토타입 요구 취합 방법(설문지, 유저 그룹, 워크샵, ...) 명세화 단계에서 의사소통을 위한 여러 가지 기법들이 개발 개발자들 사이의 의사 소통 Mythical man-month 중도에 투입된 개발자들은 생산성을 증가시키지 못함 현재는 이러한 현상이 나타나지 않는다. 그 이유는? 문서화 기술회의 가능하면 자주 짧게 의사소통을 할 것 금오공과대학 컴퓨터공학부 컴퓨터공학전공
프로그래머의 역량 소프트웨어 개발 - 노동집약적 작업 프로그래머의 능력 Sackman의 실험 품질이나 일정에 영향 소프트웨어 프로젝트 성패에 영향을 미치는 요소 소프트웨어 개발 - 노동집약적 작업 프로그래머의 능력 프로그래밍 능력 커뮤니케이션 능력 응용 분야에 대한 이해 Sackman의 실험 프로그래밍 생산성 - 1:25 디버깅 능력 - 1:28 품질이나 일정에 영향 SE의 지침, 방법론 도구 등은 평균 이하의 역량을 가진 프로그래머의 생산성 향상을 가져온다. 요리책과 요리사 금오공과대학 컴퓨터공학부 컴퓨터공학전공
프로젝트 관리 기술 소프트웨어 개발 관리 소프트웨어 프로세스 관리 소프트웨어 프로젝트 성패에 영향을 미치는 요소 소프트웨어 개발 관리 프로그래밍 경험 관리 능력 소프트웨어 프로세스 관리 일정 관리 예산, 인력 관리 형상 관리 품질 관리 프로젝트 관리는 목표 설정, 재원 마련, 일정 계획을 잘 하는 것 유능하고 성공적인 PM(Project Manager)의 모습은? 금오공과대학 컴퓨터공학부 컴퓨터공학전공
정리 공학적 접근 방법을 통한 소프트웨어 개발의 중요성 다양한 업무가 존재함 품질의 중요성이 증대 점진적 방법의 중요성 의사 소통의 중요성 의사소통의 질과 양보다, 주기적인 의사소통이 필수 소프트웨어 공학의 원리와 철학은 모든 분야 적용 금오공과대학 컴퓨터공학부 컴퓨터공학전공