소프트웨어와 소프트웨어 개발 Software Engineering.

Slides:



Advertisements
Similar presentations
CI(Continuous Integration) 이학성. C ontinuous I ntegration? 2 지속적으로 품질관리 를 적용하는 과정 개발자가 기존 코드의 수정 작업 을 시작할 때, 코드 베이스의복사본을 받아서 작업을 시작하면서 코드의 변경.
Advertisements

Big Data & Hadoop. 1. Data Type by Sectors Expected Value using Big Data.
항공 예약 시스템 1 조 ( 김민철, 김영주, 이혜림, 장유정, 조윤주, 문하늘 ). 목차 차세대 전산시스템 도입의 필요성 현재 항공 시스템 ( 대한항공 ) 항공 시스템의 변화 미래항공 시스템.
컴퓨터 종합설계 2012 년 2 학기 Syllabus 개요 (1/2) 목표  실 세계의 문제를 제시하고, 이에 대한 해결책을 컴퓨터 공학적인 방법으로 해결하기 위하여 팀을 주축으로 소프트웨어 개발 프로젝트 수행  프로젝트 계획에서부터 구현까지.
제1장 프로젝트관리 차 례 시스템 조사와 분석 프로젝트 계획 수립 - 계획서 작성.
컴퓨터와 인터넷.
Secure Coding 이학성.
목 차 C# 언어 특징 .NET 프레임워크 C# 콘솔 프로그램 C# 윈도우 프로그램 실습 프로그래밍세미나 2.
Software Engineering (Introduction)
Software Engineering (Introduction)
Power Java 제3장 이클립스 사용하기.
MS-Access의 개요 1강 MOS Access 2003 CORE 학습내용 액세스 응용 프로그램은 유용한 데이터를
최윤정 Java 프로그래밍 클래스 상속 최윤정
Entity Relationship Diagram
로봇 소프트웨어.
1. Windows Server 2003의 역사 개인용 Windows의 발전 과정
Introduction To Computers
데이터베이스 및 설계 금오공과대학교 컴퓨터공학부 이 이섭.
시스템집적반도체 설계 검증 환경과 기법 Ch 7.
객체지향 소프트웨어공학 12 장 품 질.
분석적 사고 (Analytical Thinking)
시스템 설계와 산업디자인 개발.
FTP 프로그램 채계화 박재은 박수민.
소프트웨어 공학 Lecture #2: 프로세스와 방법론
컴퓨터과학 전공탐색 배상원.
제 1장. 멀티미디어 시스템 개요.
1장. 데이터베이스 자료의 조직적 집합체_데이터베이스 시스템의 이해
간지 Ⅰ. 시스템소개 Autoway Groupware User Manual Ⅰ. 시스템 소개 | 시스템 소개.
Method & library.
소프트웨어 공학 Lecture #2: 프로세스
‘2012년 정보화 사업 교육 버그추적시스템(BTS) 사용 절차 2012, 02.
소프트웨어 공학의 개요.
Chatpter 01 소프트웨어 공학 소개 01 소프트웨어의 이해 02 공학과 소프트웨어 공학의 이해
소프트웨어 공학 (Software Engineering)
제 10 장 의사결정이란 의사결정은 선택이다.
2장. 데이터베이스 관리 시스템 데이터베이스 관리 시스템의 등장 배경 데이터베이스 관리 시스템의 정의
RMI Messenger 지도 : 김정배 교수님 조봉진.
컴퓨터소프트웨어설계및실험 년 1학기 실험계획 -.
ERP의 구축방법과 장·단점 1조 김두환 김수철 가민경 김정원.
제 15 장 직무설계 15.1 노동인력관리 목적 최대의 성과 만족스러운 성과 의사결정 직무설계 충원수준 선발 훈련과 경력개발
USN(Ubiquitous Sensor Network)
자율주행 차량용 드라이빙 컴퓨팅 하드웨어 플랫폼 05
소프트웨어와 소프트웨어 개발 - Software Engineering -.
소프트웨어 공학 Chapter #1: 소개 1.
웹디자인
AUTODESK AUTOCAD ELECTRICAL 전기제어 2D 설계 소프트웨어 표준기반 설계 생산성 도구 구조도 설계
04. DBMS 개요 명지대학교 ICT 융합대학 김정호.
Chatpter 01 소프트웨어 공학 소개 01 소프트웨어의 이해 02 공학과 소프트웨어 공학의 이해
LabVIEW WiznTec 주임 박명대 1.
플래시 애니메이션 제작과정 (E-러닝) Lee Sunghoon 1.
Kangwon National Univ. | Computer Science
컴퓨터 소프트웨어 설계 및 실험 년 1학기 실험계획 -.
소프트웨어 공학 Lecture #10: 유지보수
소프트웨어 중심에 존재하는 복잡성 에 도전장을 내밀다
알고리즘 알고리즘이란 무엇인가?.
소프트웨어 공학 (Software Engineering)
클러스터 시스템에서 효과적인 미디어 트랜스코딩 부하분산 정책
컴퓨터 소프트웨어 설계 및 실험 년 1학기 실험계획 -.
생산 운영관리의 기초 공 정 설 계 생산능력계획 및 일정계획 재 고 관 리 노동인력관리 품질관리 및 설비보전 생산의 국제화
창의적 공학 설계 < 사용자 중심의 공학설계 > : Creative Engineering Design
멀티미디어시스템 제 5 장. 멀티미디어 데이터베이스 개념 IT응용시스템공학과 김 형 진 교수.
IO-Link 통신 기술 소개 산업 Ethernet 필드버스 게이트웨이 접속 IO-Link 마스터 IO-Link 통신
프로그래밍 언어 학습을 위한 가상실습환경 창원대학교 이수현.
.Net FrameWork for Web2.0 한석수
1장 C 언어의 개요 C 언어의 역사와 기원 C 언어의 특징 프로그램 과정 C 프로그램 구조 C 프로그램 예제.
학부 컴퓨터공학부 교육과정 (학부) 2학년 4학년 3학년 1학년 1학기 2학기 IPP 자격과정 전공트랙
소프트웨어 설계 및 실습 강기준.
VAULT BASIC / VAULT PROFESSIOAL
1 제조 기술의 세계 3 제품의 개발과 표준화 제품의 개발 표준화 금성출판사.
생산성 증대 효율성 향상 측정 수행 능력.
Presentation transcript:

