Tải bản đầy đủ (.pdf) (76 trang)

Nghiên cứu phương pháp dự đoán lỗi phần mềm liên dự án (LV thạc sĩ)

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (2.08 MB, 76 trang )

1

HỌC VIỆN CÔNG NGHỆ BƯU CHÍNH VIỄN THÔNG
---------------------------------------

ĐỖ ĐỨC TRUNG

LUẬN VĂN THẠC SỸ KĨ THUẬT

HÀ NỘI – 2016


HỌC VIỆN CÔNG NGHỆ BƯU CHÍNH VIỄN THÔNG
---------------------------------------

ĐỖ ĐỨC TRUNG

NGHIÊN CỨU PHƯƠNG PHÁP DỰ ĐOÁN LỖI
PHẦN MỀM LIÊN DỰ ÁN
CHUYÊN NGÀNH :
MÃ SỐ:

KHOA HỌC MÁY TÍNH
60.48.01

LUẬN VĂN THẠC SĨ KỸ THUẬT
NGƯỜI HƯỚNG DẪN KHOA HỌC
PGS.TS. TỪ MINH PHƯƠNG

HÀ NỘI – 2016



1

LỜI CAM ĐOAN
Tôi cam đoan đây là công trình nghiên cứu của riêng tôi.
Các số liệu, kết quả nêu trong luận văn là trung thực và chưa từng được công
bố trong bất kì công trình nào khác.

TÁC GIẢ LUẬN VĂN

ĐỖ ĐỨC TRUNG


2

LỜI CẢM ƠN
Trong suốt quá trình học tập cũng như thực hiện luận văn, tôi đã nhân được
rất nhiều những sự quan tâm giúp đỡ, hướng dẫn tận tình của các thầy cô cùng với
những lời động viên khuyến khích từ phía gia đình, bạn bè. Tôi xin bày tỏ lời cảm
ơn chân thành đến tất cả mọi người.
Tôi xin tỏ lòng biết ơn sâu sắc đến thầy Từ Minh Phương đã tận tình hướng
dẫn, định hướng cho tôi trong quá trình thực hiện đề tài. Thầy cho tôi những lời
khuyên, chỉ dẫn, truyền đạt cho tôi những kiến thức, kinh nghiệm về việc thực hiện
luận văn.
Tôi xin cảm ơn các thầy cô trong khoa Quốc tế và đào tạo sau đại học, học
viện Công nghệ Bưu chính Viễn thông đã tận tình dạy dỗ và cho tôi những kiến
thức bổ ích trong suốt quá trình hai năm học tập, giúp tôi nâng cao được chuyên
môn, làm nền tảng để tôi có thể hoàn thành luận văn, cũng như tự tin phát triển công
việc sau này.
Cuối cùng, tôi muốn gửi lời cảm ơn tới gia đình và bạn bè, những người thân

đã luôn ở bên, cảm thông, hỗ trợ, giúp đỡ tôi những khó khăn trong công việc, cuộc
sống cũng như trong quá trình học tập.

Hà Nội tháng 11 năm 2016
Đỗ Đức Trung


3

MỤC LỤC

LỜI CAM ĐOAN ........................................................................................................... 1
LỜI CẢM ƠN ................................................................................................................. 2
MỤC LỤC....................................................................................................................... 3
DANHMỤCBẢNGBIỂU....................................................................................................................5
DANHMỤCHÌNHVẼVÀSƠĐỒ.....................................................................................................6
MỞĐẦU................................................................................................................................................7
Chương1:Tổngquanvềdựđoánlỗiliêndựántrongcácphầnmềm........................11
1.1.Bàitoándựđoánlỗiphầnmềm..................................................................................................14
1.2.Cáccáchtiếpcậntrongbàitoándựđoánlỗi..........................................................................15
1.2.1.Tiếpcậndựatrênchangelog................................................................................................................16
1.2.2.Tiếpcậnkiểusingle-version.................................................................................................................17
1.2.3.Cáccáchtiếpcậnkhác..............................................................................................................................18
1.3.Tổngquanvềdựđoánlỗiphầnmềmsửdụnghọcmáy.....................................................18
1.4.Giớithiệuvấnđềdựđoánlỗiliêndựán.................................................................................20
1.5.Cácphươngphápgầnđâyđãđượcnghiêncứuđểgiảiquyếtvấnđề............................21
1.6.Kếtluậnchương..............................................................................................................................22
Chương2:PhươngphápCCAvàápdụnggiảiquyếtvấnđềdựđoánlỗiliêndựán24
2.1.Cácvấnđềphátsinhkhithựchiệndựđoánlỗiliêndựán...............................................24
2.2.Tríchxuấtcácđặctrưngtừmãnguồndựán.........................................................................25

