Software Engineering/Week 1

What is software?

잔머리대마왕 2022. 11. 7. 18:27

통상 소프트웨어와 프로그램은 같은 의미로 쓰이곤 한다. 그러나 엄밀히 말하자면 두 단어는 다른 뜻을 가지고 있다.

 

  • Program : A set of instructions written by any programming language
  • Software : Programs, data and associated documentation

위 정의에서 말하듯 소프트웨어는 high-level 언어로 짜여진 프로그램과 데이터를 연결한 document이자 상품이다.

 

소프트웨어 상품은 특정 고객 또는 일반 시장을 위해 개발된다. 따라서 일반적(Generic)인 특성을 띌수도, 맞춤화된(Bespoke)특성을 띌수도 있다. 

 

소프트웨어 개발 프로젝트가 시작된다면 아래와 같은 절차를 거쳐 구현하는 것이 바람직하다.

 

Fig 1. 소프트웨어 개발 주기

각 단계별로 수행되어야 하는 목표를 알아보자. 

 

  • 요구사항 정의
    • 클라이언트와 대화를 통해 요구사항 도출
  • 분석(명세)
    • 클라이언트의 요구사항 분석 및 명세 문서의 형태로 표현
    • 소프트웨어 프로젝트 관리 계획이 작성됨
  • 설계
    • 아키텍쳐 설계
      • 상품을 모듈이라 불리는 컴포넌트로 분리
    • 상세 설계
      • 모듈 알고리즘 및 UI/UX 설계
      • 상품이 어떻게 수행되는지 기술한 설계 문서 작성
  • 구현
    • 컴포넌트를 하나의 시스템으로 통합하고 전체적인 테스트 진행
    • 상품의 기능이 정확하게 구현될 경우 클라이언트가 수행 테스트 수행
    • 상품이 클라이언트에 의해 승인되고 실제 운용상태에 들어가기 직전 단계임
  • 유지보수
    • 상품이 클라이언트에게 인도되고 승인 테스트를 마친 이후 부터 상품을 수정하는 모든 활동 의미
      • 완전적 유지보수(prefective maintenance) : 약 60.3% 
      • 적응적 유지보수(adaptive maintenance) : 약 18.2%
      • 수정적 유지보수(corrective maintenance) : 약 17.4%

 

잘 짜여진 소프트웨어 개발 주기를 통해 만들어진 상품은 클라이언트의 만족도를 높게 받을 수 있을 뿐만 아니라 유지보수 시 필요한 시간적, 공간적 자원을 절약할 수 있다.

 

우리는 소프트웨어의 특성을 파악해 위와 같은 주기를 계획할 수 있다. 

 

  • Testability
  • Conformity / Changeability
  • Longevity
  • Duplicability
  • Application dependability

 

소프트웨어는 test가 가능하다. 구현 단계에서 이를 통해 시스템적인 오류 및 결측 사항을 확인할 수 있을 뿐만 아니라 버그와 보안 취약점과 같은 문제 또한 수정 가능하다. 

 

소프트웨어는 언제든 교체가 가능하다. 현업에서 사용중인 수 많은 소프트웨어는 지속적인 업데이트를 요구한다. 그러나 소프트웨어를 업데이트 하는 과정에서 우리가 서비스 센터에 방문해 해야하는 등의 추가적인 지연 없이 클릭 몇번으로 가능하다. 이 특성은 소프트웨어 개발자 뿐만 아니라 소비자 또한 만족도가 높은 소프트웨어의 특징이다.

 

소프트웨어는 닳지 않는다. 따라서 오랜 기간을 사용해도 성능에 변화가 없다. 사실 이 특징은 온전히 '소프트 웨어' 에만 초점을 맞춘 특징이지 소프트웨어를 운용하는 하드웨어는 수명이 존재한다. 

 

소프트웨어는 덮어쓰기가 가능하다. 다른 사람이 배포한 코드를 우리 문제에 맞게 수정해 사용할 수 있어 업무의 효율성이 증가한다.

 

소프트웨어는 어플리케이션에 의존해야 한다. 소프트웨어의 특성상 보이지 않기 때문에(invisible) UI/UX 등과 연동된 통합 어플리케이션으로 결과를 출력해야한다. 따라서 어플리케이션에 의존적일 수 밖에 없다.