소프트웨어와 소프트웨어 개발 Software Engineering

강의 개요 소프트웨어 소프트웨어 위기 소프트웨어 공학 좋은 소프트웨어의 조건 소프트웨어 개발 모형 소프트웨어 개발에 영향을 미치는 요소

소프트웨어 소프트웨어 소프트웨어 생산 사회적, 경제적인 소프트웨어 의존도 커짐 프로그램 + 프로그램의 개발, 운용, 보수에 필요한 정보 일체(소프트웨어 생산 결과물 일체) 소프트웨어 생산 소프트웨어는 프로그램의 동적인 실체 프로그램은 형식 언어로 표현된 지적 노동의 결과물 제조업 vs. 서비스업(소프트웨어는 제작이 아니라 창조적 노력이 포함된 개발) 닳아 없어지는 것이 아니라 소용없어 못쓰게 됨 논리적인 요소로 구성(유지 보수자 복잡) 소프트웨어 산업(국내는 12조 규모의 산업) 사회적, 경제적인 소프트웨어 의존도 커짐 dependability

소프트웨어의 특성 ~ilities 제품으로서의 품질 특성 비가시성(Invisibility) 테스트 가능(Testability) 복잡성(Complexity) 변경성(Changeability) 순응성(Conformity) 장수(Longevity) 복제 가능(Duplicability) 응용에 의존(Application dependability) 제품으로서의 품질 특성 좋은 소프트웨어라고 평가 할 수 있는 기준

소프트웨어 시스템 유기적으로 상호 작용하는 개체들의 모임 소프트웨어는 컴퓨터를 기반으로 하는 여러 시스템과 관계를 맺고 있음 특징 시너지 효과 역동적으로 발전, 변경 상충되는 요구와 이해 관계의 절충 소프트웨어 자체도 하나의 시스템

정보 시스템(Information System) 자료의 분류, 저장, 검색에 관점 데이터 베이스를 대화식으로 접근 조직의 문제 해결을 위한 도구 예 항공권 예약 시스템, 신용 카드 검색 서비스, 뱅킹 시스템 특징 대규모 자료, 정적이 아님 시스템 분석, 유지보수가 중요 MIS 운영, 관리, 의사결정을 위하여 정보를 제공하는 시스템

제어 시스템(Control System) 사건을 감지하여 처리하고 자동적으로 보고 센서의 감지 제어 기기의 상태 보고 오퍼레이터의 입력 처리 인터페이스 예 교통 제어 공정 제어 수치 제어 의료 시스템 무기 항공 제어

