Notice
Recent Posts
Recent Comments
Link
관리 메뉴

Douglas' Space

Software (System) Development Methodology 본문

Development Diary/Software System Engineering

Software (System) Development Methodology

똘키아빠 2022. 4. 30. 20:11

1. Software System이란

 

우리가 보통 시스템의 구성요소를 크게 하드웨어, 소프트웨어, 사람이라고 할 수 있습니다. 그러면 소프트웨어면 소프트웨어이지 소프트웨어 시스템이라는 것은 무엇을 의미할까요?

 

Systems-of-Systems

시스템을 개발한다는 것은 어떠한 기능을 자동화하기 위해 개발합니다. 이 기능을 잘 수행할 수 있도록 시스템의 컴포넌트를 설계합니다. 그리고 이 컴포넌트에 적합한 기능들을 할당합니다. 다시 말해 어떠한 기능은 하드웨어가 담당하고, 어떠한 기능은 소프트웨어가,   어떠한 기능은 사람이 직접 수행하기도 합니다.

 

그런데 소프트웨어에 기능을 할당한다는 것은 소프트웨어가 구동되는 일반목적의 컴퓨터에 기능을 할당한다는 것과 같은 의미입니다. 이렇게 일반 목적의 컴퓨터에서 작동하는 다수의 소프트웨어의 집합과 일반 목적의 컴퓨터를 통칭하여 소프트웨어 시스템이라고 합니다. 이러한 소프트웨어 시스템은 독립적으로 존재할 수도 있고, 어느 하드웨어에 내장되어 존재할 수도 있습니다. 그리고 이러한 소프트웨어 시스템들은 또한 유무선 네트워크를 통해 다른 상위 시스템에 서브시스템으로 존재할 수도 있습니다.

 

특히 4차산업시대의 소프트에어 시스템은 지식과 딥러닝이라는 신경망모델이 탑재되어 지능형시스템으로 발전하고 있습니다. 다시말해 AI시스템은 컴퓨팅기술의 발전으로 소프트웨어시스템이 발전하는 발전된 시스템이라고 할 수 있습니다. 사실 기존에도 Sysmbolic AI라는 지식표현 및 추론에 의한 AI시스템이 사용되고 있습니다. 이제는 신경망모델을 추가하여 Neuro-Symbolic AI를 탑재한 소프트웨어 시스템으로 발전할 것입니다.

 

2. Software Taxonomy

 

따라서 어떠한 기능을 어느 환경에서 수행하는가에 따라 다양한 형태로 소프트웨어를 분류합니다. 지금 보시는 분류 표는 SW의 특성을 이해하는 관점에서 정리한 것입니다.

 

Software Taxonomy

Layer관점이라는 것은 하드웨어와의 의존관계를 기준으로 분류한 내용입니다. 하드웨어와 의존성이 가장 높은 OS로 부터 그 의존성이 점점 멀어지는 응용SW까지의 계층구조를 표현하고 있습니다.

 

Time determinism은 시간의 의존성 관점에서 분류한 것으로 hard realtime SW는 특정 시간에 반응을 하지 않으면 큰 재해가 발생하여 그 시스템의 존재의미가 없는 시스템을 의미합니다.  실시간이 물론 빠른 시간의 처리를 요하지만 빠르게 처리만 한다고 real-time시스템은 아닙니다. 정해진 시간안에 처리가 이루어지는 것이 중요합니다.

 

재사용/빌드 관점의 분류는 존재 및 재사용 형태 관점에서 분류한 형태입니다. 실행파일과 라이브러리는 다 알고 계신 것입니다. SW프레임워크은 라이브러리와 같이 재사용 가능한 SW의집합이지만 사용프로그램이 제어권을 갖는 라이브러리와 달리 반대로 프레임워크가 제어권을 갖습니다. 인터페이스타입에 의한 분류는 소프트웨어가 연동하는 객체가 하드웨어인가, 외부의 물리적 객체인가 사람인가로 분류하는 관점입니다.

 

Processing type은 처리 형태가 계산을 주로 하는 것인가, 정보의 변환을 추로 하는 것인가, 추론 또는 학습과 같은 AI시스템인가를 구분하기 위한 분류입니다. 또한 크기에 따라 소프트웨어를 분류하기도 합니다. 보통 만, 십만, 백만, 천만 단위로 구분합니다. 마지막으로는 사용 용도에 따라 크게 구분합니다. Application SW, System SW, 개발도구 등과 같은 분류입니다.

 

3. Software System에서의 문제점

 

