2017년 3월 8일 수요일

software engineering(1) - introduction

software engineering

 배경 : '소프트웨어의 위기'를 극복하기 위해 conference에서 처음 등장

 ==> 소프트 웨어의 위기란?

    : 소프트웨어의 등장 초기에는 소프트웨어의 기술을 따라갈 수 있는 하드웨어의 기술이
    부족해 그 격차를 극복하기 위해 등장했지만, 최근 하드웨어가 급속한 발전을 이뤄냄에
    따라 소프트웨어의 시스템 복잡도가 크게 증가했으며 그에 따라 인수 및 개발에 필요한
    비용과 시간도 늘어가게 되었다.

====> 이러한 배경에 의한 software engineering의 정의 

      : 전문적인 소프트웨어 개발(대규모 SW개발)을 위한 이론, 방법, 도구를 배우는 과목


FAQs about software engineering

 * software란? 

     : programs과 관련된 문서들(menual)의 합

 * good software란? 

     다양한 기능, 성능, 유지보수의 용이성, 의존성 및 사용의 용이성을 제공해야함
  => ex. 어떤 회사의 전산프로그램이 good software가 되기 위해서는
                            => 다양한 기능 : 입출력, 각종 계산, redo, undo... 와 같은 여러 기능
                            => 성능 : 하드의 자원을 적게 사용할수록 good!
                            => 유지보수의 용이성 : 구매자(회사)가 해당 프로그램을 쉽게 
                                                         유지보수 할 수 있도록 
                            => 의존성(확실성) : 신뢰성, 보안성, 안정을 모두 포함함
                                    * 신뢰성 : 오류가 없다!
                                    * 보안성 : 악의적인 사용자의 접근을 막는다!
                                    * 안정성 : 시스템에 문제가 생기더라도 피해가 없다!
                                    ex) 사용자의 정보를 예비 DB와 Main DB를 중복해서 저장!!
                            => ps) 수용성 : 사용이 편하고 호환성이 좋을수록 good!
                            => ps) 효율성 : 적은 자원을 사용하고 처리시간이 빠를수록 good! 

 * 결국 software engineering이란? 

    : good software를 개발하는 방법!

 * software enginnering의 기본 activities 

    :  1. software specification : 고객과 개발자가 소프트웨어의 기능과 제한사항을 정의함
            ex. chrome .. 기능 => redo, undo.....
                           .. 제한 사항 => 클릭하고 8초안에 작업이 이뤄져야 한다.(버블x, 퀵 o)
                 ==> 이러한 기능과 제한사항을 알기위해 의사소통이 중요하다.

      2. software development : designed(분석과 설계를 통해)와 programmed(코딩함)

      3. software validation : optimal test set 등으로 검증함
                                => 분석 및 설계를 통해 코딩보다 먼저 테스트 셋을 개발함

      4. software evolution : 사용자의 요구사항이나 법규에 따라 계속적으로 수정함

 * software engineering VS computer science

    : computer science는 이론과 기반에 중점을 두는 반면 software engineering은 유용한 
    software를 개발하기 위해 실용성에 중점을 둔다.

 * software engineering VS system engineering

    : 과거 system engineering은 시스템 개발을 위한 전반적인 내용을 다룸으로서 software는 system에 포함되어 있다고 보는 것이 일반적이었나 최근 software가 전문화되고 세분화됨에 따라 오히려 software가 system을 조정하는 입장이 되고 있다.

 * software engineering의 key challenges 

    : 다양성(프로그래밍 언어의 다양성으로 인해 선택의 폭이 굉장히 넓어짐 ex. C, JAVA..), 
      개발시간단축(경쟁의 과열로 인해 누가 먼저 출시하느냐가 중요시 됨. ex. game..), 
      믿을수 있는 software개발(good software의 개발이 요구됨. ex. IoT..)

 * software engineering 비용

   : 개발 비용: 60%, 테스트 비용 : 40%
    but, custom software의 경우 evolution비용이 개발비용보다 매우 많이 든다!!!

     / generic product : 일반사용자를 대상으로하며 개발자가 명세, 변경을 주도함
    |                          ex. window, chrome...
    \customized product : 특정 사용자를 대상으로하며 고객이 명세, 변경을 주도함
                                    ==> 고객의 요구에 따라 잦은 변경이 요구됨
                                           => 따라서, evolution비용이 개발비용보다 많이 든다!!!
                                    ex. 학교 개인 전산망... 

 * Best software engineering 기술과 방법? 

  : 없다! => 어떤 software를 개발하느냐에 따라 매우 다양한 기술과 방법이 사용된다!
            ==> 즉, 그때그때 다르다.
            ex. game의 경우, 완벽한 software보다는 빠르게 출시할 수 있는 software가 중요!
                critical control system(IoT, 하드웨어 제어프로그램)의 경우, 
                        완벽한 software(분석 가능하고 명확한 명세를 동반하는)가 중요하다!
   하지만, 소프트웨어를 몇몇 유형으로 나눠 그때마다 다른 방법 또는 기술을 적용한다.


  * 소프트웨어 유형
    - stand-alone applications(독립형 applications)
      : 네트워크 같은 것 없이 컴퓨터에서 혼자 작동할 수 있는 프로그램
       ex. 지뢰찾기, 메모장, office programs

    - Interactive transaction-based applications
      : 원격 컴퓨터 상에서 작동하며 사용자의 pc에서 접근됨.
       ex. ATM, 대부분의 web apps, e-commerce applications

    - Embedded control systems
      : Hardware devices를 제어하는 소프트웨어
      ex. driver

    - Data collection & Analysis systems
      : Sensor로 부터 data를 수집하고, 처리를 담당하는 다른 시스템과 연결됨
      ex. Big data

    - System of systems
      : Software systems들의 집합으로 구성된 시스템
      ex. pos(편의점 결제시스템)



===> software engineering fundamentals
     1. system은 관리되고 이해 될 수 있는 개발과정에 의해 개발되어야 한다.

     2. 어떤 시스템이건 의존성과 성능은 중요

     3. software의 명세 및 요구사항을 이해하고 관리하는 것은 매우 중요!!!

     4. 소프트웨어의 신규 개발보다는 재사용하는 것이 바람직함



















댓글 없음:

댓글 쓰기