2.3.GiớithiệuphươngphápCCA.......................................................................................................29
2.3.1.Tổngquanvềphântíchtươngquanchínhtắc(CanonicalCorrelationAnalysis).........29
2.3.2.Ứngdụngcủaphântíchtươngquanchínhtắctrongviệcgiảiquyếtcácvấnđềthựctế
........................................................................................................................................................................................38
2.4.Xâydựngcácbộdữliệuchungchodựánnguồnvàđích...................................................41
2.5.ÁpdụngphươngphápCCAchodựđoánlỗiliêndựán......................................................44
2.5.1.ÁpdụngphươngphápCCA....................................................................................................................44
2.5.2.TổngquanvềphânloạiknnvớikhoảngcáchEuclidean..........................................................47


4

2.6.Kếtluậnchương..............................................................................................................................52

Chương3:Thửnghiệmvàđánhgiá........................................................................................53
3.1.Thuthậpdữliệutừcácdựánkhácnhau................................................................................53
3.2.Cácphépđánhgiá............................................................................................................................57
3.3.SosánhvớiphươngphápTCA....................................................................................................64
3.3.1.TổngquanvềphươngphápTCA.........................................................................................................65
3.3.2.SosánhTCAvớiCCA.................................................................................................................................65
3.4.Độphứctạpvàthờigianthựchiện........................................................................................................67
3.5.Kếtluậnchương.............................................................................................................................................68
KẾTLUẬN.........................................................................................................................................69
DANHMỤCTÀILIỆUTHAMKHẢO...........................................................................................70


5

DANH MỤC BẢNG BIỂU
Bảng 1. Bảng tổng quan dữ liệu các dự án được sử dụng trong kiểm thử .......... 54

Bảng 2. Số các đặc trưng tương đương nhau giữa các công ti ........................... 56
Bảng 3. Kết quả chạy cho trường hợp 1-1 .......................................................... 62
Bảng 4. Kết quả chạy cho trường hợp 1-n .......................................................... 63
Bảng 5. So sánh giữa phương pháp CCA và TCA ............................................. 66
Bảng 6. So sánh kết quả thực nghiệm giữa phương pháp CCA và TCA............ 67


6

DANH MỤC HÌNH VẼ VÀ SƠ ĐỒ
Hình 1. Tam giác dự án ...................................................................................... 11
Hình 2. Biểu đồ biểu thị quan hệ giữa tỉ lệ thành công và quy mô dự án [1] ..... 12
Hình 3. Mô hình dự đoán lỗi [28] ....................................................................... 15
Hình 4. Tiếp cận dựa trên change log [29] ......................................................... 17
Hình 5. Các bước xây dựng mô hình dự đoán lỗi sử dụng học máy .................. 20
Hình 6. Ví dụ về tìm hình ảnh [30] ..................................................................... 39
Hình 7. Ví dụ về computer vision [30] ............................................................... 40
Hình 8. Ví dụ về phân đoạn hình ảnh [30].......................................................... 40
Hình 9. Xây dựng cách biểu diễn thống nhất ..................................................... 44
Hình 10. Áp dụng CCA tạo không gian chung cho dữ liệu nguồn và đích [31] 47
Hình 11. Ví dụ về bài toán k-nn [32] .................................................................. 49
Hình 12. Minh họa cho bài toán phân loại k-nn [32] .......................................... 50
Hình 13.Minh họa với các giá trị của k [32] ....................................................... 51
Hình 14. Minh họa một kết quả chạy thực nghiệm ............................................ 61


7

MỞ ĐẦU


Xây dựng các dự án phần mềm thành công luôn là mối quan tâm hàng đầu đối
với mọi tổ chức doanh nghiệp, nhất là doanh nghiệp công nghiệp công nghệ thông tin.
Đặc biệt quan trọng là quá trình quản lý, kiểm soát tiến độ và đảm bảo chất lượng dự
án.
Lỗi là một phần phát sinh tất yếu khi phát triển cũng như vận hành bất cứ phần
mềm hoặc hệ thống nào. Phần mềm hoặc hệ thống càng phức tạp thì càng xuất hiện
nhiều lỗi. Lỗi có thể tác động tới phần mềm hoặc hệ thống đang xây dựng hoặc vận
hành theo nhiều cách khác nhau, nhẹ thì hệ thống vẫn hoạt động bình thường khi lỗi
vẫn tồn tại, nặng thì hệ thống ngừng hoạt động do xuất hiện lỗi. Do vậy để giảm thiểu
các hậu quả do các lỗi gây ra cũng như tiết kiệm chi phí thì người ta cố gắng phát hiện
lỗi trong giai đoạn phát triển phần mềm và phát hiện càng sớm càng tốt, từ đó xuất hiện
các phương pháp dự đoán lỗi trong phần mềm.
Một trong các phương pháp dự đoán lỗi phần mềm được quan tâm nhiều hiện
nay là phương pháp dự đoán lỗi sử dụng học máy có giám sát trên cơ sở mã nguồn và
các dữ liệu có được trong quá trình phát triển phần mềm. Cụ thể, các file mã nguồn sẽ
được biểu diễn bằng các đặc trưng, sau đó huấn luyện các mô hình phân lớp
(classification) hoặc hồi quy (regrestion) bằng các dữ liệu huấn luyện là các file đã
được kiểm thử lỗi và dùng các mô hình này để dự đoán lỗi cho các file chưa được kiểm
thử.
Việc xây dựng dữ liệu huấn luyện sẽ dễ dàng hơn nếu bộ dữ liệu này được xây
dựng dựa trên mã nguồn đã xác định lỗi của các dự án đã thực hiện trước đó có tính
đồng nhất với mã nguồn của dự án đích.Vấn đề đặt ra là mã nguồn đồng nhất với mã


