소프트웨어 개요 Software overview

소프트웨어 정의

Software is the collection of computer programs, procedure rules and associated documents and data.

소프트웨어는 컴퓨터 프로그램과 관련 문서(실행 파일, 설계 문서, 설치 파일, 시스템 및 설치 메뉴얼 등)를 포함한 포괄적인 범위를 의미한다.

소프트웨어 분류

기능에 따른 분류사용자에 따른 분류

시스템 소프트웨어 컴퓨터를 운영하기 위한 목적의 소프트웨어로 운영체제, 장치 드라이버, 컴파일러, 유틸리티 프로그램 등

일반 소프트웨어 요구사항이 일반적이고 불특정 다수가 사용할 수 있도록 설계한 소프트웨어

응용 소프트웨어 사용자가 이용하는 소프트웨어로 웹 브라우저, 게임, 그래픽처리 프로그램 등

맞춤형 소프트웨어 특정 고객을 위해 설계된 소프트웨어

소프트웨어 성질

  • 하드웨어와 다르게 무형의 인공물

  • 환경이 변해서 품질이 저하될 수 있지만 하드웨어와 다르게 마모되지 않음

  • 하드웨어와 다르게 컴포넌트 조립으로 만들기 어려움

  • 하드웨어와 다르게 설계 과정이 가장 중요한 요소

  • 하드웨어에 비해 변경이 쉬움

  • 지속적인 유지보수 필요, 요구사항에 따라서 설계 변경이 요구됨

  • 개발 비용은 대부분 노동력

소프트웨어 응용 분야

  • 시스템 소프트웨어

  • 실시간 소프트웨어 (은행, 좌석 예약 등)

  • 내장형 소프트웨어 (자동차, 전자제품 등)

  • 비즈니스 소프트웨어 (회계 관리, 재고 관리, 경영 관리 등)

  • 개인용 소프트웨어 (워드, 게임 등)

  • 인공지능 소프트웨어 (로보틱스, 화상/음성 인식 등)

  • 웹 기반 소프트웨어

  • 공학용/과학용 소프트웨어 (CAD, 기상 분석, 유전자 분석 등)

소프트웨어 위기

하드웨어 기술이 급격하게 발전하면서 해결해야하는 문제가 복잡하고 사용자의 요구사항이 다양해졌지만, 소프트웨어가 같이 발전을 따라가지 못해 발생하게 되었다.

위기 현상

  • 개발 일정 지연

  • 초과 비용 발생

  • 제품 신뢰도 결여

  • 명세와 불일치 높음

  • 품질 저하 및 유지보수 어려움

원인

  • 전문 인력 부족

  • 경영층 인식 부족

  • 방법론과 도구의 부재, 개발 생산성 저하

  • 소프트웨어 자체의 복잡성 증가

소프트웨어 공학

공학은 문제 해결을 위해 결과물을 생산하기 위해 연구하는 분야이다.

소프트웨어 공학은 고품질의 소프트웨어를 경제적(품질, 비용, 일정 등)이고 빠른생산과 운영 및 유지보수를 위한 연구 분야이다.

소프트웨어 공학 환경

개발시 고려사항

  • 단순 코드 생성이 아닌 요구사항 명세, 설계, 프로젝트 관리 등 통합적 문제 인식 필요

  • 개발 프로세스와 프로젝트 관리 중요

  • 문서화와 프로젝트 관리 중요

  • 초기 요구사항 명세화 작업에 노력 필요

  • 변경 및 재사용 염두

환경

  • 소프트웨어 공학의 대상은 중규모 이상의 복잡하고 중요한 소프트웨어

  • 다양한 해결 방법들을 통합적으로 다루어야함

구성

소프트웨어 공학 원리

소프트웨어 개발에 필요한 기본 철학과 원리(추상화, 분할정복 등)

방법과 기술

구체적인 방법과 기술을 제공(지침, 가이드라인 등)

방법론

방법과 기술들의 조합으로 문제 해결을 위해 정해진 프로세스(what, how)

소프트웨어 프로세스 모델(생명주기)

  • 생명주기 모델(실제 프로세스를 요약 및 프로세스화 한 것)

  • 시스템 개념화, 요구사항 정의, 설계, 구현의 전체 과정을 표현

  • 표준화된 절차와 프로세스를 제공(공통 프레임워크)

좋은 소프트웨어의 기준

외부 품질

사용자가 인지할 수 있는 품질 요소(사용성, 신뢰도, 속도 등)

내부 품질

내부 품질을 향상 시키면 외부 품질도 향상(요구사항, 설계 문서 등)

신뢰도

신뢰도라는 것은 사용자가 소프트웨어를 신뢰하는 정도를 의미한다. 오랜 시간 작동되며 필요할 때 사용할 수 있어야하며 오류 발생이 적고 오류가 발생해도 무난히 복구되며 오류 결과가 치명적이지 않아야 한다.

시스템 종류나 특성에 따라 신뢰도 측정 방법이 다르다. (주어진 시간 동안 정확히 작동될 확률, 고장의 빈도, 평균 수명 등)

소프트웨어 고장 함수가 욕조 곡선과 유사한 형태를 가질 수도 있음

  • 버그 수정이나 기능 개선으로 인해 새로운 오류 발생

  • 하드웨어나 운영체제 변경

  • 적정 용량 또는 성능 초과하여 사용

정확성

명세서와 일치하게 작동하는 것, 사용자의 요구를 만족시키는 것

성능

지정된 시간 안에 컴퓨터 시스템이 처리할 수 있는 작업량

주어진 조건 하에 주어진 기능을 빠르게 제공하는 능력

사용성

본래의 목적으로 효율적으로 사용 가능한지

상호운영성

다른 시스템과 공존하며 협력할 수 있는 능력

유지보수성

변경의 용이함

이식성

다른 환경에서 동작할 수 있는 능력

검사성

좋은 소프트웨어 속성을 갖추었는지 검사할 수 있는가

측정 가능한 상태인가?

추적성

이해관계자(Stakeholder), 요구사항, 설계문서, 소스코드 간의 관계를 추적할 수 있는가

변경을 하려고 할때 관련있는, 영향을 받는 것을 쉽게 파악할 수 있는가?

Last updated