Presentation is loading. Please wait.

Presentation is loading. Please wait.

객체지향 패러다임에서의 코드 재사용을 위한 응집도 레벨 식별 모범 사례

Similar presentations


Presentation on theme: "객체지향 패러다임에서의 코드 재사용을 위한 응집도 레벨 식별 모범 사례"— Presentation transcript:

1 객체지향 패러다임에서의 코드 재사용을 위한 응집도 레벨 식별 모범 사례 2017. 11. 05.
(Best Practice on identifying the level of cohesion for reusing source code in object-oriented paradigm) 홍익대학교 소프트웨어공학 연구실 변 은 영 지도교수 : 김영철

2 Table of Contents I. 연구 배경 II. 관련 연구 III. 응집도 추출 가시화 Tool-Chain
IV. 객체 지향 패러다임에서 응집도 재정의 V. 소스 코드 가시화 Ⅵ. 결론 & 향후 연구

3 출처 : accenture와 함께 하는 PLM 글로벌 트렌드 이해
1. 연구 배경 이전 제품 산업 현재 제품 산업 why? 출처 : accenture와 함께 하는 PLM 글로벌 트렌드 이해

4 (소프트웨어 제품 인증, 소프트웨어 프로세스 인증, 도구 사용 등등..)
1. 연구 배경 SW 중요성 다양한 기능에 대한 소비자 요구 증가 SW 기술의 급속한 발전 기존 기능보다 다양한 기능을 가진 소프트웨어 개발 규모가 크고 복잡한 소프트웨어 시스템의 지속적인 증가 개발 / 유지보수에 많은 시간과 비용 소비 해결 방법 (소프트웨어 제품 인증, 소프트웨어 프로세스 인증, 도구 사용 등등..) 소스 코드의 모듈화 를 통한 재사용

5 <소프트웨어 재사용 적용 범위>
2. 관련 연구 – 재사용 재사용 기존에 개발한 소프트웨어의 여러 요소들을 새로운 소프트웨어 개발 / 유지보수 에 재적용 소프트웨어 품질과 생산성을 높임 소프트웨어의 중요성이 커짐에 따라 소프트웨어 재사용의 적용 범위가 넓어짐 <소프트웨어 재사용 적용 범위>

6 2. 관련 연구 – 코드 복잡도 코드 복잡도 본질적 복잡성 돌발적 복잡성
요구 사항 자체가 복잡하기 때문에 소프트웨어가 복잡해짐 소프트웨어는 요구 사항에 의해 설계되기 때문에 줄이기 어려움 돌발적 복잡성 여러 이유로 개발자가 스스로 초래한 돌발적 복잡성 레거시 코드, 플랫폼 버그, 툴의 사용성 등 다양한 원인 가장 직접적인 원인은 레거시 코드 레커시 코드의 복잡도 지표 : 순환 복잡도(Cuclomatic Complexity), 결합도(Coupling), 응집도(Cohesion) 등

7 코드 내부 가시화 2. 관련 연구 – 응집도 코드 구조 복잡도 파악 재사용 모듈 식별 응집도
모듈 내부가 얼마나 단단히 뭉쳐져 있는가를 나타내는 품질지표 코드 내부 가시화 코드 구조 복잡도 파악 재사용 모듈 식별 < 응집도가 낮은 경우 > < 응집도가 높은 경우 >

8 2. 관련 연구 – 응집도 응집도 응집도 정의 Functional Cohesion
모듈 내 모든 구성요소들이 한 가지 기능과 연관이 있는 경우 Sequential Cohesion 모듈 내 한 구성요소의 출력이 다른 구성 요소의 입력이 되는 경우 Communicational Cohesion 모듈이 여러 가지 기능을 수행하며 모듈 내 구성 요소들이 같은 입력 자료를 이용하거나 동일한 출력 데이터를 만들어 내는 경우 Procedural Cohesion 모듈 내 구성 요소들이 연관되어 있고 특정 순서에 의해 수행되어야 하는 경우 Temporal Cohesion 모듈 내 구성 요소들이 서로 다른 기능을 같은 시간대에 실행하는 경우 Logical Cohesion 모듈 내 구성 요소들이 논리적으로 연관된 임무나 비슷한 기능을 수행하는 경우 Coincidental Cohesion 모듈 내 구성 요소들이 서로 관련이 없는 경우

