본문 바로가기
소프트웨어공학

[소프트웨어 공학] Ch1: 서론

by leziwn.cs 2023. 8. 6.
1.1 전문적 소프트웨어 개발

▶ 소프트웨어 공학에 관한 FAQ

  • 소프트웨어란 무엇인가?
    : 컴퓨터 프로그램과 관련된 문서들. 특정 고객을 위하거나 일반적인 시장을 고려해서 소프트웨어 제품을 개발할 수 있다.
  • 좋은 소프트웨어의 특성은 무엇인가?
    : 좋은 소프트웨어는 요구받은 기능과 성능을 사용자에게 제공해야 하고, 유지보수하기 좋고, 신뢰할 수 있으며, 사용하기 쉬워야 한다.
  • 소프트웨어 공학은 무엇인가?
    : 소프트웨어 공학은 초기 구상 단계부터 운영과 유지보수까지 포함하는 소프트웨어 생산의 모든 관점과 관련한 공학적인 학문 분야이다.
  • 소프트웨어 공학의 기본 활동에는 어떤 것들이 있는가?
    : 소프트웨어 명세화, 소프트웨어 개발, 소프트웨어 검증과 소프트웨어 진화
  • 소프트웨어 공학 vs. 컴퓨터 과학
    : 컴퓨터 과학은 이론과 기본에 집중하고, 소프트웨어 공학은 유용한 소프트웨어를 개발하고 인도하는 실무적인 내용과 관련이 있다.
  • 소프트웨어 공학 vs. 시스템 공학
    : 시스템 공학은 하드웨어, 소프트웨어와 프로세스 공학을 포함한 컴퓨터 기반 시스템 개발의 모든 관점을 다룬다. 소프트웨어 공학은 이러한 보다 일반적인 프로세스의 일부에 속한다.
  • 소프트웨어 공학이 직면한 주요 도전 과제는 무엇인가?
    : 증가하는 다양성, 빠른 인도에 대한 요구와 신뢰할 수 있는 소프트웨어 개발에 대응하는 것이다.
  • 소프트웨어 공학의 비용은 무엇인가?
    : 대략적으로 소프트웨어 비용의 60% 정도는 개발 비용이며, 40%는 테스팅 비용이다. 맞춤식 소프트웨어의 경우, 진화 비용이 개발 비용을 앞지르는 경우가 많다.
  • 최선의 소프트웨어 공학 기법과 방법은 무엇인가?
    : 모든 소프트웨어 프로젝트는 전문적으로 관리하고 개발하는 반면, 다양한 유형의 시스템에 대해서는 서로 다른 기법들이 적절하다. 예를 들어, 게임은 항상 여러 버전의 프로토타입을 이용해서 개발을 하고, 안전성 중심의 제어 시스템은 완전하고 분석가능한 명세서의 개발을 필요로 한다. 모든 경우에 쓸 수 있는 방법이나 기법은 없다.
  • 인터넷이 소프트웨어 공학에 가져온 변화는 무엇인가?
    : 인터넷은 대규모의 고도로 분산된, 서비스 기반 시스템의 개발을 이끌어냈을 뿐 아니라, 소프트웨어 산업에 변화를 준 모바일 기기용 "앱" 산업의 탄생에 보탬이 되었다.

 

▶ 소프트웨어 제품의 유형

  • 일반(generic) 제품
  • 맞춤식(customized, bespoke) 소프트웨어

 

▶ 좋은 소프트웨어의 필수적인 특성

  • 수용성(acceptability)
  • 확실성(dependability)과 보안성(security)
  • 효율성(efficiency)
  • 유지보수성(maintainability)

 

1) 소프트웨어 공학

▶ 소프트웨어 프로세스

  • 소프트웨어 명세화(specification)
  • 소프트웨어 개발(development)
  • 소프트웨어 검증(validation)
  • 소프트웨어 진화(evolution)

 

2) 소프트웨어 공학의 다양성

