글의 동기는 소스 코드의 중간 표현을 피하고, 소스 코드를 이미지로 표현하고, 코드의 의미 정보를 직접 추출하여 결함 예측 성능을 향상시키는 것입니다.
먼저 아래 동기 예시를 보세요. File1.java와 File2.java의 두 예제에는 모두 if 문 1개, for 문 2개, 함수 호출 4개가 포함되어 있지만 코드의 의미와 구조적 특성은 다릅니다. 소스 코드를 이미지로 변환하면 서로 다른 코드를 구별하는 데 도움이 되는지 확인하기 위해 저자는 실험을 수행했습니다. 소스 코드를 문자의 ASCII 십진수에 따라 픽셀로 매핑하고 이를 픽셀 매트릭스로 배열한 후 이미지를 얻습니다. 소스 코드. 저자는 서로 다른 소스 코드 이미지 간에 차이가 있음을 지적합니다.
그림 1 동기 부여 예
이 기사의 주요 기여는 다음과 같습니다.
코드를 이미지로 변환하고 그로부터 의미 및 구조적 정보를 추출합니다. Self-Attention 메커니즘과 마이그레이션 학습을 결합하여 결함 예측을 구현합니다.
기사에서 제안한 모델 프레임워크는 그림 2에 나와 있으며 소스 코드 시각화와 심층 전이 학습 모델링의 두 단계로 구분됩니다.
Fig.2 Framework
1. 소스코드 시각화
그림 3 소스 코드 시각화 프로세스
그림 4 기사 각주 2
2. 이 기사에서는 DAN 네트워크를 사용하여 소스 코드의 의미 및 구조 정보를 캡처합니다. 중요한 정보를 표현하는 모델의 능력을 향상시키기 위해 저자는 원래 DAN 구조에 Attention 레이어를 추가했습니다. 교육 및 테스트 프로세스는 그림 5에 표시되어 있으며, 여기에서 conv1-conv5는 AlexNet에서 제공되고 4개의 완전히 연결된 레이어 fc6-fc9가 분류자로 사용됩니다. 저자는 새로운 프로젝트의 경우 딥러닝 모델을 훈련하려면 레이블이 지정된 데이터가 많이 필요하기 때문에 어렵다고 언급했습니다. 따라서 저자는 먼저 ImageNet 2012에서 사전 훈련된 모델을 훈련시킨 후, 사전 훈련된 모델의 매개변수를 초기 매개변수로 사용하여 모든 컨볼루셔널 레이어를 미세 조정함으로써 ImageNet 2012에서 코드 이미지와 이미지 간의 차이를 줄였습니다.
그림 5 훈련 및 테스트 과정3. 모델 훈련 및 예측
소스 프로젝트의 레이블이 지정된 코드와 대상 프로젝트의 레이블이 없는 코드에 대한 코드 이미지를 생성하여 모델로 보냅니다. 동시에 그들은 각각의 특징을 추출하기 위해 Convolutional 레이어와 Attention 레이어를 공유합니다. 완전 연결 계층에서 소스와 대상 간의 MK-MDD(Multi Kernel Variant Maximum Mean Discrepancy)를 계산합니다. Target에는 레이블이 없으므로 교차 엔트로피는 Source에 대해서만 계산됩니다. 모델은 미니 배치 확률적 경사하강법을 사용하여 손실 함수를 따라 학습됩니다. 500개 epoch의 각
쌍에 대해 최상의 F 측정값을 기반으로 epoch를 선택합니다. 실험 부분에서는 저자가 PROMISE 데이터 웨어하우스에 있는 모든 오픈 소스 Java 프로젝트를 선택하고 해당 프로젝트의 버전 번호, 클래스 이름, 버그 태그 유무를 수집했습니다. 버전 번호와 클래스 이름을 기반으로 github에서 소스 코드를 다운로드합니다. 마지막으로 10개의 Java 프로젝트에서 데이터가 수집되었습니다. 데이터 세트 구조는 그림 6에 나와 있습니다. 그림 6 데이터 세트 구조프로젝트 내 결함 예측을 위해 기사에서는 비교를 위해 다음 기준 모델을 선택합니다.
교차 프로젝트 결함 예측을 위해 이 기사에서는 비교를 위해 다음 기준 모델을 선택합니다.
요약하자면, 2년 전의 논문이었지만 이 아이디어는 여전히 상대적으로 참신하며 다음과 같은 일련의 코드 중간 표현을 피합니다. AST로 코드를 이미지로 직접 변환하여 기능을 추출합니다. 하지만 여전히 혼란스럽습니다. 코드에서 변환된 이미지에 실제로 소스 코드의 의미 및 구조 정보가 포함되어 있습니까? 별로 설명하기 어려운 것 같아요, 하하. 나중에 몇 가지 실험적 분석을 수행해야 합니다.
위 내용은 소프트웨어 결함 예측에 소프트웨어 시각화 및 전이 학습 사용의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!