역공학 기반 코드 가시화를 통한 기능점수의 비용 추정 검증 방안 홍익대학교 소프트웨어공학연구실 문소영, 김영철

Slides:



Advertisements
Similar presentations
CI(Continuous Integration) 이학성. C ontinuous I ntegration? 2 지속적으로 품질관리 를 적용하는 과정 개발자가 기존 코드의 수정 작업 을 시작할 때, 코드 베이스의복사본을 받아서 작업을 시작하면서 코드의 변경.
Advertisements

신진영 현지 조사 방법 및 보고서 작성법 제 7 강 - 자료 수집과 설문지 작성 -
1 산학공동과제도출 범용 3D 프린터를 위한 3D 스캐너 개발 특허법률사무소에서 3D 프린터의 필요성 특허출원자가 자신의 아이디어를 설명하고, 시작품을 구 현해 보기 위한 급속 조형 방법 필요 이를 지원하기 위해 본 특허법률사무소에서는 국내최초로 3D 프린트 제작사업 시작.
I. 프로젝트 동기 II. 프로젝트 목표 III. 파일시스템 IV. 암호화 및 복호화 V. 인터페이스 VI. FBR READ/WRITE VII. 프로그램 흐름도 VIII. 미 구현 사항 IX. 프로젝트 기대효과 X. 프로그램 요구사항 및 팀원 역할분담 XI. 시연 XII.
Security Solutions (S/W) - Fortify
5. 트랜잭션 기능 유형.
PARK SUNGJIN Oracle 설치 PARK SUNGJIN
DB 프로그래밍 학기.
DB 프로그래밍 학기.
6. 일반 시스템 특성.
4. 데이터 기능 유형.
MS-Access의 개요 1강 MOS Access 2003 CORE 학습내용 액세스 응용 프로그램은 유용한 데이터를
졸업 작품 3~4월 진도진행서 김 상 덕 김 영 근 백 강 수
제 09 장 데이터베이스와 MySQL 학기 인터넷비즈니스과 강 환수 교수.
6장 Mysql 명령어 한빛미디어(주).
데이터베이스 및 설계 금오공과대학교 컴퓨터공학부 이 이섭.
(개정판) 뇌를 자극하는 Red Hat Fedora 리눅스 서버 & 네트워크
5. 프로젝트 계획 및 통제.
테이블 : 데이터베이스를 구성하는 요소로 같은 성격에 정보의 집합체. 레코드 : 하나의 정보를 가지고 있는 컬럼의 집합체
5장 Mysql 데이터베이스 한빛미디어(주).
4장. 웹로직 서버상에서의 JDBC와 JTA의 운용
FTP 프로그램 채계화 박재은 박수민.
컴퓨터응용과학부 Java Enterprize(DB) 제 15 주
                              데이터베이스 프로그래밍 (소프트웨어 개발 트랙)                               퍼스널 오라클 9i 인스톨.
