호우동의 개발일지

Today :

소프트웨어

  • 프로그램과 관련된 모든 사항(관련 문서, 라이브러리, 사이트, 환경설정 데이터)
  • 전문적으로 개발된 소프트웨어는 많은 요소들로 구성(다수의 프로그램, 환경설정, 시스템 문서 등)

 

 

소프트웨어 제품 유형

일반 제품

  • 특정 개발 조직이 생산한 독립적 시스템
  • 누구든 구매 가능
  • 개발 조직이 소프트웨어 명세를 관리
  • 데이터베이스, 문서 편집기, 그래픽 패키지, 회계 시스템 등

 

 

맞춤식 소프트웨어

  • 특정 고객의 요구에 맞춰 개발
  • 소프트웨어 계약자는 고객만을 위해서 설계하고 구현
  • 구매자가 소프트웨어 명세를 개발하고 관리
  • 항공관제 시스템, 전자기기 제어 시스템

 

 이러한 제품유형의 차이는 점점 희미해지고 있음

 

 

소프트웨어 필수 특성

  • 수용성(Acceptability) → 설계한 목적에 부합하는 사용자 유형이 수용할 수 있어야 함


  • 확실성(Dependability)보안성(Security)
    시스템 장애가 발생해도 물리적, 경제적 피해가 발생해선 안됨
    → 악의적 사용자가 시스템에 접근하거나 피해 주는 것을 방지해야 함

  • 효율성(Efficiency) → 시스템 자원을 낭비하면 안 됨


  • 유지보수성(Maintainability) → 고객 요구 변화를 충족시켜야 함

 

 

 

소프트웨어 공학이란?

  • 소프트웨어 생산의 모든 관점
    • 기술적 프로세스 외 사항들도 포함
      → 프로젝트 관리, 개발 지원을 위한 도구 방법 이론 개발 활동 포함

  • 공학적 학문 분야
    • 주어진 일정과 예산 내에서 필요한 품질의 결과물을 얻어야 함
      → 적절한 이론, 방법, 도구 그리고 조직적 재정적 제약에 맞추어 해결책을 찾아야 함

 

 

 

소프트웨어 공학이 중요한 이유?

  • 소프트웨어 시스템 의존도 상승
    → 안정적으로 신뢰도 높은 소프트웨어 시스템을 경제적이고 빠른 방법으로 생산하는 방법 필요


  • 소프트웨어 변경하는데 필요한 비용이 매우 큼
    → 장기적으로 공학적 기법으로 소프트웨어 시스템을 개발하는 방법이 더 비용 소모가 적음

 

 

 

 

소프트웨어 프로세스

→ 소프트웨어 제품을 만드는데 필요한 체계적 접근법(소프트웨어 공학에서 사용)

  • 소프트웨어 명세화(Specification) → 소프트웨어 동작시 제약사항을 정의(고객과 엔지니어)
  • 소프트웨어 개발(Development) → 소프트웨어 설계 및 프로그래밍
  • 소프트웨어 검증(Validation) → 개발한 소프트웨어가 요구에 맞는 것인지 확인
  • 소프트웨어 진화(Evolution) → 변화하는 요구를 반영하여 소프트웨어 수정(고객 및 시장)

 

 

 

 

 

소프트웨어 공학과 다른 분야의 차이점

 

 

컴퓨터 과학과의 차이

  • 컴퓨터 과학 : 소프트웨어 시스템의 이론과 기본의 집중 → 상대적으로 작은 프로그램의 경우
  • 소프트웨어 공학 : 실무적인 측면에 집중 → 유용한 소프트웨어 개발하고 인도

 

 

 

시스템 공학과의 차이

  • 시스템 공학 : 컴퓨터 기반 시스템 개발의 모든 관점을 다룸
  • 소프트웨어 공학 : 일반적인 프로세스의 일부에 속함

 

 

 

 

 

소프트웨어에 영향을 미치는 네 가지 문제

 

1. 이질성(Heterogeneity)

  • 점점 더 다양한 유형의 컴퓨터와 모바일 장치로 구성되고,
    네트워크 전반에 걸쳐 분산 시스템으로 동작하는 소프트웨어 시스템이 필요


  • 이질성 극복을 위해 유연하면서도 신뢰성이 높은 소프트웨어 구축하는 기법이 필요

 

 

2. 비즈니스와 사회적 변화

  • 신흥 경제 발전과 새로운 기술 등장으로 인한 사회의 빠른 변화
    → 기존 소프트웨어 변경하고 새로운 소프트웨어를 빠르게 개발하는 것이 필요

 

 

 

3. 보안과 신뢰

  • 소프트웨어를 신뢰할 수 있어야 함
    → 소프트웨어가 우리 삶의 모든 부분과 밀접하게 관련되어 있기 때문

 

 

 