8

nguồn của dự án đích có số lượng không nhiều dẫn tới việc mô hình xây dựng nên hoạt
động thiếu chính xác. Chính vì vậy, việc đưa ra một phương pháp cho phép xây dựng
tập dữ liệu tận dụng những dữ liệu sẵn có của các dự án với mã nguồn không đồng nhất
với mã nguồn của dự án đích là rất quan trọng. Một trong những cách tiếp cận với vấn

đề này là phương pháp CCA (canonical correlation analysis). Đề tài của em tập trung
vào tìm hiểu cách tiếp cận này nhằm nâng cao khả năng dự đoán lỗi phần mềm.
Hiện nay, đã có một số cách tiếp cận cho phép trích xuất các kiến thức chung từ
một dự án và chuyển nó sang một dự án khác và những kiến thức đó được dùng để
huấn luyện cho một mô hình dự đoán lỗi như: TCA (Transfer Component Analyst),
TCA+, … Do bài toán có ý nghĩa thực tiễn rất cao đối với những cá nhân, tổ chức đã
và đang thực hiện các dự án phát triển phần mềm, hệ thống nên những phương pháp
dùng dữ liệu của dự án này để huấn luyện cho dự án khác vẫn tiếp tục được nghiên
cứu. Trong luận văn em nghiên cứu phương pháp CCA và so sánh với phương pháp
TCA đã được đề cập.
Phương pháp được nghiên cứu trong luận văn là phương pháp học các sự
chuyển đổi với mục đích làm cho dữ liệu ở công ti đích giống với công ti nguồn. CCA
là phương pháp hiệu quả có thể tối đa hóa sự tương quan giữa dữ liệu nguồn và đích
giúp nâng cao xác suất dự đoán lỗi trong dự án.
-

Đối tượng: Phương pháp tiếp cận CCA trong dự đoán lỗi, mã nguồn của
các dự án.

-

Phạm vi nghiên cứu: Dự đoán lỗi trong mã nguồn của dự án sử dụng dữ
liệu của các dự án khác.

Phương pháp nghiên cứu:
-

Tìm hiểu về vấn đề dự đoán lỗi trong các dự án liên dự án, những khó



9

khăn trong việc dự đoán phần mềm trong hoàn cảnh thiếu thông tin từ
các dự án tương tự.
-

Tìm hiểu các phương pháp hiện đang được dùng trong dự đoán lỗi liên
dự án, xác định các hạn chế của các phương pháp này.

-

Tìm hiểu về dự đoán lỗi sử dụng học máy.

-

Tìm hiểu phương pháp tiếp cận CCA, những ưu điểm của phương pháp
trong việc dự đoán lỗi trong phần mềm hoặc hệ thống.

Nội dung luận văn bao gồm ba chương như sau:
Chương 1: TỔNG QUAN VỀ DỰ ĐOÁN LỖI LIÊN DỰ ÁN TRONG CÁC
PHẦN MỀM
Giới thiệu chương: Giới thiệu về vấn đề dự đoán lỗi phần mềm, khái niệm, các
phương pháp đã được dùng trong dự đoán lỗi. Giới thiệu về vấn đề dự đoán lỗi liên dự
án, đặt vấn đề, những khó khăn của vấn đề, những phương pháp tiếp cận đã được áp
dụng, những hạn chế của các phương pháp này.
Chương 2: PHƯƠNG PHÁP CCA VÀ ÁP DỤNG GIẢI QUYẾT VẤN ĐỀ
DỰ ĐOÁN LỖI LIÊN DỰ ÁN
Giới thiệu chương: Trình bày tổng quan về phương pháp CCA, đưa ra đề xuất
hướng tiếp cận mới là phương pháp CCA+ dựa trên phương pháp CCA và áp dụng vào
dự đoán lỗi liên dự án nhằm tăng hiệu quả dự đoán lỗi.

