Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 65 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
65
Dung lượng
2,17 MB
Nội dung
ĐẠI HỌC QUỐC GIA HÀ NỘI TRƯỜNG ĐẠI HỌC CÔNG NGHỆ TRẦN THỊ HỒNG SIM NGHIÊNCỨUMỘTSỐPHƯƠNGPHÁPSINHĐẦUVÀOKIỂMTHỬTỰĐỘNGCHOANDROID LUẬN VĂN THẠC SĨ CÔNG NGHỆ THÔNG TIN Hà Nội – 2017 ĐẠI HỌC QUỐC GIA HÀ NỘI TRƯỜNG ĐẠI HỌC CÔNG NGHỆ TRẦN THỊ HỒNG SIM NGHIÊNCỨUMỘTSỐPHƯƠNGPHÁPSINHĐẦUVÀOKIỂMTHỬTỰĐỘNGCHOANDROID Ngành: Công Nghệ Thông Tin Chuyên ngành: Kỹ thuật Phần mềm Mã số: 60480103 LUẬN VĂN THẠC SĨ CÔNG NGHỆ THÔNG TIN NGƯỜI HƯỚNG DẪN KHOA HỌC: PGS TS TRƯƠNG ANH HOÀNG Hà Nội – 2017 Lời cam đoan Tôi xin cam đoan nội dung luâṇ văn với đề tài “Nghiên cứusốphươngphápsinhđầuvàokiểmthửtựđộngcho Android” cơng trình nghiêncứu thân, xuất phát từ yêu cầu phát sinh công việc để hình thành hướng nghiêncứu Các số liệu có nguồn gốc rõ ràng tuân thủ nguyên tắc, kết thực nghiệm trình bày luận văn thu thập trình nghiêncứu trung thực, chưa công bố trước Hà Nội, Ngày 12 tháng 12 năm 2017 Tác giả luận văn Trần Thị Hồng Sim Lời cảm ơn Đầu tiên, em xin gửi lời cảm ơn chân thành biết ơn sâu sắc tới PGS.TS Trương Anh Hoàng, giảng viên môn Kỹ thuật Phần mềm, khoa Công Nghệ Thông Tin, trường Đại học Công Nghệ, Đại học Quốc Gia Hà Nội Trong suốt trình học tập thực luận văn này, thầy người trực tiếp hướng dẫn đưa định hướng quý báu cho q trình nghiêncứu Chính nhờ nhiệt tình bảo, dành thời gian quý báu thầy suốt q trình hướng dẫn mà em hồn thành việc nghiêncứu Em xin gửi lời cảm ơn chân thành đến thầy giáo, cô giáo giảng viên trường Đại học Công Nghệ giảng dạy, truyền đạt kiến thức cho em hai năm học trường Những kiến thức mà thầy cô truyền thụ tảng cho em công việc sau kiến thức tiên việc nghiêncứu tìm hiểu đề tài luận văn Và cuối cùng, xin gửi lời cảm ơn đến bạn bè, đồng nghiệp đặc biệt gia đình, người ln bên động viên, giúp đỡ, tạo điều kiện tốt cho suốt trình học tập thực luận văn Hà Nội, tháng 12/2017 Trần Thị Hồng Sim Mục lục Mục lục Đặt vấn đề Chương Nền tảng Android 1.1 Giới thiệu chung Android 1.2 Bản kê khai ứng dụng AndroidManifest 12 1.2.1 Hoạt động (activity) 12 1.2.2 Dịch vụ (service) 15 1.2.3 Bộ nhận quảng bá (Broadcast Receiver) 16 1.2.4 Trình cung cấp nội dung (Content Provider) 17 Chương Sinhđầuvàokiểmthửtựđộng 18 2.1 Phươngphápkiểmthử Fuzz (Fuzzing) 20 2.1.1 Kiểmthử Fuzz la gı? 20 ̀̀ ̀̀ 2.1.2 Cac giai đoaṇ cua kiểmthư Fuzz 21 ̀́ ̀̉ ̀̉ 2.1.3 Phân loaịkiểm thử Fuzz 26 2.1.4 Cac lỗhổng đươcc̣ phat hiêṇ bơi kiểmthử Fuzz 27 ̀́ ̀́ ̀̉ 2.1.5 Ưu nhươcc̣ điểm cua kiểmthư Fuzz 29 ̀̉ ̀̉ 2.1.6 Mộtsố công cụ kiểm thửFuzz 29 2.2 Phươngpháp dựa mơ hình (Model based Testing) 29 2.2.1 Kiểmthử dựa mơ hình gì? 29 2.2.2 Các loại kiểmthử dựa mơ hình 31 2.2.3 Các mơ hình khác kiểmthử 31 2.2.4 Tiến trình kiểmthử dựa mơ hình 33 2.2.5 Ưu nhược điểm kiểmthử dựa mơ hình 41 2.2.6 Mộtsố cơng cụ kiểmthử dựa mơ hình 42 Chương Môṭsốcông cụ sinhđầuvàokiểmthửtựđộngcho ứng dụng Android 43 3.1 Công cu c̣kiểm thửngâũ nhiên – Monkey tool 43 3.1.1 Tổng quan chung vềMonkey tool 43 3.1.2 Kiểmthử Fuzz với Monkey 44 3.2 Công cu c̣kiểm thư dưạ mô hınh – DroidBot 47 ̀̉ ̀̀ 3.2.1 Tổng quan chung vềDroidBot 47 3.2.3 Kiểmthử dựa mơ hình với DroidBot 49 Chương 4: Nghiêncưu thưcc̣ nghiêṃ 52 ̀́ 4.1 Thiết lâpc̣ môi trương thực nghiệm 52 ̀̀ 4.1.1 Chuẩn bị công cụ kiểmthử 52 4.1.2 Chuẩn bị thiết bi kịểmthử 53 4.2 Xây dựng ứng dungc̣ kiểmthử 53 4.3 Tiến hành kiểmthử 55 4.4 Kết quảthưcc̣ nghiêṃ 58 4.5 Phân tích – đánh giá 60 4.4.1 Tính hiệu việc phát lỡi 60 4.4.2 Tính hiệu chiến lược khám phá 60 4.4.3 Tính khả dụng 62 Kết luận 63 Tài liệu tham khảo 65 Đặt vấn đề Như biết nhu cầu sử dụng thiết bị di động thông minh người ngày cao, số lượng nhà sản xuất thiết bị ngày nhiều đa dạng chủng loại, mẫu mã Mỗi điện thoại thông minh ngày không đơn để nghe, gọi nhắn tin trước, mà giống máy tính để bàn thu nhỏ, lướt web, chat wifi, mua hàng trực tuyến, tìm kiếm thơng tin, xử lý thông tin mạng, kết nối thiết bị ngoại vi, điều khiển ô tô, điều khiển robot, giải công việc với đối tác nơi đâu vơ vàn lợi ích lớn lao khác Để thiết bi c̣di đơngc̣ có sức mạnh trước hết nhờ công ty phát triển phần mềm mà cụ thể Google với Android, Apple với iOS Microsoft với Windows Phone Các công ty tập trung lớn nguồn lực họ vào việc phát triển tảng di động kểtrên để đưa chúng lên tầm cao trước đây, mà ngày thường hay gọi “HỆ ĐIỀU HÀNH” Trong số hệ điều hành cho thiết bị di động, Android hệ điều hành phở biến lớn mạnh Với tính chất nguồn mở, Androidthu hút nhiều nhà sản xuất thiết bị giới Sony, Samsung, LG, HTC, v.v… Ngày Android không sử dụng hệ điều hành điện thoại thơng minh máy tính bảng, mà ứng dụng vào dự án khác như: đồng hồ thông minh (smartwatch), nhà thông minh (smart home), tivi thông minh (smart tivi), robot, điều khiển ô tơ, kính thực thể ảo … Theo số liệu thống kê, Android nắm giữ 86% [1] tổng thị phần cho hệ điều hành di động Sự phổ biến ngày tăng thiết bị Android có tác động trực tiếp đến cửa hàng ứng dụng Google Play Đây cửa hàng ứng dụng lớn giới có 3.3 triệu ứng dụng (tháng 9/2017) có sẵn để tải xuống Chỉ riêng quý năm 2017, có gần 17 tỷ lượt tải xuống ứng dụng từ Google Play Với số thống kê trên, thấy việc xây dựng ứng dụng cho thiết bị Android đã, xu hướng phát triển mạnh mẽ bền vững Trong vòng đời phát triển phần mềm, kiểmthử hoạt động quan trọng bỏ qua đối với phần mềm nói chung ứng dụng Android nói riêng Hoạt độngkiểmthử tiến hành cách thủ công nhiên điều thời gian, tốn chi phí đơi khơng mang lại hiệu cao Thậm chí vài phươngphápkiểm thử, hoạt độngkiểmthửthủ công thực Do đòi hỏi phải có hình thức kiểmthửtựđộng hỗ trợ Tuy nhiên kiểmthửtựđộng có nhiều kỹ thuật khác với mức đô c̣tư c̣đôngc̣ khác Đối với nhiều công cụ kiểm thử, cần có tham gia kiểmthử viên vào trình Kiểmthử viên phải xây dựng kịch kiểmthử hoàn tồn thủ cơng để cơng cụ kiểmthử thực thi từ kịch Đây công việc không đơn giản, tốn thời gian nhân lực Vậy câu hỏi đặt ra, để hoạt độngkiểmthử hoàn toàn tự động, từ thao tác sinh kịch kiểmthử việc thực thi kịch kiểmthử Đã có nhiều nghiêncứu kỹ thuật sinh liệu kiểmthửtựđộng Và nội dung luận văn tìm hiểu kỹ thuật sinh liệu kiểmthửtự động, cụ thể áp dụng vào trình kiểm tra tựđộngcho ứng dụng Android Cụ thể luận văn xây dựng bao gồm chương với chi tiết sau: - Chương 1: Trình bày tởng quan hệ điều hành Android bao gồm tầng Android cấu trúc tập tin Manifest tập tin kê khai thông tin thiết yếu ứng dụng với hệ thống - Chương 2: sâu vào tìm hiểu hai phươngphápsinhđầuvàokiểmthửtựđộngphươngphápkiểmthử Fuzz (Fuzzing) phươngphápkiểmthử dựa mơ hình (model-based testing) - Chương 3: tìm hiểu hai công cụ kiểmthửtựđộngchoAndroid đại diện cho hai phươngphápkiểmthử Fuzz kiểmthử dựa mơ hình Monkey DroidBot - Chương 4: tiến hành nghiêncứu thực nghiệm cách sử dụng hai công cụ Monkey DroidBot để kiểm tra cho danh sách ứng dụng Android, đồng thời đo lại kết số lượng lỡi tìm được, độ bao phủ mã nguồn, từ đưa phân tích đánh giá cho kết thực nghiệm đạt Cuối kết luận tài liệu tham khảo Chương Nền tảng Android 1.1 Giới thiệu chung AndroidAndroid hệ điều hành mã nguồn mở, dựa Linux, tạo cho loạt thiết bị yếu tố hình thức Sơ đồ hình 1.1 cho biết thành phần tảng Android [2]: - Tầng hạt nhân Linux: tảng hệ điều hành Android hạt nhân Linux Tất hoạt động thiết bị phải thực thi tầng Tầng bao gồm tiến trình quản lý nhớ (memory management), giao tiếp với phần cứng (driver model), bảo mật (security), quản lý tiến trình (process) Sử dụng hạt nhân Linux cho phép Android tận dụng tính bảo mật then chốt cho phép nhà sản xuất thiết bị phát triển trình điều khiển phần cứng cho hạt nhân nổi tiếng - Lớp trừu tượng phần cứng (Hardware Abstraction Layer - HAL): cung cấp giao diện chuẩn để phần cứng thiết bị giao tiếp với tảng Java API cấp cao Lớp trừu tượng phần cứng bao gồm nhiều mô đun thư viện, mỗi mô đun lại thực thi giao diện cho loại thành phần phần cứng cụ thể, chẳng hạn mô đun máy ảnh mô đun Bluetooth Khi khung API (API framework) thực gọi để truy cập phần cứng thiết bị, hệ thống Android tải mô đun thư viện cho thành phần phần cứng - Thời gian chạy Android (Android Runtime – ART): đối với thiết bị chạy Android phiên 5.0 (API 21) trở lên, mỡi ứng dụng chạy tiến trình với thể thời gian chạy Android Thời gian chạy Android viết để chạy nhiều máy ảo thiết bị có nhớ thấp cách thực thi tập DEX, định dạng byte-code thiết kế đặc biệt cho Android, tối ưu hóa cho nhớ tối thiểu Xây dựng công cụ, chẳng hạn Jack, biên soạn nguồn Java vào mã DEX byte-code, chạy tảng AndroidMộtsố tính thời gian chạy Android bao gồm: • Biên dịch trước thời hạn (Ahead-Of-Time - AOT) thời hạn (Just-InTime - JIT) • Tối ưu hóa thu gom rác (Garbage Collection - GC) • Hỡ trợ gỡ lỡi tốt hơn, bao gồm hồ sơ mẫu riêng, ngoại lệ chuẩn đoán chi tiết, báo cáo cố khả thiết lập điểm quan sát để giám sát lĩnh vực cụ thể Trước phiên Android 5.0 (Cấp độ API 21), Dalvik thời gian chạy Android Nếu ứng dụng người dùng chạy tốt ART, làm việc Dalvik, ngược lại khơng Android bao gồm tập hợp thư viện chạy lõi cung cấp hầu hết chức ngơn ngữ lập trình Java, bao gồm số tính ngơn ngữ Java 8, mà khuôn khổ Java API sử dụng - Tầng thư viện C/C++: nhiều thành phần dịch vụ cốt lõi hệ thống, HAL ART, xây dựng từ mã nguồn cục yêu cầu thư viện gốc viết C C++ Nền tảng Android cung cấp API khung Java để phô bày tính sốthư viện gốc cho ứng dụng Ví dụ, truy cập vào OpenGL ES thông qua Java OpenGL API khung Android để thêm hỗ trợ vẽ thao tác đồ họa 2D 3D ứng dụng Nếu ứng dụng phát triển yêu cầu mã nguồn C C ++, ta sử dụng Android NDK để truy cập vàosốthư viện tảng gốc trực tiếp từ mã nguồn gốc - Tầng khung Java API: tồn tập hợp tính hệ điều hành Android có sẵn thơng qua API viết ngôn ngữ Java Các API tạo thành khối xây dựng sẵn mà hoàn tồn lấy sử dụng muốn xây dựng ứng dụng Android Các API giúp đơn giản hóa việc tái sử dụng phần lõi Android thành phần dịch vụ hệ thống mơ đun sau: • View System phong phú vàcókhả mở rơṇg, người dùng có thểsửdungc̣ để xây dưngc̣ UI ứng dung,c̣ bao gồm danh sách, lưới, hơpc̣ văn bản, nút bấm, vàthâṃ chí mơṭtrınh̀ duṭweb nhúng • Trınh̀ quản lýtài nguyên, cung cấp quyền truy cập vào tài nguyên không ma ̃ nguồn làch̃i cucc̣ bộ, đồhọa, têpc̣ bốcucc̣ • Trınh̀ quản lýthông báo: cho phép tất cảcác ứng dungc̣ hiển thi c̣cảnh báo tùy chınh̉ trạng thái • Trınh̀ quản lýhoaṭđơng:c̣ quản lývòng đời ứng dungc̣ vàcung cấp ngăn xếp trởlaịchuyển hướng thông dungc̣ 10 DroidBot cung cấp danh sách API dễ sử dụng cho việc tìm nạp thơng tin từ thiết bị gửi đầuvào tới thiết bị Ví dụ, lập trình viên đơn giản gọi hàm device.dump_views () để lấy danh sách UI view gọi hàm view.touch () để gửi đầuvào tới view Bước 4: Cụ thể hóa kiểmthử Để kiện đầuvào tạo bước thực thiết bị kiểm thử, DroidBot tìm nạp thông tin thiết bị/ ứng dụng từ thiết bị gửi đầuvàokiểmthử tới thiết bị thông qua ADB Các kiện đầuvàosinh dưới dạng lệnh ADB để thiết bị thực thi Hình 3.5: Các kiện sinh DroidBot Bước 5: Thực thi kiểmthử Các kiện sinh DroidBot thông qua ADB thực thi thiết bị kiểmthửĐồng thời q trình thực thi, thơng tin giám sát lưu lại: - Thông tin tiến trình: DroidBot giám sát trạng thái tiến trình mức hệ thống sử dụng lệnh ps giám sát trạng thái tiến trình mức ứng dụng sử dụng cơng cụ dumpsys Android - Logs: logs bao gồm dấu vết phương thức kích hoạt mỡi đầuvàokiểmthử log sinh ứng dụng Chúng lấy từ cơng cụ định hình Android logcat 51 Chương 4: Nghiêncứu thưcc̣ nghiêm Trong chương này, tiến hành thực thực nghiệm nhỏ: kiểmthửsố ứng dụng Android với công cụ kiểmthửtựđộng giới thiệu chương Monkey DroidBot kiểmthửthủ cơng Trong q trình thực nghiệm tiến hành việc đo đạc số liệu thời gian thực hiện, số lỡi tìm được, độ bao phủ mã nguồn, từ giúp đưa ưu, nhược điểm phươngpháp Các bước tiến hành thực nghiệm thể hình 4.1 Hình 4.1: Quy trình tiến hành thực nghiệm 4.1 Thiết lâpc̣ mơi trường thực nghiệm 4.1.1 Chuẩn bị công cụ kiểmthử Về phía kiểmthửtự động, hai cơng cu c̣đươcc̣ lưạ choṇ cho thưcc̣ nghiêṃ làMonkey đaịdiêṇ cho kỹthuâṭkiểm thửngâũ nhiên/ kiểm thửmờ vàDroidBot đaịdiêṇ kỹthuâṭ kiểmthử dưạ mô hình Kiểmthửthủ cơng: thực người dùng Cài đăṭMonkey: Do Monkey tích hợp phát triển phần mềm Android (Android SDK) nên đểchaỵ đươcc̣ Monkey trước hết cần tiến hành cài đăṭAndroid SDK Tiếp theo làcài đăṭcác biến mơi trường: Taọ biến ANDROID_HOME = ~/Android/Sdk Taọ biến Path = %PATH%; %ANDROID_HOME%\tools; %ANDROID_HOME%\platformtools 52 Cài đăṭDroidBot Cài đăṭPython 2.7.14 Cài đặt gói liên quan: - Androguard 3.0.1 - Networkx 2.0 - Pillow 4.3.0 Cài đăṭDroidbot: chép ma ̃nguồn từ: https://github.com/honeynet/droidbot Thưcc̣ hiêṇ cài đăṭDroidot lênh:c̣ pip install –e droidbot Kiểmthử thủ công Người dùng cài đặt ứng dụng thiết bị kiểm thử, tiến hành thao tác ứng dụng cách ngẫu nhiên theo kịch người dùng thông thường khoảng thời gian ~ phút cho mỗi ứng dụng 4.1.2 Chuẩn bị thiết bi kịểmthử Sử duṇg Samsung Galaxy Note (N920I), hệ điều hành Android Nougat 7.0 để cài đăṭcác ứng dụng vàtiến hành kiểmthử 4.2 Xây dựng ứng dungc̣ kiểmthử Bước 1: Tải mã nguồn ứng dụng: STT TÊN ỨNG DỤNG 10 11 12 13 14 AAT A Photo Manager AnyMemo Calculator Camera Catan Dice Game Clear List FreeShisen Giggity Glucosio Good Weather Inbox Pager Internet Radio Clip Stack LINK MÃ NGUỒN https://f-droid.org/en/packages/ch.bailu.aat/ https://f-droid.org/en/packages/de.k3b.android.androFotoFinder/ https://f-droid.org/en/packages/org.liberty.android.fantastischmemo/ https://f-droid.org/en/packages/com.xlythe.calculator.material/ https://f-droid.org/en/packages/com.simplemobiletools.camera/ https://f-droid.org/en/packages/com.ridgelineapps.resdicegame/ https://f-droid.org/en/packages/douzifly.list/ https://github.com/knilch0r/freeshisen https://f-droid.org/en/packages/net.gaast.giggity/ https://f-droid.org/en/packages/org.glucosio.android/ https://f-droid.org/en/packages/org.asdtm.goodweather/ https://f-droid.org/en/packages/net.inbox.pager/ https://f-droid.org/en/packages/community.peers.internetradio/ https://f-droid.org/packages/com.catchingnow.tinyclipboardmanager/ Bảng 4.1: Danh sách ứng dụng thực nghiệm 53 Danh sách ứng dungc̣ lưạ choṇ cho thưcc̣ nghiêṃ thể bảng 4.1 Các ứng dungc̣ đươcc̣ lấy ma ̃nguồn từhttps://f-droid.org/ [27] , cửa hàng ứng dụng Android mã nguồn mở Bước 2: Sử dụng Jacoco, build lại apk để đo độ bao phủ mã nguồn: Sau có mã nguồn ứng dụng, sửdungc̣ Jacoco đểxây dựng laịapk, phucc̣ vu c̣cho việc đo độ bao phủ mã nguồn Các bước xây dựng lại apk sử dụng Jacoco Gradle: - Xây dựng môṭthư viêṇ CoverageLib đểlấy tâpc̣ tin ec chứa thông tin bao phủ mã nguồn Hình 4.2: Thư viện CoverageLib - Cấu hình tâpc̣ tin build.gradle: • Áp dungc̣ Jacoco bâṭtınh́ đo độ bao phủ: apply plugin: 'jacoco' buildTypes { debug{ testCoverageEnabled true } } • Taọ task sinh báo cáo bao phủ mã nguồn task jacocoTestReportAndroidTest(type: JacocoReport) { def coverageSourceDirs = [ "${rootDir}/covData/src/main/java" ] group = "Reporting" description = "Generates Jacoco coverage reports" reports { csv.enabled true 54 xml{ enabled = true destination "${rootDir}/covData/reportcov/jacoco/jacoco.xml" } html{ enabled true destination "${rootDir}/covData/reportcov/jacocoHtml" } } classDirectories = fileTree( dir: "${rootDir}/covData/classfiles", excludes: ['**/R.class', '**/R$*.class', '**/BuildConfig.*', '**/Manifest*.*', ] ) sourceDirectories = files(coverageSourceDirs) additionalSourceDirs = files(coverageSourceDirs) //poiter to coverage data executionData=fileTree("${rootDir}/covData/covfiles") } 4.3 Tiến hành kiểmthử Bươc 1: Cai đăṭcac ưng dungc̣ va lần lươṭthưcc̣ hiêṇ kiểm tra tựđộng vơi Monkey ́́ ̀̀ ̀́ ̀́ ̀̀ ̀́ vàDroidbot, kiểm tra thủ công người dùng CHẠY DROIDBOT STT CHẠY MONKEY TÊN ỨNG DỤNG 1000 5000 10000 1000 5000 10000 KIỂMTHỬTHỦ CÔNG ~ phút AAT O O O A Photo Manager O O O AnyMemo O O O O O O O Calculator O O O O O O O Camera O O O O O O O Catan Dice Game O Clear List O FreeShisen O O O Giggity O O O 10 Glucosio O 11 Good Weather 12 O O O O O O O O O O O O O O Inbox Pager O O O O O 13 Internet Radio O O O O O 14 Clip Stack O O O O O Ghi O O O O O O Thực thi kiểmthử Bảng 4.2: Danh sách ứng dụng thực thi kiểmthử 55 Với việc kiểm tra tự động, mỡi ứng dụng thực môṭlần hoăcc̣nhiều lần với số kiêṇ mỗi lần kiểm tra làkhác (1000 sư c̣kiên,c̣ 5000 sư c̣kiên,c̣ 10000 kiên)c̣ Với việc kiểmthửthủ công, mỗi ứng dụng kiểm tra khoảng thời gian từ ~ phút, chi tiết bảng 4.2 Với Monkey, thưcc̣ hiêṇ chaỵ lênh:c̣ adb shell monkey -p throttle ignore-crashes - -ignore-timeouts ignore-security-exceptions -v c̣ > log.txt Với Droidbot, thưcc̣ chaỵ lênh:c̣ droidbot –a -o -count -grant_perm Kiểmthửthủ công: thao tác với ứng dụng kiểm tra tay, thực kịch người dùng thông thường cách ngẫu nhiên, không theo kịch có sẵn Người dùng khám phá chức ứng dụng nhiều khoảng thời gian từ ~ phút Đồng thời với quátrınh̀ kiểm tra Monkey, Droidbot kiểm tra thủ công, chaỵ lênḥ đểlấy tâpc̣ tin ec sau mỗi khoảng thời gian 30 giây: :lable timeout -t 30 adb shell am broadcast -a SQA.COM.ACTION.GETCOVERAGE.DATA goto lable Bước 2: lấy tâpc̣ tin ec vàsinh báo cáo cho độ bao phủ mã nguồn - Các tâpc̣ tin ec sinh sau mỗi lần lênḥ SQA.COM.ACTION.GETCOVERAGE.DATA đươcc̣ thưcc̣ hiêṇ adb shell am broadcast -a Các tâpc̣ tin đươcc̣ lưu thiết bi, tc̣ rong mơṭthư mucc̣ đươcc̣ có tên chınh́ làtên gói (package) tương ứng mà tập tin ec đươcc̣ sinh 56 Hình 4.3: Thư mục chứa tập tin ec - Các tâpc̣ tin ec đươcc̣ đưa vàothư mucc̣ covfiles taọ trước Hình 4.4: Cây thư mục covData - Chaỵ lênḥ reporting ởGradle Android Studio đểsinh báo cáo Hình 4.5: Sinh báo cáo bao phủ mã nguồn Gradle 57 - Sau Gradle hoàn thành viêcc̣chạy build, báo cáo mức độ bao phủ se ̃ đươcc̣ sinhthư mucc̣ reportcov, cho ta thông tin vềkết bao phủ mã nguồn: Hình 4.6: Báo cáo bao phủ mã nguồn Bước 3: Tổng hơpc̣ sốliêụ vàphân tıch́ kết - Phân tıch́ các tâpc̣ tin log, thống kê sốlươngc̣ lỗi tım̀ đươcc̣ - Tổng hơpc̣ số liêụ kết quảđo độ bao phủ 4.4 Kết quảthưcc̣ nghiêm Sau quátrınh̀ kiểm tra ứng dụng hai công cụ DroidBot, Monkey kiểm tra thủ công, kết thutừ thực nghiệm sau: Thời gian kiểm tra ứng dụng trung bình thể bảng 4.3 PHƯƠNG THỨC DROIDBOT KIỂMTHỬ 1000 THỜI GIAN 117 phút MONKEY 5000 10000 610 phút 1210 1000 5000 10000 THỦ CÔNG 3.55 phút 14.04 28.69 ~ phút phút TRUNG BÌNH KIỂMTHỬ phút phút Bảng 4.3: Thời gian thực thi kiểmthửSố lượng lỗi crash phát phương thức kiểmthử thể bảng 4.4 DROIDBOT STT MONKEY KIỂMTHỬTHỦ CÔNG TÊN ỨNG DỤNG 1000 5000 10000 1000 5000 10000 ~ phút AAT O O O A Photo Manager O O O AnyMemo O O O O O O O Calculator O O O O O O O Camera O O O O O Catan Dice Game O O Clear List O FreeShisen O O O O O 58 O O O O O Giggity O O 10 Glucosio O O O O O 11 Good Weather O O O O O 12 Inbox Pager O O O O O 13 Internet Radio O O O O O 14 Clip Stack O O O O O Thực thi kiểmthử O O O O O O Có lỗi xảy Bảng 4.4: Danh sách số lượng lỗi crash Mức độ bao phủ mã nguồn phương thức kiểm thử: DROIDBOT TÊN ỨNG 1000 DỤNG 5000 Instructions Branches AAT A Photo Manager AnyMemo Calculator Camera Catan Dice Game Clear List FreeShisen Giggity Glucosio Good Weather Inbox Pager Internet Radio Clip Stack 18% 10% 26% 32% 46% 77% 47% 30% 50% 10% 31% 7% 92% 61% 10% 6% 18% 19% 33% 25% 23% 11% 38% 7% 16% 2% 74% 44% Trung bình 38% 23% 10000 Instructions Branches Instructions Branches 26% 36% 18% 21% 40% 38% 26% 23% 47% 23% 47% 22% 14% 10% 13% 8% 62% 45% 67% 51% 37% 23% 41% 26% Bảng 4.5: Độ bao phủ mã nguồn DroidBot MONKEY TÊN ỨNG 1000 DỤNG AAT A Photo Manager AnyMemo Calculator Camera Catan Dice Game Clear List FreeShisen Giggity Glucosio Good Weather 5000 Instructions Branches 31% 18% 12% 39% 45% 85% 44% 66% 51% 9% 20% 20% 11% 9% 27% 32% 51% 15% 54% 37% 6% 8% 10000 Instructions Branches Instructions 26% 51% 55% 18% 38% 38% 19% 57% 56% 14% 45% 42% 43% 15% 53% 28% 9% 63% 7% 35% 19% 69% 12% 41% 59 Branches Inbox Pager Internet Radio Clip Stack 2% 37% 43% 0% 13% 32% 2% 92% 49% 1% 73% 40% 13% 94% 65% 5% 78% 52% Trung bình 36% 23% 43% 29% 49% 35% Bảng 4.6: Độ bao phủ mã nguồn Monkey KIỂMTHỬTHỦ CÔNG TÊN ỨNG DỤNG ~ phút Instructions AAT A Photo Manager AnyMemo Calculator Camera Catan Dice Game Clear List FreeShisen Giggity Glucosio Good Weather Inbox Pager Internet Radio Clip Stack Trung bình 48% 35% 35% 55% 65% 88% 54% 90% 21% 29% 75% 12% 94% 69% 55% Branches 32% 24% 23% 40% 45% 54% 33% 75% 11% 16% 48% 5% 78% 54% 38% Bảng 4.7: Độ bao phủ mã nguồn kiểmthửthủ cơng 4.5 Phân tích – đánh giá 4.4.1 Tính hiệu việc phát lỗi Dựa số liệu lỡi bảng 4.4 ta thấy hai công cụ Droibot Monkey hiệu việc tìm lỡi so với kiểmthửthủ công Tuy nhiên Monkey chạy với số lượng kiện lớn việc phát lỡi cao so với DroidBot 4.4.2 Tính hiệu chiến lược khám phá Monkey sinh kiện cách ngẫu nhiên, không theo luồng định Do vậy, thực chạy với số lượng kiện nhỏ có khả khám phá nhiều chức khác ứng dụng Trong DroidBot sinh kiện dựa mơ hình UI, sử dụng chiến lược tham ăn thuật toán duyệt theo chiều rộng, kiện sinh theo luồng định Chính thực thi với số lượng kiện nhỏ khả bao phủ mã nguồn Monkey tốt so với DroidBot 60 Mặc dù vậy, cơng cụ tựđộng có hạn chế gặp phải giao diện có trường nhập thơng tin chứa yêu cầu đặc biệt, giao diện mà thành phần thông tin không hiển thị sẵn hình, cần phải qua thao tác gạt sang phải/ trái lên/ xuống để hiển thị Trong trường hợp này, hai cơng cụ gặp khó khăn để vượt qua, chí mắc kẹt Hình 4.7: Màn hình bắt đầu ứng dụng quản lý bệnh tiểu đường Hình 4.7 giao diện bắt đầu ứng dụng quản lý bệnh tiểu đường Chỉ nhập thông tin đầy đủ hợp lệ, chạm vào “GET STARTED” mới bắt đầu sử dụng ứng dụng Tuy nhiên, vấn đề xảy trường thông tin nhập tuổi hợp lệ số nhập vào nhỏ 100 Điều hồn tồn gây khó khăn cho hai cơng cụ tự động, không may mắn để nhập thơng tin t̉i hợp lệ, việc kiểm tra bị tắc khám phá ứng dụng sâu thêm Chính hạn chế mà ta thấy kết bao phủ mã nguồn hai công cụ tựđộng thấp so với việc kiểmthửthủ công 61 ĐỘ BAO PHỦ MÃ NGUỒN Monkey Kiểmthửthủ công INSTRUCTIONS 29% 24% 38% 43% 55% 39% Droidbot B RANCH ES Biểu đồ 4.1: Độ bao phủ mã nguồn 4.4.3 Tính khả dụng Cả Monkey DroidBot cơng cụ chạy dòng lệnh, việc cài đặt sử dụng không phức tạp Tuy nhiên, với số lượng kiện, thời gian thực DroidBot lớn nhiều so với Monkey Có chênh lệch q lớn phần với mỗi kiện, DroidBot lưu lại kịch thực hiện, ảnh chụp hình lưu lại luồng giao diện qua Mặc dù với khoảng thời gian phải bỏ nhiều tại, hiệu suất DroidBot chưa thực tốt so với Monkey 62 Kết luận Sau trình nghiêncứu tìm hiểu đề tài “Nghiên cứusốphươngphápsinhđầuvàokiểmthửtựđộngcho Android”, kết mà luận văn đạt là: Đầu tiên, luận văn giúp đưa nhìn tởng quan kiểmthửtựđộng dành cho phần mềm nói chung kiểmthửtựđộngcho ứng dụng Android nói riêng Từ nhìn tởng quan kiểmthửtự động, luận văn giúp đưa khái niệm chi tiết sinhđầuvàokiểmthửtựđộng với kỹ thuật phở biến sử dụng để sinhđầuvàokiểmthửtự động: phươngphápkiểmthử Fuzz phươngphápkiểmthử dựa mơ hình Đưa ưu, nhược điểm phươngpháp để từ giúp người đọc có đánh giá, so sánh đưa lựa chọn phươngpháp phù hợp cho mục đích sử dụng Luận văn đưa tìm hiểu số hướng tiếp cận phươngpháp áp dụng cho ứng dụng Android Để có nhìn cụ thể chi tiết hai phươngphápsinhđầuvàokiểmthửtựđộng trình bày trên, luận văn lựa chọn hai công cụ tựđộng tiêu biểu tương ứng cho hai phươngpháp DroidBot Monkey để tìm hiểu Bên cạnh việc tìm hiểu lý thuyết, tiến hành làm thực nghiệm để so sánh với đồng thời so sánh với việc kiểmthửthủ công Sau thực nghiệm thu kết số lượng lỗi, độ bao phủ mã nguồn, thời gian thực thi mỗi công cụ Từ kết thu giúp đưa so sánh, phân tích đánh giá cho tính hiệu phươngphápkiểmthử Tuy nhiên luận văn có hạn chế việc tiến hành thực nghiệm: số lượng cơng cụ kiểmthử hạn chế, số lượng ứng dụng lựa chọn chưa phong phú Với hạn chế nêu trên, số hướng mở rộng nghiêncứu tìm hiểu tương lai: - Mở rộng thực nghiệm với số lượng công cụ lựa chọn lớn hơn, tiến hành kiểm tra với số lượng ứng dụng nhiều có độ phức tạp cao hơn, đồng thời kiểm tra với số lượng kiện lớn 63 - Có kế hoạch cho việc lựa chọn cơng cụ thích hợp để cải tiến phát triển, để áp dụng thực tế vào công việc kiểmthử phần mềm cho ứng dụng Android Samsung 64 Tài liệu tham khảo [1] "Statista," [Online] Available: https://www.statista.com/statistics/266136/global-market-share-held-by- smartphone-operating-systems/ [2] "Android Developer," [Online] Available: https://developer.android.com/guide/platform/index.html [3] "Android Developer," [Online] Available: https://developer.android.com/reference/android/app/Activity.html [4] "Android Developer," [Online] Available: https://developer.android.com/guide/components/services.html [5] "Android Developer," [Online] Available: https://developer.android.com/guide/topics/manifest/receiver- element.html [6] "Android Developer," [Online] Available: https://developer.android.com/guide/topics/providers/content- providers.html [7] Abel Méndez-Porras, Christian Quesada-López, and Marcelo Jenkins, "Automated Testing of Mobile [8] [9] [10] [11] Applications: A Systematic Map and Review," p Hitesh Tahbildar, Bichitra Kalita, "Automated software test data generation: Direction of research," in International Journal of Computer Science & Engineering Survey (IJCSES) Vol.2, 2011, pp 2-3 WANG Tao, LI Yanling,MA Yingli,GUO Wei, "Research and Application of a New Fuzz-test Framework," p “VIBLO,” [Trưcc̣ tuyến] Available: https://viblo.asia/p/tim-hieu-ve-fuzz-testing-YWOZrDzv5Q0 "Guru99," [Online] Available: https://www.guru99.com/fuzz-testing.html P Garg, "Fuzzing - mutation vs generation".INFOSEC Institute [12] [13] "Tutorials point," [Online] Available: https://www.tutorialspoint.com/software_testing_dictionary/fuzz_testing.htm [14] “Khoa CNTT, Đại học Duy Tân,” [Trưcc̣ tuyến] Available: http://kcntt.duytan.edu.vn/Home/ArticleDetail/vn/128/2461/bai-01-so-luoc-ve-fuzzing-testing [15] "OWASP," [Online] Available: https://www.owasp.org/index.php?title=File:CLASP_Vulnerabilities_SDLC_Phases.gif&setlang=en [16] "Guru99," [Online] Available: https://www.guru99.com/fuzz-testing.html [17] R T M N Aravind MacHiry, "Dynodroid: An Input Generation System for Android Apps" [18] J R Raimondas Sasnauskas, "Intent Fuzzer: Crafting Intents of Death" [19] ANTOJOSEPH, "DROID-FF – THE ANDROID FUZZING FRAMEWORK" [20] "Guru99," [Online] Available: https://www.guru99.com/model-based-testing-tutorial.html [21] Zoltan Micskei, Istvan Majzik, "Model-based test generation," Software and Systems Verification (VIMIMA01), pp 13-17 [22] E Karaman, "Model Based Software Testing," SWE550 Boaziỗi University, pp 7-17 [23] P Ana, "Model – based testing," MDSE – Model Driven Software Engineering, pp 3-12 [24] Shauvik Roy Choudhary, Alessandra Gorla, Alessandro Orso, "Automated Test Input Generation for Android: Are We There Yet?" [25] "Android Developer," [Online] Available: https://developer.android.com/studio/test/monkey.html [26] Yuanchun Li, Ziyue Yang, Yao Guo, Xiangqun Chen, "DroidBot: A Lightweight UI-Guided Test Input Generator for Android" [27] [Online] Available: https://f-droid.org/ 65 ... đıch́ nghiên cứu phương pháp sinh đầu vào tự động, nơịdung phần sau tập trung làm rõhai phương pháp sinh đầu vào kiểm thửtư c̣đôngc̣ nổi bật l phương pháp kiểm thử Fuzz (fuzzing) phương pháp kiểm. .. sâu vào tìm hiểu hai phương pháp sinh đầu vào kiểm thử tự động phương pháp kiểm thử Fuzz (Fuzzing) phương pháp kiểm thử dựa mơ hình (model-based testing) - Chương 3: tìm hiểu hai công cụ kiểm thử. .. với đề tài Nghiên cứu số phương pháp sinh đầu vào kiểm thử tự động cho Android công trình nghiên cứu thân, xuất phát từ u cầu phát sinh cơng việc để hình thành hướng nghiên cứu Các số liệu có