4. 규모

  • 다양한 규모의 소프트웨어 개발 필요
    → 휴대 가능한 임베디드 시스템, 웨어러블 기기, 인터넷 규모 클라우드 기반 시스템 등

 

 

소프트웨어 공학의 다양성

  • 모든 시스템에 맞는 소프트웨어 기법은 없음
  • 소프트웨어 개발 조직과 프로세스 참여 사람들에 의해 특정 방법, 도구, 기법이 바뀜
  • 주로 애플리케이션의 유형에 따라 어떤 공학 기법과 기술을 적용할지 결정

 

 

 

 

 

애플리케이션 유형

독립형 애플리케이션

  • 개인 컴퓨터, 모바일 기기에서 동작하는 애플리케이션 시스템(앱)
  • 필요한 기능을 모두 가지고 있고, 네트워크 연결 필요 없음

 

 

 

 

대화형 트랜잭션 기반 애플리케이션

  • 원격 컴퓨터 상에서 실행하여 사용자의 PC나 터미널을 통해 연결
  • 전자 상거래 어플, 전자우편

 

 

 

 

임베디드 제어 시스템

  • 하드웨어 기기 제어 및 관리
  • 시스템 유형 중 가장 높은 비중 차지

 

 

 

 

일괄처리 시스템

  • 대규모 데이터 처리하도록 설계한 비즈니스 시스템
  • 많은 수의 개별 입력을 가공하여 각각에 해당하는 출력을 만듦

 

 

 

 

 

오락 시스템

  • 사용자가 즐기기 위해 사용하는 개인 시스템
  • 게임용 콘솔 하드웨어 상에서 실행

 

 

 

 

 

모델링 및 모의실험 시스템

  • 물리적 진행 및 상황을 모델링하기 위해 과학자와 엔지니어가 개발한 시스템
  • 계산 집약을 위해 고성능의 병렬시스템을 필요

 

 

 

 

 

데이터 수집 및 분석 시스템

  • 환경 데이터 수집하여 다른 시스템에 전달
  • 엔진의 내부나 멀리 떨어지거나 외진 장소 등 까다로운 환경에 설치

 

 

 

 

 

복합 시스템(SOS : Systems of Systems)

  • 기업 및 및 다양한 대규모 조직에서 사용
  • 여러 개의 서로 다른 소프트웨어 시스템으로 구성
  • 사용 환경에 맞추어 제작

 

 

 

 

 

 

소프트웨어 공학의 기본사항

  • 시스템은 관리 및 이해 가능한 개발 프로세스를 따라야 함
    → 소프트웨어 유형애 맞는 개발 프로세스 사용


  • 신뢰성과 성능은 모든 유형의 시스템 중요


  • 소프트웨어 사양과 요구사항을 이해/관리가 중요


  • 기존의 활용 가능한 자원은 최대한 재활용 → 재활용이 새로 개발하는 것보다 우선시

 

 

 

 

 

 

인터넷 소프트웨어 공학

  • 초창기 : 웹은 정보 저장소에 접근하기 위한 수단


  • 웹 브라우저를 통해 웹 기반 시스템에 접근 가능해지며 발전
    → 서비스를 제공할 수 있는 큰 규모의 신규 시스템을 제품으로 개발 가능하게 됨

  • 소프트웨어를 웹 서버를 통해 배포 가능하게 됨 → 소프트웨어 변경이나 업그레이드 비용이 많이 감소

 

 

 

 

 

 

웹 기반 시스템 소프트웨어 공학

→ 소프트웨어 공학에 대한 기본적인 개념 적용 가능

 

 

 

SaaS(Software as a Service)

  • 클라우드 상에서 원격 실행되는 앱을 통해 컴퓨터 서비스를 제공
  • 사용자는 사용량만큼 돈 지불

 

 

 

비즈니스 소프트웨어 구성 방식에 많은 변화 발생

  • 기존 : 하나의 컴퓨터나 클러스터 상에서 실행되는 획일화된 단일 프로그램
  • 최근 : 고도로 분산된 구조, 개발 시 컴포넌트와 프로그램을 대규모로 재사용

 

 

 

소프트웨어 재사용

  • 웹 기반 시스템 구축에 있어서 가장 많이 사용되는 기법
  • 기존에 존재하는 소프트웨어 컴포넌트와 시스템을 어떻게 조합할지 고민하는 방향으로 시스템 구축

 

 

 

기민하고(Agile) 점증적인 개발

  • 모든 요구 사항을 미리 명세하는 것은 비현실적 → 점증적으로 개발하고 인도해야 함

 

 

 

서비스 지향 시스템

  • 독립적인 웹 서비스를 구축할 경우 서비스 지향 소프트웨어 공학을 사용하여 구현 가능

 

 

 

다채로운 인터페이스

  • AJAX나 HTML5 같은 인터페이스 개발 기술이 등장