Chương 3: THỬ NGHIỆM VÀ ĐÁNH GIÁ
Giới thiệu chương: Sử dụng các tập dữ liệu của các dự án: Apache, Safe, Zxing
cùng phương pháp CCA đã được trình bày trong chương 2 để xây dựng lên bộ dữ liệu
đã được chuyển đổi từ dữ liệu gốc và dùng phân loại láng giềng gần nhất cùng khoảng


10

cách Euclidean để thực hiện dự đoán lỗi. Đánh giá kết quả so với các phương pháp học
máy khác như TCA.


11

CHƯƠNG 1: TỔNG QUAN VỀ DỰ ĐOÁN LỖI LIÊN DỰ
ÁN TRONG CÁC PHẦN MỀM
Với sự phát triển vô cùng mạnh mẽ của Công nghệ thông tin, nhu cầu phát triển
phần mềm ngày càng tăng, đặc biệt là những phần mềm lớn, có phạm vi ứng dụng rộng
và từ đó khâu quản lý dần án dần trở thành một phần quan trọng, không thể thiếu trong
giai đoạn phát triển. Quản lý dự án phần mềm là các hoạt động trong lập kế hoạch,
giám sát và kiểm soát tài nguyên dự án (ví dụ như chi phí, con người), thời gian thực
hiện, các rủi ro trong dự án và cả quy trình thực hiện dự án; nhằm đảm bảo thành công
cho dự án. Trong đó đảm bảo chất lượng dự án phần mềm là cân bằng giữa ba yếu tố:
thời gian, tài nguyên và chất lượng. Ba yếu tố này được gọi là tam giác dự án.

Hình 1. Tam giác dự án
Các vấn đề thường xảy ra đối với một dự án phần mềm:


12


- Thời gian thực hiện dự án vượt mức dự kiến.
- Chi phí thực hiện dự án vượt mức dự kiến.
- Kết quả của dự án không như dự kiến.
Nhiều dự án công nghệ phần mềm vượt ra khỏi ngân sách và tiến độ. Đây là một
trong trong những vấn đề lớn nhất mà ngành công nghiệp phát triển phần mềm gặp
phải từ trước đến nay và rất nhiều nỗ lực đã được thực hiện để tăng tỷ lệ thành công
của các dự án phần mềm. Dễ thấy rằng khi ngân sách dự án lớn hơn cũng là lúc dự án
trở nên phức tạp hơn và kéo theo tỷ lệ thành công giảm nhanh. Humphrey đã tìm hiểu
lý do tại sao các dự án lại thất bại và đánh giá các vấn đề cần xem xét để cải thiện hiệu
suất của các dự án phần mềm quy mô lớn [1]. Ông nhận xét rằng khi ngân sách của dự
án thấp ví dụ như $ 750,000, tỷ lệ thành công là khoảng 55%, nhưng khi quy mô tăng
tỷ lệ thành công giảm rất nhanh. điều này được thể hiện trong hình 2. Khi quy mô dự
án là hơn $ 10.000.000 tỷ lệ thành công sẽ trở thành gần như bằng không [1]. Đây là
một thực tế và là một trở ngại lớn của các công ty phát triển phần mềm.

Hình 2. Biểu đồ biểu thị quan hệ giữa tỉ lệ thành công và quy mô dự án [1]


13

Các lý do về kỹ thuật, tài chính, xã hội của dự án phần mềm thất bại đã được
thảo luận và một số biện pháp phòng ngừa đã được đề xuất bởi nhiều nhà nghiên cứu.
Theo Standish Group 31,1% số dự án bị hủy bỏ trước khi được hoàn thành và 52,7% số
dự án tiêu tốn 189% dự toán chi phí ban đầu của họ [2]. Jones tập trung vào các yếu tố
khác biệt giữa các dự án thành công và các dự án không thành công và nhận xét rằng
các hệ thống phần mềm lớn cũng có nhiều khả năng bị hủy bỏ [3]. Brooks thảo luận về
một số yếu tố ảnh hưởng đến thất bại kế hoạch và nhận xét rằng việc thêm nhân lực
cho một dự án phần mềm [4]. Verner et al. phân tích các yếu tố thường gặp nhất cho sự
thất bại của dự án trên 70 dự án và quan sát thấy trong 93% của các dự án thất bại ở

