KR101530888B1 - 무기체계 구조 개선을 위한 소프트웨어 리팩토링 방법 - Google Patents

무기체계 구조 개선을 위한 소프트웨어 리팩토링 방법 Download PDF

Info

Publication number
KR101530888B1
KR101530888B1 KR1020130119870A KR20130119870A KR101530888B1 KR 101530888 B1 KR101530888 B1 KR 101530888B1 KR 1020130119870 A KR1020130119870 A KR 1020130119870A KR 20130119870 A KR20130119870 A KR 20130119870A KR 101530888 B1 KR101530888 B1 KR 101530888B1
Authority
KR
South Korea
Prior art keywords
code
block
software
blocks
code block
Prior art date
Application number
KR1020130119870A
Other languages
English (en)
Other versions
KR20150041399A (ko
Inventor
황수진
김기성
김은로
Original Assignee
국방과학연구소
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by 국방과학연구소 filed Critical 국방과학연구소
Priority to KR1020130119870A priority Critical patent/KR101530888B1/ko
Publication of KR20150041399A publication Critical patent/KR20150041399A/ko
Application granted granted Critical
Publication of KR101530888B1 publication Critical patent/KR101530888B1/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/10Requirements analysis; Specification techniques
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/20Software design
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/44Arrangements 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

무기체계 구조 개선을 위한 소프트웨어 리팩토링 방법{Method for refactoring software for improving weapon system}
본 발명은 무기 체계 소프트웨어 기술에 관한 것으로서, 더 상세하게는 설계된 무기체계 소프트웨어에 대한 구조개선의 효율성 향상을 위한 소프트웨어 리팩토링 방법에 대한 것이다.
장기간의 운용이 요구되는 무기체계는 사용주기 동안 관련 기술의 발전, 사용된 부품의 단종, 새로운 기능의 요구, 운용자의 인식 향상에 의한 추가적인 요구사항 도출 및 요구사항의 변경 등이 원인이 되어 시스템의 성능향상을 위한 구조개선을 수행하게 된다. 이러한 현상은 오랜 기간 사용하는 무기체계의 특성상 자연스러운 현상으로 인식되고 있다.
일반적으로 기존의 소프트웨어를 수정하는 작업은 필요이상의 많은 노력을 소요한다. 그 이유는 기존의 소프트웨어를 면밀히 분석하여 수정이 필요한 범위를 식별하고 기 설계된 소프트웨어의 구조 및 제약을 고려하여 코드를 변경시켜야 하며 변경된 소프트웨어의 무결성을 증명해야 하기 때문이다. 특히, 구조가 복잡하고 방대한 양의 무기체계 소프트웨어는 약간의 수정에도 많은 시간과 노력을 필요로 하고 있다.
현재 적용중인 무기체계 소프트웨어의 개발 절차는 구조개선의 효율성에 최적화된 형태는 아니다. 처음부터 소프트웨어를 개발하는 것과 개발된 소프트웨어의 일부를 수정하는 과정은 엄연히 다르기 때문이다.
무기체계 구조개선에 있어 소프트웨어 수정의 효율성을 확보하기 위해서는 소프트웨어 코드의 구조화, 가시화가 필요하고 소프트웨어 모듈간의 연관성이 명확히 표현되어야 한다. 그러나, 아직 소프트웨어 코드의 구조화 및 가시화를 위한 별도의 절차는 무기체계 소프트웨어 개발 절차상에 규정되어 있지 않은 실정이다.
이 때문에 무기체계 소프트웨어에 대한 구조개선 소요가 발생되면, 수정 범위를 설정하는 것에서부터, 해당코드의 제약사항 및 구조 분석, 수정 코드 구현, 수정된 코드의 무결성 입증 등의 과정에서 상당한 어려움을 겪게 되는 단점이 있었다.
뿐만 아니라 코드 내부 연관관계의 잘못된 이해는 잘못된 수정으로 인한 새로운 오류 유발을 빈번히 하고 반복적인 설계의 변경 위험에 노출될 가능성이 높다는 단점이 있었다.
또한, 무기체계가 개발되면 운용중인 무기체계의 유지보수와 새로운 운용기능의 추가를 위한 구조개선을 수행하게 되는 것은 불가피한 현상이다. 때문에 무기체계 소프트웨어의 최종적인 구조는 유지보수 및/또는 구조개선이 편리한 형태로 변경되는 것이 타당하다.
그러나, 현재의 무기체계 소프트웨어 개발 과정에 입각해서 구조개선을 수행하기 위해서는 소프트웨어의 개발과정에서 산출된 결과물을 활용해야만 하는데, 이는 사전에 해당 소프트웨어를 개발한 경험을 갖고 있는 사람이 아니라면 소프트웨어 구조의 분석, 수정 영역 설정, 수정 코드와 기존 코드의 연관관계, 수정된 코드에 의한 기존 코드의 영향성 등을 파악하는데 상당한 어려움을 겪을 수밖에 없다.
1. 한국공개특허번호 제10-2002-0024325호 2. 한국공개특허번호 제10-2011-0083596호 3. 한국공개특허번호 제10-2012-0121202호
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)의 세부 과정을 보여주는 흐름도이다.
본 발명은 다양한 변경을 가할 수 있고 여러 가지 실시예를 가질 수 있는바, 특정 실시예들을 도면에 예시하고 상세한 설명에 구체적으로 설명하고자 한다. 그러나 이는 본 발명을 특정한 실시 형태에 대해 한정하려는 것이 아니며, 본 발명의 사상 및 기술 범위에 포함되는 모든 변경, 균등물 내지 대체물을 포함하는 것으로 이해되어야 한다.
각 도면을 설명하면서 유사한 참조부호를 유사한 구성요소에 대해 사용한다.
제 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: 구조 개선 영역

