소프트웨어공학 개요

allocProc·2020년 1월 13일
1

softwareEngineering

목록 보기
1/2

예전 학기중에 공부했던 내용들을 차근차근 다시 정리하여 올려볼까 합니다.

Introduction to Software Engineering

소프트웨어공학이란?

  • 1967년 NATO에서 처음으로 "Software Engineering"이란 용어를 사용
  • 규모가 크고 복잡한 소프트웨어를 개발함에 있어서 발생하는 문제들을 해결하고 싶었다. → software crisis
  • Software Crisis
    • 소프트웨어의 질이 너무 낮고 예산과 마감일 또한 지켜지지 않았다.
    • 55%는 예산을 초과했고 68%는 기한을 넘어섰고 88%는 다시 디자인되어야 했다.

소프트웨어공학의 정의

  • 소프트웨어의 개발, 운용, 유지보수 등이 생명 주기 전반을 체계적이고 서술적이며 정량적으로 다루는 학문
  • 소프트웨어의 개발, 운용, 유지보수, 폐기 처분에 대한 체계적인 접근

대규모 프로젝트의 어려움

  • 수백명의 개발자
    • 의사소통 및 상호 협력의 어려움
  • 오랜 개발 시간
  • 모호하고 복잡한 요구사항

소프트웨어공학의 필요성

  • 소프트웨어 개발에 있어서 예산 산정, 기한 예측의 어려움
  • 낮은 품질
  • 유지보수의 중요성
  • hardware의 발전
  • software의 필요성 증가
  • 좀 더 크고 복잡한 software system의 요구

소프트웨어공학의 목표

  • 고품질의 소프트웨어 개발
  • 낮은 예산의 비용으로(효율적으로)
  • 유저가 만족할 수 있는 시간내에

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

  • 모든 선진국의 경제 시스템은 소프트웨어에 의존적이다.
  • 소프트웨어 비용은 시스템 비용을 넘어선다.
  • 소프트웨어는 개발보다 유지에 비용이 더 많이 든다.

소프트웨어공학의 특징

  • 소프트웨어는 프로그램 + 문서 + 데이터로 이루어진 집합이다.
  • Software is developed or engineered, NOT manufactured.
  • 대부분의 소프트웨어는 주문제작 형식이다. (기존의 재료, 부품을 재조합 하는 형식이 아님)
  • 소프트웨어는 닳지 않는다. → 하지만 계속된 기능의 추가, 유지 보수 과정에서 오류가 발생할 수 있다.
  • 문서화(Documentation)은 정말 중요하다.→ 하지만 아직도 많은 사람이 이를 중요하게 여기지 않는다.

소프트웨어 개발은 왜 어려운가?

  • 소프트웨어는 눈에 보이지 않는다. (Invisibility)
  • 복잡하다. (Complexity)
  • 똑같은 것을 또 만들 필요는 없다. (Conformity)
  • 완성 후에도 계속 발전한다. (Changeability)
  • 완전히 자동화될 수 없다. → 사람의 역할이 중요하다.
  • 소통이 중요하다. (Communication)
  • Test가 어렵다. → 테스터의 능력에 따라 결과가 달라지며 모든 경우를 다 테스트할 수도 없다.

Development vs. Maintenance : 개발 vs. 유지보수

  • 소프트웨어 유지보수에 드는 비용은 개발에 드는 비용의 두배 이상이다.
  • 개발자체가 목표가 아니다. → 계속된 발전이 필요 → 유지보수가 중요하다.

에러 수정 비용

  • 에러는 개발과정에서 빨리 발견될수록 더 좋다.
  • 에러는 개발자보다 테스터나 유저들이 더 많이 발견한다.
  • 에러는 개발의 모든 과정에서 후반부로 갈수록 더 많이 발견된다.

소프트웨어 개발은 건축과 비슷하지만 다르다

  • SW는 디지털 상품이다.
    • 한 번 개발한 후 복제를 통한 재생산이 가능
    • 재사용이 많을수록 경쟁력 향상
  • 중간 결과물의 완성 여부 확인이 어렵다. → 그러므로 개발자의 능력과 문서작업이 중요하다.

소프트웨어공학 기술 추세

  • SW생산성 향상 → SW품질 개선 → SW가치 창출
  • 위와 같은 단계의 핵심기술들을 제시하면서 발전하고 있다.
profile
많이 부족합니다.

0개의 댓글