1. 소프트웨어 공학과 개발 프로세스(1)
소프트웨어는 단순히 프로그래밍 코드의 집합이 아니다. 소프트웨어에는 원시 코드뿐 아니라, 자료구조, 데이터베이스 설계, 테스트 결과와 같이 개발 과정에서 산출되는 다양한 결과물은 물론, 각 단계에서 작성되는 문서와 사용자 매뉴얼 등도 포함된다.
이와 같이 소프트웨어 개발 전반에 공학적 접근법을 적용하여 체계적으로 관리하고 최적화하는 학문 분야가 바로 소프트웨어 공학(Software Engineering)이다.
이번 포스터에서는 계획(Planning) 단계에 초점을 맞추어 소프트웨어 공학에 대해서 이야기해보도록 하겠다.
1. 소프트웨어의 이해
일단 가장 먼저 소프트웨어란 무엇일까? 생각해보자. 단순히 코딩되어있는 존재일까? 사실은 다르다. 소프트웨어는 개발 과정에서 생성되는 자료구조, 데이터베이스 설계, 테스트 결과물과 더불어 개발 단계마다 작성되는 다양한 문서와 사용자 매뉴얼 등 모든 산출물을 포함하는 의미를 담고 있다. 일반인의 경우에는 소프트웨어는 소위 원시 코드만을 의미한다고 생각하는 경우가 많은데 이러한 점에서 프로그래밍과 소프트웨어는 매우 다르다.
이외에도 소프트웨어의 종류에는 System Software와 Application Software 두 종류가 존재한다. 전자는 OS 후자는 어플이라는 이름으로 자주 불린다.
2. 소프트웨어의 특징
이러한 소프트웨어의 특징으로는 물리적인 제품과 달리 제조(manufacturing)가 아니라 개발(development)의 과정을 통해 만들어진다는 점에 있다. 이는 소프트웨어가 소모성 제품이 아니며, 시간이 지나도 기능 변경이나 오류 수정을 위한 지속적인 유지보수가 필요하기 때문이다. 게다가 제조와는 다르게 같은 것을 찍어내는 것도 아니다.
위의 사진을 보자. 하드웨어의 경우에는 만들어내는 것의 방법이 소프트웨어의 경우와 다를 것이라는 것을 이해할 수 있다.
정리하면 이와 같이 설명할 수 있다.
1) 소프트웨어는 소모되지 않는다.
- 하드웨어처럼 시간이 지나면서 점차 닳거나 성능이 저하되는 것이 아니라, 적절한 유지보수를 통해 계속해서 활용될 수 있다.
2) 소프트웨어는 제조가 아니라 개발이다.
- 하드웨어처럼 정해진 공정을 따라 생산되는 것이 아니라, 끊임없는 개선과 반복적인 개발 과정을 통해 최적화된다.
이러한 이유로 소프트웨어 개발에는 철저한 설계와 유지보수가 필수적이다.
3. 소프트웨어 개발의 어려움
앞서 살펴본 그래프에서처럼, 소프트웨어를 개발하는 데는 많은 수고와 노력이 필요하다. 그러나 일단 만들어진 후에도 지속적인 유지보수가 요구되므로, 일반적인 제조업과는 뚜렷한 차이를 보인다.
물론, 소규모 프로젝트에서는 비교적 단순한 계획 아래 개발이 진행되기도 한다. 하지만 대규모 프로젝트의 경우, 체계적인 계획 수립과 요구사항 분석이 필수적이다. 이는 마치 대형 건축물을 건설할 때 철저한 설계와 사전 준비가 요구되는 것과 유사하다. 각 단계에서 세심한 관리가 이루어지지 않으면, 전체 프로젝트의 성공을 담보하기 어렵다.
이러한 복잡성과 불확실성을 줄이고, 체계적인 개발 과정을 가능하게 하는 것이 바로 소프트웨어 공학(Software Engineering)의 주요 목표 중 하나이다.
4. 소프트웨어 공학
소프트웨어 공학은 위의 내용을 자세하게 기술해 놓은 하나의 방법론의 총칭이다. 여담이지만 소프트웨어 개발에서 위의 과정은 매우 필수적인 과정에 해당한다.
5. 소프트웨어 공학 개발 프로세스
소프트웨어 개발 프로세스는 위와 같은 3가지 요소에 의해서 일어난다. 자세하게 설명하자면...
1) 유능한 인력: 적절한 교육을 받은 숙련된 개발자와 동기 부여된 팀원들이 필수적이다.
2) 체계적인 절차와 방법론: 개발 과정에서 각 작업의 관계를 명확히 정의하고, 효과적인 방법론을 적용해야 한다.
3) 적절한 도구와 기술: 개발 효율성을 높이고 품질을 보장하기 위해 최적의 개발 도구와 환경이 필요하다.
가 있다. 이 세 가지 요소가 조화를 이루어야 소프트웨어 개발이 원활하게 진행될 수 있으며 높은 품질의 결과물을 제공할 수 있다.
6. 소프트웨어 개발 모델
소프트웨어 개발 시 사용하는 모델도 존재하는데 이는 하나의 방법론이다. 이에 대해서 약간 알아보면 다음과 같다.
6.1. 주먹구구식 모델
가장 기본적으로 개발 모델에는 주먹구구식 모델이 있다. 이는 가장 원시적인 소프트웨어 개발 방식으로, 공식적인 가이드라인이나 체계적인 프로세스 없이 개발이 진행되는 모델이다.
이 방식에서는 우선적으로 코드를 작성하여 제품을 만든 후, 나중에 요구사항 분석, 설계, 유지보수를 고려하는 모델이며 여담이지만 이 방법은 소규모 모델의 경우에는 별 문제가 없아도 대규모 모델을 만들고자 한다면 매우 골치아픈 일이 될 수 있다.
즉, 주먹구구식 모델은 비체계적이며 소프트웨어의 품질을 보장하기 어려운 개발 방식으로, 신뢰성과 유지보수가 중요한 프로젝트에서는 적절하지 않다는 특징이 있는 모델이다.
6.2. 선형 순차적 모델
두번째로 선형 순차적 모델이라는 것도 있다. 주먹구구식 모델보다 체계적인 접근을 제공하는 방법론이지만, 현재는 구식으로 평가받는 모델로 간단하게 "계획"을 세워서 만들겠다는 의미이다.
이 모델에서는 소프트웨어 개발 과정을 순차적으로 진행하며, 각 단계가 완료된 후에야 다음 단계로 넘어가는 모델로 이전 단계로 돌아가 수정하기 어렵다는 매우 큰 단점이 있다. 이는 현제 사용자의 요구사항이 계속해서 바뀌는 회사의 특성 상 맞지 않는 방법이며 만약에 어떤 한 단계에서 틀린 경우 이를 바꿀 수도 없어 매우 위험한 방법이다.
과거에는 널리 사용되었지만, 현재는 변화에 대한 대응력이 중요한 소프트웨어 개발 환경에서는 잘 쓰이지 않는 모델이다.
이외에 다른 모델에 대해서는 다음 포스터에서 이야기해보도록 하겠다.
출처: 쉽게 배우는 소프트웨어 공학
쉽게 배우는 소프트웨어 공학 - 예스24
소설처럼 술술 익히는 소프트웨어 공학중요하지만 다소 뜬구름 잡는 얘기 같았던 소프트웨어 공학 이론을 핵심만 추려 명쾌하게 정리해준다. 일상에서 흔히 접할 수 있는 예시를 통해 소프트웨
www.yes24.com
'Computer Science(컴퓨터 과학) > 소프트웨어공학' 카테고리의 다른 글
6. UML(2) - 클래스, 순차, 통신, 활동, 상태, 컴포넌트 다이어그램 (0) | 2025.04.01 |
---|---|
5. UML(1) - 유스케이스 다이어그램 (0) | 2025.03.25 |
4. 소프트웨어 공학과 개발 프로세스(4) - 에자일 모델 (0) | 2025.03.24 |
3. 소프트웨어 공학과 개발 프로세스(3) - 진화적, 단계적, 통합 프로세스 모델 (0) | 2025.03.18 |
2. 소프트웨어 공학과 개발 프로세스(2) - V모델과 Test와 Moduel (0) | 2025.03.11 |