KR20150041399A - 무기체계 구조 개선을 위한 소프트웨어 리팩토링 방법 - Google Patents
무기체계 구조 개선을 위한 소프트웨어 리팩토링 방법 Download PDFInfo
- Publication number
- KR20150041399A KR20150041399A KR20130119870A KR20130119870A KR20150041399A KR 20150041399 A KR20150041399 A KR 20150041399A KR 20130119870 A KR20130119870 A KR 20130119870A KR 20130119870 A KR20130119870 A KR 20130119870A KR 20150041399 A KR20150041399 A KR 20150041399A
- Authority
- KR
- South Korea
- Prior art keywords
- code
- block
- software
- blocks
- code block
- Prior art date
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/10—Requirements analysis; Specification techniques
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/20—Software design
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- General Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Computer Hardware Design (AREA)
- Quality & Reliability (AREA)
- Stored Programmes (AREA)
Abstract
본 발명은 무기 체계 소프트웨어 기술에 관한 것으로서, 더 상세하게는 설계된 무기체계 소프트웨어에 대한 구조개선의 효율성 향상을 위한 소프트웨어 리팩토링 방법에 대한 것이다.
본 발명에 따르면, 소프트웨어를 블록 단위로 구분함으로써 코드의 구조를 가시화하고 블록의 구성을 독립화함으로써 블록간의 연관 인자를 명확히 식별하고 연관인자로 인한 구조개선의 어려움에 대비하고 그 영향성을 추적할 수 있는 기회를 제공한다.
본 발명에 따르면, 소프트웨어를 블록 단위로 구분함으로써 코드의 구조를 가시화하고 블록의 구성을 독립화함으로써 블록간의 연관 인자를 명확히 식별하고 연관인자로 인한 구조개선의 어려움에 대비하고 그 영향성을 추적할 수 있는 기회를 제공한다.
Description
본 발명은 무기 체계 소프트웨어 기술에 관한 것으로서, 더 상세하게는 설계된 무기체계 소프트웨어에 대한 구조개선의 효율성 향상을 위한 소프트웨어 리팩토링 방법에 대한 것이다.
장기간의 운용이 요구되는 무기체계는 사용주기 동안 관련 기술의 발전, 사용된 부품의 단종, 새로운 기능의 요구, 운용자의 인식 향상에 의한 추가적인 요구사항 도출 및 요구사항의 변경 등이 원인이 되어 시스템의 성능향상을 위한 구조개선을 수행하게 된다. 이러한 현상은 오랜 기간 사용하는 무기체계의 특성상 자연스러운 현상으로 인식되고 있다.
일반적으로 기존의 소프트웨어를 수정하는 작업은 필요이상의 많은 노력을 소요한다. 그 이유는 기존의 소프트웨어를 면밀히 분석하여 수정이 필요한 범위를 식별하고 기 설계된 소프트웨어의 구조 및 제약을 고려하여 코드를 변경시켜야 하며 변경된 소프트웨어의 무결성을 증명해야 하기 때문이다. 특히, 구조가 복잡하고 방대한 양의 무기체계 소프트웨어는 약간의 수정에도 많은 시간과 노력을 필요로 하고 있다.
현재 적용중인 무기체계 소프트웨어의 개발 절차는 구조개선의 효율성에 최적화된 형태는 아니다. 처음부터 소프트웨어를 개발하는 것과 개발된 소프트웨어의 일부를 수정하는 과정은 엄연히 다르기 때문이다.
무기체계 구조개선에 있어 소프트웨어 수정의 효율성을 확보하기 위해서는 소프트웨어 코드의 구조화, 가시화가 필요하고 소프트웨어 모듈간의 연관성이 명확히 표현되어야 한다. 그러나, 아직 소프트웨어 코드의 구조화 및 가시화를 위한 별도의 절차는 무기체계 소프트웨어 개발 절차상에 규정되어 있지 않은 실정이다.
이 때문에 무기체계 소프트웨어에 대한 구조개선 소요가 발생되면, 수정 범위를 설정하는 것에서부터, 해당코드의 제약사항 및 구조 분석, 수정 코드 구현, 수정된 코드의 무결성 입증 등의 과정에서 상당한 어려움을 겪게 되는 단점이 있었다.
뿐만 아니라 코드 내부 연관관계의 잘못된 이해는 잘못된 수정으로 인한 새로운 오류 유발을 빈번히 하고 반복적인 설계의 변경 위험에 노출될 가능성이 높다는 단점이 있었다.
또한, 무기체계가 개발되면 운용중인 무기체계의 유지보수와 새로운 운용기능의 추가를 위한 구조개선을 수행하게 되는 것은 불가피한 현상이다. 때문에 무기체계 소프트웨어의 최종적인 구조는 유지보수 및/또는 구조개선이 편리한 형태로 변경되는 것이 타당하다.
그러나, 현재의 무기체계 소프트웨어 개발 과정에 입각해서 구조개선을 수행하기 위해서는 소프트웨어의 개발과정에서 산출된 결과물을 활용해야만 하는데, 이는 사전에 해당 소프트웨어를 개발한 경험을 갖고 있는 사람이 아니라면 소프트웨어 구조의 분석, 수정 영역 설정, 수정 코드와 기존 코드의 연관관계, 수정된 코드에 의한 기존 코드의 영향성 등을 파악하는데 상당한 어려움을 겪을 수밖에 없다.
1.조현외, "컴포넌트 기반 재사용을 위한 레거시 소프트웨어 리팩토링"한국정보과학회, 가을학술발표논문집 제29권 제2호(II), p 55-57, 2002.10
본 발명은 무기체계 소프트웨어의 개발 방법의 일환으로 무기체계 구조 개선을 위한 소프트웨어 리팩토링 방법을 제공하는데 그 목적이 있다.
본 발명은 위에서 제시된 과제를 달성하기 위해, 무기체계 소프트웨어의 개발 방법의 일환으로 무기체계 구조 개선을 위한 소프트웨어 리팩토링 방법을 제공한다.
상기 소프트웨어 리팩토링 방법은,
다수의 코드 블록을 정의하는 정의 단계;
무기 체계의 소프트웨어 구조를 다수의 코드 블록으로 리팩토링하는 블록 리팩토링 단계; 및
코드의 가시성을 향상시키고 코드에 표현하지 못하는 부수정보를 기술하도록 문서화하는 코드 블록 문서화 단계;를 포함하는 것을 특징을 한다.
이때, 상기 코드 블록은 독립적인 구조로서, 각각 소프트웨어의 고유 기능을 정의하는 기능 영역과 고유 기능을 수행하는 인터페이스 영역으로 이루어지는 것을 특징으로 할 수 있다.
또한, 상기 블록 리팩토링 단계는, 상기 다수의 코드 블록간의 연관관계를 모두 차단하고 소프트웨어의 고유 기능 수행을 위해 불가피한 부분은 인터페이스 영역으로 할당하여 코드 블록간의 연관관계를 재설정하는 것을 특징으로 할 수 있다.
또한, 상기 다수의 코드 블록은 필요한 정보를 서로 교환하도록 메시지 형태의 정보만을 공유하는 것을 특징으로 할 수 있다.
또한, 상기 블록 리팩토링 단계는, 코드 블록 내부와 외부의 코드를 구분하는 코드 구분 단계; 코드 블록 내부의 변수 중 소프트웨어의 고유 기능을 수행하기 위해서 불가피하게 블록 외부와 연계되는 변수를 식별하고 이 변수를 인터페이스 변수로 식별 및 정의하는 인터페이스 변수 식별 단계; 코드 블록 간에 필요한 정보를 교환하기 위한 인터페이스 변수의 정보 교환 방식을 정의하는 교환 방식 정의 단계; 및 코드 블록 사이에 교환되는 정보를 추적 관리하는 인터페이스 변수 검증 단계;를 포함하는 것을 특징으로 할 수 있다.
또한, 상기 코드 구분 단계는, 정의된 코드 블록의 기능과 관계된 모든 코드를 가져와 해당 코드 블록에 이식하고 해당 코드 블록과 다른 코드 블록의 관계를 단절하는 것을 특징으로 할 수 있다.
또한, 상기 정보 교환 방식은, 해당 코드 블록의 변수를 그 변수를 필요로 하는 블록의 명명법으로 수정하는 방식, 해당 소프트웨어의 전역변수로 할당하는 방식, XML(eXtensible Markup Language)을 이용하여 메시지를 교환하는 방식, 및 미들웨어를 이용하여 블록간의 정보교환을 수행하는 방식 중 어느 하나인 것을 특징으로 할 수 있다.
또한, 상기 인터페이스 변수 검증 단계는, 인터페이스 영역에 코드 블록의 외부와 관계된 변수들의 특징을 이용하여 에러코드를 삽입하고 타 코드 블록에서의 활용에 의해 나쁜 영향을 갖는 인자(Bad Smell)를 식별 관리하고, 검증 코드의 삽입으로 블록간의 관계를 정의하는 것을 특징으로 할 수 있다.
또한, 상기 다수의 코드 블록은 서로 중복된 기능을 할당할 수 없고 소프트웨어의 모든 기능을 모두 정의하는 것을 특징으로 할 수 있다.
또한, 상기 코드 블록 문서화 단계에서, 코드 블록 문서는, 코드 블록의 구성에 대한 코드 블록 구성 문서 및 코드 블록의 특성에 대한 코드 블록 특성 문서로 이루어지는 것을 특징으로 할 수 있다.
또한, 상기 코드 블록 구성 문서는, 코드 블록의 구성과 코드 블록간의 기능적인 관계, 각 코드 블록에 할당된 기능, 코드 블록간의 메시지 교환 방식, 해당 코드 블록과 관계된 설계 문서를 포함하는 코드 블록의 거시적 정보인 것을 특징으로 할 수 있다.
또한, 상기 코드 블록 특성 문서는, 코드 블록의 기능과 인터페이스 변수, 인터페이스 변수와 관계된 에러코드 및 외부 블록으로부터의 나쁜 인자, 나쁜 인자와 관계된 블록의 기능 및 영향성, 구조개선시 주의점, 블록의 운용환경을 포함하는 해당 코드 블록의 세부 정보인 것을 특징으로 할 수 있다.
또한, 다수의 코드 블록의 구조를 특정 형태로 표현하도록 계층화하는 단계;를 더 포함하는 것을 특징으로 할 수 있다.
이때, 상기 특정 형태는, 코드 블록 내부의 기능 영역을 재블록화하는 형태, 다수개의 코드 블록을 하나의 코드 블록으로 묶는 형태, 하나의 코드 블록을 다수개의 코드 블록으로 분할하는 형태, 및 다른 하나의 코드 블록을 추가하는 형태 중 어느 하나인 것을 특징으로 할 수 있다.
또한, 다수의 코드 블록에 구조 개선 영역을 설정하는 단계;를 더 포함하는 것을 특징으로 할 수 있다.
이때, 상기 구조 개선 영역을 설정하는 방식은, 기능 영역에 대하여 구조 개선 영역을 설정하는 방식, 다수의 코드 블록에 대하여 구조 개선 영역을 설정하는 방식, 및 코드 블록을 추가하여 구조 개선 영역을 설정하는 방식 중 어느 하나인 것을 특징으로 할 수 있다.
본 발명에 따르면, 소프트웨어를 블록 단위로 구분함으로써 코드의 구조를 가시화하고 블록의 구성을 독립화함으로써 블록간의 연관 인자를 명확히 식별하고 연관인자로 인한 구조개선의 어려움에 대비하고 그 영향성을 추적할 수 있는 기회를 제공한다.
또한, 본 발명의 다른 효과로서는 이를 통해 무기체계 소프트웨어의 구조개선에 있어, 소프트웨어 구조개선의 범위 설정 및 코드의 수정, 수정된 코드의 검증의 용이성을 확보하므로, 그 결과, 무기체계 소프트웨어의 구조개선을 위한 인력, 시간, 자원의 소비를 감소시키는 효과가 있다는 점을 들 수 있다.
도 1은 일반적인 컴퓨터 시스템의 구성을 보여주는 개념도이다.
도 2는 도 1의 컴퓨터 시스템의 구성에 대응하는 소프트웨어 구성의 블록 개념도이다.
도 3은 본 발명의 일실시예에 따른 소프트웨어 코드를 코드 블록 리팩토링 구조로 변환한 개념도이다.
도 4는 도 3에 도시된 코드 블록 리팩토링의 제 1 실시예로서 여러 개의 코드 블록을 하나의 코드 블록 내부에 계층화하는 개념도이다.
도 5는 도 3에 도시된 코드 블록 리팩토링의 제 2 실시예로서 여러 개의 코드 블록을 하나의 코드 블록으로 묶어 계층화하는 개념도이다.
도 6은 도 3에 도시된 코드 블록 리팩토링의 제 3 실시예로서 하나의 코드 블록을 여러 개의 코드 블록으로 나누어 계층화하는 개념도이다.
도 7은 도 3에 도시된 코드 블록 리팩토링의 제 4 실시예로서 새로운 코드 블록을 추가하여 계층화하는 개념도이다.
도 8은 본 발명의 일실시예에 따른 기능 영역을 구조개선 범위로 설정하는 개념을 보여주는 개념도이다.
도 9는 본 발명의 다른 일실시예에 따른 여러 블록을 구조개선 범위로 설정하는 개념을 보여주는 개념도이다.
도 10은 본 발명의 일실시예에 따른 소프트웨어 구조를 코드 블록 리팩토링(refactoring)하는 과정을 보여주는 흐름도이다.
도 11은 도 10에 도시된 블록의 독립화 단계(S1020)의 세부 과정을 보여주는 흐름도이다.
도 2는 도 1의 컴퓨터 시스템의 구성에 대응하는 소프트웨어 구성의 블록 개념도이다.
도 3은 본 발명의 일실시예에 따른 소프트웨어 코드를 코드 블록 리팩토링 구조로 변환한 개념도이다.
도 4는 도 3에 도시된 코드 블록 리팩토링의 제 1 실시예로서 여러 개의 코드 블록을 하나의 코드 블록 내부에 계층화하는 개념도이다.
도 5는 도 3에 도시된 코드 블록 리팩토링의 제 2 실시예로서 여러 개의 코드 블록을 하나의 코드 블록으로 묶어 계층화하는 개념도이다.
도 6은 도 3에 도시된 코드 블록 리팩토링의 제 3 실시예로서 하나의 코드 블록을 여러 개의 코드 블록으로 나누어 계층화하는 개념도이다.
도 7은 도 3에 도시된 코드 블록 리팩토링의 제 4 실시예로서 새로운 코드 블록을 추가하여 계층화하는 개념도이다.
도 8은 본 발명의 일실시예에 따른 기능 영역을 구조개선 범위로 설정하는 개념을 보여주는 개념도이다.
도 9는 본 발명의 다른 일실시예에 따른 여러 블록을 구조개선 범위로 설정하는 개념을 보여주는 개념도이다.
도 10은 본 발명의 일실시예에 따른 소프트웨어 구조를 코드 블록 리팩토링(refactoring)하는 과정을 보여주는 흐름도이다.
도 11은 도 10에 도시된 블록의 독립화 단계(S1020)의 세부 과정을 보여주는 흐름도이다.
본 발명은 다양한 변경을 가할 수 있고 여러 가지 실시예를 가질 수 있는바, 특정 실시예들을 도면에 예시하고 상세한 설명에 구체적으로 설명하고자 한다. 그러나 이는 본 발명을 특정한 실시 형태에 대해 한정하려는 것이 아니며, 본 발명의 사상 및 기술 범위에 포함되는 모든 변경, 균등물 내지 대체물을 포함하는 것으로 이해되어야 한다.
각 도면을 설명하면서 유사한 참조부호를 유사한 구성요소에 대해 사용한다.
제 1, 제 2등의 용어는 다양한 구성요소들을 설명하는데 사용될 수 있지만, 상기 구성요소들은 상기 용어들에 의해 한정되어서는 안 된다. 상기 용어들은 하나의 구성요소를 다른 구성요소로부터 구별하는 목적으로만 사용된다.
예를 들어, 본 발명의 권리 범위를 벗어나지 않으면서 제 1 구성요소는 제 2 구성요소로 명명될 수 있고, 유사하게 제 2 구성요소도 제 1 구성요소로 명명될 수 있다. "및/또는" 이라는 용어는 복수의 관련된 기재된 항목들의 조합 또는 복수의 관련된 기재된 항목들 중의 어느 항목을 포함한다.
다르게 정의되지 않는 한, 기술적이거나 과학적인 용어를 포함해서 여기서 사용되는 모든 용어들은 본 발명이 속하는 기술 분야에서 통상의 지식을 가진 자에 의해 일반적으로 이해되는 것과 동일한 의미가 있다.
일반적으로 사용되는 사전에 정의되어 있는 것과 같은 용어들은 관련 기술의 문맥상 가지는 의미와 일치하는 의미를 가지는 것으로 해석되어야 하며, 본 출원에서 명백하게 정의하지 않는 한, 이상적이거나 과도하게 형식적인 의미로 해석되지 않아야 한다.
이하 첨부된 도면을 참조하여 본 발명의 일실시예에 따른 인무기체계 구조 개선을 위한 소프트웨어 리팩토링 방법을 상세하게 설명하기로 한다.
소프트웨어의 리팩토링은 외형적인 기능의 변경없이 소프트웨어 코드의 구조를 변경하여 코드의 가시성을 향상시킴으로써 소프트웨어의 유지보수성과 이해성, 가독성을 향상시키는 방법론이다.
도 1은 일반적인 컴퓨터 시스템의 구성을 보여주는 개념도이다. 도 1을 참조하면, 여러 대의 컴퓨터로 구성된 시스템을 생각해 보면, 컴퓨터(110,120,130,140)는 각자의 역할을 가지고 다른 컴퓨터와 통신을 통해 협업을 수행한다.
이렇게 구성된 시스템에서 개별 컴퓨터(110,120,130,140)는 서로 간에 통신을 위한 기능을 제외하면 다른 컴퓨터와의 연관관계가 독립적이다. 즉, 개별 컴퓨터가 타 컴퓨터와 통신을 위한 영역인 인터페이스 영역을 제외하면 컴퓨터가 본래의 기능을 수행하는 기능 부분은 다른 컴퓨터의 소프트웨어를 참조하거나 연관되지 않고 독립적으로 개발된 부분인 것이다.
따라서 각 컴퓨터는 상호간의 통신을 위한 인터페이스 영역의 규약만 잘 지킨다면 개별 컴퓨터의 소프트웨어는 독립적인 수정 및 기능의 개선이 가능하다.
이를 이해가 쉽게 보여주는 도면이 도 2이다. 즉, 도 2는 도 1의 컴퓨터 시스템의 구성에 대응하는 소프트웨어 구성의 블록 개념도이다. 소프트웨어 구조(200)는 소프트웨어 기능을 담당하는 소프트웨어 기능 영역(211,221,231,241)과 각 소프트웨어 기능 영역들간의 통신을 연결하는 인터페이스 영역(212,222,232,242)으로 이루어진다.
따라서 무기체계 소프트웨어가 상기와 같은 방식으로 리팩토링된다면 무기체계 소프트웨어의 각 영역은 독립적인 수정이 가능하고 각 영역간의 연관관계는 인터페이스 영역을 통해서 표현이 가능해진다.
즉, 무기체계 소프트웨어 개발자는 향후 구조개선의 소요를 고려하여 구조개선이 용이한 형태로 코드의 구조를 가시화할 수 있고 코드의 일정영역(블록)을 운용자의 편의에 의해 설정이 가능하다.
더군다나 해당 블록간의 연관관계가 서로간의 통신 메시지를 통해 구분이 가능해지기 때문에 연관관계의 추적에 매우 용이한 구조로 코드가 리팩토링되는 것이다. 이러한 코드 구조로 무기체계 소프트웨어를 리팩토링하기 위한 과정은 도 10에 도시된 바와 같이, 블록 정의 단계(S1010), 블록의 독립화 단계(S1020), 블록의 문서화 단계(S1030) 등으로 구성된다.
먼저, 블록 정의 단계에서, 블록 정의는 코드의 일정 부분을 나누어 영역을 설정하는 것이고 여러 컴퓨터로 구성된 시스템에 비유하면 하나의 컴퓨터에 대한 고유의 기능을 할당하는 과정이다.
소프트웨어 코드의 블록은 서로 중복된 기능을 할당할 수 없고 소프트웨어의 일부 기능을 누락해서 정의할 수도 없다. 그것은 추후 구조개선을 수행할 때 역으로 개선이 필요한 기능이 할당된 블록을 찾을 때, 중복된 블록의 선택을 방지하기 위함이다. 개별 블록은 다른 블록으로부터의 독립성을 보장받기 위해서 블록에 할당되는 기능이 모든 블록 상에서 유일하게 정의되어야 하고 시스템의 어떤 기능도 모든 블록의 어딘가에 누락없이 정의되어야 한다.
소프트웨어 코드의 블록이 정의되면 각 블록이 독립적인 영역을 확보할 수 있도록 블록간의 연관관계를 모두 차단하고 소프트웨어의 고유의 기능 수행을 위해 불가피한 부분은 인터페이스 영역으로 할당하여 블록간의 연관관계를 재설정한다.
이를 이해하기 쉽게 도시한 도면이 도 3이다. 도 3을 참조하면, 도 3은 본 발명의 일실시예에 따른 소프트웨어 코드(200)를 코드 블록 리팩토링 구조(300)로 변환한 개념도이다. 제 1 내지 제 4 코드 블록(310,320,330,340)은 각각 기능 영역(311)과 인터페이스 영역(312)으로 구성된다.
이 때, 각 블록은 여러 컴퓨터가 개별적으로 개발되어 필요한 정보를 서로 교환하는 것과 같은 방식으로 메시지 형태의 정보만 공유가 가능하다. 이러한 코드블록의 리팩토링 과정(단계 S1020)을 보여주는 도면이 도 11에 도시된다. 도 11을 참조하면, 코드블록의 리팩토링 과정(단계 S1020)은 블록 내부와 외부의 코드 구분 단계(S1110), 인터페이스 변수 식별 단계(S1120), 인터페이스 변수의 교환 방식 정의 단계(S1130), 및 인터페이스 변수 검증 단계(S1140) 등으로 구성된다.
도 11을 참조하면, 블록 내부와 외부의 코드 구분 단계(S1110)에서, 정의된 블록의 기능과 관계된 모든 코드를 가져와 해당 블록에 이식하고 마치 해당 블록은 다른 블록과 별개의 소프트웨어인 것처럼 다른 블록과의 관계를 단절한다.
이를 위해서는 여러 기능이 공통으로 사용했던 소스들을 각 기능이 속한 블록에 따라 이원화함으로써 블록간의 불필요한 소스의 공유를 막고 다소 코드의 양이 늘어나더라도 블록에 할당된 기능과 관련된 소스는 블록 내부에 위치한다.
블록의 내부 및/또는 외부의 코드를 구분하는 간단한 방법으로는 블록별로 명명법을 달리 적용하는 방법이 있을 수 있지만, 어떠한 외부 블록의 정보도 블록 내부에서 참조되면 안 되고 블록의 외부에서 블록의 내부를 참조해서도 안 된다는 원칙만 지켜진다면 어떠한 방법을 적용하더라도 문제가 되지 않는다.
이러게 정의된 블록의 개념을 적용하면 향후, 소프트웨어의 구조개선 시 해당 블록의 수정은 해당 블록에만 영향을 주게 된다. 다시 말해서 유사하게 복사되어 사용된 소스라고 하더라도 다른 블록에 정의되어 있다면 수정은 별도로 이루어져야 하고 코드 상에서 서로의 연관관계는 존재하지 않는다.
이러한 개념이 구조개선 수행 시, 코드의 해석의 오류 및/또는 수정으로 인한 잘못된 영향을 줄이고 분석 및 수정, 검증의 영역을 명확히 하는 결과로 귀결된다.
도 11을 계속 참조하면, 블록 내부와 외부의 코드 구분 단계(S1110)가 완료되면 인터페이스 변수 식별 단계(S1120)가 수행된다. 인터페이스 변수 식별 단계(S1120)에서, 블록 내부의 변수 중 소프트웨어 고유의 기능을 수행하기 위해서 불가피하게 블록 외부와 연계되는 변수를 식별하고 이 변수를 인터페이스 변수로 식별 및 정의한다.
블록간의 코드가 구별되고 인터페이스 변수가 식별되고 나면, 블록 간에 필요한 정보를 교환하기 위한 정보 교환 방식이 정의된다. 인터페이스 변수의 교환 방식 정의 단계(S1130)에서, 정보를 교환하는 간편한 방식으로는 해당 블록의 변수를 그 변수를 필요로 하는 블록의 명명법으로 수정하는 방식이 있을 수 있다. 또한, 이에 한정되지 않고, 해당 소프트웨어의 전역변수로 할당하는 방식도 가능하다. 또한, XML을 이용하여 메시지를 교환하는 방식을 사용할 수도 있고, 프로그램간의 다양한 통신 방식, 미들웨어를 이용하여 블록간의 정보교환을 수행하는 방식 등, 코드의 특성에 따라 적절한 방식의 적용이 가능하다.
도 11을 계속 참조하면, 인터페이스 변수의 교환 방식을 정의하는 단계(S1130)의 완료 후에는 인터페이스 변수 검증 단계(S1140)가 수행된다. 이 인터페이스 변수 검증 단계(S1140)는 블록 사이에 교환되는 정보를 보다 심층적으로 추적 관리하기 위한 방법을 구현하는 단계이다.
무기체계 소프트웨어를 개발할 때는 정의된 요구사항에 맞게 구현을 하는 것이 중요하지만, 소프트웨어의 구조개선을 수행하기 위해서는 이해단위인 블록 사이의 관계 인자를 관리하는 것이 우선 고려사항이다.
그것은 개발단계에서 해당 블록의 특성에 따라 관계 인자에 대한 식별 및 추적이 이루어지지 않으면, 구조개선 과정에서는 각 블록을 중심으로 코드의 수정을 수행하기 때문에 타 블록의 코드 수정을 담당한 엔지니어가 모든 블록에 대한 코드 수정으로 인한 영향성을 쉽게 파악하지 못하는 문제가 발생하게 된다.
그렇기 때문에 현재의 블록 설계자는 자신의 블록이 외부인자에 의해 나쁜 영향을 받을 수 있는 요인을 소프트웨어 설계과정에서 식별하고 그에 대한 대비책을 마련해 두어야 타 블록의 코드 수정 후 무결성검사 시, 본 블록에 대한 영향성의 판단이 가능하다.
이를 위해서는 인터페이스 영역에 블록의 외부와 관계된 변수들의 특징을 잘 고려하여 에러코드를 삽입하고 타 블록에서의 활용에 의해 나쁜 영향을 받을 수 있는 인자(Bad Smell)를 식별 관리 및 검증 코드의 삽입으로 블록간의 관계를 보다 명확하게 정의하고 영향성 및 관계를 추적 관리할 수 있다. 이러한 기능의 구현이 가능한 것은 개별 블록의 독립적인 구조와 인터페이스 영역의 존재에 있다.
다시 도 10을 참조하면, 블록의 독립화 단계(S1020) 이후에는 블록의 문서화 단계(S1030)가 수행된다. 코드 블록에 대한 문서화의 목적은 코드의 가시성을 향상시키고 코드에 표현하지 못하는 부수정보를 기술하기 위함이다. 이러한 코드 블록의 문서화에 따른 코드 블록 문서는 크게 개별 코드 블록의 구성에 대한 코드 블록 구성 문서와 개별 코드 블록의 특성에 대한 코드 블록 특성 문서로 구성된다.
이중 코드 블록의 구성에 대한 문서화를 먼저 설명하면, 코드 블록의 구성에 대한 문서화에 따른 코드 블록 구성 문서에는, 블록의 구성과 블록간의 기능적인 관계, 각 블록에 할당된 기능, 블록간의 메시지 교환 방법, 해당 블록과 관계된 설계 문서 등과 같은 코드 블록의 거시적인 정보가 포함된다. 이러한 정보는 구조개선 시, 엔지니어가 해당 소프트웨어의 구성을 이해하고 소요된 요구사항에 맞게 코드의 수정 범위를 설정하는데 많은 도움이 된다.
다음으로, 개별 블록의 특성에 대한 문서화로서, 개별 블록의 특성에 대한 문서화에 따른 코드 블록 특성 문서에는, 블록의 기능과 인터페이스 변수, 인터페이스 변수와 관계된 에러코드 및 외부 블록으로부터의 나쁜 인자, 나쁜 인자와 관계된 블록의 기능 및 영향성, 구조개선시 주의점, 블록의 운용환경, 기타 사항 등 블록의 세부 기능 및 정보와 관련된 것들이 포함된다. 이러한 정보는 엔지니어가 블록을 수정하고 수정된 코드의 무결성을 검증하는데 활용된다.
한편으로, 소프트웨어 코드를 코드 블록 구조로 계층화하여 여러 형태로 표현이 가능하게 되면 코드의 가시성이 향상될 수 있고 다양한 기능에 대한 블록화 표현이 용이하게 되는 장점이 있다. 코드의 블록 구조는 도 4 내지 도 7에 도시된 방식을 기본으로 계층화될 수 있다.
즉, 도 4는 도 3에 도시된 코드 블록 리팩토링의 제 1 실시예로서 여러 개의 코드 블록을 하나의 코드 블록 내부에 계층화하는 개념도이다. 도 4를 참조하면, 인터페이스 영역(412)과 기능 영역(411)으로 구성된 코드 블록(410) 내부의 기능 영역(411)을 재블록화하여 재블록(421)으로 구성한다.
도 5는 도 3에 도시된 코드 블록 리팩토링의 제 2 실시예로서 여러 개의 코드 블록을 하나의 코드 블록으로 묶어 계층화하는 개념도이다. 도 5를 참조하면, 여러 개의 코드 블록(510 내지 540)을 기능 영역(511)에 묶고 이 기능 영역(511)과 인터페이스 영역(512)으로 구성된 하나의 코드 블록(510)으로 구성한다.
도 6은 도 3에 도시된 코드 블록 리팩토링의 제 3 실시예로서 하나의 코드 블록을 여러 개의 코드 블록으로 나누어 계층화하는 개념도이다. 도 6을 참조하면, 하나의 코드 블록(620)을 제 1 코드 블록(621) 및 제 2 코드 블록(622)으로 구성된다.
도 7은 도 3에 도시된 코드 블록 리팩토링의 제 4 실시예로서 새로운 코드 블록을 추가하여 계층화하는 개념도이다. 도 7을 참조하면, 추가 블록(720)이 구성된다.
한편으로, 본 발명의 변형 실시예로서, 소프트웨어 코드가 블록 구조로 리팩토링되면 구조 개선 영역을 설정할 수 있다. 이를 보여주는 2가지 예가 도 8 내지 도 9에 도시된다.
첫 번째로, 기능 영역에 대하여 구조 개선 영역을 설정하는 방식으로서, 이를 보여주는 예가 도 8에 도시된다. 즉, 도 8은 본 발명의 일실시예에 따른 기능 영역을 구조개선 범위로 설정하는 개념을 보여주는 개념도이다. 도 8을 참조하면, 기능 영역에 구조 개선 영역(810)이 설정된다. 소프트웨어의 구조 개선 소요가 기능 영역에 국한되면, 소프트웨어 변경 범위는 기능영역이 되고 소프트웨어는 해당 블록의 인터페이스 영역의 제약 사항을 준수하면서 구조개선을 수행하는 것이 가능하게 된다.
두 번째로, 다수의 코드 블록에 대하여 구조 개선 영역을 설정하는 방식으로서, 이를 보여주는 예가 도 9에 도시된다. 즉, 도 9는 본 발명의 다른 일실시예에 따른 여러 블록을 구조개선 범위로 설정하는 개념을 보여주는 개념도이다. 도 9를 참조하면, 2개의 코드 블록에 구조 개선 영역(910)이 설정된다.
인터페이스 영역이 구조개선의 범위에 포함되거나 구조개선의 범위가 여러 블록을 포함하고 있다면, 관계된 블록을 구조개선 영역으로 설정할 수 있다. 소프트웨어의 구조개선은 관련 블록에 유일하게 기능들을 정의하고 정의된 기능들의 개별 블록의 특징에 맞게 구현하고 필요에 의해 블록마다 인터페이스 영역을 재설정하는 과정을 통해서 구조개선을 수행한다.
세 번째로, 새로운 코드 블록을 추가하여 구조 개선 영역을 설정하는 방식이다. 이러한 새로운 코드 블록을 추가하여 구조 개선 영역을 설정하는 방식은 다수의 코드 블록에 대하여 구조개선 영역을 설정하는 방법과 같다.
110,120,130,140: 개별 컴퓨터
211,221,231,241: 소프트웨어 기능 영역
212,222,232,242: 인터페이스 영역
310,320,330,340: 코드 블록
311: 기능 영역
312: 인터페이스 영역
720: 추가 블록
810,910: 구조 개선 영역
211,221,231,241: 소프트웨어 기능 영역
212,222,232,242: 인터페이스 영역
310,320,330,340: 코드 블록
311: 기능 영역
312: 인터페이스 영역
720: 추가 블록
810,910: 구조 개선 영역
Claims (16)
- 다수의 코드 블록을 정의하는 정의 단계;
무기 체계의 소프트웨어 구조를 다수의 코드 블록으로 리팩토링하는 블록 리팩토링 단계;
및
코드의 가시성을 향상시키고 코드에 표현하지 못하는 부수정보를 기술하도록 문서화하는 코드 블록 문서화 단계;
를 포함하는 것을 특징을 하는 무기체계 구조 개선을 위한 소프트웨어 리팩토링 방법.
- 제 1 항에 있어서,
상기 코드 블록은 독립적인 구조로서, 각각 소프트웨어의 고유 기능을 정의하는 기능 영역과 고유 기능을 수행하는 인터페이스 영역으로 이루어지는 것을 특징으로 하는 무기체계 구조 개선을 위한 소프트웨어 리팩토링 방법.
- 제 1 항에 있어서,
상기 블록 리팩토링 단계는, 상기 다수의 코드 블록간의 연관관계를 모두 차단하고 소프트웨어의 고유 기능 수행을 위해 불가피한 부분은 인터페이스 영역으로 할당하여 코드 블록간의 연관관계를 재설정하는 것을 특징으로 하는 무기체계 구조 개선을 위한 소프트웨어 리팩토링 방법.
- 제 1 항에 있어서,
상기 다수의 코드 블록은 필요한 정보를 서로 교환하도록 메시지 형태의 정보만을 공유하는 것을 특징으로 하는 무기체계 구조 개선을 위한 소프트웨어 리팩토링 방법.
- 제 1 항에 있어서,
상기 블록 리팩토링 단계는,
코드 블록 내부와 외부의 코드를 구분하는 코드 구분 단계;
코드 블록 내부의 변수 중 소프트웨어의 고유 기능을 수행하기 위해서 불가피하게 블록 외부와 연계되는 변수를 식별하고 이 변수를 인터페이스 변수로 식별 및 정의하는 인터페이스 변수 식별 단계;
코드 블록 간에 필요한 정보를 교환하기 위한 인터페이스 변수의 정보 교환 방식을 정의하는 교환 방식 정의 단계; 및
코드 블록 사이에 교환되는 정보를 추적 관리하는 인터페이스 변수 검증 단계;를 포함하는 것을 특징으로 하는 무기체계 구조 개선을 위한 소프트웨어 리팩토링 방법.
- 제 5 항에 있어서,
상기 코드 구분 단계는,
정의된 코드 블록의 기능과 관계된 모든 코드를 가져와 해당 코드 블록에 이식하고 해당 코드 블록과 다른 코드 블록의 관계를 단절하는 것을 특징으로 하는 무기체계 구조 개선을 위한 소프트웨어 리팩토링 방법.
- 제 5 항에 있어서,
상기 정보 교환 방식은, 해당 코드 블록의 변수를 그 변수를 필요로 하는 블록의 명명법으로 수정하는 방식, 해당 소프트웨어의 전역변수로 할당하는 방식, XML(eXtensible Markup Language)을 이용하여 메시지를 교환하는 방식, 및 미들웨어를 이용하여 블록간의 정보교환을 수행하는 방식 중 어느 하나인 것을 특징으로 하는 무기체계 구조 개선을 위한 소프트웨어 리팩토링 방법.
- 제 5 항에 있어서,
상기 인터페이스 변수 검증 단계는, 인터페이스 영역에 코드 블록의 외부와 관계된 변수들의 특징을 이용하여 에러코드를 삽입하고 타 코드 블록에서의 활용에 의해 나쁜 영향을 갖는 인자(Bad Smell)를 식별 관리하고, 검증 코드의 삽입으로 블록간의 관계를 정의하는 것을 특징으로 하는 무기체계 구조 개선을 위한 소프트웨어 리팩토링 방법.
- 제 1 항에 있어서,
상기 다수의 코드 블록은 서로 중복된 기능을 할당할 수 없고 소프트웨어의 모든 기능을 모두 정의하는 것을 특징으로 하는 무기체계 구조 개선을 위한 소프트웨어 리팩토링 방법.
- 제 1 항에 있어서,
상기 코드 블록 문서화 단계에서, 코드 블록 문서는, 코드 블록의 구성에 대한 코드 블록 구성 문서 및 코드 블록의 특성에 대한 코드 블록 특성 문서로 이루어지는 것을 특징으로 하는 무기체계 구조 개선을 위한 소프트웨어 리팩토링 방법.
- 제 10 항에 있어서,
상기 코드 블록 구성 문서는, 코드 블록의 구성과 코드 블록간의 기능적인 관계, 각 코드 블록에 할당된 기능, 코드 블록간의 메시지 교환 방식, 해당 코드 블록과 관계된 설계 문서를 포함하는 코드 블록의 거시적 정보인 것을 특징으로 하는 무기체계 구조 개선을 위한 소프트웨어 리팩토링 방법.
- 제 10 항에 있어서,
상기 코드 블록 특성 문서는, 코드 블록의 기능과 인터페이스 변수, 인터페이스 변수와 관계된 에러코드 및 외부 블록으로부터의 나쁜 인자, 나쁜 인자와 관계된 블록의 기능 및 영향성, 구조개선시 주의점, 블록의 운용환경을 포함하는 해당 코드 블록의 세부 정보인 것을 특징으로 하는 무기체계 구조 개선을 위한 소프트웨어 리팩토링 방법.
- 제 2 항에 있어서,
다수의 코드 블록의 구조를 특정 형태로 표현하도록 계층화하는 단계;를 더 포함하는 것을 특징으로 하는 무기체계 구조 개선을 위한 소프트웨어 리팩토링 방법.
- 제 13 항에 있어서,
상기 특정 형태는, 코드 블록 내부의 기능 영역을 재블록화하는 형태, 다수개의 코드 블록을 하나의 코드 블록으로 묶는 형태, 하나의 코드 블록을 다수개의 코드 블록으로 분할하는 형태, 및 다른 하나의 코드 블록을 추가하는 형태 중 어느 하나인 것을 특징으로 하는 무기체계 구조 개선을 위한 소프트웨어 리팩토링 방법.
- 제 2 항에 있어서,
다수의 코드 블록에 구조 개선 영역을 설정하는 단계;를 더 포함하는 것을 특징으로 하는 무기체계 구조 개선을 위한 소프트웨어 리팩토링 방법.
- 제 15 항에 있어서,
상기 구조 개선 영역을 설정하는 방식은, 기능 영역에 대하여 구조 개선 영역을 설정하는 방식, 다수의 코드 블록에 대하여 구조 개선 영역을 설정하는 방식, 및 코드 블록을 추가하여 구조 개선 영역을 설정하는 방식 중 어느 하나인 것을 특징으로 하는 무기체계 구조 개선을 위한 소프트웨어 리팩토링 방법.
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
KR1020130119870A KR101530888B1 (ko) | 2013-10-08 | 2013-10-08 | 무기체계 구조 개선을 위한 소프트웨어 리팩토링 방법 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
KR1020130119870A KR101530888B1 (ko) | 2013-10-08 | 2013-10-08 | 무기체계 구조 개선을 위한 소프트웨어 리팩토링 방법 |
Publications (2)
Publication Number | Publication Date |
---|---|
KR20150041399A true KR20150041399A (ko) | 2015-04-16 |
KR101530888B1 KR101530888B1 (ko) | 2015-06-24 |
Family
ID=53034902
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
KR1020130119870A KR101530888B1 (ko) | 2013-10-08 | 2013-10-08 | 무기체계 구조 개선을 위한 소프트웨어 리팩토링 방법 |
Country Status (1)
Country | Link |
---|---|
KR (1) | KR101530888B1 (ko) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9904524B2 (en) | 2014-05-22 | 2018-02-27 | Soo-Jin Hwang | Method and device for visually implementing software code |
KR20200095241A (ko) * | 2019-01-31 | 2020-08-10 | 성균관대학교산학협력단 | 리소스 모니터링을 이용한 소프트웨어 리팩토링 방법 및 장치 |
Family Cites Families (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2009211424A (ja) * | 2008-03-04 | 2009-09-17 | Mitsubishi Electric Corp | 最適化箇所判定装置及び最適化箇所判定システム及びコンピュータプログラム及び最適化箇所判定方法 |
KR101062258B1 (ko) * | 2009-01-06 | 2011-09-05 | 권영범 | 실시간 이벤트 패턴 처리기를 이용한 전사적 자원 관리 업무 프로그램 개발 방법 |
-
2013
- 2013-10-08 KR KR1020130119870A patent/KR101530888B1/ko active IP Right Grant
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9904524B2 (en) | 2014-05-22 | 2018-02-27 | Soo-Jin Hwang | Method and device for visually implementing software code |
KR20200095241A (ko) * | 2019-01-31 | 2020-08-10 | 성균관대학교산학협력단 | 리소스 모니터링을 이용한 소프트웨어 리팩토링 방법 및 장치 |
Also Published As
Publication number | Publication date |
---|---|
KR101530888B1 (ko) | 2015-06-24 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
KR102608500B1 (ko) | 블록체인 컴파일러 | |
De Leoni et al. | A holistic approach for soundness verification of decision-aware process models | |
US8516443B2 (en) | Context-sensitive analysis framework using value flows | |
US9111040B2 (en) | Integration of a software content space with test planning and test case generation | |
Bardin et al. | The BINCOA framework for binary code analysis | |
Denney et al. | A formal basis for safety case patterns | |
CN104331366A (zh) | 一种测试用例设计效率提升方法及系统 | |
US20140053134A1 (en) | Software regression testing using symbolic execution | |
CN103970659A (zh) | 基于插桩技术的安卓应用软件自动化测试方法 | |
Freitas et al. | Formalizing workflows partitioning over federated clouds: multi-level security and costs | |
CN118283148B (zh) | 一种跨平台应用层协议解析器自动生成方法及装置 | |
CN109542432A (zh) | 风控规则编辑方法及终端设备 | |
CN105446952A (zh) | 用于处理语义片段的方法和系统 | |
CN105678118B (zh) | 一种含数字证书的软件版本生成方法及装置 | |
KR101530888B1 (ko) | 무기체계 구조 개선을 위한 소프트웨어 리팩토링 방법 | |
Coullon et al. | Integrated model-checking for the design of safe and efficient distributed software commissioning | |
CN109165102B (zh) | 一种基于智能合约的约束求解器分布式调度方法 | |
EP3859532B1 (en) | Method and system for counter example guided loop abstraction refinement | |
de Souza Neto et al. | TRANSMUT‐Spark: Transformation mutation for Apache Spark | |
Radhakrishnan et al. | Using coarrays to parallelize legacy Fortran applications: Strategy and case study | |
CN111813647A (zh) | 一种主设备数据分析功能验证方法及系统 | |
Proença et al. | Data abstraction in coordination constraints | |
CN102307079A (zh) | 仿真数据有效性检查方法及装置 | |
Bombieri et al. | On the reuse of heterogeneous IPs into SysML models for integration validation | |
CN111124899A (zh) | 一种基于区块链双链结构的缺陷管理方法、设备及介质 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A201 | Request for examination | ||
E902 | Notification of reason for refusal | ||
E701 | Decision to grant or registration of patent right | ||
GRNT | Written decision to grant | ||
FPAY | Annual fee payment |
Payment date: 20190604 Year of fee payment: 5 |