điểm là ngày release tác động quá lớn đến quá trình phát triển, 81% của các dự án thất
bại do việc đánh giá quá thấp và trong 76% các rủi ro dự án thất bại không được đánh
giá lại, kiểm soát, hoặc được quản lý xuyên suốt dự án [5].
Công nghệ phần mềm cung cấp cho các kỹ sư các phương tiện cần thiết để
chuẩn hóa quá trình phát triển và tăng năng suất. Nhưng không may là việc áp dụng
cùng một thiết kế cho các phần mềm có thể cho ra các hệ thống phần mềm với chất
lượng khác nhau, tùy thuộc vào số lượng các tiến trình được áp dụng và độ sáng tạo
cũng như kinh nghiệm của đội làm dự án.
Phát triển một hệ thống phần mềm không lỗi là rất khó khăn và là có thể là
không tưởng, hầu hết thời gian có một số lỗi không biết hoặc thiếu sót không lường
trước được, ngay cả trong các dự án phần mềm mà các nguyên tắc của phương pháp
phát triển phần mềm đã được áp dụng một cách cẩn thận. Do một số module phần mềm
bị lỗi nên giai đoạn bảo trì dự án có thể sẽ thực sự khó đối với người sử dụng và tốn
kém cho doanh nghiệp.
Vì vậy, dự đoán lỗi các module phần mềm (hoặc file) là rất quan trọng, để lập
kế hoạch và quản lý việc kiểm thử và bảo trì các giai đoạn của một dự án tốt hơn. Dự


14

đoán lỗi sẽ là cơ hội cho nhóm phát triển kiểm tra lại các module hoặc các tập tin có
xác suất lỗi cao. Đầu tiên, trong giai đoạn thử nghiệm, có thể tập trung vào những
module dễ lỗi hoặc module có nhiều lỗi tương đối. Khả năng sửa chữa những lỗi còn
lại sẽ tăng và sản phẩm phần mềm có chất lượng hơn sẽ được gửi đến người dùng cuối.
Thứ hai, vì nhiều lỗi sẽ được cố định trong suốt thời gian kiểm thử, chi phí bảo trì dự
án sẽ giảm dẫn tới sự sụt giảm trong tổng chi phí của dự án.
Vấn đề không thực hiện kiểm thử xuyên suốt và kịp thời dẫn đến quá muộn để
phát hiện các lỗ hổng từ khâu thu thập yêu cầu, phân tích, thiết kế và trong quá trình
lập trình, khi đó cán bộ thực hiện dự án sẽ phải quay lại khảo sát từ đầu dẫn đến nguồn
lực dự án vượt qua dự kiến, quản trị dự án không thể thể kiểm soát. Trong khi đó nếu

các lập trình viên thực hiện kiểm tra lỗi ngay trong giai đoạn lập trình sẽ mang lại lợi
ích đáng kể trong lĩnh vực quản lý dự án.
1.1. Bài toán dự đoán lỗi phần mềm
Dự đoán lỗi phần mềm là phương pháp đánh giá các lớp trong hệ thống phần
mềm để xác định những lớp có khả năng có lỗi dựa vào các dữ liệu lịch sử qua các lần
thay đổi của hệ thống. Đánh giá lỗi cho hệ thống phần mềm bằng cách dựa vào những
thay đổi trong các phiên bản khác nhau qua các lần chuyển giao cho khách hàng. Để
xây dựng mô hình dự đoán lỗi phần mềm hầu hết sử dụng kỹ thuật học máy để dự đoán
bằng cách sử dụng các phép đo cấu trúc mã nguồn trong các lớp, tuy nhiên một số
nghiên cứu cũng có thể sử dụng thêm các thông tin khác ví dụ lịch sử các thay đổi
trong các phiên bản trước đó: đo cấu trúc mã nguồn trong các lớp, đo xem sự thay đổi
các phương thức của các lớp đươc gọi như thế nào, hoặc dựa trên chính dữ liệu lịch sử
của các lập trình viên tác động vào các lớp ví dụ: có bao nhiêu lập trình viên cập nhật
trên lớp, số dòng code hay số lỗi mà các lập trình viên gây trong các lớp đó. Trong
công việc quản lý và kiểm soát nguồn lực dự án thì việc kiểm soát nguồn lực trong giai


15

đoạn phát triển phần mềm đóng vai trò quan trọng. Như vậy thay vì tốn rất nhiều
nguồn lực để kiểm tra và sửa lỗi cho toàn bộ các lớp được sinh ra trong hệ thông thì sẽ
sử dụng kỹ thuật dự đoán lỗi để xác định những lớp nào có lỗi từ đó tập trung sửa lỗi
cho lớp đó sẽ giảm được 50% chi phí thực hiện cho việc phát triển và kiểm tra lỗi ngay
trong giai đoạn lập trình. Hiện nay có khá nhiều kỹ thuật được sử dụng để dự đoán lỗi
nhưng chưa có đánh giá cụ thể nào về kỹ thuật dự đoán nào là hiệu quả nhất mà sẽ tùy
thuộc vào các tiêu chí được áp dụng để đánh giá cho mô hình dự đoán, hình 3 minh họa
một mô hình dự đoán lỗi.