9 3. 응집도 추출 가시화 Tool-Chain (추상화 구문 트리)

10 Step 1 – 코드 입력 Java xCodeParser Source code
입력된 소스 코드 정보를 분석한 결과로 ASTM을 추출 기존 연구에서 사용하던 파서 Source Navigator에 비해 응집도 추출에 적합 Java Source code xCodeParser

11 Step 1 – 코드 입력 Source Navigator xCodeParser

12 Step 2 – 소스 분석 ASTM project class xCodeParser members variable member

13 Step 3 – DB 저장 Database(SQLite) ASTM Component Link
step 2에서 분석한 정보인 ASTM 데이터를 원하는 구조로 구조화하여 저장 SQLite 사용 Database(SQLite) ASTM Component Link

14 Step 4 – 구조 분석 구조 분석 단계는 미리 정의된 응집도 정의에 따라서 데이터베이스에 저장된 정보를 DOT 문법에 맞게 재해석 데이터베이스 정보를 재해석하기 위해 Query 문을 사용 Query – 메소드를 노드로 가시화 하기 위해 component 들 중 method만 조회 : Select distinct file_name, class_name from ASTM_contents where mem_type = ‘function’

15 Step 5 – 가시화 가시화 단계는 Step 4에서 재해석한 정보를 DOT Gen(Graphviz)를 이용해 가시화

16 4. 객체 지향 패러다임에서 응집도 재정의 Functional Cohesion
모듈 안의 모든 요소들이 한 가지 기능과 관련 → 높은 응집도 이런 모듈은 오직 하나의 기능을 수행함으로써 이해하기 쉽고 수정하기 쉬움 따라서 Method 관점에서 모든 Statement에서 대입되는 변수가 공통적으로 사용되는 경우 Method 호출이 한 번 이루어진 경우 대입 되는 변수가 공통적으로 사용되는 경우 Method 호출이 한번 이루어진 경우

17 4. 객체 지향 패러다임에서 응집도 재정의 Sequential Cohesion
모듈 내 한 구성요소의 출력이 다른 구성요소의 입력이 되는 경우 따라서 Method 관점에서 Method의 Return 된 결과가 다음 Method의 Input Parameter로 쓰이는 경우로 정의

18 4. 객체 지향 패러다임에서 응집도 재정의 Communicational Cohesion
모듈의 모든 요소들이 공통된 데이터에 의해 작업 공통된 데이터에 의해서 관련 없는 기능들 수행 따라서 Method 관점에서 여러 Method Call에 들어가는 Parameter가 동일한 경우 Compute_Matrix메소드에서 호출하는 trans와 inverse 메소드의 파라미터가 aMatrix로 같음

19 4. 객체 지향 패러다임에서 응집도 재정의 Procedural Cohesion
모듈 내 요소들이 연관성 있고 특정 순서에 의해 수행되는 경우 따라서 Method 관점에서 하나의 클래스에 있는 메소드들 여러 개를 호출하는 경우로 정의

20 4. 객체 지향 패러다임에서 응집도 재정의 Temporal Cohesion
모듈 내 요소들이 서로 다른 기능을 같은 순간에 실행 초기화 모듈은 흔히 볼 수 있는 시간적 응집도 모듈 따라서 Method 관점에서 메소드 호출이 일어나지 않고 변수의 초기화만 실행되는 경우로 정의

21 4. 객체 지향 패러다임에서 응집도 재정의 Logical Cohesion
모듈 내 요소들이 논리적으로 연관된 임무나 비슷한 기능 수행 서로 다른 기능이지만 많은 부분 중복 따라서 Method 관점에서 case에 따라 비슷한 기능을 수행하는 switch문이 쓰인 경우 solve-equation 메소드는 switch 문에 의해 수행되는 작업이 세가지로 나누어짐 세가지 업무는 연관된 업무로 비슷한 기능 수행 넘어 오는 no_equ 파라미터에 의해 수행될 작업 선택

