제 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