탑재 시스템(Embedded System) 계산이 주된 기능이 아닌 시스템의 한 구성요소 예 전자 기계 장치, 공정 제어 비행기 유도, 스위칭 시스템 환자 감시 시스템, 레이다 추적 시스템 특징 대규모, 장기 사용, 테스트하기 어려움 인터페이스가 복잡, 비동기, 병렬, 분산 대규모의 자료를 접근, 변경, 출력 실시간 제어, 인터페이스 엄격한 요구: 실시간 반응, 고장에 대한 안전, 신뢰성

소프트웨어의 위기(Software Crisis)

소프트웨어의 위기 (Software Crisis) 소프트웨어 공정의 문제점 비용 초과 기간 지연 성능 저하 비신뢰성 유지보수 불가능, 엄청난 유지보수 비용 소프트웨어 위기 소프트웨어의 요구와 그 공급 능력 간의 차이가 갈수록 심화 1965-1985 1983년의 증가율 요구의 증가 100배 12% 생산성 2배 4% 인력 공급 10배 4%

소프트웨어 공학 정의 질 좋은 소프트웨어를 경제적으로 생산하기 위하여 공학, 과학 및 수학적 원리와 방법을 적용하는 것 - Watts Humphrey, SEI 소프트웨어의 개발, 운용, 유지보수 및 소멸에 대한 체계적인 접근 방법 - IEEE Computer Society 품질, 효율, 비용, 인정에 관한 공학적인 접근 원리 - F. Brooks 목표 품질(Quality) 생산성(Productivity)

엔지니어링의 발전원리 [Shaw, 1996] 과 학 대량생산 엔지니어링 상업화 장인들의 기술

소프트웨어 공학이 다루는 주제 분 야 의 미 사 례 요리 비유 방법(method) 소프트웨어 제작에 사용하는 기법이나 절차 구조적 분석, 설계 방법 객체지향 분석, 설계 방법 익히는 방법 (구이, 찜, 훈제 등) 도구(tool) 자동화된 시스템 설계 도구 프로그래밍 도구 테스트 도구 요리 도구 (프라이팬, 압력 솥, 오븐 등) 프로세스(process) 도구와 기법을 사용하여 작업하는 순서 Unified Process eXtreme Programming 조리 순서(recipe) 패러다임(paradigm) 접근 방법, 스타일 구조적 방법론 객체지향 방법론 음식 스타일 (한식, 일식, 중식, 퓨전 등)

소프트웨어 품질 (Software Quality) 소프트웨어를 대하는 입장에 따라 품질에 대한 관점이 달라짐 최소 비용 생산성 융통성 기능의 정확성 이해 용이성 사용 용이성 일관된 통합 이식성 재사용성 유지보수성 상호 운용성 신뢰성 효율성 발주자 사용자 유지보수자

소프트웨어 품질 (Software Quality) 정확성(Correctness) 기능적으로 맞게 동작, 표준에 적합 요구 분석서의 기능과 일치하는지 점검 신뢰성(Reliability) 소프트웨어가 주어진 기간동안 제대로 작동할 확률 오류에 비례 정확성을 위한 필요조건 강인성(Robustness) 요구 명세에 표시하지 않은 상황(오류 입력)에서도 제대로 작동하는 성질

소프트웨어 품질 (Software Quality) 성능(Performance) 수행 속도 알고리즘의 시간 복잡도 시뮬레이션, 스트레스 테스트 사용 용이성(Usability) 시스템을 친근하게 느낄 수 있는 성질 사용 대상에 따라 달라질 수 있음 사용자 인터페이스, Human factor 유지보수성(Maintainability) 보수성: 정해진 기간에 소프트웨어 결함을 해결할 수 있는 성질 진화성: 잠재적 발전 가능성

소프트웨어 품질 (Software Quality) 재사용성(Reusability) 소프트웨어 부품(라이브러리, 클래스 등)의 성질 확장 가능성 - openness 적응성 - adaptability 이용 용이성 - closeness

프로덕트 품질 그림 1.6 McCall의 품질 모델 참조… 소프트웨어에 포함된 오류가 중요한 판단 기준이 된다. 개발과정에서 설계나 코딩, 검사과정에서 발견한 오류의 개수를 파악 최종 소프트웨어 제품의 품질 판단의 기준이 됨.