22 4. 객체 지향 패러다임에서 응집도 재정의 응집도(Grade) 가중치 정의 Functional Cohesion = [7]
1.45 대입 되는 변수가 공통적으로 사용되는 경우로 정의 메소드 콜이 한번 이루어 지는 경우로 정의 Sequential Cohesion = [6] 1.34 메소드의 리턴된 결과가 다음 메소드의 입력 파라미터로 쓰이는 경우로 정의 Communicational Cohesion = [5] 1.2 여러 메소드 호출에 들어가는 파라미터가 동일한 경우로 정의 Procedural Cohesion = [4] 1.1 하나의 클래스에 있는 메소드들을 여러 개 호출하는 경우로 정의 Temporal Cohesion = [3] 1 메소드 호출이 일어나지 않고 변수의 초기화만 실행된 경우로 정의 Logical Cohesion = [2] case에 따라 비슷한 기능을 수행하는 switch문에 쓰인 경우로 정의 Coincidental Cohesion = [1] 위의 경우가 모두 아닌 경우로 정의

23 5. 소스 코드 가시화 : package : method( 재사용 적합 ) : class : method( 재사용 부적합 )
설정 : 재사용 모듈 응집도 >5

24 5. 소스 코드 가시화 functional cohesion 7 * 1.45 = > 5

25 communication cohesion
5. 소스 코드 가시화 6 * * 1.1 = > 5 5 * * 1.1 = > 5 sequential cohesion procedural cohesion communication cohesion procedural cohesion

26 coincidental cohesion
5. 소스 코드 가시화 4 * 1.1 = < 5 2 * 1.0 = < 5 procedural cohesion logical cohesion 3 * 1.0 = < 5 1 * 1.0 = < 5 temporal cohesion coincidental cohesion

27 𝑖=0 𝑛 𝑐𝑒=𝑐𝑒𝑓+𝑐𝑒𝑠+𝑐𝑒𝑚+𝑐𝑒𝑝+𝑐𝑒𝑡+𝑐𝑒𝑙+𝑐𝑒𝑐
5. 소스 코드 가시화 A A’ B B’ < 재사용화 성숙도 메트릭 > A (operator – jj_consume-token) R = 1 2 ( ) = 1 2 ( ) = 4 부적합 A’ (jjCheckNAddTwoStates - jjCheckNAdd) R = 1 2 ( ) = 1 2 ( ) = 3.7 부적합 B (sum - element) R = 1 2 ( ) = 1 2 ( ) = 적합 B’ (jjMoveStringLiteral - jjStopAtPos) R = 1 2 ( ) = 1 2 ( ) = 적합 𝑖=0 𝑛 𝑐𝑒=𝑐𝑒𝑓+𝑐𝑒𝑠+𝑐𝑒𝑚+𝑐𝑒𝑝+𝑐𝑒𝑡+𝑐𝑒𝑙+𝑐𝑒𝑐 … ① 응집도의 총합 𝑗=0 𝑚 𝑐𝑜=𝑐𝑜𝑑+𝑐𝑜𝑠+𝑐𝑜𝑐+𝑐𝑜𝑒+𝑐𝑜𝑚+𝑐𝑜𝑛 … ② 결합도의 총합 R = 1 2 ( 𝑖=0 𝑛 𝑐𝑒𝑖 𝑛 + 𝑗=0 𝑚 𝑐𝑜𝑗 𝑚 ) (5 < R < 8) … ③ 재사용화 성숙도 메트릭

28 6. 결론 & 향후 연구 결론 향후 연구 소프트웨어 규모가 점점 커지고 복잡해지면서 코드의 재사용성은 품질과 생산성에
결정적인 역할 재사용 적합한 모듈 판단을 위해 응집도 추출 Tool-Chain 개발 객체 지향 패러다임에서 응집도 재 정의 객체 지향 기반 코드 분석을 통해 프로그램 구조와 응집도와 결합도 측정 결과를 가시화 가시화 결과에 따라 재사용에 적합한 모듈 판단 재사용 모듈의 품질을 위해 리팩토링이 가능 향후 연구 구체적인 응집도 개념 추가적 검출 객체 지향 특성이 반영되도록 모듈의 단위 클래스로 확장

29 Q&A Thank you.


Download ppt "객체지향 패러다임에서의 코드 재사용을 위한 응집도 레벨 식별 모범 사례"

Similar presentations


Ads by Google