[SE] 1장 개요

1 소개 (Introduction to Software Engineering)


1.1 소프트웨어 (Software)

 - 소프트웨어 정의
 : 프로그램 vs. 소프트웨어 (vs. 코드)
 

 - 소프트웨어의 중요성

 : 1970년대 하드웨어(컴퓨터)를 팔면 끼워주는 부속물

 : 2010년대 소프트웨어 중심 사회
 (모바일 게임 광고 vs. 아파트 광고)

 - 소프트웨어의 특징  (No Silver Bullet by Frederick P. Brooks, Jr.)

   : Complex -> 동일한 모듈을 반복해서 규모를 크게 만들 수 없다.
                비선형적으로 규모가 커진다.
                이러한 복잡성이 만들기 어렵고, 비용이 많이 들고,
                관리하기 어렵게 만든다.

   : Conformity -> 요구사항에 따라 수정해야 한다. 요구사항이 어떤
                    근본적인 이유라기 보다 사람이 기관이 각자의
                    필요에 따라 정한 것이다. 이 특징으로 인한
                    어려움은 소프트웨어만 재설계하는 것으로
                    한번에 모두 해결할 수 없다.

   : Changeability -> 소프트웨어는 끊임없이 변경할 것을 요구받는다.
                      그 이유는 일단 하드웨어는 변경하는데 비용이
                      더 많이든다는 생각이 있다. 또한 성공한 소프트웨어는
                      새로운 영역에 적용해보고 싶다는 사용자 요구사항이 
                      생기기 마련이고 그러다보면 새로운 기능을 추가하거나
                      새로운 컴퓨팅 환경에서 동작하도록 변경해야한다.
                     

   : Invisible -> 소프트웨어의 실체는 실행하면서 발생하는 동작이 결정한다.
                 그러한 실체를 몇 가지 공식이나 다이어그램으로 완벽하게
                 표현할 수 있다면 좋겠지만 아직 그러한 방법은 존재하지 않는다.
                 소프트웨어를 'visible'하게 만드는 방법이 없기 때문에 
                 소프트웨어를 설계하는 과정이나 소프트웨어에 대한 커뮤니케이션이
                 어렵다.



 - 소프트웨어 유형

   : Custom software (주문형 소프트웨어)

     고객이 1인/1기관인 소프트웨어

   : Package software (COTS: Commercial Off-the-shelf)

     마크에서 물건을 고르는 것과 같이 구매하는 소프트웨어
     범용 소프트웨어

   : Embedded software

     한가지 전용 목적으로 만드는 소프트웨어 (예: 출입카드 확인)
     자원이 제한된(CPU 성능, 주 기억장치 용량) 임베디드 컴퓨터에서 동작하므로
     자원 사용량을 고려해서 주의깊게 작성해야 함


   : SaaS (Software as a Service)

     클라우드 환경에 접속해서 사용하는 소프트웨어
     (개인 컴퓨터에 설치하지 않아도 됨)

     인터넷 속도가 빨라지고 서버 가상화 기술의 발전으로
     원격에서 실행해도 개인 컴퓨터에서 실행하는 소프트웨어와 차이가 매우 줄어듬


 : 기타 (교재 참고)

 : 표1.1 각 소프트웨어 유형에 따라 

 1) 사용되는 카피의 수
 2) 요구되는 하드웨어 성능
 3) 개발 인력


 - 소프트웨어와 시스템

 : 소프트웨어는 보통 독립적으로 존재하는 경우 보다
 컴퓨터 등 여러 시스템과 관계를 맺고 있는 시스템의 구성 요소로 존재한다


1.2 소프트웨어 공학의 필요성 (Why Software Engineering?)


 - 소프트웨어를 활용한 비즈니스에서 흔히 발생하는 
 고 비용, 프로젝트 지연, 낮은 안전성, 유지보수 문제를
 해결해야 한다.

 - SE의 필요성 : Software Crisis  

  : 참고. 소프트웨어공학의 역사 

    (키워드)  * NATO conference: Software engineering 용어
             * Software crisis
             * Fred Brooks, The Mythical Man Month (OS/360 개발 경험)
             * Therac-25 사건
             * No silver bullet to solve software crisis
                  : Silver bullets - Tools, Discipline, Formal methods, Process, ...
                   => a range of silve bullets
             * Lightweight methodologies
                  : Agile, XP, Software product lines, Aspects(Generative programming, templates, ...)

 - 고 비용 (교재 P.28 참고)

 : LOC (Lines of code)
 : MM (Man-month)
 

 소프트웨어와 하드웨어 비용을 계산해보기


 - 프로젝트 지연 및 취소 

 : 소프트웨어 크기에 다라 지연 및 취소 비율이 급증


 - 소프트웨어 결함으로 인한 손해 (Reliability)

 : 아리안 로켓 폭발 사례

   * 동영상 https://www.youtube.com/watch?v=W3YJeoYgozw
   * 발표자료 https://www.slideshare.net/sommerville-videos/ariane-5-launcher-failure-30036896

 1) 아리안 로켓 폭발의 원인은 SW 결함
    overflow 예외 발생으로 로켓이 날라가는 중에 시스템을 Shutdown 시킴
 2) 특히 SW validation failure
 3) Arian4 SW를 재사용
 4) Arian4와 달리 Arian5는 더 무거운 로켓을 선적할 수 있고
     이 변화로 인한 overflow를 제대로 검증하지 못했음
     (이와 관련한 요구사항이 없었음)
 5) 비용문제로 재사용한 SW를 철저히 리뷰하거나 테스트하지 않음

 참고:
   * http://discussworldthing.blogspot.kr/2012/01/software-bugs-causing-catastrophic.html
   * http://catless.ncl.ac.uk/Risks/

 - 유지보수

 : 소프트웨어 수명 전체를 고려할 때 유지보수 비용은
 소프트웨어 개발 비용을 초과한다.


