제 1 장 : 소프트웨어와 소프트웨어 개발 개요

Download Report

Transcript 제 1 장 : 소프트웨어와 소프트웨어 개발 개요

소프트웨어 공학 응용 및 실습
제 1 장 : 소프트웨어와
소프트웨어 개발 개요
이형원
강릉대학교 컴퓨터공학과
1
학습 내용
소프트웨어
소프트웨어 위기
소프트웨어 공학
소프트웨어 개발 모형
소프트웨어 개발에 영향을
미치는 요소
실습 프로젝트
2
소프트웨어와 소프트웨어 공학
소프트웨어의 중요성
• 막대한 소프트웨어 개발 비용
• 소프트웨어에 의한 생활과 문화의 변화
성공적인 소프트웨어 개발
•
•
•
•
프로그래밍 기술
개발 프로세스, 계획, 개발 방법론, 도구
프로젝트 관리 기술
개발 경험
소프트웨어 공학
• SW 개발 과정에서 필요한 지식과 기술의 습득
• 주어진 비용, 기간, 자원안에서 고품질의 SW를 생산
3
소프트웨어란 ?
소프트웨어의 정의
• 프로그램 + 이를 개발, 운용, 보수하기 위하여
필요한 관련 정보 일체
프로그램 vs. 소프트웨어
• 프로그램 : P.L.로 작성된 정적인 코드
• 소프트웨어 : 프로그램의 동적인 실체
4
소프트웨어의 특성
 비가시성: 생산물의 구조가 코드 안에 숨겨짐
 복잡성: 개발과정이 복잡/비표준, 전산화 대상 업무가 난해
 순응성: 사용자 요구나 환경의 변화에 따라 변형
 복제 가능: 극히 적은 비용으로 복제
 테스트 및 변경 가능: 언제나 시험 및 그에 따른 수정 가능
 비마모성: 사용에 의해 마모되거나 소멸되지 않음
 비제조성: 제조 생산이 아닌 개발(노동력이 아닌 두뇌력 요구)
5
소프트웨어의 분류
기능: 시스템 소프트웨어, 응용 소프트웨어
개발 과정의 성격: prototype, product, package
HW 환경: 대형, 병렬처리, 개인용, 워크스테이션용
OS: 단일 사용자, 다수 사용자, 네트워크 환경
사용자: 전문가, 비전문가, 소프트웨어 엔지니어
크기: 대규모, ..., 소규모
사용분야: 통신, P.L., 사용자 인터페이스, 은행, …
습득형태: off-the-shelf(구입), off-the-shelf modified,
주문형 제작, 내부 제작, public domain
6
시스템
정의
• 유기적으로 상호작용하는 개체나 서브시스템들의 모임
• 각 서브시스템은 다른 서브시스템으로부터의 자극에 반응
특징
• synergy 효과: 서브시스템간 상호작용으로 새 가치 창조
• 역동적으로 발전, 변경: 유지보수가 중요
• 상충되는 요구의 절충: 모든 요구를 만족하는 시스템 X
시스템 관점에서의 소프트웨어
• SW는 서브시스템 (예. 은행의 업무 전산화 소프트웨어)
• SW 자체도 하나의 시스템
7
소프트웨어 위기
컴퓨터 시스템 구성 비용
HW
SW(개발,유지보수)
• 원인
1960
1985
80%
20%
20%(5%,15%) 80%(20%,60%)
컴퓨터 보급이 증가 --> 새로운 분야에 대한 SW 요구
컴퓨터 기술 발전 --> 대형의 복잡한 소프트웨어 개발 요구
다수의 컴퓨터 제조 업체의 출현 --> HW 비용의 하락
소프트웨어 개발자의 희소성 --> 개발 인건비의 상승
8
소프트웨어 위기(계속)
 소프트웨어 위기(Software Crisis) : SE 출현의 배경