17강. 데이터 베이스 - I 데이터 베이스의 개요 Oracle 설치 기본적인 SQL문 익히기
WinCE Device Driver 실습 #3
WinCE Device Driver 실습 #2
KHS JDBC Programming 4 KHS
Chatpter 03 계획 01 계획의 이해 02 문제의 정의 03 타당성 분석 04 개발 비용 산정
5장 Mysql 데이터베이스 한빛미디어(주).
KIM HEESANG PL/SQL 2 KIM HEESANG
You YoungSEok Oracle 설치 You YoungSEok
1장. 데이터베이스 자료의 조직적 집합체_데이터베이스 시스템의 이해
Grade Server Team14. Attention Seeker
Method & library.
사용자 함수 사용하기 함수 함수 정의 프로그램에서 특정한 기능을 수행하도록 만든 하나의 단위 작업
CHAP 13. 방명록 만들기 실습.
‘2012년 정보화 사업 교육 버그추적시스템(BTS) 사용 절차 2012, 02.
재고평가 총평균 이동평균 선입선출 품목구분별 재고평가 방법 재고조정.
JDBC Lecture 004 By MINIO.
아틱 기반 전력 통합 모니터링 시스템 검증을 위한
2장. 데이터베이스 관리 시스템 데이터베이스 관리 시스템의 등장 배경 데이터베이스 관리 시스템의 정의
PRM 정보관리 업체 메뉴얼
Smart Workplace 개발자 가이드
Visual Basic 실습 Project Portfolio 한문 모의고사 생성기
ERP의 구축방법과 장·단점 1조 김두환 김수철 가민경 김정원.
Mobile braille system for the blind
USN(Ubiquitous Sensor Network)
Chapter 03. 관계 데이터베이스 설계.
04. DBMS 개요 명지대학교 ICT 융합대학 김정호.
BIC 사례 1 연관규칙과 분류모형을 결합한 상품 추천 시스템: G 인터넷 쇼핑몰 사례
기상 레이더 정보를 이용한 획기적인 LID시설 제어 방법 GIST대학 물리학부 정희원 GIST대학 기초교육학부 박연준, 기태윤
기말 프로젝트 계획 MVC 패턴 기반 웹 애플리케이션 개발 프로젝트명 : 팀명 : 팀원 :
단계1 단계2 단계3 단계4 단계5 단계별 제목 상세내용1 상세내용
계산기.
컴퓨터 소프트웨어 설계 및 실험 년 1학기 실험계획 -.
Fucntion 요약.
CHAP 21. 전화, SMS, 주소록.
Java , 안드로이드를 이용한 ‘사천성’ Game
경영정보시스템(MIS) management information system.
컴퓨터 소프트웨어 설계 및 실험 년 1학기 실험계획 -.
기능점수 소개 및 측정절차 한국소프트웨어진흥원 소프트웨어공학센터 SW기술적용팀
멀티미디어시스템 제 5 장. 멀티미디어 데이터베이스 개념 IT응용시스템공학과 김 형 진 교수.
ER-관계 사상에 의한 관계데이터베이스 설계 충북대학교 구조시스템공학과 시스템공학연구실
제 4 장 Record.
KSP 메신저 김광민 서정건 박윤옥.
 6장. SQL 쿼리.
임시테이블과 테이블변수 SQLWorld Study Group - 최명환 -.
주)INVENTORNICS 노창배 소프트웨어 김 경 순
소프트웨어 설계 및 실습 강기준.
Presentation transcript:

역공학 기반 코드 가시화를 통한 기능점수의 비용 추정 검증 방안 홍익대학교 소프트웨어공학연구실 문소영, 김영철 KCSE 2018, (2018.01.31) 평창 역공학 기반 코드 가시화를 통한 기능점수의 비용 추정 검증 방안 홍익대학교 소프트웨어공학연구실 문소영, 김영철

Contents 1. 연구 배경 및 방법 2. 역공학 기반 기능 점수 검증 3. 적용 사례 4. 결론 및 향후 연구

연구 배경 (1/4) 발 주 자 제안요청서(RFP, request for proposal) 소프트웨어 발주 전문성 부족의 문제 예산수립/ 심의단계 발주 준비 선정/계약 사업수행 종료 및 인수 유지관리 발 주 자 제안요청서(RFP, request for proposal) 소프트웨어 발주 전문성 부족의 문제 개발 중 빈번한 과업변경에 따른 개발기간 지연 소프트웨어 품질 저하와 참여기업의 개발 기간, 비용에 적신호 소프트웨어 개발자의 개발환경 악화

연구 배경 (2/4)

연구 배경 (3/4)

연구 배경 (4/4) 소프트웨어 규모 산정의 문제점 발주자 및 수주자 등 복잡한 기능점수 산정절차와 방법 적용 어려움 산출된 예산과 개발업무량(기능점수)간 상관성이 낮음 정보화사업 품질저하 및 SW산업경쟁력 낙후 기존의 다른 연구들… 해외 → 프로젝트 개발 비용 추정을 위해 기능점수 방법을 적용하고 문제점 보완을 하는 연구 [Low, Kemerer] 국내 → 기능점수에 따른 개발 비용 예측 [박찬규] 보다 더 정확한 비용 추정을 위해 도배지 가장 최신의 실제 운영되는 소스코드를 대상으로 기능점수 계산 및 비용 추정 필요

코드 가시화 (1/2) Reverse Engineering Forward Engineering 기존 개발자 부재 시, Refactoring 용이 코드 복잡도 가시화 용이 (Coupling & Cohesion) 재사용 모듈 단위 별 추출 설계 추출 아키텍처 추출 성능 추출 개발 시, 코드 리뷰 가능 각각의 개발자 당, 코드 진척율 파악 가능 미리 Test Driver/Stub 설계 가능

