소프트웨어 특성 및 유형
- 소프트웨어
- 프로그램 + 프로그램의 개발, 운용, 보수에 필요한 정보 일체
- 동적인 실체
- 지적 노동의 결과물
- 제조업 vs. 서비스업
- 논리적 요소로 구성
- 사회적, 경제적인 SW 의존도가 커짐
- 소프트웨어 특성
- 비가시성
- 테스트 가능
- 복잡성
- 변경성
- 순응성
- 장수
- 복제가능
- 소프트웨어 유형(주문형, 패키지, 임베디드)
시스템
- 공통의 목적을 달성하기 위해 하나 이상의 구성요소가 상호 관련된 유기적인 결합체
- 필요한 기능을 실현시키기 위한 관련 요소를 어떤 법칙에 따라 조합한 집합체
- 자연 시스템
- Ex.) 사람, 동물 식물 시스템
- 인공 시스템
- Ex.) 사회제도, 운송시스템, 통신시스템
1.1 소프트웨어 시스템
- 유기적으로 상호 작용하는 개체들의 모임
- 특징
- 시너지 효과
- 역동적으로 발전
- 상충되는 요구와 이해 관계의 절충
정보 시스템(Information System)
- 자료의 분류, 저장, 검색에 관점, DB를 대화식으로 접근
- 대규모 자료, 정적 X, 시스템 분석, 유지보수 중요
- Ex.) 항공권 예약 시스템, 신용 카드 검색 서비스, 뱅킹 시스템
- MIS
- 운영 관리, 의사결정을 위하여 정보 제공 시스템
제어 시스템(Control System)
- 사건을 감지하여 처리하고 자동적 보고
- 센서 감지
- 제어 기기 상태 보고
- 인터페이스
- Ex.) 교통제어, 공정제어, 수치 제어, 의료 시스템, 무기
탑재 시스템(Embedded System)
- 계산이 주된 기능이 아닌 시스템의 한 구성요소
- Ex.) 전자 기계 장치, 공정 제어, 비행기 유도, 스위칭 시스템
- 특징
- 대규모, 장기 사용, 테스트 X
- 인터페이스가 복잡, 비동기, 병렬, 분산
- 대규모 자료 접근, 변경, 출력
- 실시간 제어, 인터페이스
- 엄격한 요구
소프트웨어 개발 작업
- 명세화 → 설계 → 코딩 → 검증 → 유지보수
- 명세화의 어려움
- 재사용의 어려움
- 예측의 어려움
- 유지보수의 어려움
1.2 소프트웨어의 위기
- SW 수요가 급격히 증가하고 그 복잡성 증가에 따라 기존 방법이 충분치 않아 발생한 문제
- 접근법
- 즉흥적인 개발의 문제점 극복
- 개발 지연과 예산 초과
- 낮은 품질
- 유지보수 곤란
- 재작업
- 즉흥적인 개발의 문제점 극복
- SW 공정의 문제점
- 비용 초과
- 기간 지연
- 성능 저하
- 비신뢰성
- 유지보수 X, 많은 비용
- SW 요구와 그 공급 능력 간의 차이가 갈수록 심화
1.3 소프트웨어의 공학의 정의 및 목표
- 소프트웨어의 개발, 운영, 유지보수, 소멸에 대한 체계적인 접근 방법
- 반복 사용 가능
- 목표
- 복잡도 낮춤
- 비용 최소화
- 개발 기간 단축
- 대규모 프로젝트 관리
- 효율성
소프트웨어의 공학의 주제
단계적 프로세스
- 코딩에 치중 X, 요구분석, 설계, 코딩, 테스팅 등 정해진 절차를 따라 작업하는 것
품질 보증
프로젝트 관리
- 프로젝트 계획, 자원 관리, 리스크 관리, 모니터링
연관 분야
- 컴퓨터 공학의 원리나 기술과 관련된 원리
- 이를 적용하여 특정한 문제를 해결하려는 응용 도메인
소프트웨어 품질(Software Quality)
- 정확성(Correctness)
- 기능적으로 맞게 동작, 표준에 적합
- 신뢰성(Reliability)
- SW가 주어진 기간 동안 제대로 작동할 확률
- 강인성(Robustness)
- 요구 명세에 표시하지 않은 상황에서도 제대로 작동하는 성질
- 성능(Performance)
- 수행속도, 시간 복잡도, 시뮬레이션
- 사용 용이성(Usability)
- 친근하게 느끼는 성질, 사용자 인터페이스
- 유지 보수성(Maintainability)
- 보수성, 진화성
- 재사용성(Reusability)
- 부품의 성질, 확장 가능성, 적응성, 이용 용이성
소프트웨어 생산성(Software Productivity)
- 생산 과정에 크게 영향
- 개발 경험의 성숙도에 의해 좌우
- CMM level : 1~5
- 영향 미치는 요소
- 프로그래머 능력
- 팀 의사 전달
- 제품 복잡도
- 기술 수준
1.4 소프트웨어 프로젝트 성패에 미치는 요소
의사 소통(Communication Skill)
- 인터뷰 기술, 프로토 타입, 요구 취합 방법, 정형적 방법
- 개발자들 사이의 의사 소통(Mythical Man-month, 문서화)
프로젝트 성격
- 자료처리 중심, 제어 중심, 시스템 SW, 인공지능
- 크기, 복잡도
프로그래머의 역량(Maturity)
- SW 개발 - 노동집약적 작업
- 프로그래머의 능력(프로그래밍, 커뮤니케이션, 응용 분야 이해, 도구에 대한 이해)
- Sackman의 실험
- 프로그래밍 생산성 - 1:25
- 디버깅 능력 - 1:28
관리(Management)
- SW 개발 관리
- 프로그래밍 경험, 관리 능력
- SW 프로세스 관리
- 일정 관리
- 예산, 인력 관리
- 형상 관리
- 품질 관리
- CMM 모델
- QA(Quality Assurance)