yeoneei

01 소프트웨어 특성

하드웨어와 다른 점

하드웨어가 물리적인 시스템이라면 소프트웨어는 논리적이므로 하드웨어 엔지니어링 방법을 소프트웨어 개발 및 관리에 적용할 경우, 많은 이슈 및 과제가 발생하게 된다.

  1. SW는 HW에 비해 수정하기 쉬움.
    이로인해 당시 개발자들에게 선코딩 - 후수정하는 관행이 생기게됨
  2. SW는 오래쓰게 되더라도 낡지 않지만, 유지보수 비용은 HW보다 더 많이 소요됨
    SW신뢰성(Reliability)은 HW신뢰성 모델로는 정확하게 추정할 수 있으며, 유지보수도 HW와는 전혀 다른 형식으로 진행됨
  3. SW의 비가시성으로 인해 개발 진행 상태를 알기 어려움
    SW개발 일정을 맞추기 위해 인원을 추가적으로 투입하면 일정이 더 지연되는 경우가 다반사 였음 [Fred Brooks]
  4. 5백만달러의 HW장비를 구매하기 위해서는 30페이지 정도의 요구사항이 필요하다면 동일한 금액의 SW를 구매하기 위해서는 약 1500페이지의 요구사항이 필요함 [Wlnstone Royce,1970]
  • 소프트웨어 개발자의 창이성이 개발 기간 및 성능을 결정
  • 하드웨어와 달리 추가 생산(복제)해도 추가 비용이 들지 않는 “수확체증의 법칙”이 적용

소프트웨어의 특징

  • 인재가 소프트웨어의 핵심
    투입 입력의 수와 성과가 비례하지 않으며 오히려 인력의 질적 역량(Quality)이 더 중요
  • 소프트웨어가 기기의 원가 경쟁력을 결정
    잘 개발된 소프트웨어는 제품에 들어가는 낮은 성능의 메모리와 AP 및 베터리로도 충분히 원하는 결과물을 내어줄 수 있기 때문에 제품의 원가를 낮출 수 있음
  • 소프트웨어 핵심은 재사용
    인간의 창의력과 지적 역량이 집약된 무형자산이며 동시에 복제가 쉬움
    추가 생산을 위해서 유형자원의 소비 없이 무한대로 재사용이 가능
    누구나 비용없이 자원을 사용하는 오픈 소스(Open Source)에 대한 관심이 특히 소프트웨어에서 더 높은 이유임

소프트웨어공학의 4가지 중요요소

소프트웨어 공학은 “소프트웨어의 개발, 운용, 유지보수 등의 생명주기 전반을 체계적이고 서술적이며 정량적으로 다루는 학문”이라고 정의되고 있다. 소프트웨어공학의 4가지 중요 요소는 아래와 같으며, 이 4가지 요소를 통해 고품질의 소프트웨어를 생산하고 주어진 비용과 일정에 생산이 가능하다.

  1. 방법
    • 방법은 프로젝트 계획 수립과 추정, 시스템과 소프트웨어 분석, 자료구조, 프로그램 구조, 알고리즘, 코딩, 테스팅, 유지관리와 같은 작업들로 구성
    • 종종 특수한 언어중심 (예. 객체지향 방법) 또는 그래프 표기법을 도입
    • 소프트웨어 품질에 대한 일련의 평가 기준을 도임
  2. 도구
    • 어떤 일을 수행할 떄 생산성 혹은 일관성을 목적으로 사용하는 방법들을 자동화나 반자동화시켜 놓은 것을 일컬음
    • 소프트웨어 개발 생명주기 상에서 수많은 도구(예. 요리 관리 도구, 모델링 도구, 형상 관리 도구, 변경 관리 도구)가 존재
    • 도구들이 통합되어 하나의 도구가 생성한 정보를 다른 도구가 사용할 수 있을 때, 소프트웨어 개발을 지원하는 시스템으로 설정
  3. 절차
    • 절차는 방법과 도구를 결합하여, 그것으로 하여금 소프트웨어를 합리적이고 적시에 개발할 수 있도록 함.
    • 절차는 적용된 방법들, 요구되는 결과물(문서, 보고서, 등), 품질을 보증하고 변경을 조정하게 도와주는 제어들, 그리고 소프트웨어 관리자들이 진행을 평가하게 해주는 마일스톤 등의 순서를 정의함
  4. 사람
    • 소프트웨어 공학에서는 많은 것(수립, 개선, 유지 등)들이 사람과 조직에 의해서 움직이기 때문에 사람에 대한 의존성이 상대적으로 큼
    • 다른 공학의 상황보다 훨씬 다양한 이슈들이 생기기 때문에 소프트웨어 개발을 일목요연하게 공학적으로 정리한다는 것은 현실적으로 불가능