Hình 3. Mô hình dự đoán lỗi [28]
1.2. Các cách tiếp cận trong bài toán dự đoán lỗi

Có một số hướng để tiếp cận bài toán dự đoán lỗi, mỗi hướng đều có một ưu
nhược điểm riêng.


16

1.2.1. Tiếp cận dựa trên change log
Cách tiếp cận này sử dụng thông tin trích xuất từ hệ thống quản lý version với
giả định rằng các file thường xuyên thay đổi là các file source lỗi trong tương lai. Có
rất nhiều nghiên cứu đi theo hướng này như nghiên cứu của Nagappan và Ball dựa trên
sự ảnh hưởng của code trên mật độ lỗi trong window 2003, họ nhận thấy các đoạn code
càng liên quan đến nhau thì càng dễ phát hiện lỗi [6], trong khi đó Hassan đề xuất sử
dụng entropy của các sự thay đổi để ước lượng độ phức tạp của các sự thay đổi trong
code và họ nhận ra những lần thay đổi hoặc sửa đổi code càng gần thời điểm hiện tại
thì càng có nguy cơ gây ra lỗi [7], hình 4. mô tả một ví dụ về cách tiếp cận này .


17

Hình 4. Tiếp cận dựa trên change log [29]
1.2.2. Tiếp cận kiểu single-version
Cách tiếp cận này đặt vấn đề rằng cấu trúc và hành vi của chương trình ảnh
hưởng tới sự xuất hiện của lỗi trong tương lai. Cách tiếp cận không yêu cầu lịch sử
chương trình mà chỉ đi xem xét, đánh giá trạng thái hiện tại của hệ thống một cách chi
tiết dựa trên một loạt các thông số.


18

Một số nghiên cứu tập trung vào hướng tiếp cận này như nghiên cứu của Balisi

sử dụng các thông số CK trên các hệ thống quản lý thông tin dựa trên cùng yêu cầu
hoặc Nagappan và Ball đã ước lượng mật độ lỗi của window 2003 với một tool phân
tích, Nagappan đã dùng danh sách các thông số về source code để dự đoán lỗi sau
release của module level trên năm hệ thống Microsoft và nhận ra rằng tool dự đoán có
thể hoạt động tốt trên 1 hệ thống riêng lẻ chứ không phải là nhiều hệ thống cùng lúc
[8].
1.2.3. Các cách tiếp cận khác
Ngoài hai cách tiếp cận trên các nhà nghiên cứu cũng đưa ra nhiều cách tiếp cận
nữa như: Zimmermann và Nagappan đã sử dụng các sự phụ thuộc giữa các binary
trong window 2003 để dự đoán lỗi [9], Marcus sử dụng một phương pháp đo dựa trên
LSI để dự đoán lỗi trên một vài hệ thống C++ … [10]
1.3. Tổng quan về dự đoán lỗi phần mềm sử dụng học máy
Các mô hình dự đoán lỗi có thể được phân loại theo những số liệu được sử dụng
và các bước quá trình trong vòng đời phần mềm. Hầu hết các mô hình dự đoán lỗi sử
dụng các số liệu cơ bản như độ phức tạp và kích thước của các phần mềm. Số liệu thử
nghiệm được tạo ra trong giai đoạn thử nghiệm cũng được sử dụng để ước tính chuỗi
các lỗi. Một cách tiếp cận khác là điều tra về chất lượng của các quy trình thiết kế và
thực hiện phần mềm, mà chất lượng của việc thiết kế là yếu tố dự đoán tốt nhất về chất
lượng sản phẩm.
Ý tưởng chính đằng sau các mô hình dự đoán lỗi là để ước lượng độ tin cậy của
hệ thống, và nghiên cứu ảnh hưởng của thiết kế và quy trình kiểm tra trên số các lỗi.
Các nghiên cứu trước cho thấy các chỉ số tại các bước trong vòng đời của một dự án
phần mềm như thiết kế, thực hiện, kiểm thử, vv nên được sử dụng và kết nối với thành


19

phần cụ thể. Chỉ tập trung vào một mức số liệu hay quá trình cụ thể là không đủ để xây
dựng được một mô hình dự đoán tốt.
Các thuật toán học máy đã được chứng minh là thiết thực trong việc giải quyết