코드 가시화 (2/2) JDT Parser o 가시화 지표 가시화할 목적/목표가 설정되었다면, 이를 달성하기 위한 개발공정이 필요하고, 각 공정상에서 가시화목표에 부합되는 산출물(Work Product)에 대한 목표값을 정할 수 있으며, 이들 대다수는 기존에 SW공학에서 이야기 하는 품질지표를 활용할 수 있다 특히, SW가시화기술은 SW공학의 기본 목표인 SW개발프로젝트에서 일어날 수 있는 “SW의 위기상황”을 방지 혹은 해결하고자하는 기술적 패러다임이므로, 최소한 SW프로젝트의 성공요소인 “비용”, “범위/일정”, “품질”요소에 대한 가시화지표를 설정하는 것이 바람직하다.

기능점수 측정 절차 측정유형 결정 데이터 기능 측정 UFP 결정 AFP 계산 측정시스템 범위와 경계 결정 트랜잭션 기능 측정 개발 프로젝트 개선 프로젝트 어플리케이션 내부 논리 파일 (ILF: Internal Logical File) 외부 인터페이스 파일 (EIF: External Interface File) • UFP 미조정 기능 점수 (Unadjusted Function Point count) : 조정할 기능 점수 = 데이터 기능 + 트랜잭션 기능 • AFP 조정 기능 점수 (Adjusted Function Point count) = UFP * VAF <측정 방법> ILF측정규칙, EIF측정규칙에 따라 식별하여 DET/RET를 DET측정규칙, RET측정규칙으로 위의 복잡도 행렬에 대입하여 복잡도와 기여도를 측정 ( 표 ①을 사용 ) <측정 방법> 데이터 기능과 트랜잭션 기능을 측정하여 ILF, EIF, EI, EO, EQ별로 표 ③을 사용하여 미조정 기능점수를 측정 = 데이터기능 + 트랜잭션 기능 14개 일반적 시스템 특성 항목(GSC) GSC 영향도 (0~5) 1. Data Communication 2. Distributed Data Processing 3. Performance 4. Heavily Used Configuration 0 : 전혀 무영향 5. Transaction Rate 1 : 우연한 경우 6. Online Data Entry 2 : 조금 영향 7. End-User Efficiency 3 : 평균 8. Online Update 4 : 상당한 영향 9. Complex Processing 5 : 강한 영향 10. Reusability 11. Installation Ease 12. Operational Ease 13. Multiple Sites 14. Facilitate Change 측정시스템 범위와 경계 결정 트랜잭션 기능 측정 VAF 결정 • 측정범위에 포함될 요소 (서브시스템) 식별 • 측정대상 어플리케이션과 외부 사용자간의 경계 외부입력(EI: External Input) 외부출력(EO: External Output) 외부조회(EQ: External Inquiry) • VAF(Value Adjustment Factor) : 14개의 일반시스템 특성의 영향 (0~5)를 감안하여 만들어지는 조정인자 <측정 방법> EI, EO, EQ 측정규칙에 따라 식별하여 DET/FTR을 DET, FTR측정규칙을 적용하여 복잡도 행렬에 대입하여 복잡도와 기여도를 측정 (표 ②를 사용 ) <측정 방법> :14개 일반 시스템 특성을 기초로 산출 영향도(DI: Degree of Influence) 평가 :14개 항목에 대해 해당 시스템의 영향도 점수를 부여 총 영향도(TDI: Total DI) : 14개 영향도 항목을 모두 합산한 갓 VAF 산출: VAF = (총 영향도(TDI) * 0.01 ) + 0.65

기능점수 계산 구성 요소 ① ② ③ 기능점수 계산 구성 요소 외부 사용자 내부 논리 파일 어플리케이션 경계 다른 어플리케이션들 <기능 복잡도와 함께 미조정 기능 점수 값에 대한 기여도 결정을 위한 요소> • DET(Data Element Type) • RET(Record Element Type) • FTR(File Type Reference) ① 외부 입력 외부 출력 외부 조회 ② 내부 논리 파일 외부 인터페이스 파일 외부입력 ③ 외부출력 어플리케이션 경계 다른 어플리케이션들 • ILF: 어플리케이션 경계 내에서 저장 / 유지 보수되는 데이터 파일 • EIF: 어플리케이션 경계 외부로부터 참조되는 데이터 파일 • EI: 사용자로부터 입력, 수정, 데이터 파일에 저장, 수정 기능 • EO: 사용자가 해당 시스템 ILF로부터 데이터를 읽어 어플리케이션 경계 밖으로 보내는 기능 • EQ: ILF/EIF로부터 데이터를 조회하여 사용자에게 표현되는 정보 내에서 데이터를 조회하는 기능