▶ 애플리케이션 유형

  • 독립형 애플리케이션
    : 개인용 컴퓨터에서 동작하는 애플리케이션 시스템이나 모바일 기기에서 동작하는 앱
  • 대화형 트랜잭션 기반 애플리케이션
    : 원격 컴퓨터상에서 실행하는 애플리케이션
  • 임베디드 제어 시스템
    : 하드웨어 기기를 제어하고 관리하는 소프트웨어 제어 시스템
  • 일괄처리 시스템
    : 대규모로 데이터를 처리하도록 설계한 비즈니스 시스템
  • 오락 시스템
    : 사용자가 즐기기 위해 개인적으로 사용하는 시스템
  • 모델링 및 모의실험 시스템
    : 물리적 진행이나 상황을 모델링하기 위해 과학자와 엔지니어가 개발한 시스템
  • 데이터 수집 및 분석 시스템
    : 데이터 수집 시스템은 환경으로부터 데이터를 수집하여 처리를 위해 다른 시스템으로 전달한다.
  • 복합시스템(SoS; System of Systems)
    : 기업 및 다양한 대규모 조직에서 사용하며 여러 다른 소프트웨어 시스템으로 구성된다.

 

3) 인터넷 소프트웨어 공학

▶ 인터넷과 월드 와이드 웹(World Wide Web)

 

 

1.2 소프트웨어 공학 윤리

 

 

1.3 사례 연구
  • 임베디드 시스템
    : 하드웨어 기기의 일부를 제어하는 소프트웨어가 해당 기기에 내장된 시스템
  • 정보 시스템
    : 정보 데이터베이스에 대한 접근을 관리하고 제공하는 것이 주 목적인 시스템
  • 센서 기반 데이터 수집 시스템
    : 여러 센서들로부터 데이터를 수집하여 어떠한 방식으로 데이터를 가공하는 시스템
  • 지원 환경
    : 특정 활동을 지원하기 위한 소프트웨어 도구들을 통합한 시스템

 

▶ 예시

  1. 인슐린 펌프 제어 시스템
  2. 정신 건강 관리를 위한 환자 정보 시스템(Mentcare system)
  3. 황무지의 기상 관측기
  4. 학교용 디지털 학습 환경

 

 

키 포인트
  • 소프트웨어 공학은 소프트웨어 생산의 모든 측면과 관련한 공학적 학문 분야이다.
  • 소프트웨어는 단지 하나 또는 여러 프로그램을 뜻하는 것이 아니라, 시스템 사용자, 품질 보증 담당자와 개발자가 필요로 하는 모든 전자 문서를 포함한다. 필수적인 소프트웨어 특성으로는 유지보수성, 확실성과 보안성, 효율성 및 수용성이 있다.
  • 소프트웨어 프로세스는 소프트웨어 개발에 관련한 모든 활동을 포함한다. 명세화, 개발, 검증 및 진화와 같은 고수준의 활동들은 모두 소프트웨어 프로세스의 일부에 해당한다.
  • 다양한 종류의 시스템이 존재하며, 각각의 시스템은 개발을 위해 적절한 소프트웨어 공학 도구와 기법을 필요로 한다. 있다고 하더라도 극소수의 설계와 구현 기법들만 모든 종류의 시스템에 적용이 가능하다.
  • 소프트웨어 공학의 기본적 개념은 모든 종류의 소프트웨어 시스템에 적용할 수 있다. 이러한  기본 개념에는 체계적인 소프트웨어 프로세스, 소프트웨어 확실성과 보안성, 요구공학 및 소프트웨어 재사용 같은 것들이 있다.
  • 소프트웨어 엔지니어는 공학적 전문성과 사회에 대한 책임이 있다. 소프트웨어 엔지니어는 단순히 기술적 이슈에 관여하는 것 외에도 업무에 영향을 주는 윤리적 문제에 대해서도 잘 알고 있어야 한다.
  • 전문 사회는 윤리적이고 직업적 표준을 담고 있는 행동 강령을 공개한다. 이 강령들은 그 사회에 속한 구성원들이 행할 것으로 기대하는 표준들을 정해놓고 있다.