아래 보시는 숫자의 의미가 무어일까요? 이 숫자는 2020년 미국의 IT 컨설팅회사인 standish group에서 발간하는 chaos report에 제시한 SW프로젝트의 통계데이타의 하나입니다.

 

소프트웨어 프로젝트 성공 및 실패율

Chaos report는 전세계 진행되는 많은 SW프로젝트 들을 분석하여 SW프로젝트의 성공율 및 그 원인등에 대한 정보를 제공하고 있습니다. 이 보고서에서 19는 프로젝트의 실패율, 50은 성공은 아니고 그렇다고 실패도 아닌 프로젝트의 비율, 31은 성공한 프로젝트의 비율입니다. 성공율이 과거의 통계에 비해서 다소 높아지기는 했지만 SW프로젝트의 성공율이 일반 다른 프로젝트에 비해 상당히 낮은 통계를 보여주고 있다고 평가하고 있습니다.

 

왜 그럴까요? 이것은 소프트웨어가 갖는 기본적인 성질인 보이지 않는 특성 때문입니다. 이로 인해 요구사항의 관리가 쉽지가 않고, 사람과 조직의 협업이 중요하며 보이지 않는 것을 가시화하는 것이 매우 중요합니다.

 

4. Software Development Methodology (개발방법론)

 

방법론(Methodology)은 이러한 문제점을 해결하기 위한  노하우라고 할 수 있으며, 방법론을 좀더 구체적으로 설명하면 3개의 컴포넌트로 구성된다고 할 수 있습니다.

 

첫째는 개발프로세스(Process)입니다. 개발을 위해 해야 할 작업의 단위를 설명합니다. 물론 순서가 존재하지만 적용하는 라이프사이클모델에 따라 다양한 형태로 적용이 가능합니다. 순서와 정도는 다르게 적용이 가능합니다.

 

둘째는 프로세스별 가이드라인(Guidelines) 입니다. 즉 각 개발작업을 수행하기 위한 다양한 skill을 제공합니다.

마지막 세번째는 관련 템플릿이나 기존 사례 등의 프랙티스(Practices)라고 할 수 있습니다. 백문이 불여일견이라고 했듯이 가이드라인을 쉽게 기억할 수 있도록 실제 적용했을 때의 예들을 보여줍니다.

 

개발방법론의 구성요소

 

4. Software Life Development Cycle Model

 

아래의 그림은 가장 대표적인 소프트웨어 시스템 개발의 수명주기를 나타내는 대표적인 모델입니다. 이 수명주기모델은 미국방성에서 사용하는 MIL-STD-498이라는 표준 모델입니다.

 

MIL-STD-498 DoD Software Development Life cycle

현재는 ISO12207에 통합되어 표준으로 기능을 상실했지만 아직도 무기체계 개발에서는 defacto 표준으로 사용되고 있습니다따라서 단일 소프트웨어가 아닌 시스템 차원에서의 시스템 분석 및 설계를 통해 하드웨어컴포넌트와 소프트웨어컴포넌트를 식별합니다.

 

설계가 이루어지면 시스템의 기능 요구사항이 물리적인 하드웨어 및 소프트웨어 컴포넌트들인 HWCICSCI들에 할당됩니다. 그 다음에는 각 HWCICSCI의 개발이 이어집니다.

모든 컴포넌트의 개발이 완료되면 각 컴포넌트들은 시스템으로 통합되어 최종 시험평가를 수행하게 됩니다.

앞으로 소개할 소프트웨어 시스템의 개발방법론의 설명하기 위한 참조 수명주기 모델로 사용하고자 합니다. 

 

수명주기모델은 프로세스를 어떻게 적용할 것인가에 따라 water-fall model, incremental model, evolutionary model, prototyping model, agile model 등으로 구분할 수 있습니다.  많은 분들이 오해하는 것은 수명주기모델이 방법론이라고 오해하는 경우가 많은 것 같습니다. 이러한 수명주기모델은 개발하고자 하는 시스템의 성격과 규모에 따라 다르게 적용할 수 있습니다. 요즈음 agile 수명주기모델을 기반으로 한 다양한 방법론이 제시되고 있습니다. 방법론은 가능한 이러한 수명주기모델과 무관하게 개발을 위해서 필요한 가이드라인을 제시하는 것에 더욱 초점이 맞추어져 있습니다.

따라서 본 강의에서는 개발단계별로 방법론을 소개하지만 이는 다양한 수명주기 모델에 공통적으로 적용이 가능한 것이라는 것을 고려하시기 바랍니다.

Comments