• 새로운 SW 요구와 그 공급 능력 간의 차이가 갈수록 심화
요구의 증가
생산성
인력 공급
1965-1985 1983년의 증가율
100배
12%
2배
4%
10배
4%
• 개발 예산 초과 및 개발 일정 지연: 예측의 부정확성
• 프로그래머 개인의 역량에 따라 SW 개발 성패가 좌우:
프로젝트 관리 기술의 미비(경험/훈련/교육 없는 관리자들)
• SW 품질 문제: SW에 대한 체계적/기술적 시험 능력 결여
9
소프트웨어 규모와 소프트웨어 공학
소규모 소프트웨어 개발 : 관심 대상이 아님
•
•
•
•
제한된 범위의 목적
짧은 수명
고치고 확장하는 대신 새로운 프로그램으로 대체 가능
특별한 기법을 도입해도 그 결과의 차이가 거의 없음
대규모 소프트웨어 개발
• 개인이 전체 시스템의 모든 세밀한 부분을 알기가
불가능
• 특별한 기법을 도입하면 신뢰성과 생산성이 크게 향상
10
소프트웨어 신화
관리자 신화
• 소프트웨어 개발 방법에 대한
좋은 표준과 절차가 있기 때문에
개발자들에게 어려움은 없다.
• 좋은 하드웨어와 각종 도구가
있어 개발 환경이 좋기 때문에
좋은 제품을 빨리 만들 수 있다.
• 일정에 뒤져 있다면 더 인원을
투입하면 된다.
• 프로그래밍 교육만 잘 시키면
쉽게 우수 인력을 확보 가능하다.
• 문제가 주어지면 바로 코딩 작업을 시작한다.
11
소프트웨어 신화(계속)
고객(사용자) 신화
• 시스템 정의와 개발 목표 설정이 끝나면 착수가
가능하고 상세 내역은 나중에 추가 시켜 나갈 수 있다.
• 소프트웨어는 순응성이 있어 개발 중 변경되는 요구
사항을 쉽게 반영할 수 있다.
실무자(소프트웨어 엔지니어) 신화
•
•
•
•
프로그램을 작성하고 테스트를 끝내면 작업이 완료된다.
결과는 작동되는 프로그램뿐이다.
완성되어 실행시키기 전까지는 품질을 알 수 없다.
소프트웨어를 90% 개발했으니 다 된 것과 다름없다.
12
소프트웨어 공학
정의
• 질 좋은 소프트웨어를 경제적으로 생산하기 위하여
공학, 과학 및 수학적 원리와 방법을 적용하는 것 Watts Humphrey, SEI
• 소프트웨어의 개발, 운용, 유지보수 및 파기에 대한
체계적인 접근 방법 - IEEE Computer Society
• 품질, 효율, 비용, 인정에 관한 공학적인 접근 원리 - F.
Brooks
목표
• 고품질(High Quality)의 소프트웨어를
• 최소의 비용으로 계획된 일정에 맞추어 개발 :
생산성(Productivity)
13
SW의 품질
소프트웨어를 대하는 입장에 따라 관점이 달라짐
개발 초기부터 개발 단계별로 계획, 점검
발주자
사용자
최소 비용
생산성
융통성
효율성
신뢰성
이식성
재사용성
유지보수성
상호 운용성
기능의 정확성
이해 용이성
사용 용이성
일관된 통합
유지보수자
14
SW의 품질: 평가 항목
정확성
• 기능적으로 맞게 동작
• 요구 분석서의 기능과 일치
신뢰성
• 주어진 기간동안 제대로 작동할 확률
• 오류에 반비례
효율성(성능)
• 수행(응답) 속도, 처리량
• 알고리즘의 시간 복잡도
15
SW의 품질: 평가 항목(계속)
사용 용이성
• 시스템을 친근하게 느낄 수 있는 성질
• 사용 대상에 따라 달라질 수 있음
• 사용자 인터페이스, Human factor
유지보수성
• 보수성: 정해진 기간에 SW 결함을 해결할 수 있는 성질
• 진화성: 잠재적 발전 가능성
재사용성
• SW 부품(라이브러리, 클래스 등)의 성질
• 확장 가능성
• 적응성
16
생산성
소프트웨어 생산 과정의 효율
개발 경험의 성숙도에 의해 좌우
측정의 어려움(전통적: 생산된 라인수/단위 시간)
생산성에 영향을 미치는 요소
• 프로그래머의 능력: 기본 능력 + 특정 분야에 대한 친숙함
• 팀 의사 전달: 의사 소통 경로, 시스템 요소간 상호 작용
• 제품의 복잡도: 개발과 유지보수 비용은 제품의 규모와
복잡도에 비선형적으로 비례
• 기술 수준: 개발 모델, 방법론, 도구, P.L. 등에 대한 숙련도
• 관리 기술: 일정, 자원, 조직, 비용 ---> 경험이 중요
17
소프트웨어 엔지니어의 역할
문제를 분석하여 기능/범위의 정확한 요구 사항 도출
SW 시스템의 개괄적 구조, 입출력, 인터페이스 설계
모듈 내부의 알고리즘, 자료/파일 구조, DB 설계
양질의 프로그램을 생산
테스트 및 통합 기술
사용자 지침서 및 개발 문서 작성
성능 측정과 모델 설계
유지보수
프로젝트 계획 및 관리
18
SW 개발 모형
소프트웨어 생명 주기 vs. 소프트웨어 개발 주기
개발 모형 (소프트웨어 개발 주기 모형)
•
•
•
•
개발 단계 : 수행하여야 할 작업
각 단계에 대한 입력 자료 및 수행 결과
한 단계 종료 후 다음 단계로의 진행에 대한 분명한 기준
실정에 맞는 개발 팀의 고유한 모형의 정립 필요
중요한 모형
• 폭포수 모형
• 프로토타이핑 모형
• 점증적 모형
19
폭포수 모형
1980년대까지 산업계 표준
특성
• 각 단계가 다음 단계 시작 전에 끝나야 함
각 단계 사이에 중복이나 상호 작용이 없음
각 단계의 결과는 다음 단계가 시작 되기 전에 점검
점검 결과에 문제가 있으면 바로 전단계로 피드백
• 문제가 단순하거나 잘 알고 있는 경우 적합 : 피드백
수가 적어짐
• 비전문가가 사용할 시스템 개발에 적합: 매뉴얼
• 단계 별 결과물(deliverable)에 대한 명확한 정의가 필요
20
폭포수 모형(계속)

