Trong luận văn sẽ phân tích kết quả của các công cụ đưa ra trên một số tiêu chí và từ đó đưa ra đánh giá công cụ nào hiện nay đáp ứng tốt nhất để có thể giải quyết được các vấn đề nêu tr
Trang 1HỌC VIỆN CÔNG NGHỆ BƯU CHÍNH VIỄN THÔNG
BÁO CÁO THỰC TẬP TỐT NGHIỆP ĐẠI HỌC
Đề tài:
NGHIÊN CỨU VÀ ĐÁNH GIÁ CÁC CÔNG CỤ PHÂN TÍCH BẢO MẬT PHẦN MỀM
TP.HCM, THÁNG 08 /2022
Trang 2Lời đầu tiên, em xin gửi lời tri ân sâu sắc đến các thầy cô Học Viện Công NghệBưu Chính Viễn thông cơ sở tại TP.HCM đã tận tình dẫn dắt và truyền đạt cho em rấtnhiều kiến thức quý báu trong các học kỳ vừa qua.
Đặc biệt, em xin gửi lời cảm ơn chân thành đến TS Huỳnh Trọng Thưa Thầy đãhướng dẫn tận tình, truyền đạt kiến thức, chỉ bảo cho em trong suốt thời gian học tập
và thực hiện đề tài Kính chúc thầy và gia đình nhiều sức khoẻ và thành công trongcuộc sống
Và xin chân thành cảm ơn tất cả các bạn đã luôn sát cánh, giúp đỡ, động viênmình trong những thời điểm khó khăn, tiếp thêm động lực và ý chí giúp vượt qua khókhăn trong suốt quá trình học tập tại trường
Tuy nhiên, vì thời gian và kiến thức chuyên môn còn hạn chế cùng nhiều yếu tốkhách quan khác nên trong quá trình thực hiện đề tài không tránh khỏi những sai sót.Kính mong được lời nhận xét và góp ý của thầy cô và các bạn để em có thể hoàn thiệnbản thân mình hơn
Một lần nữa, em xin chân thành cảm ơn !
TP.Hồ Chí Minh, 07 tháng 07 năm 2022
Sinh viên
Lê Văn Bắc
Trang 3LỜI CÁM ƠN i
MỤC LỤC ii
DANH MỤC HÌNH ẢNH iv
DANH MỤC CÁC TỪ VIẾT TẮT v
MỞ ĐẦU 1
PHẦN I: GIỚI THIỆU ĐỀ TÀI 2
1 Giới thiệu đề tài 2
2 Các công cụ được sử dụng trong nghiên cứu 2
3 Đánh giá hiệu suất 3
PHẦN II: NỘI DUNG THỰC TẬP 4
CHƯƠNG 1: LÝ THUYẾT 4
I DEEPSOURCE 4
1.1 Tìm hiểu công cụ DeepSource 4
1.2 Lịch sử hình thành công cụ DeepSource 4
1.3 Các tính năng và hạn chế công cụ DeepSource 5
II SONARQUBE 6
2.1 Tìm hiểu công cụ SonarQube 6
2.2 Lịch sử hình thành công cụ SonarQube 7
2.3 Các tính năng của công cụ SonarQube 8
III CODACY 9
3.1 Tìm hiểu về công cụ Codacy 9
3.2 Các tính năng của công cụ Codacy 10
IV EMBOLD 11
4.1 Tìm hiểu về công cụ Embold 11
4.2 Các tính năng của Embold 12
Trang 42.1 Phương pháp nghiên cứu 15
2.1.1 Chiến lược nghiên cứu 15
2.1.2 Phương pháp tạo dữ liệu 15
2.1.3 Phân tích dữ liệu 16
2.2 Tiến hành thử nghiệm 16
2.2.1 Quá trình chạy công cụ 16
2.2.1.1 Công cụ SonarQube 16
2.2.1.2 Công cụ DeepSource 17
2.2.1.3 Công cụ Codacy 18
2.2.2 Viết công cụ phân tích dữ liệu đối với công cụ có sử dụng Juliet-TestSuite 19
CHƯƠNG 3: KẾT QUẢ VÀ ĐÁNH GIÁ 20
3.1 Kết quả 20
3.1.1 Công cụ DeepSource 20
3.1.2 Công cụ Codacy 22
3.1.3 Công cụ Embold 24
3.1.4 Công cụ SonarQube 27
3.2 Đánh giá 31
CHƯƠNG 4: KẾT LUẬN 35
TÀI LIỆU THAM KHẢO 36
Trang 5Hình 1 1: Công cụ DeepSource 4
Hình 1 2 Công cụ SonarQube 6
Hình 1 3 Thành phần SonarQube 6
Hình 1 4 Công cụ Codacy 10
Hình 1 5 Công cụ Embold 11
Hình 1 6 Cách hoạt động của Embold 12
Hình 2 1 Giao diện SonarQube 17
Hình 2 2 Giao diện DeepSource 17
Hình 2 3 Giao diện Codacy 18
Hình 3 1 Giao diện phân tích DeepSource 20
Hình 3 2 Giao diện tổng quan lỗi 20
Hình 3 3 Rủi ro trong ngôn ngữ Java trong DeepSource 21
Hình 3 4 Giao diện lỗi cụ thể trong DeepSource 21
Hình 3 5 Giao diện phân tích Codacy 22
Hình 3 6 Giao diện Issues trong Codacy 22
Hình 3 7 Issues trong ngôn ngữ Java 23
Hình 3 8 Lỗi hàm trong java 23
Hình 3 9 Giao diện bảo mật trong Codacy 24
Hình 3 10 Giao diện phân tích Embold 24
Hình 3 11 Giao diện Issues Embold 25
Hình 3 12 Giao diện chi tiết vấn đề 25
Hình 3 13 Tổng mã lỗi trong hàm 26
Hình 3 14 sự phụ thuộc các lớp 26
Hình 3 15 Phân vùng trong dự án 27
Hình 3 16 Giao diện phân tích SonarQube 27
Hình 3 17 Giao diện phân tích tổng quát 28
Hình 3 18 Phát hiện bugs 29
Hình 3 19 Tự thiết lặp luật 29
Hình 3 20 Bảo mật 30
Hình 3 21 Khai thác đường dẫn thực thi 30
Hình 3 22 Độ phủ sóng 31
Hình 3 23 Biểu đồ so sánh hiệu suất 32
Hình 3 24 Số liệu phân tích 32
Hình 3 25 FIle trong Embold 33
Hình 3 26 File trong Codacy 33
Trang 6Từ viết tắt Viết đầy đủ Giải thích nghĩa
Interface
Giao diện lập trình ứng dụng
Enumeration
Liệt kê điểm yếu chung
Enviroment
Môi trường phát triển tích hợp
Trang 7MỞ ĐẦU
Hiện nay, chất lượng sản phẩm công nghệ ngày càng được yêu cầu cao cả đối vớinhà phát triển và người sử dụng Đối với người sử dụng họ muốn một sản phẩm trơn truhạn chế lỗi hết mức có thể và đặc biệt phải thật sự bảo mật để đảm bảo an toàn thông tincủa người sử dụng
Còn đối với nhà phát triển, họ quan tâm đến sản phẩm của mình làm ra đã thực sựtốt chưa, đã kiểm soát được các vấn đề phát sinh như bảo mật, hiệu suất,… Bên cạnh đó
là sản phẩm đó có dễ dàng bảo trì và phát triển thêm module có dễ dàng không? Để cóthể trả lời cho các vấn đề trên thì nhà phát triển đã đưa vào phân tích mã nguồn tĩnhtrong từng giai đoạn để có thể nắm được các phát sinh Vậy họ phân tích mã nguồn tĩnhnhư nào để biết rằng trong các mã nguồn của mình có các sơ hở về bảo mật, mã nguồncủa mình đã đảm bảo tăng hiệu suất xử lý chưa, mã nguồn đã đạt các chuẩn theo quy ước
để dễ dàng bảo trì cho sau này chưa? Hiện nay có rất nhiều công cụ hỗ trợ phân tích mãnguồn tĩnh để giúp các nhà phát triển có câu trả lời cho những vấn đề trên Trong phạm
vi nghiên cứu luận văn có đề cập đến một số công cụ phổ biến sau: SonarQube,DeepSource, Embold, Codacy Trong luận văn sẽ phân tích kết quả của các công cụ đưa
ra trên một số tiêu chí và từ đó đưa ra đánh giá công cụ nào hiện nay đáp ứng tốt nhất để
có thể giải quyết được các vấn đề nêu trên của nhà phát triển Khi sử dụng các công cụđộc lập thì sẽ đưa ra kết quả như nào và khi kết hợp các công cụ lại thì chất lượng kiểmtra sẽ có cải thiện nhiều hơn không? Trong phạm vi nghiên cứu các câu hỏi trên sẽ đượctrả lời và sẽ đưa ra những gợi ý cho những người phát triển khi xây dựng một phần mềm.Trong nghiên cứu 4 công cụ sau được lựa chọn: SonarQube, DeepSource, Codacy,Embold là các công cụ mã nguồn mở dùng để phân tích mã nguồn tĩnh – Tức là phântích mã nguồn đang ở trạng thái không hoạt động để từ đó đưa ra các lỗi để khắc phụctrước khi đưa ứng dụng vào chạy thực tế Các công cụ này ngoài việc sử dụng các chứcnăng được cung cấp người dùng có thể tích hợp các plugin do chính mình phát triển đểcải thiện hiệu suất phát hiện lỗi và phù hợp với từng dự án thực tế Các công cụ trên đềuđang được sử dụng bởi các doanh nghiệp hoặc là những công cụ đã đã có những thànhtích nhất định trong sự phát triển phần mềm của các doanh nghiệp từ các năm trước đây.Sau đây luận văn sẽ giới thiệu và đi vào chi tiết từng công cụ
Trang 8PHẦN I: GIỚI THIỆU ĐỀ TÀI
1 Giới thiệu đề tài
Hiện nay, chất lượng sản phẩm công nghệ ngày càng được yêu cầu cao
cả đối với nhà phát triển và người sử dụng Đối với người sử dụng họ muốnmột sản phẩm trơn tru hạn chế lỗi hết mức có thể và đặc biệt phải thật sựbảo mật để đảm bảo an toàn thông tin của người sử dụng
Còn đối với nhà phát triển, họ quan tâm đến sản phẩm của mìnhlàm ra đã thực sự tốt chưa, đã kiểm soát được các vấn đề phát sinh nhưbảo mật, hiệu suất,… Bên cạnh đó là sản phẩm đó có dễ dàng bảo trì vàphát triển thêm module có dễ dàng không? Để có thể trả lời cho các vấn
đề trên thì nhà phát triển đã đưa vào phân tích mã nguồn tĩnh trong từnggiai đoạn để có thể nắm được các phát sinh Vậy họ phân tích mã nguồntĩnh như nào để biết rằng trong các mã nguồn của mình có các sơ hở vềbảo mật, mã nguồn của mình đã đảm bảo tăng hiệu suất xử lý chưa, mãnguồn đã đạt các chuẩn theo quy ước để dễ dàng bảo trì cho sau nàychưa? Hiện nay có rất nhiều công cụ hỗ trợ phân tích mã nguồn tĩnh đểgiúp các nhà phát triển có câu trả lời cho những vấn đề trên Trong phạm
vi nghiên cứu luận văn có đề cập đến một số công cụ phổ biến sau:SonarQube, DeepSource, Codacy, Embold Trong luận văn sẽ phân tích kếtquả của các công cụ đưa ra trên một số tiêu chí và từ đó đưa ra đánh giácông cụ nào hiện nay đáp ứng tốt nhất để có thể giải quyết được các vấn
đề nêu trên của nhà phát triển Khi sử dụng các công cụ độc lập thì sẽ đưa
ra kết quả như nào và khi kết hợp các công cụ lại thì chất lượng kiểm tra
sẽ có cải thiện nhiều hơn không? Trong phạm vi nghiên cứu các câu hỏitrên sẽ được trả lời và sẽ đưa ra những gợi ý cho những người phát triểnkhi xây dựng một phần mềm
2 Các công cụ được sử dụng trong nghiên cứu
Trong nghiên cứu 4 công cụ sau được lựa chọn: SonarQube, DeepSource, Codacy,Embold là các công cụ mã nguồn mở dùng để phân tích mã nguồn tĩnh – Tức là phân tích mãnguồn đang ở trạng thái không hoạt động để từ đó đưa ra các lỗi để khắc phục trước khi đưa
Trang 9ứng dụng vào chạy thực tế Các công cụ này ngoài việc sử dụng các chức năng được cung cấpngười dùng có thể tích hợp các plugin do chính mình phát triển để cải thiện hiệu suất pháthiện lỗi và phù hợp với từng dự án thực tế Các công cụ trên đều đang được sử dụng bởi cácdoanh nghiệp hoặc là những công cụ đã đã có những thành tích nhất định trong sự phát triểnphần mềm của các doanh nghiệp từ các năm trước đây Sau đây luận văn sẽ giới thiệu và đivào chi tiết từng công cụ
3 Đánh giá hiệu suất
Trong phạm vi nghiên cứu luận văn học viên thực hiện nghiên cứu với các chỉ số đo hiệusuất vì đây là các chỉ số thường được sử dụng trong nghiên cứu trước đây Các chỉ số đượcđịnh nghĩa như sau [3]:
TP (True Positive): Chỉ sổ này để thể hiện phát hiện chính xác lỗi trong mã nguồn Mã
chứa lỗi được phát hiện và được đưa ra báo cáo chính xác
TN (True Negative): Chỉ số này để thể hiện phát hiện đúng không có lỗi trong mã
nguồn Không có bất kỳ một lỗi nào tồn tại trong mã nguồn và không lỗi nào được báo cáo
FN (False Negative): Chỉ số thể hiện có lỗi trong mã nguồn nhưng mã chứa lỗi không
được tìm ra và không được đưa vào báo cáo
FP (False Positive): Chỉ số thể hiện phát hiện lỗi trong mã nguồn không chính xác.
Không có lỗi nào tồn tại trong mã, nhưng lỗi được báo cáo
Recall (Độ bao phủ): Chỉ số thể hiện phần trăm lỗi được phát hiện trong tổng số các mã
lỗi được báo cáo Công thức tính: Recall = TP / (TP + FN)
Precision (Độ chính xác): Chỉ số thể hiện phần trăm mã lỗi được phát hiện đúng là có lỗi
thực sự Tức là không phải trường hợp mã nguồn tìm ra là lỗi nhưng thực tế mã nguồn không
có lỗi Công thức tính:
Precision = TP / (TP + FP)
Discrimination: Chỉ sổ thể hiện số lượng tệp chứa mã nguồn lỗi tìm đúng mã lỗi (TP)
không tồn tại bất kỳ một mã nguồn nào bị báo cáo sai lỗi (FP)
Discrimination Rate: Chỉ số thể hiện tỷ lệ phần trăm các trường hợp thử nghiệm mà một
công cụ phân tích phân biệt Công cụ phân tích phân biệt một lỗi trong mã nguồn nếu chỉ báocáo một kết quả tích cực thực sự về nó (TP) - kết quả đó chính là Discrimination, nhưngkhông có kết quả phát hiện lỗ hổng không chính xác (FP) trong cùng một tệp mã nguồn đó.Được tính bằng công thức:
Discrimination Rate = Discrimination / (TP + FN)
Trang 10PHẦN II: NỘI DUNG THỰC TẬP CHƯƠNG 1: LÝ THUYẾT
I DEEPSOURCE
1.1 Tìm hiểu công cụ DeepSource
DeepSource là một công cụ phân tích tĩnh nhằm tìm kiếm các lỗi chống, rủi ro lỗi,các vấn đề về hiệu suất và các vấn đề đặt ra Ngoài việc phát hiện các vấn đề, DeepSource cònsản xuất và theo dõi các số liệu như số lượng người phụ thuộc, phạm vi tài liệu, v.v Tínhnăng DeepSource Autofix đề xuất các bản sửa lỗi và cho phép bạn tạo yêu cầu kéo cho các sự
cố thường xảy ra DeepSource có thể được tích hợp dễ dàng với các tài khoản Bitbucket,GitHub hoặc GitLab DeepSource cũng cung cấp các yêu cầu kéo tự động — mỗi khi một yêucầu kéo được thực hiện, trình phân tích sẽ quét các tệp đã thay đổi và gửi báo cáo về các vấn
đề mà nó xác định thẳng tới giao diện người dùng
Hình 1 1: Công cụ DeepSource
1.2 Lịch sử hình thành công cụ DeepSource
Sanket & Jai đã tham gia xây dựng hệ thống phần mềm và quản lý đội kỹ thuật hơn
6 năm nay Từ cuộc đấu tranh của riêng họ với mã hóa, DeepSource đã được phát minh.DeepSource giúp bạn tìm và khắc phục sự cố trong quá trình xem xét mã DeepSourcetìm thấy các vấn đề như rủi ro lỗi, chống mẫu, lỗ hổng bảo mật, vấn đề hiệu suất, vi phạmkiểu, lỗ hổng tài liệu và thiếu phạm vi kiểm tra trong mã nguồn
DeepSource đưa ra một số đề xuất rất độc đáo:
Trang 11 Dưới 5% dương tính giả: Tất cả các vấn đề được báo cáo bởiDeepSource đều được xác thực dựa trên ngữ cảnh của mã - loại bỏ xácthực sai với độ chính xác cao Ít sai lầm hơn, cùng với mức độ liênquan cao của các vấn đề, là một trong những mục tiêu sản phẩm chínhcủa họ.Giảm thời gian dành cho việc đánh giá mã thủ công:DeepSource cho phép tích hợp
liền mạch với quy trình công việc hiện có của bất kỳ nhóm nào như yêucầu kéo và tích hợp liên tục giúp các nhà phát triển giải quyết các vấn
đề và khắc phục chúng trước khi người đánh giá xem xét chúng
DeepSource Autofix: DeepSource Autofix đề xuất các bản sửa lỗi cho các vấn đề được phát hiện và tạo các yêu cầu kéo với các thay đổi được
đề xuất Điều này giúp người ta tránh được công việc khắc phục những vấn đề này theo cách thủ công
An toàn, theo thiết kế: DeepSource tuân theo một loạt các thực tiễn và chính sách toàn diện để đảm bảo các hệ thống được bảo mật
DeepSource hỗ trợ phân tích trên một số ngôn ngữ - Python, Go, Ruby,Java và JavaScript, tuy nhiên, họ đang bổ sung hỗ trợ cho nhiều ngôn ngữ lập trình hơn trong các quý sắp tới Họ cũng đang bổ sung tích hợpvới các nhà cung cấp dịch vụ lưu trữ mã nguồn như Azure DevOps, Google Cloud Source Repositories, AWS CodeCommit, v.v
1.3 Các tính năng và hạn chế công cụ DeepSource
Tính năng:
Số lượng vấn đề được phát hiện trên mỗi máy phân tích tương đối cao hơn so với các công cụ khác
Sự cố tự động sửa và mã tự động định dạng
Tích hợp và trải nghiệm nhà phát triển tốt hơn nhiều
Đảm bảo ít hơn 5% dương tính giả
Bỏ qua các vấn đề mà nhóm quyết định không sửa chữa
Hạn chế:
Không hỗ trợ ngôn ngữ PHP
Trang 12
II SONARQUBE
2.1 Tìm hiểu công cụ SonarQube
Sonarqube là một platform mã nguồn mở giúp chúng ta có thể kiểm tra chấtlượng code của dự án, được viết bằng java nhưng nó hổ trợ nhiều ngôn ngữ khác nhau:PHP, Ruby, Java (bao gồm cả Android), C#, JavaScript, TypeScript, C/C++, Kotlin,
Go, COBOL, PL/SQL, PL/I, ABAP, VB.NET, VB6, Python, RPG, Flex, Objective-C,Swift, CSS, HTML, và XML và hỗ trợ các database để lưu trữ kết quả: MySql,Postgresql
Trang 13 Một máy chủ SonarQube bắt đầu với 3 tiến trình chính:
Máy chủ web cung cấp giao diện người dùng sử dụng và quản lý các phiên bảnphân tích mã nguồn
Máy chủ tìm kiếm dựa trên Elasticsearch để sao lưu các tìm kiếm từ giao diện người dùng
Máy chủ phụ trách xử lý các báo cáo phân tích mã nguồn và lưu chúng vào cơ
sở dữ liệu của SonarQube
Một cơ sở dữ liệu để lưu trữ:
Cấu hình của SonarQube (bảo mật, cài đặt plugin, )
Ảnh chụp nhanh chất lượng của dự án, chế độ xem,
Nhiều plugin SonarQube được cài đặt trên máy chủ, có thể bao gồm ngôn ngữ, SCM, tích hợp xác thực và quản trị
Một hoặc nhiều SonarScanners chạy trên máy chủ tích hợp liên tục và xây dựng để phân tích dự án
2.2 Lịch sử hình thành công cụ SonarQube
Năm 2007, khi những dòng mã đầu tiên được tạo ra, những người sáng lậpSonarQube (ban đầu được gọi là Sonar) có ước mơ một ngày nào đó cung cấpcho mọi nhà phát triển khả năng đo lường chất lượng mã trong các dự án củamình Phương châm của họ: “Kiểm tra liên tục phải trở thành xu hướng chủđạo với tư cách là Tích hợp liên tục”
Để biến ước mơ này thành hiện thực, họ đã đầu tư toàn bộ thời gian và tâm sứcvào việc phát triển SonarQube như một sản phẩm mã nguồn mở, hợp tác chặtchẽ với cộng đồng Ngày nay SonarQube được sử dụng bởi hơn 100.000 tổchức, đổi lại họ cung cấp phản hồi và đóng góp thường xuyên
Tích hợp hoàn toàn với chuỗi công cụ DevOps mà nó đi kèm:
Tích hợp sẵn với hầu hết các công cụ xây dựng, cho phép trong hầu hếtcác trường hợp, cách tiếp cận không có cấu hình
tích hợp dễ dàng với các công cụ tích hợp liên tục như Jenkins, AzureDevOps, TeamCity, Bamboo,…
Hỗ trợ nhiều công cụ quản lý cấu hình nguồn như Git, Subversion,CVS, Mercurial,…
Trang 142.3 Các tính năng của công cụ SonarQube
Code review là một phần không thể thiếu trong quá trình phát triển phần mềm khilàm viêc với nhóm Tuy nhiên, không phải lúc nào người review của bạn cũng rảnh hoặckiên nhẫn đễ đọc từng dòng code, từng ký tự trong code của bạn, nhưng Sonarqube thì
có thể làm điều này, Sonarqube sẽ quét tất cả code có trong dự án của bạn và đánh giácode dựa theo các coding standard tương ứng của tất cả ngôn ngữ có trong dự án Ngoài
ra Sonarqube có thể làm nhiều hơn là code convention:
Phát hiện bug
Phát hiện code smell, duplicate
Tính toán độ bao phủ của Unit test (Unit-test coverage)
Tính toán technical debt
So sánh chất lượng code so với các lần kiểm tra trước
SonarQube (ít nhất là cho đến khi ưu đãi dựa trên Đám mây của nó trở nên hoànthiện) là một giải pháp tại chỗ, mang lại sức mạnh cho các công ty phân tích các dự áncủa họ, bất kể tổ chức của họ có thể là gì SonarSource đã phát triển các trình phân tích
mã độc quyền để mở rộng khả năng nền tảng của họ đáp ứng tốt hơn nhu cầu của kháchhàng: bảo mật, ngôn ngữ của nhà cung cấp, mô hình đo lường đủ điều kiện…
Điểm mạnh của SonarQube là hỗ trợ ngôn ngữ độc quyền, dẫn đầu thị trường và
mô hình cấp phép nguồn mở / độc quyền
Điểm yếu của nó là mô hình cấp phép đắt tiền / hơi phức tạp, giao diện ngườidùng phức tạp, giải pháp tại chỗ và có thể là thiếu khả năng đáp ứng nhu cầu thị trường.Thay vì sử dụng trực tiếp các mã lỗi từ đã được định nghĩa sẵn từ các nguồn mởnhư CWE, OWASP, SonarQube đã tạo ra những mã lỗi của riêng mình bằng cách tựtổng hợp lại từ nhiều nguồn khác nhau Sau đó, các bộ lọc, bộ kiểm tra (luật) sẽ đượcviết ra dựa trên các mã lỗi riêng như vậy Các luật của Java được triển khai tạiorg.sonar.java.checks
Để kiểm tra các lỗi có trong một tệp dữ liệu, SonarQube sẽ có hai phương pháp để thựchiện điều này:
Sử dụng cú pháp cây và API cơ bản (Using syntax trees and API basics):Trước khi chạy bất kỳ quy tắc nào, SonarQube Java Analyzer phân tíchtệp 12 Java đã cho và tạo ra cấu trúc dữ liệu tương đương: cú pháp cây(Syntax Tree) Mỗi cấu trúc của ngôn ngữ Java có thể được biểu diễnbằng một thành phần cụ thể cú pháp cây (Syntax Tree), chi tiết từng đặcđiểm của nó Mỗi cấu trúc này được liên kết với một giao diện riêng mô tả
Trang 15rõ ràng tất cả các đặc tính của nó Khi tạo ra một luật, lớpIssuableSubscriptionVisitor sẽ được thực thi, nó cung cấp các phươngthức hữu ích để làm rõ các vấn đề cũng như xác định chiến lược sẽ sửdụng khi phân tích một tệp Nó dựa trên cơ chế đăng ký (subscriptionmechanism), cho phép chỉ định loại cây mà luật này sẽ phản ứng với Cácnút mà cần đảm bảo sẽ được duyệt được chỉ định bởi một phương thức lànodesToVisit() Từ đó SonarQube sẽ có được các thông tin để bắt đầu xácđịnh các lỗi có trong mã nguồn hay thực thi các luật
Sử dụng API (Using semantic API): Ngoài việc thực thi các luật dựa vào
dữ liệu được cung cấp bởi cú pháp cây (syntax tree), thì SonarQube cung cấp càng nhiều thông tin hơn liên quan đến mã nguồn thông qua một mô hình ngữ nghĩa của mã Tuy nhiên mô hình này hiện chỉ hoạt động với mãnguồn Java Mô hình ngữ nghĩa này cung cấp thông tin liên quan đến từng
ký hiệu được thao tác Ví dụ, đối với một phương thức, API ngữ nghĩa sẽ cung cấp dữ liệu hữu ích như chủ sở hữu của phương thức, công dụng của
nó, các loại tham số và loại trả về của nó, ngoại lệ mà nó có thể ném,
III CODACY
3.1 Tìm hiểu về công cụ Codacy
Codacy cho phép các nhà phát triển giải quyết nợ kỹ thuật và cải thiện chất lượng
mã Các thước đo chất lượng mã trong Codacy được nhóm thành nhiều danh mục khác nhau như độ phức tạp của mã, khả năng tương thích, dễ xảy ra lỗi và bảo mật, kiểu mã, v.v Nó cũng cho phép xác định mục tiêu cho các dự án, cho mỗi tệp hoặc mỗi danh mục
và đề xuất các bước cần tuân theo hoặc những vấn đề bạn phải khắc phục để hoàn thành mục tiêu
Codacy được thiết kế như một giải pháp dựa trên Đám mây để phù hợp với nhu cầu của các nhà phát triển phần mềm từ xa, sử dụng chủ yếu dịch vụ Github, Bitbucket SaaS, làm việc, xây dựng, giao tiếp và triển khai vào Đám mây Giải pháp của họ được ánh xạ sâu đến việc tổ chức các kho mã của bạn
Các ngôn ngữ được hỗ trợ trong Codacy là: Scala, java, python, javaScript, ruby, php, jsp, xml, C#,…
Theo Codacy, hỗ trợ ngôn ngữ bao gồm một số plugin cộng đồng hoạt động hiệu quả: CoffeeScript, Css, C++, Dockerfile,
Trang 16Hình 1 4 Công cụ Codacy
Codacy tích hợp nhiều công cụ hiện có và tích lũy tất cả các kết quả phân tích trong một giao diện Chẩn đoán được xây dựng với dữ liệu từ các plugin và các công cụ tích hợp khác bên trong Codacy
Codacy là một công ty khởi nghiệp với tên gọi Qamine với sự tài trợ từ Seedcampvào năm 2012 Khách hàng của nó bao gồm Adobe, Deliveroo, Intel và Paypal Hơn30.000 nhà phát triển đang sử dụng sản phẩm của họ hàng ngày và hơn 1.000 công ty sửdụng dịch vụ của họ Hơn một tỷ dòng mã được phân tích mỗi ngày
3.2 Các tính năng của công cụ Codacy
Dưới đây là các tính năng chính của Codacy:
Tự động xem xét mã
Phân tích chất lượng mã
Phân tích mã bảo mật
Cài đặt cụm / nhiều trường hợp
Một trong những tính năng tốt nhất của Codacy là “chiến lược mỗi cam kết”.Codacy đã kích hoạt một phân tích cho mọi cam kết trong kho lưu trữ của tôi Nóthậm chí còn phân tích các cam kết trong quá khứ của kho lưu trữ của tôi để rút ra các
xu hướng theo thời gian Đối với mỗi cam kết, chúng ta có thể thấy sự phát triển vềchất lượng và số lượng các vấn đề được tạo / xóa…
Điểm mạnh của Codacy là dễ sử dụng, có giao diện người dùng thân thiện, khả
Trang 17năng phân tích mọi đóng góp ngay lập tức và mức giá rẻ nhất Giải pháp này cũngcung cấp sự tích hợp tốt các trình phân tích mã nguồn mở có sẵn.
Điểm yếu của Codacy là thiếu tích hợp các dịch vụ SaaS khác (dịch vụ Saaskiểm tra Blackduck, Sonatype, UI / E2E hoặc chỉ số API QOS từ AWS APIGateways), sự phức tạp đóng góp vào hệ sinh thái, cộng đồng tương đối nhỏ và khôngthể mật mã thông tin dự án hoặc giới hạn quyền truy cập vào mã nguồn trong giaodiện người dùng
IV EMBOLD
4.1 Tìm hiểu về công cụ Embold
Embold là một nền tảng phân tích tĩnh cung cấp kiểm tra mã do AI hỗ trợ, xácđịnh mã yếu và lỗ hổng, đồng thời đề xuất các giải pháp để khắc phục chúng Nó cungcấp các phiên bản đám mây và tại chỗ cũng như một plugin miễn phí cho Intellij IDEA
để bạn có thể phát hiện các lỗi, lỗ hổng và mùi mã tiềm ẩn trong Java bằng các trình quétnhanh, cung cấp phản hồi theo thời gian thực khi mã được chỉnh sửa Nó cũng có tínhnăng Điểm cho phép người dùng kiểm tra chất lượng tổng thể của mã và điểm các khuvực vấn đề chỉ trong một cái nhìn
Hình 1 5 Công cụ Embold
Nó có thể hỗ trợ hơn 17 ngôn ngữ như Java, C, C ++, C #, Python, v.v Nó tích hợp liền mạch với IDE, Kiểm soát phiên bản và Hệ thống xây dựng
Trang 18Hình 1 6 Cách hoạt động của Embold
4.2 Các tính năng của Embold
Tính năng cơ bản
Các dự án và kho lưu trữ cho phép tổ chức, tạo và chỉnh sửa mã nguồn
Mời đồng nghiệp và kiểm soát người dùng và vai trò cho các dự án cá nhânQuét và quản lý ảnh chụp nhanh mã của bạn
Tích hợp quản lý tác vụ và theo dõi vấn đề
Hướng dẫn sản phẩm dễ hiểu giúp điều hướng Embold cực kỳ dễ dàng
Các tính năng khác
Khả năng xem xét các bài PR và cam kết cùng với một công cụ khuyến nghị mạnh
mẽ giúp xác định các lỗi tiềm ẩn Điều này được thực hiện bằng cách sử dụng dữ liệu lỗi trong quá khứ và đánh giá và phân tích chuyên sâu bằng cách sử dụng AI
và các công cụ học máy
Các cổng chất lượng cho phép các nhà phát triển thiết lập các ngưỡng Điều này cho phép các nhóm thiết lập giới hạn cho chất lượng tối thiểu có thể chấp nhận được đối với mã được viết
Các báo cáo được nhắm mục tiêu sử dụng thẻ và danh mục thẻ và so sánh giữa cácphiên bản mã khác nhau
Trực quan hóa phản vật chất và xác định và vô hiệu hóa hoặc ngăn chặn các khuyết tật
Trang 19Các phụ thuộc đến và đi của bất kỳ thành phần hoặc mô-đun nào đang được sử dụng trong mã của bạn.
Trí tuệ nhân tạo sẵn có cho phép các nhà phát triển truy cập các đề xuất và làm việc một cách năng suất và hiệu quả
Điểm nhúng sử dụng các thước đo như chỉ số, mã và các vấn đề thiết kế cũng như trùng lặp để giúp ưu tiên những gì cần được thực hiện trước
Nó cho phép tích hợp dễ dàng với phần mềm GitHub, Bitbucket, Eclipse, Jira, v.v.Việc lưu trữ dữ liệu được thực hiện tại Trung tâm dữ liệu của Amazon bằng cách
sử dụng mã hóa bảo mật SSL cấp cao
Cho phép các bản đồ nhiệt, công cụ và sơ đồ phụ thuộc thông minh để dễ hiểu
4.3 Ưu điểm của Embold
Những ưu điểm chính của Embold là:
Embold cho phép các nhà phát triển khắc phục sự cố trong mã của họ nhanh hơn Điềunày là do các đề xuất tức thì, tái cấu trúc và thu hút sự chú ý đến các vấn đề Với dữliệu thời gian thực, các nhà phát triển có thể xác định các lỗi nhanh hơn nhiều so vớibình thường, cho phép họ đưa ra các giải pháp hiệu quả hơn Điều này cũng giúp tránh
mã thừa Embold cũng hỗ trợ tích hợp các vấn đề và nhiệm vụ theo dõi, do đó tạo ratrách nhiệm giải trình và tính minh bạch
Nó cho phép các tổ chức xây dựng phần mềm với kiến trúc tốt hơn Điều này giúptránh các thực hành dưới mức tối ưu có thể giúp ngăn chặn các giải pháp không thể
Trang 20vào giải pháp hiện có, điều này sẽ ngăn chặn sự sụp đổ do tác động gia tăng của cácmẫu chống như vậy Việc bao thanh toán mã cũng giúp làm cho việc duy trì mã nhưvậy dễ dàng trong một khoảng thời gian, tránh hiệu ứng kép mà các vấn đề có xuhướng hiển thị Do đó, Embold tránh được các giải pháp cồng kềnh và phức tạp nhưlớp Chúa.
Nó cho phép học một số phương pháp hay nhất Embold hỗ trợ các nhà phát triển sửdụng các số liệu đo lường chất lượng của mã nguồn phần mềm Nó giúp các nhà pháttriển và người kiểm tra bằng cách cung cấp các thông số thực tế có thể định lượngđược để đo lường mức độ hiệu quả của một đoạn mã Điều này cũng cho phép các nhàphát triển làm việc lưu ý rằng mã nguồn phải được duy trì lành mạnh
Embold là một công cụ rất dễ sử dụng Nó đặc biệt hữu ích do khả năng tích hợp dễdàng với các công cụ và nền tảng đã được sử dụng Các nhà phát triển không phảidành thời gian tìm hiểu các nền tảng mới và thay vào đó có thể tập trung vào việc tạo
mã chất lượng cao Một số nền tảng có thể được tích hợp bao gồm:
GitHub
Visual Studio
BitBucket và hơn thế nữa
Trang 21CHƯƠNG 2: NỘI DUNG THỰC HÀNH
2.1 Phương pháp nghiên cứu
Trong phần này học viên sẽ tóm tắt phương pháp nghiên cứu Trong
đó bao gồm
chiến lược nghiên cứu, phương pháp tạo dữ liệu và phương phápphân tích dữ liệu
2.1.1 Chiến lược nghiên cứu
Trong luận văn sử dụng phương pháp nghiên cứu thực nghiệmcài đặt các công
cụ được đề cập đến ở chương 1: Deepsource, Sonarqube,Codacy Embold
Sử dụng bộ dữ liệu kiểm thử Juliet TestCase phiên bản 1.3 chocông cụ SonarQube và sử dụng các chỉ số TP, FP, FN, Recall,Precision, Discrimination, Discrimination Rate để đo hiệu suất pháthiện lỗi của các công cụ trên Từ đó để thấy khả năng phát hiện lỗicủa các công cụ, những nhược điểm của các công cụ và để cải thiệnchất lượng sản phẩm khi dùng các công cụ trên để thực hiện phântích lỗi phần mềm trước khi đưa vào sử dụng Để cải thiện việc pháthiện lỗi thì kết hợp các công cụ nào để tương thích với từng dự án.Sau khi cài đặt và phân tích bộ dữ liệu kiểm thử kết quả của từngcông cụ được lưu dưới dạng csv
Đối với 3 công cụ DeepSource, Codacy và Embold thì sẽ đượcchạy thử nghiệm trực tiếp trên trang web của những công cụ đóTrong luận văn sử dụng chính các công cụ họ dùng để nghiêncứu để có thể so sánh được công cụ có cải tiến hơn trước khôngbằng cách thực hiện đúng như phương pháp họ đang dùng để đưa rakết quả như ngày hôm nay Bên cạnh đó bổ sung thêm các công cụmới để có sự đánh giá khách quan và chính xác hơn lý thuyết đangđược sử dụng Nghiên cứu các công cụ phân tích từ lịch sử ra đời,cách sử dụng, cách thức hoạt động, ưu và nhược điểm của các côngcụ
Trang 22Sử dụng các công cụ phân tích ứng dụng tĩnh được đề cập đến
ở chương 1 để phân tích thành các dữ liệu chuẩn lưu dưới dạngtệp csv Tất cả các tệp dữ liệu kết quả sẽ có những định dạng khácnhau theo theo từng công cụ tùy chỉnh nhưng tất cả các công cụ đềucho ra tệp kết quả có 3 trường sau là chung: đường dẫn tệp lỗi trong
bộ dữ liệu kiểm thử, lỗi từ dòng trong tệp, lỗi đến dòng trong tệp.Dựa vào điểm chung đó để chuẩn hóa các tệp dữ liệu theo chuẩn sau– Bảng 2.1:
Bảng 2.1: Bảng mẫu dữ liệu chuẩn hóa
Tất cả các tệp dữ liệu đều được chuẩn hóa để trở thành
dữ liệu đầu vào cho các bước phân tích tiếp theo
2.1.3 Phân tích dữ liệu
Đưa các tệp dữ liệu chuẩn làm dữ liệu đầu vào phân tích theocác tiêu chí đã được đề cập ở trên Phân tích theo từng công cụ,phân tích bằng cách tổng hợp dữ liệu từ các công cụ theo kiểu tổhợp một công cụ kết hợp với các công cụ còn lại, kết hợp hai công
cụ, kết hợp ba công cụ, từ đó đưa ra tổ hợp các công cụ nào sẽ chokết quả khả quan nhất Tổng hợp so sánh các kết quả dưới dạngbảng Từ các kết quả phân tích để đưa ra đánh giá, gợi ý cho các nhàphát triển khi thực hiện phân tích dự án cần sử dụng những công cụnào sao cho phù hợp để đạt được chất lượng và đảm bảo về mặt chiphí vận hành
2.2 Tiến hành thử nghiệm
Là phần chính trong luận văn Em sẽ tiến hành phân tích triển khai
và phân tích hạn chế đối với các công cụ phân tích tĩnh được tích hợptrong các IDE nhằm tìm ra các lỗ hổng bảo mật cũng như nhữngkhuyết điểm trong mã nguồn theo một số chuẩn chung
Cấu trúc luận văn như sau Phần 2.2 giải thích cách tiếp cận củahọc viên để thực hiện nghiên cứu và cung cấp kết quả để từ đó đưa ranhững kết luận đối với những sự phát triển phần mềm sau này để đảmbảo được chất lượng sản phẩm, cũng như mức độ an toàn và bảo mật