Claims (16)

  1. 다수의 코드 블록을 정의하는 정의 단계;
    무기 체계의 소프트웨어 구조를 다수의 코드 블록으로 리팩토링하는 블록 리팩토링 단계; 및
    코드의 가시성을 향상시키고 코드에 표현하지 못하는 부수정보를 기술하도록 문서화하는 코드 블록 문서화 단계;를 포함하되,
    상기 코드 블록은 독립적인 구조로서, 각각 소프트웨어의 고유 기능을 정의하는 기능 영역과 고유 기능을 수행하는 인터페이스 영역으로 이루어지는 것을 특징으로하고,
    상기 블록 리팩토링 단계는, 상기 다수의 코드 블록간의 연관관계를 모두 차단하고 소프트웨어의 고유 기능 수행을 위해 불가피한 부분은 인터페이스 영역으로 할당하여 코드 블록간의 연관관계를 재설정하는 것을 특징을 하는 무기체계 구조 개선을 위한 소프트웨어 리팩토링 방법.
  2. 삭제
  3. 삭제
  4. 제 1 항에 있어서,
    상기 다수의 코드 블록은 필요한 정보를 서로 교환하도록 메시지 형태의 정보만을 공유하는 것을 특징으로 하는 무기체계 구조 개선을 위한 소프트웨어 리팩토링 방법.
  5. 제 1 항에 있어서,
    상기 블록 리팩토링 단계는,
    코드 블록 내부와 외부의 코드를 구분하는 코드 구분 단계;
    코드 블록 내부의 변수 중 소프트웨어의 고유 기능을 수행하기 위해서 불가피하게 블록 외부와 연계되는 변수를 식별하고 이 변수를 인터페이스 변수로 식별 및 정의하는 인터페이스 변수 식별 단계;
    코드 블록 간에 필요한 정보를 교환하기 위한 인터페이스 변수의 정보 교환 방식을 정의하는 교환 방식 정의 단계; 및
    코드 블록 사이에 교환되는 정보를 추적 관리하는 인터페이스 변수 검증 단계;를 포함하는 것을 특징으로 하는 무기체계 구조 개선을 위한 소프트웨어 리팩토링 방법.
  6. 제 5 항에 있어서,
    상기 코드 구분 단계는,
    정의된 코드 블록의 기능과 관계된 모든 코드를 가져와 해당 코드 블록에 이식하고 해당 코드 블록과 다른 코드 블록의 관계를 단절하는 것을 특징으로 하는 무기체계 구조 개선을 위한 소프트웨어 리팩토링 방법.
  7. 제 5 항에 있어서,
    상기 정보 교환 방식은, 해당 코드 블록의 변수를 그 변수를 필요로 하는 블록의 명명법으로 수정하는 방식, 해당 소프트웨어의 전역변수로 할당하는 방식, XML(eXtensible Markup Language)을 이용하여 메시지를 교환하는 방식, 및 미들웨어를 이용하여 블록간의 정보교환을 수행하는 방식 중 어느 하나인 것을 특징으로 하는 무기체계 구조 개선을 위한 소프트웨어 리팩토링 방법.
  8. 제 5 항에 있어서,
    상기 인터페이스 변수 검증 단계는, 인터페이스 영역에 코드 블록의 외부와 관계된 변수들의 특징을 이용하여 에러코드를 삽입하고 타 코드 블록에서의 활용에 의해 나쁜 영향을 갖는 인자(Bad Smell)를 식별 관리하고, 검증 코드의 삽입으로 블록간의 관계를 정의하는 것을 특징으로 하는 무기체계 구조 개선을 위한 소프트웨어 리팩토링 방법.
  9. 제 1 항에 있어서,
    상기 다수의 코드 블록은 서로 중복된 기능을 할당할 수 없고 소프트웨어의 모든 기능을 모두 정의하는 것을 특징으로 하는 무기체계 구조 개선을 위한 소프트웨어 리팩토링 방법.
  10. 제 1 항에 있어서,
    상기 코드 블록 문서화 단계에서, 코드 블록 문서는, 코드 블록의 구성에 대한 코드 블록 구성 문서 및 코드 블록의 특성에 대한 코드 블록 특성 문서로 이루어지는 것을 특징으로 하는 무기체계 구조 개선을 위한 소프트웨어 리팩토링 방법.
  11. 제 10 항에 있어서,
    상기 코드 블록 구성 문서는, 코드 블록의 구성과 코드 블록간의 기능적인 관계, 각 코드 블록에 할당된 기능, 코드 블록간의 메시지 교환 방식, 해당 코드 블록과 관계된 설계 문서를 포함하는 코드 블록의 거시적 정보인 것을 특징으로 하는 무기체계 구조 개선을 위한 소프트웨어 리팩토링 방법.
  12. 제 10 항에 있어서,
    상기 코드 블록 특성 문서는, 코드 블록의 기능과 인터페이스 변수, 인터페이스 변수와 관계된 에러코드 및 외부 블록으로부터의 나쁜 인자, 나쁜 인자와 관계된 블록의 기능 및 영향성, 구조개선시 주의점, 블록의 운용환경을 포함하는 해당 코드 블록의 세부 정보인 것을 특징으로 하는 무기체계 구조 개선을 위한 소프트웨어 리팩토링 방법.
  13. 제 1 항에 있어서,
    다수의 코드 블록의 구조를 특정 형태로 표현하도록 계층화하는 단계;를 더 포함하는 것을 특징으로 하는 무기체계 구조 개선을 위한 소프트웨어 리팩토링 방법.
  14. 제 13 항에 있어서,
    상기 특정 형태는, 코드 블록 내부의 기능 영역을 재블록화하는 형태, 다수개의 코드 블록을 하나의 코드 블록으로 묶는 형태, 하나의 코드 블록을 다수개의 코드 블록으로 분할하는 형태, 및 다른 하나의 코드 블록을 추가하는 형태 중 어느 하나인 것을 특징으로 하는 무기체계 구조 개선을 위한 소프트웨어 리팩토링 방법.
  15. 제 1 항에 있어서,
    다수의 코드 블록에 구조 개선 영역을 설정하는 단계;를 더 포함하는 것을 특징으로 하는 무기체계 구조 개선을 위한 소프트웨어 리팩토링 방법.
  16. 제 15 항에 있어서,
    상기 구조 개선 영역을 설정하는 방식은, 기능 영역에 대하여 구조 개선 영역을 설정하는 방식, 다수의 코드 블록에 대하여 구조 개선 영역을 설정하는 방식, 및 코드 블록을 추가하여 구조 개선 영역을 설정하는 방식 중 어느 하나인 것을 특징으로 하는 무기체계 구조 개선을 위한 소프트웨어 리팩토링 방법.