1.3 소프트웨어 공학이란? (What is Software Engineering)


 - SE 정의

 : By IEEE Computer Society

 : Watts Humphrey


 - 소프트웨어공학에서 해결하려고 하는 주요 소프트웨어 문제


 : 크기와 복잡도

 : 품질과 생산성

 : 일관성과 재현성

 : 각종 변경


 - 규모 (크기와 복잡도)

 : 화학 vs. 화공

 : 대규모 프로젝트의 경우, 
 정형화된 개발 방법과 정형화된 프로젝트 관리 필요


 : 소규모, 중규모, 대규모


 - 품질과 생산성

    : ISO 9126 또는 ISO/IEC25010
      (SW 품질을 평가하는 국제 표준)

      SQuRE (Software product Quality Requirements and Evaluation)

      8가지 SW 품질 속성

      * Functionality : 필요한 기능을 제공하는지
      * Reliability : 오랫동안 기능을 제대로 수행하는지
      * Usability : 편리하게 사용할 수 있는지
      * Efficiency : 효율적으로 실행하는지
      * Maintainability : 나중에 추가 수정하기 쉬운지
      * Portability : 다른 컴퓨팅 환경으로 쉽게 옮길 수 있는지
      * Security : 권한을 부여한 범위 안에서만 사용하도록 제한하는지
      * Compatibility : 호환성이 있는지

 : LOC / MM


 - 일관성과 재현성

 : 공장의 제품 생산

 : ISO 9001 (품질경영시스템 인증)

 http://www.ksa.or.kr/iso.do

 : CMM - Capability Maturity Model (교재 P.659)

 소프트웨어 개발 프로세스를 잘 지키는지 검사하는 기준


 - 변화

 : 각종 변화에 대응하는 방법 필요


1.4 소프트웨어공학의 접근 방법

 - 앞서 나열한 주요 소프트웨어 문제에 대해 
 소프트웨어공학에서 어떻게 해결하려는가

 - 소프트웨어 개발의 요소

 : 사람, 기술, 절차

 : SE는 특히 절차를 강조

 - 소프트웨어 개발 프로세스

 : (계획,) 요구분석, 설계, 코딩, 테스팅(, 유지보수)

 : 표1.3

 : 2장의 주제

 - 품질 보증(SQA)

 : Verification, Validation (그림 1.13)

 - 프로젝트 관리

 : 프로젝트 관리에서 하는 일

 1) 각 단계의 자원 할당
 2) 작업 일정
 3) 단계 분할
 4) 단계 완료 확인 
 5) 위험 요소 분석
 납기를 맞출 수 있는가
 비용 초과 예상
 품질 목표 달성 여부
 등등

 : 프로젝트 관리를 위한 측정 기준(Metric) 필요

 1) 제품 측정 기준 (Product Metrics)
 2) 절차 측정 기준 (Process Metrics)

 : 3장의 주제


1.5 소프트웨어공학 지식 체계

 - SWEBOK (Software Engineering Body of Knowledge)

 : 소프트웨어 공학이 다루는 분야

 (교재 P.47, 교재 Chapter와 연관)



[과제]
1) 소프트웨어공학 역사를 간략히 요약하시오.

  참고: 위키피디아 https://en.wikipedia.org/wiki/History_of_software_engineering

2) Arian 5 로켓 폭발에 관한 Ian Sommerville 교수의 동영상과 슬라이드를 살펴보고 그 내용을 요약하시오.

3) Frederick P. Brooks, Jr.의 No silver bullet 논문 중 P.3 ~ P.5에서

   소프트웨어 특징 (Complexity, Conformity, Changeability, Invisibility) 설명을 간단히 요약 번역하시오.

Leave a Reply

Your email address will not be published. Required fields are marked *