các vấn đề chưa rõ ràng. Do các vấn đề phần mềm có thể được xây dựng trong quá
trình học và phân loại theo các đặc điểm của lỗi, các thuật toán máy học thông thường
có khả năng được áp dụng để chuẩn bị một phân bố xác suất và phân tích các lỗi. Cây
quyết định, mạng nơron nhân tạo, mạng Bayes và các kỹ thuật phân cụm như k-nn là ví
dụ về kỹ thuật thường được sử dụng nhiều nhất cho các vấn đề dự đoán lỗi phần mềm.
Các thuật toán học máy có thể được sử dụng thông qua việc thực thi chương
trình để phát hiện số lượng lỗi, từ đó có thể tìm ra các lỗi tiềm ẩn. Việc thực thi được
phân loại theo tính chất của phương pháp là hướng thủ tục hay hướng chức năng. Học
máy cũng được sử dụng để tạo ra các mô hình dựa theo tính chất chương trình gây lỗi.
Các công cụ vector hỗ trợ và cây quyết định được thực thi để phân loại và xem xét các
tập con liên quan nhất của các thuộc tính chương trình. Hầu hết các tính chất dẫn đến
tình trạng bị lỗi có thể được phân loại thành một vài nhóm. Phương pháp học máy bao
gồm hai bước: huấn luyện và phân loại. Các thuộc tính có liên quan tới lỗi được sử
dụng để tạo ra một mô hình, và chọn các thuộc tính mà có nhiều khả năng gây ra lỗi
trong phần mềm.
Phân cụm trên hồ sơ chức năng được sử dụng để xác định các tính năng cho
phép một mô hình để phân biệt được các trường hợp có nguy lỗi và không có nguy cơ
lỗi. Việc phát hiện bất biến được sử dụng để phát hiện các bất biến có khả năng từ một
bộ kiểm thử và xem xét các nguyên nhân thường gây ra trạng thái lỗi. Phương pháp
này cũng được sử dụng để xác định các phản ví dụ và tìm các thuộc tính mà dẫn tới kết
quả đúng trong mọi điều kiện, hình 5 minh họa các bước xây dựng mô hình dự đoán lỗi
sử dụng học máy.


20

Hình 5. Các bước xây dựng mô hình dự đoán lỗi sử dụng học máy

1.4. Giới thiệu vấn đề dự đoán lỗi liên dự án
Dự đoán lỗi phần mềm sẽ hiệu quả nếu các mô hình được huấn luyện với một

lượng dữ liệu đủ lớn, tuy nhiên, trong thực tế, dữ liệu huấn luyện thường không có sẵn,
hoặc do công ty có quy mô quá nhỏ hoặc các dữ liệu đó là phiên bản đầu tiên của một
sản phẩm, mà không tồn tại dữ liệu cũ trong quá khứ. Trong hoàn cảnh phải ước lượng
công sức bỏ ra để làm dự án mà không có hoặc có rất ít số liệu sẵn có, các kỹ sư
thường sử dụng dữ liệu từ các dự án hoặc từ các công ty khác. Ý tưởng này hoàn toàn
có thể áp dụng sang cho trường hợp dự đoán lỗi, một mô hình được xây dựng từ một
dự án khác sẽ được sử dụng để dự đoán các lỗi sẽ xuất hiện trong dự án mới, cách tiếp
cận này được gọi là dự đoán lỗi liên dự án.
Các câu hỏi cụ thể mà chúng ta cần giải quyết là:
1. Có thể sử dụng dữ liệu liên dự án ở mức độ nào để dự đoán lỗi sau khi release
cho một hệ thống phần mềm?


21

2. Những hệ thống phần mềm như thế nào là tốt để áp dụng dự đoán lỗi liên dự
án: các dự án nằm cùng một domain, có cùng process, có cấu trúc code tương tự, hay
nằm trong cùng một công ty?
Giả thiết rằng trong các công ty, các process thường tương tự hoặc thậm chí
giống nhau, chúng ta tìm kiếm những kết luận về những đặc điểm thuận lợi cho những
dự đoán liên dự án tốt hơn là nó cùng một tên miền hoặc quá trình tương tự?
1.5. Các phương pháp gần đây đã được nghiên cứu để giải quyết vấn đề
Có nhiều phương pháp đã được nghiên cứu và hoạt động hiệu quả trong việc
giải quyết bài toán dự đoán lỗi trong cùng dự án, tuy vậy, các phương pháp này lại
không phù hợp hoặc có hiệu suất kém khi áp dụng vào bài toán dự đoán lỗi liên dự án.
Từ thực tế đó, một số cách tiếp cận đã được đề xuất, một trong số đó là tiếp cận dự
đoán lỗi dựa trên việc học các sự chuyển đổi (transfer learning).
Kỹ thuật học sự chuyển đổi cho phép có sự khác nhau giữa các miền, các tác vụ
cũng như phân phối dữ liệu huấn luyện và kiểm thử, và đã được áp dụng thành công
trong nhiều ứng dụng thực tế gần đây. Kĩ thuật này được quy định như sau: Cho miền