프로세스 품질 개발하는 과정이 소프트웨어 품질에 많은 영향을 준다는 주장 개발 및 유지보수하는 프로세스의 품질이 프로덕트 자체의 품질 못지 않게 중요하나는 입장 향상 방안 특정 오류가 언제 어디서 발견되는가? 어떻게 하면 개발 과정에 오류를 조기에 발견할 수 있는가? 어떻게 하면 오류에 대한 내성이 있는 시스템, 즉 오류가 소프트웨어를 정지시키는 확률이 적은 시스템으로 만들 수 있는가? 프로세스가 좋은 품질을 보장하는 더 효율적이며 효과적인 다른 방법이 있는가?

소프트웨어 생산성(Software Productivity) 생산 과정(process)에 크게 영향 Process improvement 개발 경험의 성숙도에 의해 좌우 CMM(Capability Maturity Model): Level 1~5 생산성에 영향을 미치는 요소 프로그래머의 능력 팀 의사 전달 제품의 복잡도 기술 수준 관리 기술

소프트웨어 프로세스 모형 소프트웨어 라이프 사이클 개념화 단계 유아 및 성장기 성년기 유아기 개발 후 개발 단계

소프트웨어 프로세스 모형 개발 프로세스 개발 모형 실정에 맞는 개발 팀의 고유한 모형의 정립 필요 개발 단계(작업) 입력 자료 수행 결과 실정에 맞는 개발 팀의 고유한 모형의 정립 필요 소프트웨어 개발에 필요한 작업 요구 분석과 정의 시스템 설계 프로그램 설계 프로그램의 작성(구현) 테스트(단위 테스트, 통합 테스트, 시스템 테스트) 시스템 설치 유지보수

대표적인 소프트웨어 프로세스 모형 중요한 모형 폭포수 모형 프로토타이핑 모형 점증적 모형 나선형 모형 V 모형

폭포수모형(Waterfall Model) 계 획 요구 분석 설 계 구 현 시 험 인수설치

폭포수모형(Waterfall Model) 1970년대 소개 항공 방위 소프트웨어 개발 경험으로 습득 각 단계가 다음 단계 시작 전에 끝나야 함 순서적 - 각 단계 사이에 중복이나 상호작용이 없음 각 단계의 결과는 다음 단계가 시작 되기 전에 점검 바로 전단계로 피드백 단순하거나 응용 분야를 잘 알고 있는 경우 적합 한 번의 과정, 비전문가가 사용할 시스템 개발에 적합 결과물 정의가 중요 Method vs. Methodology

폭포수모형의 프로세스 프로세스 및 결과물 계획 요구 분석 설계 구현 시험 인수/설치 문제정의 타당성 분석 비용, 일정예측 계획서 DFD 자료사전 소단위명세서 요구 분석서 시스템구조설계 프로그램설계 UI 설계 구조설계서 상세설계서 프로그래밍 단위테스트 프로그램 통합시험 기능시험 성능시험 통합된 설치 인수 시험 설치된 소프트웨어 (활동) (결과물) P R D I T A

폭포수모형의 결과물(Deliverable)

폭포수모형의 장단점 단점 MIL-STD-2167 ISO 12207 처음 단계의 지나치게 강조하면 코딩, 테스트가 지연 각 단계의 전환에 많은 노력 프로토타입과 재사용의 기회가 줄어듦 소용 없는 다종의 문서를 생산할 가능성 있음 MIL-STD-2167 general system life cycle software development cycle ISO 12207

프로토타이핑 모형 Rapid Prototyping Model(RAD) 요구 분석 프로토타입 개발/개선 프로토타입 평가 구현 인수/설치

프로토타이핑 모형 시범 시스템의 적용 프로토타이핑 도구 공동의 참조 모델 제공 개발 단계에서 유지보수가 이루어짐 단점 사용자의 요구를 더 정확히 추출 알고리즘의 타당성, 운영체제와의 조화, 인터페이스의 시험 제작 프로토타이핑 도구 화면 생성기 비주얼 프로그래밍, 4세대 언어 등 공동의 참조 모델 제공 개발 단계에서 유지보수가 이루어짐 단점 오해, 기대심리 유발 관리가 어려움(중간 산출물 정의가 난해)

점증적 모형 개발 싸이클이 짧은 환경 개발 시스템 개발자 사용자 완성 시스템 빠른 시간 안에 시장에 출시하여야 이윤에 직결 개발 시간을 줄이는 법 – 시스템을 나누어 릴리스 개발 시스템 개발자 릴리스 1 구축 릴리스 2 구축 릴리스 3 구축 릴리스 1 사용 릴리스 2 사용 릴리스 3 사용 사용자 완성 시스템

