📚 소프트웨어 공학(Software Engineering)에 대해,
미국의 소프트웨어 공학자 왓츠 험프리(Watts Humphrey)는 고품질 소프트웨어의 경제적인 제작을 위한 공학, 과학, 수학 원리 및 방법들을 체계적으로 적용하는 것이라 정의했다.
즉 좋은 소프트웨어를 경제적으로 제작하기 위해 여러 원리와 방법 및 개발, 운영, 유지보수하는 과정을 체계적이고 효율적으로 진행하는 것이다.
소프트웨어 공학의 지향점은 사용자의 요구를 충족시키는 고품질의 좋은 소프트웨어를 예산과 시간 내에 생산하는 것이라 할 수 있다.
모든 선진국의 경제가 소프트웨어에 의존해 있기 때문인데, 자세히 이야기하면 다음과 같다.
소프트웨어 공학의 지출은 모든 선진국의 국내총생산(GNP)에서 상당한 비중을 차지한다.
소프트웨어 비용은 종종 시스템 비용을 지배한다.
소프트웨어는 개발하는 것보다 유지보수하는 데 더 많은 비용이 든다.
수명이 긴 시스템의 경우, 유지보수 비용은 개발 비용의 몇 배에 달할 수 있다.
점점 더 많은 시스템들이 소프트웨어로 제어되고 있다.
소프트웨어 공학이 고품질의 소프트웨어 제작을 위해 여러 원리와 방법을 체계적으로 적용시키는 것이라면, 그런 소프트웨어의 품질을 평가하는 지표가 있다.
📋 소프트웨어 품질(Software Quality)이란,
컴퓨터 프로그램이 얼마나 잘 만들어졌는지를 나타내는 지표이다.
좋은 소프트웨어는 소프트웨어 품질을 고려해 사용자가 원하는 기능을 정확하고 효율적으로 수행하며, 사용하기 쉽고, 문제가 적게 발생해야 한다.
소프트웨어 품질에는 아래와 같은 중요한 특성들이 있다.
정확성 (Correctness)
소프트웨어가 요구 사항을 정확히 충족하는 정도
신뢰성 (Reliability)
소프트웨어가 주어진 조건에서 예상대로 실행되는 능력
견고성 (Robustness)
예상치 못한 조건에서도 소프트웨어가 계속 정상적으로 작동하는 능력
성능 (Performance)
소프트웨어가 자원을 사용하여 작업을 완료하는 효율성
사용자 친화성 (User Friendliness)
사용자가 소프트웨어를 쉽게 이해하고 사용할 수 있는 정도
검증 가능성 (Verifiability)
소프트웨어의 정확성을 확인할 수 있는 정도
유지보수성 (Maintainability)
소프트웨어를 수정하고 업데이트하기 쉬운 정도
재사용성 (Reusability)
소프트웨어의 일부 또는 전체가 다른 프로젝트나 모듈에서 재사용될 수 있는 정도
이식성 (Portability)
소프트웨어가 다른 환경(ex. 다른 운영 체제)으로 쉽게 이동할 수 있는 정도
이해성 (Understandability)
소프트웨어의 코드나 구조가 쉽게 이해될 수 있는 정도
상호 운용성 (Interoperability)
다른 시스템이나 소프트웨어와 함께 작동할 수 있는 능력
생산성 (Productivity)
소프트웨어 개발 과정에서의 효율성과 효과성
시기적절성 (Timeliness)
소프트웨어가 적절한 시간 내에 개발되고 배포될 수 있는 정도
가시성 (Visibility)
소프트웨어 개발 과정이나 상태가 관련 이해관계자에게 잘 보여지는 정도
소프트웨어 공학은 소프트웨어 개발의 모든 단계에서 중요한 역할을 한다.
효율적이고 품질 높은 소프트웨어를 개발하려면 소프트웨어 공학의 원칙과 방법론을 잘 이해하고 적용해야 한다.