Vì vây, việc sinh dữ liệu tự động sẽ giúp chương trình thử nghiệm cung cấp các dữ liệu thử nghiệm cho phần mềm do đó sẽ hiệu quả đối với việc giảm chi phí và tăng chất lượng kiểm thử.. V
Trang 1HỌC VIỆN CÔNG NGHỆ BƯU CHÍNH VIỄN THÔNG
-
NGUYỄN THỊ QUỲNH NGA
ÁP DỤNG THUẬT TOÁN DI TRUYỀN TRONG SINH CÁC DỮ
Trang 2Luận văn được hoàn thành tại:
HỌC VIỆN CÔNG NGHỆ BƯU CHÍNH VIỄN THÔNG
Người hướng dẫn khoa học: PGS.TS Huỳnh Quyết Thắng
Phản biện 1: ………
Phản biện 2: ………
Luận văn sẽ được bảo vệ trước Hội đồng chấm luận văn thạc sĩ tại Học
viện Công nghệ Bưu chính Viễn thông Vào lúc: giờ ngày tháng năm
Có thể tìm hiểu luận văn tại:
- Thư viện của Học viện Công nghệ Bưu chính Viễn thông
Trang 3do thiết kế Xây dựng dữ liệu thử nghiệm trong kiểm thử phần mềm đòi hỏi chi phí lớn và biết
sử dụng phương pháp để tạo ra các dữ liệu thử nghiệm là rất quan trọng Theo các nghiên cứu: 50% chi phí phát triển phần mềm là dành cho phần thử nghiệm Vì vây, việc sinh dữ liệu tự động sẽ giúp chương trình thử nghiệm cung cấp các dữ liệu thử nghiệm cho phần mềm do đó sẽ hiệu quả đối với việc giảm chi phí và tăng chất lượng kiểm thử
Vì thế, em chọn đề tài " áp dụng thuật toán di truyền trong sinh các dữ liệu kiểm thử phần mềm" Nội dung của luận văn sẽ gồm 04 chương
Chương 1: Bài toán áp dụng thuật toán di truyền sinh dữ liệu kiểm thử phần mềm
Chương 2: Các kỹ thuật kiểm thử phần mềm
Chương 3: Thuật toán di truyền
Chương 4: Áp dụng thuật toán di truyền sinh các dữ liệu kiểm thử tự động
Trang 4CHƯƠNG 1: BÀI TOÁN ÁP DỤNG THUẬT TOÁN DI TRUYỀN
SINH DỮ LIỆU KIỂM THỬ PHẦN MỀM
vụ lớn và tốn nhiều thời gian Theo Tai [1980], Ince [1987]: 50% chi phí phát triển phần mềm
là dành cho phần thử nghiệm [4] Vì vậy mà có nhiều nghiên cứu nhằm tìm ra các công cụ
kiểm thử phần mềm tự động để giảm chi phí phát triển phần mềm Do đó, sinh dữ liệu kiểm thử
tự động là một công cụ hỗ trợ và giúp thử nghiệm chương trình để sản xuất dữ liệu thử nghiệm cho phần mềm Lý tưởng nhất, phần mềm kiểm tra đảm bảo không có lỗi phần mềm, nhưng trong thực tế, nó cho thấy lỗi của phần mềm vẫn xuất hiện Thậm chí bằng cách phát hiện các phản ứng của chúng, kiểm thử hệ thống không thể chứng minh hoàn toàn không có lỗi Một mục tiêu của kiểm thử phần mềm là tìm lỗi và tìm lỗi cấu trúc chương trình Tuy nhiên, vấn đề
đó có thể được quyết định khi nào ngừng thử nghiệm phần mềm, ví dụ như nếu không có lỗi được tìm thấy hay sau một khoảng thời gian tìm kiếm, nếu một số lỗi được tìm thấy
Trong ngành kỹ nghệ phần mềm, năm 1979, có một quy tắc nổi tiếng là: “Trong một dự
án lập trình điển hình, thì xấp xỉ 50% thời gian và hơn 50% tổng chi phí được sử dụng trong kiểm thử các chương trình hay hệ thống đã được phát triển” [2] Và cho đến nay, sau gần một
phần 3 thế kỷ, quy tắc đó vẫn còn đúng Đã có rất nhiều ngôn ngữ, hệ thống phát triển mới với các công cụ tích hợp cho các lập trình viên sử dụng phát triển ngày càng linh động Nhưng kiểm thử vẫn đóng vai trò hết sức quan trọng trong bất kỳ dự án phát triển phần mềm nào [15]
Nói chung mục tiêu của kiểm thử phần mềm là thiết kế một bộ số lượng tối thiểu của các
ca kiểm thử để cho biết các lỗi của phần mềm Như đã đề cập kiểm thử phần mềm rất tốn thời gian vì thế, kiểm thử phần mềm tự động có thể làm giảm đáng kể chi phí phát triển phần mềm Ngoài ra nó còn có một số lợi ích sau: việc chuẩn bị thử nghiệm có thể được thực hiện trước, các lần chạy thử nghiệm sẽ nhanh đáng kể và sự tự tin của các kết quả thử nghiệm có thể được tăng lên Tuy nhiên, kiểm thử phần mềm tự động không phải là một quá trình đơn giản Trong nhiều năm qua, nhiều nhà nghiên cứu đã đề xuất phương pháp khác nhau để tạo ra dữ liệu kiểm
Trang 5thử tự động, tức là phương pháp khác nhau cho phát triển dữ liệu thử nghiệm[16] Sự phát triển của kỹ thuật cũng sẽ hỗ trợ việc tự động hóa kiểm thử phần mềm và dẫn đến tiết kiệm chi phí đáng kể Như ứng dụng của kỹ thuật nhân tạo trong công nghệ phần mềm Một số nhà nghiên cứu đã sử dụng ứng dụng trên để kiểm thử phần mềm, để làm được điều này thì phải có thuật toán tìm kiếm phù hợp như mô phỏng luyện kim, thuật toán di truyền, tối ưu hóa đàn kiến là lựa chọn tốt cho sinh dữ liệu kiểm thử tự động [16] Một số nhà nghiên cứu đã áp dụng thuật toán di truyền trong sinh các dữ liệu kiểm thử phần mềm, và trong ngành khoa học máy tính, tìm kiếm lời giải tối ưu cho các bài toán là vấn đề đặc biệt được các nhà nghiên cứu quan tâm Mục đích chính của các thuật toán là tìm ra lời giải tốt nhất trong thời gian nhỏ nhất Các thuật toán như tìm kiếm trên danh sách, trên cây hoặc đồ thị sử dụng phương pháp đơn giản và trực quan nhất hoặc các thuật toán tìm kiếm metaheuristic áp dụng các tri thức về cấu trúc của không gian tìm kiếm nhằm giảm thời gian cần thiết cho việc tìm kiếm được sử dụng nhiều nhưng chỉ với không gian tìm kiếm nhỏ [5] Tuy nhiên, trong thực tiễn có rất nhiều bài toán tối
ưu với không gian tìm kiếm rất lớn cần phải giải quyết Vì vậy, việc đòi hỏi thuật giải chất lượng cao và sử dụng kỹ thuật trí tuệ nhân tạo đặc biệt rất cần thiết khi giải quyết các bài toán
có không gian tìm kiếm lớn GA là một trong những kỹ thuật tìm kiếm lời giải tối ưu đã đáp ứng được yêu cầu của nhiều bài toán và ứng dụng
Thuật toán di truyền (GA) đã được sử dụng thành công để tự động sinh ra các dữ liệu kiểm thử cho phát triển phần mềm trong ADA83 Các dữ liệu kiểm thử được lấy ra từ cấu trúc chương trình với mục đích là đi qua được các nhánh Các nghiên cứu sử dụng hàm fitness, các biến đầu vào được thể hiện trong mã nhị phân giống như hình ảnh bộ nhớ của máy Điểm mạnh của GA là ở việc xử lý dữ liệu đầu vào có cấu trúc là số phức, vị từ phức tạp, hàm chưa biết của các biến đầu vào Vì vậy, vấn đề sinh dữ liệu kiểm thử là một vấn đề tối ưu hóa
Kiểm thử ngẫu nhiên được sử dụng như một so sánh về hiệu quả dữ liệu kiểm thử được sinh ra bởi GA Lợi thế của GA là thông qua việc tìm kiếm và quá trình tối ưu hóa, các bộ kiểm thử được nâng cao và như vậy chúng đang ở gần biên miền con Thuật toán di truyền đưa ra nhiều cải tiến so với kiểm thử ngẫu nhiên khi miền con là nhỏ Phân tích đột biến được sử dụng
để thiết lập chất lượng dữ liệu kiểm thử được sinh ra và những ưu điểm, nhược điểm của chúng
Trang 6Thủ tục phần mềm là khác nhau với cấu trúc dữ liệu đầu vào (số nguyên, ký tự, mảng, bản ghi), cấu trúc chương trình với điều kiện 'if' và vòng lặp
Nhiều thử nghiệm cho thấy, GA cần ít thời gian để CPU đạt giải pháp toàn cục so với kiểm thử ngẫu nhiên
1.2 Đối tượng nghiên cứu
- Các kỹ thuật kiểm thử phần mềm: kiểm thử hộp trắng, kiểm thử hộp đen và kiểm thử hộp xám; trong đó, kiểm thử hộp trắng được nhấn mạnh hơn
- Lý thuyết cơ sở về thuật toán di truyền
- Thủ tục không có điều kiện vòng lặp và hàm có cấu trúc phức tạp như: thủ tục giải phương trình bậc hai và hàm tìm kiếm nhị phân
Trang 7CHƯƠNG 2: CÁC KỸ THUẬT KIỂM THỬ PHẦN MỀM
Mục tiêu của kiểm thử là phải thiết kế các trường hợp kiểm thử có khả năng cao nhất trong việc phát hiện nhiều lỗi với thời gian và công sức tối thiểu Do đó, có thể chia các kỹ thuật kiểm thử thành ba loại:
- Kỹ thuật kiểm thử hộp đen (Black - box Testing) hay còn gọi là kỹ thuật kiểm thử chức năng (Functional Testing)
- Kỹ thuật kiểm thử hộp trắng (White - box Testing) hay còn gọi là kỹ thuật kiểm thử cấu trúc (Structural Testing)
- Kỹ thuật kiểm thử hộp xám (Gray - box Testing)
2.1 Các kỹ thuật kiểm thử phần mềm
2.1.1 Kiểm thử hộp đen
Trong kiểm thử hộp đen, cấu trúc và cách xử lý trong chương trình được kiểm tra không quan trọng Mục đích là đặc tả các điều kiện vào ra của chương trình mà không cần quan tâm đến đặc điểm kỹ thuật của nó Trong phương pháp này, dữ liệu thử nghiệm cho phần mềm xây dựng từ các đặc điểm kỹ thuật của nó
ở mức người sử dụng hay mức hộp đen Việc thao tác tới dữ liệu đầu vào và định dạng dữ liệu
đầu ra là không rõ ràng, giống như một chiếc “hộp xám” Do đó, kiểm thử hộp xám là dạng
kiểm thử tốt, có sự kết hợp các kỹ thuật của cả kiểm thử hộp đen và hộp trắng
2.2 Sinh dữ liệu kiểm thử tự động
Kiểm thử tự động sẽ kiểm thử được toàn diện, mang lại những lợi ích như: giảm thời gian, công sức, nhân lực và chi phí cho kiểm thử phần mềm
2.2.1 Sinh các đường dẫn kiểm thử
Trang 8Sinh dữ liệu kiểm thử đường dẫn là kiểm thử hệ thống phần mềm sử dụng một tiêu chí kiểm thử mà có thể phủ đường dẫn, phủ lệnh, phủ nhánh…Hệ thống tự động sinh ra dữ liệu kiểm thử phù hợp với yêu cầu lựa chọn
2.2.2 Đặc tả dữ liệu
Điểm xuất phát của kiểm thử dữ liệu là từ đặc tả dữ liệu nằm trong phương thức kiểm thử hộp đen Phương thức này sẽ tạo ra ca kiểm thử và dữ liệu kiểm thử
2.2.3 Kiểm thử ngẫu nhiên
Kiểm thử ngẫu nhiên lựa chọn tùy ý dữ liệu kiểm thử từ miền đầu vào và sau đó dữ liệu kiểm thử được áp dụng cho chương trình được thử nghiệm Ưu điểm của nó là thực hiện đơn giản và tốn ít thời gian chạy
2.3 Kết chương
Kiểm thử phần mềm được sử dụng rộng rãi trong nhiều ứng dụng với việc nghiên cứu thử nghiệm khác nhau Trong chương 2 tác giả đã tập hợp các tài liệu nội để trình bày tổng quan về sự khác biệt cơ bản giữa một số kỹ thuật kiểm thử phần mềm như: kiểm thử hộp đen, kiểm thử hộp trắng, kiểm thử hộp xám và các phương pháp sinh dữ liệu kiểm thử tự động Kiểm thử hộp đen chú trọng vào việc kiểm tra các quan hệ vào ra và những chức năng giao diện bên ngoài, nó thích hợp hơn cho các hệ thống phần mềm lớn hay các thành phần quan trọng của chúng Kiểm thử hộp trắng xem xét chương trình ở mức độ chi tiết và phù hợp khi kiểm tra các mô-đun nhỏ Kiểm thử hộp trắng có thể không đầy đủ vì kiểm thử hết các lệnh không chứng tỏ là chúng ta đã kiểm thử hết các trường hợp có thể Ngoài ra chúng ta không thể kiểm thử hết các đường đi đối với các vòng lặp lớn
Trong chương này cũng cho ta thấy tư tưởng việc sinh dữ liệu kiểm thử bằng thuật toán
di truyền hiệu quả hơn so với sử dụng kiểm thử ngẫu nhiên
Trang 9CHƯƠNG 3: THUẬT TOÁN DI TRUYỀN
Những vấn đề về tối ưu hóa xảy ra ở mọi lĩnh vực, đặc biệt là trong lĩnh vực kĩ thuật Chính vì vậy, rất nhiều phương pháp tối ưu hóa đã được phát triển Tuy nhiên, những phương pháp này thường mắc lỗi với những hàm không liên tục hoặc không tính được đạo hàm ở mọi điểm hoặc những hàm bị nhiễu Chính vì vậy, những phương pháp tốt hơn có thể xử lý được những hàm này đang được phát triển Trong quá khứ, những cách tiếp cận sinh học và vật lí đang thu hút được sự chú ý trong việc giúp đỡ phát triển các phương pháp tối ưu hóa, bao gồm
cả hệ thống thần kinh, thuật toán di truyền Chương này sẽ giải thích những đặc điểm và phương thức của Thuật toán di truyền Ngay sau đó sẽ là một ví dụ về tối ưu hóa sử dụng Thuật toán di truyền
3.1 Giới thiệu về thuật toán di truyền
Thuật toán di truyền là đại diện điển hình cho những phương pháp và quá trình tìm kiếm mới dựa trên sự phân tích gen và thuyết của Darwin về sự tồn tại của kẻ mạnh nhất (thuyết chọn lọc tự nhiên) Có một sự trao đổi ngẫu nhiên các cấu trúc thông tin trong một quần thể các nhiễm sắc thể nhân tạo GA là một phiên bản trên máy tính của thuyết tiến hóa sinh học và đã tạo ra được kết quả tốt trong việc giải quyết các vấn đề tối ưu hóa Trong việc kiểm thử phần mềm, về cơ bản, ý tưởng là tìm kiếm miền cho những biến đầu vào mà thỏa mãn mục tiêu của việc kiểm thử
3.2 Ứng dụng của thuật toán di truyền
Thuật toán di truyền được ứng dụng trong nhiều lĩnh vực
3.3 Đặc trưng của thuật toán di truyền
Trang 103.3.3 Sự chọn lọc
Toán tử chọn lọc sẽ chọn ra 2 cá thể từ 1 thế hệ để trở thành bố mẹ cho quá trình kết hợp lại bao gồm lai ghép và đột biến Có nhiều cách khác nhau để chọn lựa cá thể, ví dụ như bằng phương pháp ngẫu nhiên hoặc dựa trên giá trị thích nghi
3.3.3.1 Chọn lọc dựa trên giá trị phẩm chất
3.3.3.2 Chọn lọc ngẫu nhiên
3.3.4 Lai ghép
Lai ghép diễn ra ở mức độ cá nhân Trước khi quá trình này diễn ra, cá thể có thể được biểu diễn dưới dạng nhị phân Trong khi lai ghép, 2 bố mẹ sẽ trao đổi các thông tin dưới dạng chuỗi – vật liệu di truyền trong 1 vị trí bất kì trong nhiễm sắc thể để tạo ra 2 chuỗi mới Quá trình lai ghép sẽ tìm kiếm những gen vượt trội trong vật liệu di truyền Mục đích của quá trình này là để tạo ra những cá thể tốt hơn dựa trên sự kết hợp thông tin di truyền từ 2 cá thể bố mẹ
3.3.5.1 Đột biến thông thường
3.3.5.2 Đột biến được tính toán trước
Trang 113.3.6.3 SURVIVE_3
3.3.6.4 SURVIVE_4
3.3.6.5 SURVIVE_5
3.4 Cấu trúc của thuật toán di truyền
Cấu trúc của GA được thể hiện trong Hình 3.1, mã tương ứng như trong Hình 3.2, trong
đó t là số thế hệ và P là quần thể
t:= 0 {Khởi tạo quần thể ngẫu nhiên }
Khởi tạo P(t)
{Khi điều kiện dừng chưa thỏa thì lặp}
While not kết thúc Đánh giá độ thích nghi P(t) Chọn lọc P(t+1) từ P(t)
{Kết hợp các gen của cha mẹ được chọn lọc}
Kết hợp P(t+1) với việc sử
dụng lai ghép
và đột biến Tồn tại
t:= t + 1 {Hết lặp}
Chọn lọc
Lai ghép Đột biến
Điều kiện dừng
Bắt đầu
Không
Thỏa
Kết thúc
Trang 12Như ví dụ trong phần này đã miêu tả, mục tiêu chính là đạt được phương án tối ưu cho 1 hàm Cách thức làm việc của GA cũng đã được miêu tả kỹ với ví dụ cơ bản
Những đặc điểm chính của GA được nêu ra dưới đây:
Tập trung vào những nhiễm sắc thể với sự thích nghi trên trung bình
Lợi dụng thông tin về 1 số lượng lớn các giá trị trong khi xử lí 1 tập thể nhỏ
Ngăn chặn việc tìm kiếm bị tắc nghẽn ở những điểm tối ưu tạm thời
Lợi dụng những kiến thức cũ được lưu trữ trong quần thể những phương thức để tạo ra phương thức mới có hiệu quả và chất lượng cao hơn
Trong trường hợp một quá trình chọn lọc dựa 1 phần trên sự phù hợp thì một quần thể ban đầu được tạo ra ngẫu nhiên với kích thước N sẽ nhanh chóng tạo ra 1 tập hợp với N bản sao của cá thể tốt nhất GA cân bằng lại sức ép chọn lọc này bằng phương pháp di truyền (lai ghép và đột biến) tiến tới sự đồng hóa bằng cách tạo ra sự đa dạng hóa trong những dạng mới của alen và những tập hợp lại của chúng
Trang 13CHƯƠNG 4: ÁP DỤNG THUẬT TOÁN DI TRUYỀN SINH CÁC DỮ
Trong phần này mô tả sự giao tiếp giữa phần mềm được kiểm tra và công cụ được kiểm tra trong đó sử dụng một trong hai phương pháp: thuật toán di truyền và số ngẫu nhiên Phương pháp số ngẫu nhiên được sử dụng như là việc thử nghiệm chiến lược để so sánh với thuật toán
di truyền
4.1.1 Thử nghiệm sử dụng kiểm thử ngẫu nhiên
Để đo lường hiệu quả của thử nghiệm sử dụng thuật toán di truyền, thử nghiệm ngẫu nhiên được thực hiện Các thế hệ ngẫu nhiên của kiểm thử được kiểm tra để xác định thành viên của miền con nào đó, với một xác suất đồng nhất liên quan đến lực lượng của miền con Trong một số trường hợp, cơ hội của kiểm tra hàm, miền con có liên quan tới toàn bộ miền được giảm thiểu Lúc này, số ngẫu nhiên được sử dụng nhằm sinh ra dữ liệu thử nghiệm mà không sử dụng các thông tin phản hồi từ cuộc thử nghiệm trước đó Các thủ tục sẽ được thử nghiệm với mong muốn rằng các nhánh sẽ được thông qua
4.1.2 Cây và đồ thị luồng điều khiển
Cấu trúc một chương trình hay thủ tục có thể được thể hiện bằng biểu đồ luồng điều khiển.Xét ví dụ được đưa ra trong hình 4.1 mô tả như sau:
Trang 14if A <= B then Read (2);
if A = B then Read (3) Else
if A < B then read (4) else read (5);
Hình 4 1 Ví dụ về đồ thị luồng điều khiển
Để kiểm tra xem các nhánh có được đi qua hay không thì ta sẽ sử dụng thủ tục CHECK_BRANCH và LOOKING_BRANCH Trong đó, CHECK_BRANCH sẽ thực hiện để ghi lại việc các nhánh đã được thực hiện LOOKING_BRANCH tính toán giá trị fitness trong trường hợp nút anh chị em hoặc một trong những nút kế cận tiếp theo nó không được thực hiện
Thông số thiết lập cho GA:
Chọn lọc cha mẹ để kết hợp lại là ngẫu nhiên Các gen (bit) đột biến được tô đậm trong quần thể con
Sự thích nghi được tính toán theo hàm fitness nghịch đảo Lai ghép đơn
Xác suất tồn tại PS = 0.5 Xác suất đột biến Pm = 0.1
Ta có các bảng kết quả thể hiện các thế hệ của quần thể thông qua thuật toán di truyền
Bảng 4.1 Thế hệ đầu tiên
P i A B Số
nút
Đường dẫn
Nhiễm sắc thể
fitness f i,norn f i,accu