역공학 기반 기능점수 추출 방법 코드로부터 기능점수 추출 절차 고객의 요구사항에 대한 기능 정의 분류가 되어 있어야 함. 코딩 규칙 적용 메서드 명명 규칙: EI_메서드명, EQ_메서드명, EO_메서드명, … 쿼리문은 메서드 내에 query라는 변수명으로 작성 (예: String query=“insert into customer values(?,?,?,?)”; 툴체인을 통해 코드 가시화 코드에 대한 데이터 축적 데이터 기능(내부 논리 파일, 외부 연계 파일), 트랜잭션 기능 검색 기능 복잡도 계산

역공학 기반 기능점수 추출 방법 1) 요구사항에 대한 기능 정의 No 업무 기능명 기능유형 기능1 로그인 외부조회 기능2 고객관리 고객등록 외부입력 기능3 고객수정 기능4 고객조회 기능5 고객삭제 고객테이블 내부논리파일 기능6 판매관리 판매등록 기능7 판매수정 기능8 판매조회 기능9 판매삭제 기능10 판매관리엑셀저장 외부출력 판매테이블 기능11 입고관리 입고등록 기능12 입고수정 기능13 입고조회 기능14 입고삭제 기능15 입고관리엑셀저장 입고테이블 기능16 수입/지출관리 수입지출조회 기능17 수입지출엑셀저장

역공학 기반 기능점수 추출 방법 2) 코딩 규칙

역공학 기반 기능점수 추출 방법 3) 툴체인을 통한 가시화

역공학 기반 기능점수 추출 방법 3) 툴체인을 통한 가시화 - 데이터베이스화

4) ILF(내부 논리 파일), EIF(외부 연계 파일) 검색 역공학 기반 기능점수 추출 방법 4) ILF(내부 논리 파일), EIF(외부 연계 파일) 검색 업무 기능명 쿼리문 고객관리 customer 고객등록 String query = "insert into customer values(?,?,?,?)"; 고객수정 String query = "update customer set carnum=?, carcat=? where customer_name=? and phonenum=?"; 고객조회 String query = "select CUSTOMER_NAME, PHONENUM, carnum, carcat from customer where customer_name LIKE ? AND phonenum LIKE ?"; 고객삭제 select CUSTOMER_NAME, PHONENUM, carnum, carcat from customer where customer_name LIKE ? AND phonenum LIKE ? 판매관리 sale 판매등록 String query = "insert into sale values(?,?,?,?,?,?,?,?,?,?)"; 판매수정 String query = "update sale set SALE_DATE=?, SALE_DETAIL=?, SALE_MODEL=?, CAR_PART=?, PRICE=?, PAYMENT=?, SALESPERSON=? " + "where CUSTOMER_NAME=? AND CUSTOMER_PHONENUM=? AND SALE_NAME=?"; 판매조회 String query = "select CUSTOMER_NAME, CUSTOMER_PHONENUM, SALE_DATE, SALE_NAME, SALE_DETAIL, SALE_MODEL, CAR_PART, PRICE, PAYMENT, SALESPERSON " + "from sale " + "where SALE_DATE between TO_DATE(?,'MM dd,yyyy HH24:MI') " + "and TO_DATE(?,'MM dd,yyyy HH24:MI')"; 판매삭제 String query = "delete from sale where CUSTOMER_NAME=? AND CUSTOMER_PHONENUM=? AND SALE_NAME=?"; 입고관리 stock_goods2 입고등록 String query = "insert into stock_goods2 values(GOODS_ID_SEQ.NEXTVAL,?,?,?,?,?,?,?,?,?)"; 입고수정 String query = "update stock_goods2 set GOODS_SPEC=?, GOODS_AMOUNT=?, GOODS_UNIT=?, UNIT_PRICE=?, TOTAL_PRICE=?, STOCK_DATE=?, NOTE=?, SALE_PRICE=?, GOODS_NAME=? " + "where GOODS_ID = ?"; 입고조회 String query = "select GOODS_ID, GOODS_NAME, GOODS_SPEC, GOODS_AMOUNT, GOODS_UNIT, UNIT_PRICE, TOTAL_PRICE, STOCK_DATE, NOTE, SALE_PRICE " + "from stock_goods2 " + "where STOCK_DATE between TO_DATE(?,'MM dd,yyyy HH24:MI') and TO_DATE(?,'MM dd,yyyy HH24:MI')"; 입고삭제 String query = "delete from stock_goods2 where GOODS_ID = ?"; 수입/지출관리 Sale 수입지출조회 String querySell = "select SALE_DATE, PRICE " + "where SALE_DATE between TO_DATE(?,'MM dd,yyyy HH24:MI') and TO_DATE(?,'MM dd,yyyy HH24:MI')"; String queryWear = "select STOCK_DATE, TOTAL_PRICE " 고객테이블 내부논리파일 1 4 낮음 7 판매테이블 8 입고테이블 9