점증적 모형 릴리스 구성 방법 단계적 개발 점증적 방법 – 기능별로 릴리스 반복적 방법 – 릴리스할 때마다 기능의 완성도를 높임 단계적 개발 기능이 부족하더라도 초기에 사용 교육 간ㅇ 처음 시장에 내놓는 소프트웨어는 시장을 빨리 형성시킬 수 있음 자주 릴리스하면 가동 중인 시스템에서 일어나는 예상하지 못했던 문제를 신속 꾸준히 고쳐나갈 수 있음. 개발 팀이 릴리스마다 다른 전문 영역에 초점 둘 수 있음.

나선형 모형 (Spiral Model)

나선형 모형(Spiral Model) 소프트웨어의 기능을 나누어 점증적으로 개발 실패의 위험을 줄임 테스트 용이 피드백 여러 번의 점증적인 릴리즈(incremental releases) Boehm이 제안 진화 단계 계획 수립(planning): 목표, 기능 선택, 제약 조건의 결정 위험 분석(risk analysis): 기능 선택의 우선순위, 위험요소의 분석 개발(engineering): 선택된 기능의 개발 평가(evaluation): 개발 결과의 평가

나선형 모형(Spiral Model) 대규모 시스템 개발에 적합 반복적인 개발 및 테스트 단점 risk reduction mechanism 반복적인 개발 및 테스트 강인성 향상 단점 관리가 중요 위험 분석이 중요 새로운 모형

V모형 V 모형은 폭포수 모형에 시스템 검증과 테스트 작업을 강조한 것. 그림 1.12 참조

소프트웨어 프로젝트 성패에 영향을 미치는 요소 의사소통(Communication skill) 프로젝트의 성격 프로그래머의 역량(Maturity) 관리(Management) 팀의 프로젝트 경험(Experience)

Communication Skill 발주자와 개발자의 의사 소통 개발자들 사이의 의사 소통 인터뷰 기술 프로토타입 요구 취합 방법(설문지, 유저 그룹, 워크샵, ...) 정형적 방법 개발자들 사이의 의사 소통 Mythical man-month 문서화 기술회의

프로젝트 성격 응용분야 자료처리 중심, 제어 중심, 시스템 소프트웨어, 인공지능 크기, 복잡도

프로그래머의 역량 소프트웨어 개발 - 노동집약적 작업 프로그래머의 능력 Sackman의 실험 품질이나 일정에 영향 프로그래밍 능력 커뮤니케이션 능력 응용 분야에 대한 이해 프로세스, 도구에 대한 이해와 경험 Sackman의 실험 프로그래밍 생산성 - 1:25 디버깅 능력 - 1:28 품질이나 일정에 영향

프로젝트 관리 기술 소프트웨어 개발 관리 소프트웨어 프로세스 관리 CMM 모델 프로그래밍 경험 관리 능력 소프트웨어 프로세스 관리 일정 관리 예산, 인력 관리 형상 관리 품질 관리 CMM 모델 소프트웨어 품질 관리(Quality Assurance)

소프트웨어 공학의 발전추이(1) 1970년대 초반( 구조적 프로그래밍 ) 1970년대 중반( 설계방법론 ) 구조적 코딩 하향식 프로그래밍 정보 은닉(Pamas) 및 추상화(Dijkstra) 단계적 세분화(Wirth) 1970년대 중반( 설계방법론 ) 구조적 설계(Yourdon, Constantine) JSP설계방법(Jackson) Warnier-Orr 설계방법

소프트웨어 공학의 발전추이(2) 1970년대 후반( 분석방법론 ) 구조적 분석(DeMarco) SADT(SofTech) 1980년대 초반( 자동화 도구 및 객체지향 설계 및 프로그래밍 ) PSL/PSA 코드 자동생성, 소프트웨어 공학도구 객체지향 설계 Smalltalk, Ada, Modula-2

소프트웨어 공학의 발전추이(3) 1980년대 말( 컴퓨터 응용 소프트웨어 공학 ) 분석을 위한 대화식 그래픽 도구 분석, 설계 지원도구 프로그래밍 환경 통합 소프트웨어 공학 환경 사용자 인터페이스 관리 시스템 1990년대 초( 객체지향 소프트웨어 공학 ) 분석, 설계 방법(UML) 소프트웨어 재사용(설계 패턴, 프레임워크) 분산객체지향 소프트웨어 구조 및 설계(CORBA, COM) C++, Java