KR1020130119870A 2013-10-08 2013-10-08 무기체계 구조 개선을 위한 소프트웨어 리팩토링 방법 KR101530888B1 (ko)

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 KR20150041399A (ko) 2015-04-16
KR101530888B1 true 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)

Families Citing this family (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR101597780B1 (ko) 2014-05-22 2016-02-25 황수진 소프트웨어 코드의 시각적 구현 방법 및 장치
KR102167476B1 (ko) * 2019-01-31 2020-10-19 성균관대학교 산학협력단 리소스 모니터링을 이용한 소프트웨어 리팩토링 방법 및 장치

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2009211424A (ja) * 2008-03-04 2009-09-17 Mitsubishi Electric Corp 最適化箇所判定装置及び最適化箇所判定システム及びコンピュータプログラム及び最適化箇所判定方法
KR20100081449A (ko) * 2009-01-06 2010-07-15 주식회사 영림원소프트랩 실시간 이벤트 패턴 처리기를 이용한 전사적 자원 관리 업무 프로그램 개발 방법

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2009211424A (ja) * 2008-03-04 2009-09-17 Mitsubishi Electric Corp 最適化箇所判定装置及び最適化箇所判定システム及びコンピュータプログラム及び最適化箇所判定方法
KR20100081449A (ko) * 2009-01-06 2010-07-15 주식회사 영림원소프트랩 실시간 이벤트 패턴 처리기를 이용한 전사적 자원 관리 업무 프로그램 개발 방법

Also Published As

Publication number Publication date
KR20150041399A (ko) 2015-04-16

Similar Documents

Publication Publication Date Title
CN112100054B (zh) 一种面向数据管控的程序静态分析方法和系统
KR102608500B1 (ko) 블록체인 컴파일러
EP3032425B1 (en) Integrated automated test case generation for safety-critical software
US9569343B2 (en) Integration of a software content space with test planning and test case generation
De Leoni et al. A holistic approach for soundness verification of decision-aware process models
Denney et al. A formal basis for safety case patterns
US9021449B2 (en) Software regression testing using symbolic execution
CN104331366A (zh) 一种测试用例设计效率提升方法及系统
CN105335412A (zh) 用于数据转换、数据迁移的方法和装置
CN103838672A (zh) 一种通用报表的自动化测试方法及装置
CN103970659A (zh) 基于插桩技术的安卓应用软件自动化测试方法
CN106294148A (zh) 基于扩展符号变迁系统的c语言程序软件验证方法及装置
CN104598619A (zh) 一种基于约束求解器的服务组合验证方法
CN105446952A (zh) 用于处理语义片段的方法和系统
CN105678118B (zh) 一种含数字证书的软件版本生成方法及装置
KR101530888B1 (ko) 무기체계 구조 개선을 위한 소프트웨어 리팩토링 방법
CN109165102B (zh) 一种基于智能合约的约束求解器分布式调度方法
Renault et al. From AADL architectural models to Petri Nets: Checking model viability
CN109542432A (zh) 风控规则编辑方法及终端设备
US20090064092A1 (en) Visual programming language optimization
Ziadi et al. Software product line extraction from bytecode based applications
EP3859532B1 (en) Method and system for counter example guided loop abstraction refinement
Proença et al. Data abstraction in coordination constraints
CN114186233A (zh) 代码的反混淆方法、装置、电子设备及存储介质
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