역공학 기반 기능점수 추출 방법 4) 트랜잭션 기능 검색 EI (외부입력) DET: 4 DET: 3 (2 + 1)

적용사례 S썬팅샵 물품관리 프로그램 개발 언어: JAVA DB 연동: Oracle 유형: 업무처리용

코드 가시화를 통한 기능점수의 비용 추정 EI_customerMod EI_customerReg EI_SellDel +EI_customerReg(String, String, String, String): boolean +EI_customerDelete(String, String, String, String): boolean +EQ_customerSearch(String, String): ArrayList<HashMap<String, String>> +EQ_customerSellSearch(String, String): ArrayList<HashMap<String, String>> +EQ_login(String, String): HashMap<String, String> +EI_CustomerMod(String, String, String, String): void +EI_sellReg(String, Date, String, String, String, String, String, int, String, String): void +EI_sellMod(String, Date, String, String, String, String, String, int, String, String): void +EI_sellDel(String, String, String): void +EQ_sellSearch(Date. Date): ArrayList<HashMap<String, String>> +EI_wearReg(String, String, in, String, int, Date, int String): void +EI_wearMod(int, String, String, int, String, int, Date, int, String): void +EI_wearDel(int): void +EQ_wearSearch(Date, Date): ArrayList<HashMap<String, String>> +EQ_sellWearSearch(Date, Date): HashMap<String, Integer> +EO_exportExcelWear(TableModel, String): void +EO_exportExcelSell (TableModel, String): void +EO_exportExcelEarnSpend(TableModel, String): void -connectDB(): Boolean +setLoadingDialog(): void +loadDialogshow(): void +loadDialogDissmiss(): void No Function Name 기능유형 참조파일유형 데이터요소 유형 기능 복잡도 기능 점수 기능1 EI_customerMod 외부입력 1 4 낮음 3 기능2 EI_customerReg 7 기능3 EI_SellDel 6 기능4 EI_sellMod 10 기능5 EI_SellReg 기능6 EI_wearMod 13 기능7 EI_wearReg 기능8 EO_earnSpend 외부출력 2 보통 기능9 EO_exportExcelEarnSpend 11 기능10 EO_exportExcelSell 12 기능11 EO_exportExcelWear 기능12 EQ_customerDelete 기능13 EQ_customerSearch 외부조회 9 기능14 EQ_login 기능15 EQ_SellSearch 기능16 EQ_wearDel 기능17 EQ_wearSearch 단계 단계별 단가 총 기능점수 보정계수 개발원가 언어 어플리케이션유형 규모 품질 및 특성 분석 98,648 77 1.2000 1.00 0.6500 1.0000 5,924,798 설계 124,609 7,484,016 구현 166,145 9,978,668 시험 129,801 7,795,848 합계 519,203 31,183,330   보정계수결정 구분 적용기준 규모 보정계수 0.108 * log e(기능점수) + 0.2229 0.65 유형 보정계수 업무처리용 소프트웨어 언어 보정계수 JAVA 1.20 품질 및 특성 보정계수 0.025 * 총영향도(0) + 1

결론 및 향후 연구 결론 소프트웨어 개발 프로젝트에 대한 비용 추정은 프로젝트를 성공적으로 수행할 수 있도록 하는데 중요한 요소 역공학 기반 소스코드 가시화를 통해 소스코드에서 기능 유형을 찾아내어 각 기능에 대한 기능점수를 측정하여 데이터 기능과 트랜잭션 기능에 대한 총 기능점수를 산출 본 논문에서 제안한 방법으로 검증을 하고 이 데이터를 축적하여 다른 프로젝트 발주에도 활용을 한다면 프로젝트 규모 산정에 큰 도움을 줄 것 향 후 연 구 실제 프로젝트에 적용하여 비교 및 검증 시도 데이터 축적 통해 조직의 프로젝트 성과와 프로세스 개선

경청해 주셔서 감사합니다.