nguồn !" và tác vụ học #" , miền đích !$ và tác vụ học #$ , kĩ thuật học tập sự chuyển
đổi nhằm mục đích giúp cải thiện việc học của các chức năng dự đoán trong !$ sử
dụng những kiến thức có trong !" và #" (!" ≠ !$ hoặc #" ≠ #$ ). Dự đoán lỗi liên dự
án tương ứng với việc học các chuyển đổi một cách quy nạp, trong đó tập nguồn, đích
là như nhau trong khi miền nguồn, đích là khác nhau.
Tiếp cận theo kiểu này có thể được tóm tắt thành hai loại là chuyển đổi phiên
bản (instance-transfer) và chuyển đổi tính năng đại diện (feature-representationtransfer) [11]. Trong khi chuyển đổi các tính năng đại diện sẽ học các đại diện thấp
chiều để giảm sự phân kỳ miền, thì chuyển đổi phiên bản sẽ gán trọng số cho các tập


22

nguồn dựa theo đóng góp của chúng trong việc xây dựng mô hình trong miền đích.
Những cách tiếp cận trên thường gồm hai bước chính: (1) ước tính trọng số của dữ
liệu nguồn; (2) huấn luyện các mô hình trên các dữ liệu đã được tái đánh trọng số.
Gần đây nhất, xuất hiện một số thuật toán mở rộng cho các phân loại hiện có. Ví
dụ mở rộng của bao đóng (TrBagg) hoặc đưa ra framework mới (gọi là TrAdaBoost)
để chuyển kiến thức từ một phân phối sang một phân phối khác bằng cách tăng cường
việc học cơ bản [12]. Phương pháp học sự chuyển đổi được đề xuất trong nghiên cứu
này cũng là phần mở rộng cho phân loại Naive Bayes.
Kỹ thuật học tập sự chuyển đổi cũng hoạt động tốt trên nhiều lĩnh vực như phân
loại hình ảnh, nhận dạng tên thực thể, dịch trang web, xử lý ngôn ngữ tự nhiên, và lọc
spam email. Dự đoán lỗi liên dự án sử dụng các lỗi phần mềm ở các public repository
và sử dụng các phương pháp học tập sự chuyển đổi để đưa ra dự đoán.
Trong phạm vi luận văn không đề cập đến việc dự đoán vị trí của lỗi, lỗi như thế
nào trong một lớp mà chỉ dự đoán những lớp nào có khả năng có lỗi, lớp nào chứa
nhiều lỗi, lớp nào chưa ít lỗi hơn. Luận văn tập trung vào việc đưa ra kỹ thuật dự đoán
lỗi phần mềm áp dụng cho một hệ thống có khả năng có nhiều lỗi. Luận văn cũng sẽ
tập trung vào một kỹ thuật dự đoán dựa trên học máy để xây dựng và thử nghiệm cho
mô hình dự đoán lỗi của một hệ thống phần mềm.

1.6. Kết luận chương
Tổng kết lại, đối với dự đoán lỗi phần mềm nói chung hiện tại có nhiều cách
tiếp cận đã được giới thiệu, nhưng phổ biến và hiệu quả nhất trong số đó là sử dụng
phương pháp học máy với một số kĩ thuật như mạng nơtron, mạng Bayes, phân cụm knn giúp nâng cao độ chính xác khi thực hiện dự đoán.


23

Đối với các công ty nhỏ hoặc với các phần mềm, hệ thống đang trong giai đoạn
phát triển phiên bản đầu tiên thì việc có được một tập dữ liệu huấn luyện đủ lớn là điều
không hề dễ dàng. Để giải quyết vấn đề này, người ta sẽ sử dụng lại các dữ liệu của các
dự án, phần mềm khác để xây dựng mô hình dự đoán cho dự án, phần mềm hiện tại.
Vấn đề đặt ra là các dự án, phần mềm cũ và hiện tại lại nằm trên các domain khác
nhau, khác cấu trúc dự án, cấu trúc code, làm cách nào để đồng nhất được sự khác biệt
này.
Có một số cách tiếp cận đã được giới thiệu giúp giải quyết vấn đề này, trong đó
có phương pháp học tập sự chuyển đổi được thực nghiệm và cho kết quả rất tốt. Trong
luận văn, em đã tìm hiểu và sử dụng phương pháp học sự chuyển đổi dựa trên CCA để
đồng nhất sự khác biệt giữa dự án nguồn và đích (gọi tắt là phương pháp CCA).
Phương pháp CCA áp dụng kĩ thuật phân tích tương quan chính tắc giúp đồng
nhất dữ liệu ở dự án nguồn và dự án đích sao cho tương quan giữa chúng là lớn nhất.
Chi tiết về phương pháp sẽ được trình bày chi tiết trong chương 2, phương pháp
CCA và áp dụng giải quyết vấn đề dự đoán lỗi liên dự án.


×