프로세스 및 결과물
P
계획
R
•문제정의
계획서
•타당성 분석
•비용, 일정예측
I
구현
•프로그래밍
•단위테스트
•DFD
요구
•자료사전
•소단위명세서 분석서
T
프로그램
요구 분석
시험
•통합시험
•기능시험
•성능시험
D
•시스템구조설계 구조설계서
•프로그램설계
상세설계서
•UI 설계
A
통합된
프로그램
설계
인수/설치
•설치
•인수 시험
(활동)
설치된
소프트웨어
(결과물)
21
폭포수 모형(계속)
장점
• 소프트웨어 개발 과정을 개념적으로 자연스럽게 표현
• 가장 오랜 기간동안 폭 넓게 사용
단점
• 각 단계에서 시스템을 보는 관점이 다름
각 단계의 전환에 많은 노력
불필요한 다종의 문서를 생산할 가능성
•
•
•
•
처음 단계를 지나치게 강조할 경우 코딩, 테스트가 지연
실제 프로젝트는 반복 및 병행 작업이 존재
완벽한 단계별 명세서를 가정 : 초기 단계의 불확실성
고객의 인내력을 요구 : 구현 단계이전에는 작동 X
22
프로토타이핑 모형
프로토타입 생성 후 평가에 따른 보완을 반복
• 사용자의 요구를 더 정확히 추출
• 알고리즘 타당성, OS와의 조화, UI 등을 미리 확인
프로토타입의 종류
•
•
•
•
시나리오
화면 모형
데모 시스템
실제 SW의 1st 버전
23
프로토타이핑 모형(계속)
프로세스
요구 분석
프로토타입
개발/개선
프로토타입
평가
구현
인수/설치
24
프로토타이핑 모형(계속)
장점
• 사용자 요구가 불투명할 때 적합
• 발주자와 개발자간의 공동의 참조 모델 제공  자세한
의사소통
• 적은 비용으로 실현 가능성 타진
• 개발 단계에서 유지보수가 이루어짐
단점
• 오해, 기대 심리 유발: 품질 저하 가능성
• 관리가 어려움: 중간 과정을 점검할 일정표/산출물이 없음
25
점증적(나선형) 모형
소프트웨어의 기능을 나누어 점증적으로 개발
• 실패의 위험을 줄임
• 테스트 용이
장점
• 대규모 시스템 개발에 적합
• risk reduction mechanism
• 반복적인 개발 및 테스트 : 강인성 향상
단점
• 관리가 중요 : 정확한 위험 분석이 필요
• 새로운 모형
26
Determine objectives
alternatives and
constraints
Risk
analysis
Evaluate alternatives
identify, resolve risks
Risk
analysis
Risk
analysis
REVIEW
Requirements plan
Life-cycle plan
Development
plan
Plan next phase
Integration
and test plan
Prototype 3
Prototype 2
Operational
protoype
Risk
analy sis Prototype 1
Simulations, models, benchmarks
Concept of
Operation
S/W
requirements
Requirement
validation
Product
design
Detailed
design
Code
Unit test
Design
V&V
Integr ation
test
Acceptance
test
Develop, verify
Service
next-level product
27
SW 개발에 영향을 미치는 요소
의사 소통
• 발주자와 개발자의 의사 소통 : 지식, 관점 차이 극복
인터뷰 기술
프로토타입
요구 사항 취합 방법 : 설문지, 유저 그룹, 워크샵, ...
정형적 방법 : 소프트웨어 공학 기법
• 개발자들 사이의 의사 소통
Mythical man-month
문서화
기술회의
28
SW 개발에 영향을 미치는 요소(계속)
프로젝트의 성격
• 프로젝트의 크기와 복잡도에 따라 관리 기법, 도구,
방법론이 달라짐
• 소프트웨어 크기에 따른 분류(Yourdon)
분
류
단순 규모
소규모
중규모
대규모
초대규모
극초대규모
참여 프로그래머
인원수
1
1
2~5
5~20
100~1000
2000~5000
기
간
1~4 주
1~6 개월
1~2 년
2~3 년
4~5 년
5~10 년
소프트웨어 규모
(원시코드 줄)
500
1K~2K
5K~50K
50K~100K
1M
1M~10M
29
SW 개발에 영향을 미치는 요소(계속)
프로그래머의 역량
• 프로그래머의 능력
프로그래밍 능력
프로젝트 구성원으로서의 능력 : 품질, 일정에 영향
응용 분야에 대한 이해도 : 경험 및 교육
• Sackman의 실험
프로그래밍 생산성 - 최고 1:25, 평균 1:16
디버깅 능력 - 1:28
관리
• 프로그래밍 지식과 기술 및 관리 능력의 조화
• 프로젝트 수행 경험이 중요
30
실습 프로젝트
팀 구성
• 1조 당 4-5명
• 프로젝트 관리자 선정
프로젝트 문제
• 학과 사무실 관리 소프트웨어
31