1. Trang chủ
  2. » Luận Văn - Báo Cáo

Nghiên cứu phát triển kỹ thuật và giải pháp kiểm thử ứng dụng di động

143 25 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 143
Dung lượng 3,32 MB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

• Thứ nhất: Xây dựng và thử nghiệm các kỹ thuật tối ưu và tái cấu trúc mã nguồn nhằm nâng cao hiệu năng cho ứng dụng di động: sử dụng bộ nhớ hiệu quả, đa luồng và đồng bộ hóa, xây dựng các luật sử dụng Programming Mistake Detector và Android Lint để tối ưu mã nguồn nhằm tiết kiệm năng lượng, nâng cao hiệu năng cho ứng dụng (PMDLint); xây dựng và thử nghiệm mô hình kiểm thử hộp trắng cho phương thức trong một lớp để tìm lỗi tiềm ẩn nhằm nâng cao chất lượng mã nguồn và độ tin cậy cho ứng dụng (UniTest). • Thứ hai: Xây dựng và thử nghiệm các kỹ thuật kiểm thử, phương pháp kiểm thử cho phát triển ứng dụng di động: sinh ca kiểm thử và dữ liệu kiểm thử tự động dựa trên câu chuyện người dùng và tiêu chí chấp nhận (AgileUATM); sử dụng phương pháp đồ thị hóa hoạt động kiểm thử thăm dò (One2Explore), phương pháp heuristics và học máy trong kiểm thử ứng dụng web và web di động (Shinobi) . Đề xuất giải pháp AgileScrum+ tích hợp các kỹ thuật trong môi trường phát triển Agile Scrum

Trang 1

BỘ GIÁO DỤC VÀ ĐÀO TẠO TRƯỜNG ĐẠI HỌC DUY TÂN

Trang 2

BỘ GIÁO DỤC VÀ ĐÀO TẠO TRƯỜNG ĐẠI HỌC DUY TÂN

Trang 3

LỜI CAM ĐOAN

Tôi xin cam đoan tất cả các nội dung trong luận án "Nghiên cứu phát triển kỹ thuật

và giải pháp kiểm thử ứng dụng di động" là công trình nghiên cứu của riêng tôi Các

số liệu, kết quả trong luận án là trung thực, trích dẫn đầy đủ và chưa từng được ai công bố trong bất kỳ công trình nào khác

Người hướng dẫn khoa học

PGS, TS Huỳnh Quyết Thắng

Đà Nẵng, ngày 15 tháng 12 năm 2019

Tác giả luận án

Nguyễn Đức Mận

Trang 4

LỜI CẢM ƠN

Lời đầu tiên, tôi xin chân thành cảm ơn Thầy hướng dẫn PGS, TS Huỳnh Quyết Thắng và TS Nguyễn Thanh Hùng là người đã định hướng, chỉ dẫn, hướng dẫn rất tận tình trong toàn bộ quá trình thực hiện nghiên cứu của luận án này Thầy luôn đồng hành, động viên, khích lệ kịp thời và luôn chu đáo, nghiêm túc trong công tác nghiên cứu, điều này đã giúp cho tôi trưởng thành hơn trên con đường học thuật, nghiên cứu khoa học của bản thân

Tôi xin gửi lời cảm ơn đến các nhà khoa học, các thầy cô phản biện, các thầy cô trong hội đồng các cấp cũng như những nhà khoa học độc lập đã có những đóng góp, góp ý rất chi tiết giúp tôi hoàn thành tốt luận án này

Tôi xin chân thành cảm ơn các thầy cô là lãnh đạo và cán bộ khoa học tại Khoa Sau đại học của trường Đại học Duy Tân, đặc biệt là sự giúp đỡ của PGS, TS Nguyễn Gia Như trong quá trình học tập và nghiên cứu tại Khoa Sự hỗ trợ của mọi người đã giúp cho quá trình học tập và nghiên cứu của tôi có được nhiều thuận lợi

Tôi xin gửi lời cảm ơn đến Hội đồng Quản trị và Ban Giám Hiệu Trường Đại học Duy Tân, tập thể cán bộ giảng viên Khoa Đào tạo Quốc tế đã hỗ trợ, tạo điều kiện cho tôi trong quá trình làm việc cũng như học tập, nghiên cứu để tôi có thể đạt được những kết quả như ngày hôm nay

Tôi xin cảm ơn Công ty MeU-Solutions và nhóm dự án của công ty, đặc biệt cảm

ơn Anh Đỗ Hoàng Nhật, CEO của công ty MeU Solutions đã tạo điều kiện, hỗ trợ nghiên cứu cho tôi và là nơi thực hiện các thử nghiệm nghiên cứu trong luận án Cảm ơn các thành viên trong nhóm nghiên cứu cùng tham gia trong các công trình công bố và cho phép sử dụng kết quả nghiên cứu trong luận án này

Cuối cùng, tôi xin gửi lời cảm ơn đến gia đình, những người thân yêu và bạn bè đã đồng hành, chia sẻ và giúp đỡ rất nhiều về tình cảm cũng như vật chất trong quá trình học tập, nghiên cứu Đặc biệt là gia đình của tôi, chỗ dựa vững chắc về mọi mặt, là động lực để giúp tôi hoàn thành tốt luận án

Mặc dù bản thân tác giả đã có nhiều cố gắng, nỗ lực trong quá trình làm việc nhưng

do thời gian và điều kiện nghiên cứu còn nhiều hạn chế, luận án có thể còn nhiều thiếu sót Tác giả của luận án rất mong nhận được sự đóng góp ý kiến của mọi người nhằm giúp tôi hoàn thiện nội dung khoa học của luận án cũng như những hướng đi

mở rộng sau này trong con đường khoa học của bản thân

Tác giả luận án

Nguyễn Đức Mận

Trang 5

MỤC LỤC

LỜI CAM ĐOAN i

LỜI CẢM ƠN ii

DANH MỤC CÁC HÌNH TRONG LUẬN ÁN vi

DANH MỤC CÁC BẢNG TRONG LUẬN ÁN viii

DANH MỤC THUẬT NGỮ, TỪ VIẾT TẮT x

MỞ ĐẦU 1

1 Giới thiệu 1

2 Mục tiêu nghiên cứu của luận án 6

3 Phương pháp nghiên cứu 7

4 Đối tượng nghiên cứu và phạm vi thực hiện 8

5 Cấu trúc của luận án 9

6 Các đóng góp khoa học của luận án 10

CHƯƠNG 1 TỔNG QUAN KIỂM THỬ ỨNG DỤNG 11

DI ĐỘNG VÀ PHƯƠNG PHÁP PHÁT TRIỂN LINH HOẠT 11

1.1 Giới thiệu tổng quan 11

1.2 Phân loại ứng dụng di động 13

1.3 Kiểm thử ứng dụng di động 15

1.3.1 Đặc điểm của ứng dụng di động 16

1.3.2.Tính đặc thù của ứng dụng di động ảnh hưởng đến việc kiểm thử phần mềm 17 1.4 Phương pháp phát triển linh hoạt 18

1.4.1 Phát triển hướng kiểm thử TDD 19

1.4.2 Phát triển hướng hành vi BDD 20

1.4.3 Kiểm thử trong môi trường phát triển Agile Scrum 22

1.5 Các thách thức của kiểm thử ứng dụng di động 22

1.6 Kết chương 26

CHƯƠNG 2 CÁC KỸ THUẬT TỐI ƯU HÓA, TÁI CẤU TRÚC VÀ PHÂN TÍCH MÃ NGUỒN CỦA ỨNG DỤNG DI ĐỘNG 28

2.1 Đặt vấn đề 28

2.2 Kỹ thuật phân tích và tái cấu trúc mã nguồn để nâng cao hiệu năng của ứng dụng di động dựa trên PMD và Android lint 30

2.2.1 PMD và Android lint 30

2.2.2 Kiểm thử hiệu năng 32

2.2.3 Các kỹ thuật tối ưu trong phát triển ứng dụng Android 33

2.2.3.1 Tối ưu mã nguồn java 33

2.2.3.2 Sử dụng bộ nhớ hiệu quả 36

2.2.3.3 Đa luồng và đồng bộ hóa 37

2.2.3.4 Tối ưu hóa mã nguồn sử dụng JNI 38

2.2.4 Phân tích và tái cấu trúc mã nguồn dựa trên PMD và Android lint 39

2.2.4.1 Đề xuất kỹ thuật phân tích và tái cấu trúc mã nguồn PMDlint 39

2.2.4.2 Sử dụng luật phân tích mã nguồn 41

2.2.4.3 Sử dụng luật thay đổi mã nguồn 41

2.2.4.4 Chiến lược áp dụng luật phân tích và thay đổi mã nguồn 42

2.2.4.5 Cài đặt luật phân tích và thay đổi mã nguồn 43

Trang 6

2.2.4.6 Kết quả thử nghiệm 45

2.3 Kỹ thuật phân tích mã nguồn tìm lỗi tiềm ẩn cho các phương thức của lớp Java 48

2.3.1 Đề xuất mô hình phân tích mã nguồn và kiểm thử hộp trắng 48

2.3.2 Biểu đồ cấu trúc điều khiển 49

2.3.3 Mô hình các điều kiện 52

2.3.4 Sinh các bộ dữ liệu kiểm thử 53

2.3.5 Thực hiện quá trình kiểm thử 54

2.3.6 Phân tích kết quả kiểm thử 55

2.3.7 Phân loại và lựa chọn các bộ dữ liệu kiểm thử 55

2.3.8 Kết quả cài đặt và thử nghiệm 57

2.4 Kết chương 61

CHƯƠNG 3 CÁC KỸ THUẬT KIỂM THỬ VÀ XÂY DỰNG GIẢI PHÁP TÍCH HỢP TRONG MÔI TRƯỜNG PHÁT TRIỂN LINH HOẠT 62

3.1 Đặt vấn đề 62

3.2 Kỹ thuật sinh ca kiểm thử và dữ liệu dựa trên yêu cầu người dùng và điều kiện chấp nhận 65

3.2.1 Một số thuật ngữ liên quan 65

3.2.2 Đề xuất tiếp cận sinh trường hợp kiểm thử và dữ liệu kiểm thử 67

3.2.2.1 Xây dựng giải pháp AgileUATM 67

3.2.2.2 Bài toán thực nghiệm cho phương pháp đề xuất 77

3.2.2.3 Phân tích dữ liệu thực nghiệm so sánh hiệu quả giải pháp AgileUATM 82

3.3 Phương pháp ứng dụng học máy và đồ thị hóa kết quả kiểm thử 87

3.3.1 Đồ thị hóa hoạt động và kết quả kiểm thử 87

3.3.1.1 Đề xuất cách tiếp cận 87

3.3.1.2 Chi tiết về kỹ thuật xây dựng đồ thị Graph 89

3.3.1.3 Kết quả thực nghiệm 90

3.3.1.4 Một số đánh giá về giải pháp 94

3.3.2 Phương pháp ứng dụng học máy cho kiểm thử ứng dụng di động 95

3.3.2.1 Đề xuất cách tiếp cận 95

3.3.2.2 Xây dựng và huấn luyện bộ phân loại nhận diện đối tượng 97

3.3.2.3 Xây dựng thư viện heuristics 99

3.3.2.4 Kiến trúc mức tổng quát Shinobi 100

3.3.2.5 Phân tích kết quả thực nghiệm 101

3.3.2.6 Đánh giá kết quả 104

3.4 Giải pháp AgileScrum+ tích hợp các kỹ thuật và phương pháp PMDLint, UniTest, AgileUATM, One2Explore và Shinobi 104

3.4.1 Đề xuất giải pháp tích hợp AgileScrum+ 105

3.4.2 Cách tiếp cận thực nghiệm và đánh giá các kỹ thuật, phương pháp và qui trình AgileScrum+ 107

3.4.2.1 Mô hình tăng trưởng độ tin cậy phần mềm 107

3.4.2.2 Mô hình hàm mũ Poision không đồng nhất 108

3.4.2.3 Các bước tiến hành thực nghiệm và đánh giá 110

3.4.2.4 Kết quả thực nghiệm và đánh giá 112

3.5 Kết chương 116

KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN 118

1 Kết luận 118

2 Hướng phát triển của luận án 121

Trang 7

DANH SÁCH CÁC CÔNG TRÌNH KHOA HỌC ĐÃ CÔNG BỐ LIÊN QUAN ĐẾN LUẬN ÁN 123TÀI LIỆU THAM KHẢO 125

Trang 8

DANH MỤC CÁC HÌNH TRONG LUẬN ÁN

Hình 1.1 Thị trường của ứng dụng trên điện thoại thông minh [79] 12

Hình 1.2 Quy trình phát triển TDD [7] 19

Hình 1.3 Mô hình BDD – TDD trong Agile mô phỏng bởi Paul Littlebury [12] 21

Hình 2.1 Kiến trúc của PMDLint được đề xuất trong luận án 40

Hình 2.2 Cấu hình điện thoại a) Motorola moto X, b) HTC One XL 46

Hình 2.3 Giao diện thực hiện phân tích và tái cấu trúc mã nguồn 47

Hình 2.4 Mô hình tổng quan kiểm thử hộp trắng mã nguồn phương thức của một lớp Java 49

Hình 2.5 Mã nguồn phương thức sumAbsolute 50

Hình 2.6 Biểu đồ luồng điều khiển của phương thức sumAbsolute 51

Hình 2.7 Mô hình hóa lại biểu đồ cấu trúc điều khiển của phương thức sumAbsolute 51

Hình 2.8 Mô hình kỹ thuật phân loại, lựa chọn các bộ dữ liệu kiểm thử 56

Hình 2.9 Một số màn hình kết quả thử nghiệm 60

Hình 3.1 Mô hình hoạt động của giải pháp AgileUATM đề xuất 68

Hình 3.2 Xây dựng cú pháp định nghĩa cho ngôn ngữ myDSL 71

Hình 3.3 Ví dụ về đặc tả myDSL cho tính năng đăng ký tài khoản Register 72

Hình 3.4 Workflow sinh test script cho Unit test (BDD) 75

Hình 3.5 Màn hình của công cụ sinh BDD Testscript 76

Hình 3.6 Giao diện của ứng dụng ACM 77

Hình 3.7 Đặc tả hình thức cho US Register gọi là myDSL.agt 81

Hình 3.8 Kết quả sinh Unit test cho Register class sử dụng tính năng sinh kịch bản BDD 82

Hình 3.9 Kết quả so sánh giữa hai lần thực hiện kiểm tra 91

Hình 3.10 Đồ thị tổng hợp các kết quả thực thi của Master Graph 92

Hình 3.11 Một kết quả so sánh giữa thực thi hiện tại và các thực thi trước đó (Master) 93

Hình 3.12 Shinobi framework 96

Hình 3.13 Faster R-CNN [107,118]: 98

Hình 3.14 (a) Độ chính xác với giá trị loss ở mức 0,8, (b) Độ chính xác với giá trị loss ở mức 0,02 99

Hình 3.15 Kiến trúc mức tổng quát của Shinobi 100

Hình 3.16 Kết quả nhận diện các đối tượng web từ dữ liệu kiểm thử 102

Trang 9

Hình 3.17 Shinobi nhận diện các web controls không được tương tác 102Hình 3.18 Tất cả các kiểu đối tượng điều khiển được nhận diện và sử dụng heuristic data attack để đề xuất giá trị thích hợp 103Hình 3.19 Kết quả nhận diện dữ liệu kiểm thử nhập vào không có ý nghĩa 103Hình 3.20 Qui trình phát triển Scrum tích hợp các kỹ thuật kiểm thử và tối ưu hóa mã nguồn AgileScrum+ 106Hình 3.21 Qui trình thực hiện đánh giá độ tin cậy 111Hình 3.22 (a) Độ tin cậy của sản phẩm -đội A (b) Độ tin cậy của sản phẩm -đội B 115Hình 3.23 (a) Số lượng lỗi tích lũy phát hiện theo thời gian -đội A và (b) đội B 115Hình 3.23 (a) Tỷ lệ lỗi -đội A (b) Tỷ lệ lỗi -đội B 115

Trang 10

DANH MỤC CÁC BẢNG TRONG LUẬN ÁN

Bảng 1.1 So sánh các kỹ thuật, công nghệ phát triển của các loại ứng dụng di động 14

Bảng 1.2 Phân loại ứng dụng di động theo đặc thù riêng và kiểm thử tương ứng [74] 17

Bảng 2.1 So sánh thời gian thực hiện sau tinh chỉnh mã nguồn [69] 34

Bảng 2.2: Danh sách các luật đã thực hiện trong phạm vi của luận án 43

Bảng 2.3: Thống kê % sử dụng CPU đã kiểm thử trên Motorola moto X 46

Bảng 2.4: Thống kê % sử dụng CPU đã kiểm thử trên HTC One XL 46

Bảng 2.5 – Thống kê % sử dụng CPU của kết quả kiểm thử trên HTC One XL cho từng luật 47

Bảng 2.6: Bảng quyết định phân loại các bộ dữ liệu kiểm thử dựa vào kết quả kiểm tra các điều kiện trong mô hình 56

Bảng 2.7: Kết quả kiểm thử các phương thức của lớp UtilityTasks.java 58

Bảng 2.8: Tổng hợp kết quả kiểm thử tất cả các phương thức của lớp UtilityTasks.java 59

Bảng 3.1 Ví dụ mẫu về mô tả một user story 69

Bảng 3.2 Ví dụ về đặc tả tiêu chuẩn chấp nhận cho tính năng Register 69

Bảng 3.3 Mô tả cú pháp của ngôn ngữ đặc tả myDSL 71

Bảng 3.4 Ví dụ mô tả cú pháp chuyển đổi từ MyDSL sang Z3 72

Bảng 3.5 Ví dụ về test case / test input được sinh ra cho tính năng Register 73

Bảng 3.6 Các chức năng của công cụ AgileUATM 76

Bảng 3.7 Danh sách các user stories của ứng dụng ACM 78

Bảng 3.8 Đặc tả điều kiện chấp nhận cho chức năng Register (US01) 80

Bảng 3.9 Kết quả thực hiện theo phương pháp kiểm thử truyền thống 83

Bảng 3.10 Kết quả thực hiện áp dụng giải pháp AgileUATM 83

Bảng 3.11 Danh sách các nhóm dự án được mời tham gia thực nghiệm giải pháp đề xuất của luận án 84

Bảng 3.12 Kết quả thực nghiệm của phương pháp đề xuất AgileUATM 85

Bảng 3.13 Thông tin của các đối tượng người dùng của dự án được lấy ý kiến phản hồi (360-degree feedbacks) 93

Bảng 3.14 Kết quả phản hồi của các đối tượng (360-degree feedbacks) testers, trưởng nhóm kiểm thử và khách hàng 94

Bảng 3.15 Kết quả thực hiện áp dụng kỹ thuật PMDlint và UniTest cho các dự án mã nguồn FOSS và dự án do nhóm nghiên cứu thực hiện 112

Trang 11

Bảng 3.16 Dữ liệu lỗi thu thập của dự án đội A và đội B 113 Bảng 3.17 – Kết quả tính toán và ước lượng độ tin cậy của dự án đội A so với đội B 114

Trang 12

DANH MỤC THUẬT NGỮ, TỪ VIẾT TẮT

Từ / thuật ngữ viết tắt Ý nghĩa

AC (Acceptance Criteria) Điều kiện chấp nhận

Agile (Agile Developemt Methodology) Phương pháp luận phát triển linh hoạt

AI (Artificial Intelligence) Trí tuệ nhân tạo

BDD (Behavior Driven Development) Phát triển hướng hành vi

BVA (boundary value analysis) Phân tích giá trị biên

CDT (Context-Driven Testing) Kiểm thử hướng ngữ cảnh

Developer Người phát triển, kỹ sư phát triển

DSL (Domain-specific language) Ngôn ngữ chuyên biệt

EPC (Equivalence Partition Class) Phân vùng tương đương

ET (Exploratory testing) Kiểm thử thăm dò

Functional Test Kiểm thử chức năng

ML (Machine Learning) Học máy

Mobile web (Mobile Web Application) Ứng dụng web di động

Native (Native Application) Ứng dụng bản địa/ cục bộ

NHPP (Non-Homogeneous Poisson

Process)

Quá trình Poisson không đồng nhất

PMD (Programming Mistake Detector) Bộ phát hiện lỗi lập trình

PO (Product Owner) Chủ sản phẩm

SMT (satisfiability modulo theories) Các lý thuyết modulo thỏa mãn

SRGM (Software Reliability Growth

Models)

Mô hình tăng trưởng độ tin cậy phần mềm

TDD (Test Driven Development) Phát triển hướng kiểm thử

Test case Ca kiểm thử/ trường hợp kiểm thử

Test Data/ Test Input Dữ liệu kiểm thử

Tester Người kiểm thử, kỹ sư kiểm thử

UAT (User Acceptance testing) Kiểm thử chấp nhận người dùng

UI/GUI (User Interface/ Graphic User

Trang 13

MỞ ĐẦU

1 Giới thiệu

Điện thoại thông minh ngày càng đóng vai trò quan trọng trong cuộc sống ngày nay Với những tính năng và khả năng của chiếc điện thoại thông minh, con người có thể dùng để giải quyết rất nhiều vấn đề trong cuộc sống của họ Điện thoại thông minh có những ưu điểm như tính kết nối giữa con người với con người và với vạn vật, sử dụng cho giải trí, thực hiện giao dịch ngân hàng, mua bán trực tuyến, quản lý lịch trình, quản lý công việc, tìm kiếm thông tin, kiểm tra sức khỏe và vân vân Một

số ứng dụng phổ biến hiện nay như ứng dụng nhắn tin và gọi điện Zalo (Vietnam), WhatsApp, Line, Snapchat hoặc trò chơi PokeMon Go, Flappy Bird (Vietnam), ứng dụng Wallet hoặc các ứng dụng phổ biến khác như Flipboard, Pocket, Vine, ZingMP3 (Vietnam), Uber, Grab, Money Lover (Vietnam) Các nghiên cứu thực tế cho thấy rằng, để người dùng sử dụng điện thoại nhiều hơn, sử dụng các ứng dụng chạy trên điện thoại thường xuyên hơn cho các mục đích khác nhau thì đòi hỏi các ứng dụng phải đáp ứng được yêu cầu sử dụng của họ, phải dễ sử dụng, ổn định và đáng tin cậy Khoảng 50% ứng dụng di động bị đánh giá kém trên các cửa hàng Play hay Appstore dựa trên các vấn đề như sự cố, hiệu suất kém và tốn năng lượng Người dùng thường

sẽ xóa ngay ứng dụng sau khi cài đặt nếu nó gặp sự cố, hiệu năng kém, chất lượng kém và thiếu tin cậy Theo các thống kê [22, 65, 70, 71], có 77% người dùng xóa ứng dụng kém chất lượng sau 72 giờ cài đặt Do đó, việc nghiên cứu, đề xuất giải pháp, phát triển kỹ thuật phân tích mã nguồn, các kỹ thuật và phương pháp kiểm thử nhằm nâng cao chất lượng của sản phẩm, nâng cao độ tin cậy và hiệu năng là điều rất cần thiết và có ý nghĩa Đặc điểm của điện thoại di động là sự đa dạng về thiết bị, băng thông và bộ nhớ hạn chế, dung lượng lưu trữ và nguồn năng lượng bị giới hạn, sự đa dạng người dùng Những đặc điểm này là thách thức lớn cho các kỹ sư phát triển cũng như các kỹ sư kiểm thử Các kỹ sư kiểm thử phải nghiên cứu nhằm đề xuất các giải pháp hiệu quả cho phát triển ứng dụng di động hiện nay Bên cạnh đó, tính cạnh tranh

để phát hành sản phẩm ra thị trường sớm nhưng vẫn đảm bảo chất lượng và độ tin cậy của sản phẩm cũng là một trong những thách thức trong phát triển phần mềm nói chung và ứng dụng di động nói riêng Hiện tại, các nhà nghiên cứu phát triển đang

Trang 14

dành nhiều sự quan tâm cho việc nghiên cứu và công bố các đề xuất áp dụng nhưng vẫn chưa thể đáp ứng hay giải quyết đầy đủ các thách thức ở trên, điều này cũng là động lực cho việc nghiên cứu để đưa ra các giải pháp, phát triển các kỹ thuật kiểm thử mới nhằm đóng góp vào lĩnh vực kiểm thử ứng dụng di động hiện nay

Qua khảo sát, hiện tại, có nhiều nghiên cứu liên quan đến vấn đề sinh tự động trường hợp kiểm thử dựa trên mô hình (model-based testing), sinh trường hợp kiểm thử dựa trên các biểu đồ UML như biểu đồ Use case, biểu đồ hoạt động (activity diagram), biểu đồ lớp, biểu đồ tuần tự, phân tích mã nguồn để tối ưu hóa chương trình, phân tích và sinh dữ liệu kiểm thử dựa vào mã nguồn, đồ thị hóa dữ liệu kiểm thử và ứng dụng học máy cho kiểm thử tự động Cụ thể:

Các nghiên cứu liên quan hướng phân tích mã nguồn, tối ưu hóa mã nguồn, gồm có:

Shuai Hao và cộng sự [42] đề xuất phân tích chương trình, các kỹ thuật đo lường dựa trên thống kê; Xueliang Li và John P Gallagher [61] đã đề xuất một khung tối

ưu hóa năng lượng bởi việc tối ưu mã nguồn, kỹ thuật này cho phép các nhà phát triển nhận thức được việc sử dụng năng lượng do mã lệnh gây ra và áp dụng các chiến lược tái cấu trúc mã nguồn hướng mục tiêu Wedyan, F và cộng sự [121] trình bày hiệu quả của các công cụ phân tích tĩnh tự động để phát hiện lỗi và tái cấu trúc Một số kỹ thuật được tự động hóa và được hỗ trợ bởi nhiều công cụ giúp tăng hiệu suất của người phát triển và giảm nhẹ gánh nặng của họ Tuy nhiên, trên thực tế, những kỹ thuật này không đủ để giải quyết khoảng cách giữa việc hiểu nơi tiêu thụ năng lượng

và cách mã lệnh có thể được thay đổi để giảm năng lượng tiêu thụ Những kỹ thuật này cho phép người phát triển hiểu nơi tiêu thụ năng lượng trong một ứng dụng; họ không cung cấp hướng dẫn để cải thiện mức tiêu thụ năng lượng của ứng dụng

Các nghiên cứu liên quan kỹ thuật sinh trường hợp kiểm thử, sinh dữ liệu kiểm thử, gồm có:

Wang và cộng sự [119] đề xuất mô hình hóa ca sử dụng (use case) để sinh kiểm thử hệ thống Kỹ thuật đề xuất sử dụng các đặc tả trường hợp sử dụng, sơ đồ lớp và các ràng buộc để tạo các trường hợp kiểm thử hệ thống Oluwagbemi và Asmuni [81] trình bày phương pháp nâng cao để tạo các trường hợp kiểm thử từ các sơ đồ UML

Trang 15

khác nhau Thu tập các tài liệu từ các sơ đồ được đề xuất, các đại diện trung gian của các tài liệu là ở dạng cây mà qua đó truyền tải nội dung tạo ra các trường hợp thử nghiệm

Rane [89] đã thiết kế và triển khai một công cụ để hỗ trợ tự động sinh test case trong quy trình phát triển phần mềm linh hoạt bằng cách xử lý ngôn ngữ tự nhiên Công cụ này tăng thời gian cần thiết để tạo ra các trường hợp kiểm thử là 7%, giảm công sức tạo test case là 31% và cải thiện 23% liên quan đến phạm vi kiểm thử của các yêu cầu Thời gian và nỗ lực để tạo các trường hợp thử nghiệm cho nhiều user story của cùng một tính năng được giảm tương ứng 61% và 87%;

Pandit và Tahiliani [84] đề xuất quy trình UAT và công cụ AgileUAT, nhằm tạo

ra một danh sách đầy đủ các trường hợp kiểm thử chấp nhận bằng ngôn ngữ tự nhiên, dựa trên các tiêu chí chấp nhận Công cụ có khả năng lần vết giữa các epics, user stories, tiêu chí chấp nhận (AC) và các trường hợp kiểm thử chấp nhận Một phương pháp hướng mô hình cho tiến hóa trường hợp thử nghiệm đã được đề xuất sử dụng

kỹ thuật kiểm thử hộp đen trong đó mọi thứ được coi là mô hình và thông tin tiến hóa được trích từ phân tích so sánh giữa hai hoặc nhiều phiên bản phát triển của ứng dụng

di động Nó đã được quan sát thấy rằng những thay đổi có thể ảnh hưởng đến giao diện hoặc mã của ứng dụng đó hoặc cả hai Tương tự, bất kỳ loại thay đổi nào cũng

có thể tác động đến các trường hợp thử nghiệm được tạo ra

Dynodriod là một hệ thống sinh dữ liệu đầu vào cho Android, được sử dụng rộng rãi trong các thử nghiệm trong khi một số phương pháp tiếp cận trước đó dựa vào các

kỹ thuật kiểm thử ngẫu nhiên [62] MobiGUITAR [6] được xây dựng trên khung GUITAR sử dụng trích xuất GUI để xây dựng mô hình của một ứng dụng Các trường hợp thử nghiệm được sinh ra bằng việc duyệt theo chiều sâu của mô hình MobiGUITAR dựa trên sự quan sát, trích xuất và trừu tượng hóa trạng thái thời gian chạy của các widget GUI Sự trừu tượng hóa là một mô hình máy trạng thái có thể

mở rộng, cùng với các tiêu chí bao phủ thử nghiệm

Yu [127] đã đề xuất một cách tiếp cận để tạo ra các trường hợp ứng dụng di động thử nghiệm, tập trung vào các ứng dụng Android Cách tiếp cận chủ yếu phụ thuộc vào các sự kiện bên ngoài Hai khía cạnh của các sự kiện bên ngoài được xem xét: rõ

Trang 16

ràng và ẩn Các sự kiện bên ngoài từ các thành phần bổ sung của thiết bị di động được xác định thủ công và được nhóm thành các danh mục Một số ví dụ bao gồm trạng thái cuộc gọi điện thoại trở thành (1) không hoạt động, (2) tắt máy và (3) đổ chuông Các mẫu sự kiện được xây dựng từ các chuỗi các sự kiện bên ngoài, như đổ chuông, tắt máy, không hoạt động

Liu và cộng sự [128] đã đề xuất kỹ thuật ART để tạo các trường hợp thử nghiệm cho các ứng dụng di động Kết quả cho thấy công cụ ART đã giảm số lượng các trường hợp thử nghiệm cũng như thời gian cần thiết để phơi bày lỗi đầu tiên so với

kỹ thuật ngẫu nhiên Kỹ thuật đề xuất được sử dụng để đo khoảng cách giữa các đầu vào của ứng dụng di động được thể hiện trong chuỗi sự kiện Các tác giả đã trình bày nghiên cứu thực nghiệm đầu tiên, sử dụng khoảng cách trên trường hợp thử nghiệm thế hệ ngẫu nhiên thích ứng cho các ứng dụng di động thực tế Kỹ thuật được đề xuất

là hiệu quả để tạo ra các trường hợp thử nghiệm ngẫu nhiên về mặt phát hiện lỗi trước

đó

Các nghiên cứu liên quan đến việc sinh trường hợp kiểm thử phần lớn dựa trên các biểu đồ UML không phù hợp với qui trình phát triển linh hoạt Hiện chỉ có Rane [89], Pandit và Tahiliani [84], Dynodriod [62], MobiGUITAR [6], Yu [127] tập trung nhiều vào kiểm thử cho ứng dụng di động, sinh trường hợp kiểm thử trong môi trường phát triển linh hoạt Qua khảo sát, tác giả luận án thấy rằng các nghiên cứu được thực hiện và nghiên cứu đề xuất cho đến nay chủ yếu liên quan đến thử nghiệm GUI, dữ liệu được tạo từ mô hình UML hoặc tạo trường hợp thử nghiệm và dữ liệu thử nghiệm

từ mã nguồn Chỉ có một cách tiếp cận được đề xuất bởi Pandit và Tahiliani sử dụng

xử lý ngôn ngữ tự nhiên để trích xuất thông tin từ câu chuyện của người dùng và tiêu chí chấp nhận để tạo trường hợp kiểm tra và dữ liệu thử nghiệm

Đối với các nghiên cứu về trực quan hóa kết quả kiểm thử và phương pháp ứng dụng học máy vào kiểm thử, gồm có:

Một số nghiên cứu của Chan và cộng sự [19] và Stepien et al [106] đã giới thiệu các kỹ thuật cung cấp cái nhìn toàn cục về kết quả thử nghiệm Các kỹ thuật trực quan tập trung vào mối quan hệ giữa người dùng và các vấn đề được báo cáo của họ Các

Trang 17

kỹ thuật hỗ trợ xác định các mẫu chung để xác định vị trí các vấn đề và cách ưu tiên các trường hợp thử nghiệm phù hợp cho các phiên bản sau

Chen và cộng sự [20] xây dựng ViViz bằng cách sử dụng các biểu đồ để trực quan hóa một phần mềm; cho phép các nhà phát triển và người thử nghiệm nhanh chóng

có được cái nhìn sâu sắc về cấu trúc GUI và trạng thái của quá trình thử nghiệm Nó cung cấp các biểu diễn có thể nhìn thấy cho dữ liệu thử nghiệm được tạo bởi GUITAR TESTAR [109] cung cấp thông tin trực quan về các lần chạy thử Kiểm tra trực quan giúp người kiểm tra trực tiếp kiểm tra và phân tích cách thức kiểm tra phần mềm được thực hiện trong quá trình tìm kiếm các lỗi tiềm ẩn

Học máy là một miền của AI được sử dụng rộng rãi trong các giai đoạn khác nhau của vòng đời phát triển phần mềm, đặc biệt là để tự động hóa các quy trình kiểm thử phần mềm Theo Wegener [122] các thuật toán tiến hóa đã được sử dụng để tự động hóa việc tạo trường hợp thử nghiệm Von Mayrhauser và cộng sự [67] sử dụng mạng

nơ ron nhân tạo xây dựng một mô hình để ước tính hiệu quả của các trường hợp thử nghiệm được tạo ra

Briand và cộng sự [119] đã đề xuất một phương pháp dựa trên thuật toán cây quyết định C4.5 để dự đoán các lỗi tiềm ẩn trong hệ thống phần mềm và bản địa hóa các lỗi

để giảm thời gian xử lý gỡ lỗi Tất cả các công việc nghiên cứu liên quan cho thấy việc sử dụng các kỹ thuật máy học trong các quy trình thử nghiệm tự động hóa có hiệu quả cao [94]

Tuy nhiên, hầu hết các nghiên cứu chỉ tập trung vào các kỹ thuật kiểm tra dựa trên thử nghiệm theo kịch bản của Google, như tạo trường hợp kiểm thử, xác minh, kiểm tra mô hình Việc áp dụng ML trong phương pháp CDT còn hạn chế Trong khi đó, với sự phát triển của AI, CDT, Agile, việc áp dụng ML, Heuristic trong CDT và Agile rất đáng quan tâm và nên bao gồm các khung hỗ trợ cho người thử nghiệm hoặc QA, cũng như các nhà phát triển Xu hướng là ML đang được các nhà nghiên cứu nghiên cứu về lĩnh vực kiểm thử phần mềm, tự động hóa thử nghiệm Bên canh đó phương pháp trực quan hóa và hiển thị đầy đủ thông tin của hoạt động kiểm thử thăm dò theo cách tiếp cận hướng ngữ cảnh chưa được nghiên cứu đầy đủ và ứng dụng cho lĩnh vực kiểm thử ứng dụng web và ứng dụng di động

Trang 18

Từ các hạn chế đã được khảo sát và trình bày ở trên cùng với các thách thức của kiểm thử ứng dụng di động hiện nay, nghiên cứu sinh đã lựa chọn và thực hiện nghiên cứu các kỹ thuật phân tích mã nguồn, tối ưu hóa và tái cấu trúc mã nguồn, phân tích

mã nguồn để tìm lỗi tiềm ẩn (kiểm thử tĩnh), kỹ thuật sinh kịch bản kiểm thử, phương pháp trực quan hóa hoạt động kiểm thử, phương pháp ứng dụng học máy vào kiểm thử và đề xuất giải pháp tích hợp các kỹ thuật kiểm thử vào qui trình phát triển linh hoạt Agile Scrum cho phát triển ứng dụng di động Nội dung nghiên cứu của luận án bao gồm (1) một số kỹ thuật tối ưu và tái cấu trúc mã nguồn nhằm nâng cao hiệu năng, tiết kiệm năng lượng; (2) phân tích mã nguồn tìm lỗi tiềm ẩn trong mã nguồn

và kiểm thử hộp trắng; (3) kỹ thuật sinh ca kiểm thử và dữ liệu kiểm thử tự động dựa trên câu chuyện người dùng (user story) và điều kiện chấp nhận (acceptance criteria); (4) phương pháp trực quan hóa bằng đồ thị cho hoạt động kiểm thử thăm dò và phương pháp ứng dụng học máy cho kiểm thử ứng dụng web di động; (5) giải pháp tích hợp các kỹ thuật phân tích mã nguồn, kỹ thuật và phương pháp kiểm thử vào qui trình Agile Scrum; đi kèm với các phương pháp/ kỹ thuật được đề xuất là các công

cụ hỗ trợ Các kết quả nghiên cứu (1), (2), (3), (4) có thể vận dụng riêng lẻ hoặc cùng

áp dụng vào qui trình Agile Scrum để giúp nâng cao chất lượng của sản phẩm, tăng

độ tin cậy trước khi phát hành sản phẩm Kết quả nghiên cứu đã được thực nghiệm, phân tích đánh giá và ứng dụng thực tiễn (một số kỹ thuật) tại doanh nghiệp phần mềm

Kết quả của nghiên cứu của luận án bên cạnh các đóng góp về mặt khoa học còn

có ý nghĩa về mặt thực tiễn, một số kết quả nghiên cứu đã được ứng dụng thực tiễn tại công ty MeU Solutions và đã mang lại giá trị cho các dự án với khách hàng thực

tế Các kỹ sư phát triển và kỹ sư kiểm thử sử dụng giúp nâng cao chất lượng cho sản phẩm, nâng cao độ tin cậy cho ứng dụng và hiệu quả trong sản xuất phần mềm nói chung, cho ứng dụng di động nói riêng

2 Mục tiêu nghiên cứu của luận án

Mục tiêu của luận án là (1) Xây dựng và thử nghiệm các kỹ thuật tối ưu, tái cấu trúc mã nguồn và tìm lỗi tiềm ẩn trong mã nguồn nhằm nâng cao hiệu năng cho ứng

Trang 19

dụng di động; và (2) phát triển và thử nghiệm các kỹ thuật sinh trường hợp kiểm thử, phương pháp trực quan hóa kiểm thử thăm dò, ứng dụng học máy trong nhận diện đối tượng phục vụ kiểm thử và giải pháp tích hợp vào qui trình Agile Scrum nhằm nâng cao chất lượng, nâng cao độ tin cậy cho ứng dụng di động

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

o Nghiên cứu và đánh giá các nguồn tài liệu liên quan, các nghiên cứu liên quan

một cách có hệ thống để có được cái nhìn tổng quan toàn diện về lĩnh vực kiểm thử phần mềm cho ứng dụng di động Thu thập và hệ thống hóa các vấn đề ảnh hưởng đến việc kiểm thử các ứng dụng di động chạy trên nền tảng Android

o Phân tích tài liệu, kỹ thuật thu thập dữ liệu phân tích đã được áp dụng để thu

thập, xử lý dữ liệu cần thiết cho việc phân tích toàn diện về:

• các vấn đề ảnh hưởng đến việc kiểm thử ứng dụng di động chạy trên nền tảng Android;

• hiệu năng của ứng dụng di động;

• các công cụ kiểm thử tự động, phân tích mã nguồn;

• sinh trường hợp kiểm thử và dữ liệu kiểm thử

• đo độ tin cậy của các ứng dụng thông qua việc áp dụng các kỹ thuật kiểm thử được đề xuất trong luận án

o Sử dụng kỹ thuật mô hình hóa trực quan bằng đồ thị để báo cáo và đánh giá các

hoạt động kiểm thử thăm dò theo cách tiếp cận kiểm thử hướng ngữ cảnh

o Sử dụng phương pháp học máy và vận dụng vào trong hoạt động kiểm thử

thông qua kỹ thuật nhận diện đối tượng, tạo công cụ hỗ trợ triểm thử ứng dụng web di động

o Phương pháp lấy ý kiến chuyên gia, sử dụng trí tuệ của đội ngũ chuyên gia để xem xét nhận định, đánh giá các phương pháp, các cách tiếp cận được đề xuất

để từ đó giúp nghiên cứu sinh hoàn thiện các giải pháp một cách hiệu quả

o Thực hiện nhiều thực nghiệm khác nhau để thu thập dữ liệu, đánh giá kết quả

nghiên cứu, so sánh các kết quả của các kỹ thuật, phương pháp được đề xuất

để chứng minh các giải pháp đề xuất là hiệu quả và có ý nghĩa thực tiễn

Trang 20

4 Đối tượng nghiên cứu và phạm vi thực hiện

Đối tượng nghiên cứu:

o Các phương pháp, các kỹ thuật kiểm thử ứng dụng trên điện thoại thông minh chạy trên nền tảng Android như tối ưu hóa mã nguồn, tiết kiệm năng lượng, nâng cao hiệu năng, tìm lỗi tiềm ẩn của sản phẩm

o Các phương pháp sinh dữ liệu kiểm thử, kịch bản kiểm thử, kiểm thử thăm dò

và sử dụng học máy trong kiểm thử phần mềm

o Qui trình phát triển phần mềm lịnh hoạt Agile Scrum và giải pháp vận dụng

các kỹ thuật được đề xuất trong luận án

o Phương pháp đo lường, đánh giá độ tin cậy của ứng dụng di động

Phạm vi nghiên cứu trong trong luận án:

o Kỹ thuật phân tích mã nguồn (kiểm thử tĩnh):

- Tối ưu hóa mã nguồn để nâng cao hiệu năng, tiết kiệm năng lượng cho ứng dụng Android,

- Phân tích mã nguồn để tìm lỗi tiềm ẩn và phát hiện lỗi trong các phương thức của lớp của ngôn ngữ Java (lập trình ứng dụng di động)

o Qui trình ứng dụng và đánh giá chất lượng, độ tin cậy ứng dụng khi sử dụng

các kỹ thuật, phương pháp kiểm thử ở trên

Nghiên cứu của luận án tập trung thực hiện kiểm thử trên điện thoại Android mã nguồn mở, kho ứng dụng mã nguồn FOSS; và trường hợp thực nghiệm cho ứng dụng ACM app, các công cụ xây dựng cũng phục vụ cho ngôn ngữ Java, các IDE hỗ trợ plug-in Java

Trang 21

5 Cấu trúc của luận án

Luận án được trình bày trong 3 chương, cụ thể như sau:

Chương 1 Tổng quan kiểm thử ứng dụng di động và phương pháp phát triển linh hoạt

Luận án trình bày tổng quan về kiểm thử cho ứng dụng di động, phân tích các vấn

đề về kiểm thử, chiến lược, qui trình, thách thức kiểm thử ứng dụng di động, các công trình nghiên cứu liên quan kiểm thử ứng dụng di động Từ đó, nghiên cứu sinh đặt vấn đề về các nhiệm vụ cần giải quyết trong luận án:

- (1) Kỹ thuật tối ưu hóa, tái cấu mã nguồn, phân tích mã nguồn tìm lỗi tiềm ẩn để nâng cao hiệu năng, giảm tiêu thụ năng lượng, nâng cao chất lượng cho ứng dụng

- Các kỹ thuật tối ưu hóa mã nguồn nâng cao hiệu năng và tái cấu trúc mã nguồn

để tối ưu tiêu thụ năng lượng của ứng dụng (công bố ở công trình CT1, CT3)

- Kỹ thuật phân tích mã nguồn tìm lỗi tiềm ẩn trong chương trình nhằm nâng cao chất lượng mã nguồn cho ứng dụng (công bố ở công trình CT2)

Chương 3 Các kỹ thuật kiểm thử và xây dựng giải pháp tích hợp trong môi trường phát triển linh hoạt

Luận án trình bày các kỹ thuật kiểm thử cho ứng dụng di động, bao gồm:

- Kỹ thuật sinh trường hợp kiểm thử và dữ liệu kiểm thử tự động dựa trên câu chuyện người dùng (User story) và điều kiện chấp nhận (Acceptance criteria) (kết quả công bố ở công trình CT6)

- Phương pháp đồ thị hóa kỹ thuật kiểm thử thăm dò trong kiểm thử hướng ngữ cảnh (CDT) (công bố ở công trình CT4)

Trang 22

- Phương pháp ứng dụng heuristics và học máy trong kiểm thử cho ứng dụng web

và web di động (công bố ở công trình CT5)

- Giải pháp tích hợp các kỹ thuật đã được trình bày ở Chương 2 và Chương 3, đề xuất qui trình ứng dụng trong môi trường phát triển linh hoạt Agile Scrum Từ đó

áp dụng đánh giá thử nghiệm thực tế cho lớp phần mềm ứng dụng Android dựa trên 2 trường hợp: các ứng dụng tại kho mã nguồn FOSS sử dụng để đánh giá các

kỹ thuật kiểm thử tĩnh; tổ chức xây dựng dự án thực tế ACMpp để đánh giá kỹ thuật kiểm thử động về độ tin cậy của ứng dụng (công bố ở công trình CT7)

Kết luận và hướng phát triển

Đánh giá các kết quả đạt được, những hạn chế của luận án và các vấn đề tiếp tục nghiên cứu phát triển để hoàn thiện hướng đi của luận án

6 Các đóng góp khoa học của luận án

Thứ nhất: Xây dựng và thử nghiệm các kỹ thuật tối ưu và tái cấu trúc mã nguồn

nhằm nâng cao hiệu năng cho ứng dụng di động: sử dụng bộ nhớ hiệu quả, đa luồng

và đồng bộ hóa, xây dựng các luật sử dụng Programming Mistake Detector và Android Lint để tối ưu mã nguồn nhằm tiết kiệm năng lượng, nâng cao hiệu năng cho

ứng dụng (PMDLint); xây dựng và thử nghiệm mô hình kiểm thử hộp trắng cho

phương thức trong một lớp để tìm lỗi tiềm ẩn nhằm nâng cao chất lượng mã nguồn

và độ tin cậy cho ứng dụng (UniTest)

Trình bày trong chương 2, có 3 bài báo liên quan (CT1, CT2, CT3), trong đó có

01 công trình Hội nghị Scopus

Thứ hai: Xây dựng và thử nghiệm các kỹ thuật kiểm thử, phương pháp kiểm thử

cho phát triển ứng dụng di động: sinh trường hợp kiểm thử và dữ liệu kiểm thử tự động dựa trên câu chuyện người dùng và tiêu chí chấp nhận (AgileUATM); sử dụng phương pháp đồ thị hóa hoạt động kiểm thử thăm dò (One2Explore), phương pháp heuristics và học máy trong kiểm thử ứng dụng web và web di động (Shinobi) Đề xuất giải pháp AgileScrum+ tích hợp các kỹ thuật trong môi trường phát triển Agile Scrum

Trình bày trong chương 3, có 4 bài báo liên quan (CT4, CT5, CT6, CT7), trong đó

Trang 23

CHƯƠNG 1 TỔNG QUAN KIỂM THỬ ỨNG DỤNG

DI ĐỘNG VÀ PHƯƠNG PHÁP PHÁT TRIỂN LINH HOẠT

Trong chương này, luận án trình bày các số liệu thống kê, các khảo sát về ứng dụng di động, xu hướng phát triển và người dùng ứng dụng di động; phân loại ứng dụng di động, các thách thức trong việc kiểm thử cho ứng dụng di động Ngoài ra, chương này cũng trình bày các khái niệm, các thuật ngữ liên quan đến kiểm thử ứng dụng di động, phương pháp phát triển và qui trình phát triển ứng dụng theo cách tiếp cận linh hoạt (Agile development)

1.1 Giới thiệu tổng quan

Ngày nay, điện thoại di động thông minh đã trở thành một phần không thể thiếu của nhiều người trong cuộc sống hàng ngày Tiến bộ của công nghệ và trải nghiệm người dùng đang thúc đẩy sự phát triển của thị trường ứng dụng di động Cứ mỗi bản cập nhật hệ điều hành mới cũng sẽ tạo ra những cải tiến mới về thiết kế ứng dụng di động để đáp ứng nhu cầu của người dùng trong thời đại công nghệ

Theo nghiên cứu của Research and Markets [92], thị trường đám mây di động dự kiến đạt trị giá 46,90 tỷ USD vào năm 2019 Kết quả nghiên cứu của Markets and Markets [65] cho thấy thị trường điện toán và xử lý di động sẽ có giá trị 61,70 tỷ USD vào năm 2020 Theo những số liệu mới nhất từ Gartner, trong năm 2018, hai hệ điều hành phổ biến nhất trên điện thoại di động đang là iOS và Android khi đang chiếm tới 99.9% thị phần Trong khi các hệ điều hành khác gần như không đáng kể, chỉ chiếm tỷ lệ 0.01%

Hệ điều hành Android vẫn tiếp tục chiếm ưu thế với khoảng 88% thị phần, trong khi đó iOS là 11.9% ở quý 2 năm 2018 So với năm 2017, con số này có thay đổi không đáng kể Android tăng thêm hơn 0.2%, iOS giảm 0.3% [39] Trong khi thị trường điện thoại thông minh trên toàn thế giới dự kiến sẽ giảm 3% trong năm 2018, IDC tin rằng thị trường sẽ có mức tăng trưởng một chữ số từ năm 2019 đến hết dự báo vào năm 2022 [49][102]

Từ năm 2017, nền kinh tế ứng dụng đã tiếp tục phát triển nhờ vào bối cảnh kỹ thuật

số theo sau Phần lớn các công ty và doanh nhân nhận ra rằng các ứng dụng di động

Trang 24

không còn là một tiện ích giá trị gia tăng mà là sự cần thiết để duy trì và phát triển doanh nghiệp Các tổ chức lớn đang sử dụng các ứng dụng di động để xây dựng thương hiệu, tiếp thị trực tiếp, tăng sự tham gia của khách hàng, các doanh nghiệp vừa và nhỏ cũng đang đi theo cùng xu hướng để có chỗ đứng trên thị trường Nền kinh tế ứng dụng tiếp tục mở rộng, phát triển với tốc độ cao được minh chứng bởi số lượng ứng dụng miễn phí được tải xuống đã tăng lên tới 253,91 tỷ trong năm 2017,

so với 57,33 tỷ lượt tải xuống vào năm 2012 Tương tự, số lượng ứng dụng được trả tiền đã tải xuống tăng lên 14,78 tỷ trong năm 2017 so với 2,89 tỷ ứng dụng trong năm

2011 Doanh thu ứng dụng được dự đoán sẽ tăng lên tới 188,9 tỷ đô la vào năm 2020,

từ mức 69,7 tỷ đô la trong năm 2015 [78,79]

Hình 1.1 Thị trường của ứng dụng trên điện thoại thông minh [79]

Thống kê của Statista về số lượng ứng dụng có sẵn để tải xuống trong các cửa hàng ứng dụng kể từ quý 3 năm 2018, người dùng Android có thể chọn giữa 2,1 triệu ứng dụng App Store của Apple vẫn là cửa hàng ứng dụng lớn thứ hai với gần 2 triệu ứng dụng có sẵn (xem Hình 1.1)

Thực tế, tính đến tháng 3 năm 2018, Google Play có khoảng 3,6 triệu ứng dụng, nhiều hơn 100 nghìn so với tháng 12 của năm trước Apple Store đã tăng từ 800 ứng dụng trong tháng ra mắt vào tháng 7 năm 2008 lên 2,2 triệu vào tháng 1 năm 2017

Trang 25

Apple ước tính rằng vào tháng 9 năm 2016, các ứng dụng từ Apple App Store đã được tải xuống tích lũy 140 tỷ lần Tuy nhiên, dữ liệu năm 2016 cho thấy nhiều ứng dụng đã tải xuống không được sử dụng nhiều hơn một lần trong sáu tháng đầu tiên Danh mục App Store phổ biến nhất là chơi game với khoảng 25% các ứng dụng có sẵn thuộc danh mục này [79]

Các ứng dụng di động ngày nay không chỉ phát triển để phục vụ cho giải trí hay lĩnh vực truyền thông xã hội, mà còn nhắm mục tiêu đến các lĩnh vực cần sự an toàn

và tính toán quan trọng như hệ thống thanh toán, chính phủ, quân đội, sức khỏe, và nhiều lĩnh vực khác [50] Người dùng di động đang sử dụng các ứng dụng cài đặt trên điện thoại thông minh thay cho các máy tính cá nhân hay máy tính để bàn và họ hoàn toàn hy vọng rằng ứng dụng như vậy là dễ dùng, đáng tin cậy và an toàn để sử dụng Người dùng mong đợi các giải pháp dựa trên thiết bị di động đáp ứng hầu hết các tác

vụ tính toán của họ Ứng dụng di động cần phải được tích hợp tốt, thiết kế tốt, dễ tiếp cận, hiệu năng cao và đáng tin cậy Tuy nhiên, điều này dẫn đến các giải pháp phát triển ứng dụng di động không chỉ phức tạp hơn mà còn thách thức cho việc phát triển cũng như kiểm thử, đánh giá tính đúng đắn, độ tin cậy cho ứng dụng [5]

1.2 Phân loại ứng dụng di động

Các ứng dụng di động được phân thành 3 nhóm:

Native Applications: Các ứng dụng bản địa được phát triển cho một nền tảng cụ

thể và được cài đặt trên thiết bị di động Các ứng dụng Android được phát triển bằng Java, trong khi iOS ứng dụng được viết bằng Objective-C hoặc Swift Các ứng dụng này có quyền truy cập vào tất cả các thư viện nền tảng cụ thể và các API để tận dụng lợi thế của tất cả các tính năng của một điện thoại thông minh hiện đại đã cung cấp như có thể truy cập trực tiếp vào máy ảnh, GPS và tất cả các cảm biến khác

Web Based Applications: ứng dụng được truy cập thông qua trình duyệt của bên

thứ 3 được cài trên thiết bị di động Một ứng dụng Web di động là một trang web mà

có thể được truy cập từ trình duyệt web của điện thoại Trang web đó được tối ưu hóa cho việc sử dụng trình duyệt di động và độc lập với các nền tảng di động Các ứng dụng Web di động đang phát triển với các công nghệ web như HTML và JavaScript, đặc biệt là với HTML5, CSS3 và JavaScript

Trang 26

Hybrid Applications: là sự kết hợp giữa ứng dụng native và ứng dụng web

Những ứng dụng đó bao gồm các công nghệ Web khác nhau như HTML5 hoặc JavaScript Một khi các phần web đã được xây dựng, việc phát triển có thể biên dịch

mã cơ sở này với định dạng gốc khác nhau: Android, iOS, Windows Phone, hoặc BlackBerry Để biên dịch mã web vào mã di động native, các nhà phát triển cần phải

sử dụng khung (framework) phát triển như PhoneGap Các framework như vậy cung cấp API để truy cập các tính năng phần cứng thiết bị cụ thể trong phần web của ứng dụng Tương ứng với từng loại ứng dụng sẽ có các công nghệ, công cụ và kỹ thuật phát triển được thể hiện qua Bảng 1.1

Bảng 1.1 So sánh các kỹ thuật, công nghệ phát triển của các loại ứng dụng di động

C/C++

C#

VB.Net

HTML5 CSS3 Javascript Mobile development framwork

Đa số truy cập được:

camera, microphone, GPS, gyroscope, accelerometer, file upload…

Chỉ truy cập một phần: GPS, gyroscope, accelerometer, file upload

Truy cập

Ưu điểm

Cho phép tạo các ứng dụng với nhiều giao diện, hay đồ họa

Sự kết hợp giữa tốc độ phát triển ứng dụng web với tốc độ truy cập thiết bị và kho phân phối ứng dụng Native

Yêu cầu phát triển nhanh, bảo trì dễ dàng, tính cơ động của ứng dụng; 1 sản phẩm nhưng

có thể chạy trên nhiều nền tảng khác nhau

Không thể xử lý đồ họa nhiều; yêu cầu phải quen, thân thiện với các framework phát triển mobile

Không xử lý đồ họa nhiều

Không truy cập được camera, âm thanh

Trang 27

Native Hybrid Mobile web

Sử dụng tốt

nhất cho

Trò chơi Các ứng dụng hướng người dùng mà yêu cầu

đồ họa cao

Các ứng dụng hướng người dùng với yêu cầu đồ họa vừa phải, các ứng dụng hướng kinh doanh cần truy cập tất cả các thiết bị

Thường không phải là ứng dụng trò chơi, tập trung cho các ứng dụng kinh doanh

Các nghiên cứu [74], [35], [28] cho rằng những đặc thù của kiểm thử ứng dụng di động là một phần do sự đa dạng của các nền tảng và tính năng của các thiết bị di động

Ví dụ, các thiết bị có kích thước màn hình (từ máy nhắn tin hoặc điện thoại thông minh nhỏ đến máy tính bảng lớn); cơ chế tương tác (stylus, ngón tay, bàn phím, cử chỉ); băng thông mạng (ví dụ như Bluetooth, 3G, 4G, WiFi); khả năng lưu trữ; tốc độ CPU; kích thước thiết bị và tích hợp thiết bị với thiết bị ngoại vi hay hệ thống máy tính khác Điều này làm cho nó rất khó để đảm bảo rằng các ứng dụng có thể được sử dụng một cách hiệu quả trong bất kỳ hoàn cảnh và môi trường nào Theo các nghiên cứu hiện tại cho thấy, hiện đang thiếu các nghiên cứu về cách để đưa ra các yêu cầu kiểm thử cụ thể liên quan đến ứng dụng di động theo vòng đời phát triển từ các đặc

tả yêu cầu [74] Đặc biệt, các nhà phát triển phải xây dựng các ứng dụng để đảm bảo rằng nó sẽ được xem xét và hành xử đúng Những vấn đề trên đã thúc đẩy nhu cầu cần phải có cách tiếp cận tốt hơn, các phương pháp, các kỹ thuật, công cụ tốt hơn để thực hiện kiểm thử cho các ứng dụng di động nhằm đảm bảo chúng hoạt động hiệu quả và tin cậy [74], [28], [126], [57]

1.3 Kiểm thử ứng dụng di động

Kiểm thử ứng dụng di động là một quá trình mà phần mềm ứng dụng phát triển cho các thiết bị di động được thử nghiệm tính năng, khả năng sử dụng và hiệu năng Kiểm thử ứng dụng di động có thể được thực hiện tự động hóa hoặc thủ công [54] Việc kiểm thử cho ứng dụng di động đang phải phải đối mặt với rất nhiều thách thức Những câu hỏi nghiên cứu cần được giải quyết là:

(1) Các ứng dụng di động khác biệt gì so với các ứng dụng truyền thống, có yêu cầu đặc biệt nào về các kỹ thuật kiểm thử mới để đáp ứng điều khác biệt này? (2) Những thách thức và hướng nghiên cứu kiểm thử cho ứng dụng di động là gì?

Trang 28

(3) Vấn đề kiểm thử thủ công và kiểm thử tự động được thực hiện như thế nào, vai trò là gì?

(4) Với xu hướng phát triển các ứng dụng theo phương pháp linh hoạt thì vai trò của kiểm thử thay đổi như thế nào cho phù hợp nhằm nâng cao chất lượng và độ tin cậy cho sản phẩm

1.3.1 Đặc điểm của ứng dụng di động

Việc xem xét tính di động và nhận biết theo ngữ cảnh (context-aware) như là các đặc điểm đặc biệt nhất của ứng dụng di động Dựa trên những đặc điểm này có thể định nghĩa 2 loại ứng dụng di động cụ thể và từ đó chúng ta phân tích các đặc điểm riêng biệt của ứng dụng di động dẫn đến việc nghiên cứu và đưa ra phương pháp, kỹ thuật kiểm thử phù hợp cho quá trình phát triển ứng dụng

Một ứng dụng di động là ứng dụng chạy trên các thiết bị di động [74], [57] và nhận thông tin, dữ liệu đầu vào dựa theo thông tin ngữ cảnh [18] Ứng dụng di động được xem xét theo 2 yếu tố sau:

o Xét theo đặc điểm điện toán di động (mobile computing): một ứng dụng được xem là ứng dụng di động nếu nó chạy được trên các thiết bị điện tử di động như mp3 reader, mobile phone, máy ảnh số theo Satyanarayanan [96] đã đưa ra

sự khác biệt và khái niệm về điện toán di động thông qua 4 ràng buộc: hạn chế nguồn tài nguyên; lổ hổng và bảo mật; hiệu suất và tính biến thiên độ tin cậy;

và nguồn năng lượng hữu hạn

o Xét trên sự nhận biết theo ngữ cảnh (context–aware): một ứng dụng di động là

sự nhận biết của môi trường điện toán mà ứng dụng chạy trên đó và thích ứng/phản ứng theo tính toán của ứng dụng, người dùng, yếu tố vật lý hoặc bối cảnh thời gian [97] Theo Schmidt [98] đã phân loại thông tin ngữ cảnh thành yếu tố con người (người dùng, môi trường xã hội và các tác vụ) và môi trường vật lý (vị trí, cơ sở hạ tầng, và điều kiện vật lý) Các thách thức trong nhận biết ngữ cảnh được thể hiện bởi những cảm biến theo ngữ cảnh (như vị trí, thời gian, đối tượng gần đó, hướng, ngữ cảnh xã hội), sự thích ứng hay cấu hình lại, các hành động ngữ cảnh được kích hoạt và khám phá tài nguyên theo ngữ cảnh

Trang 29

Dựa vào hai yếu tố, đặc điểm trên có thể phân loại ứng dụng di động theo 2 nhóm ứng dụng như sau:

o Các ứng dụng truyền thống được viết lại để chạy trên các thiết bị di động như

ứng dụng web, tìm kiếm, mạng xã hội, các ứng dụng làm việc cộng tác… được gọi là ứng dụng cho di động (Apps4Mobile)

o Và các ứng dụng di động sử dụng thông tin ngữ cảnh để sinh ra các kết quả dựa

vào ngữ cảnh thì gọi là ứng dụng di động (MobileApps)

Khi ảnh hưởng trực tiếp điến việc kiểm thử, ứng dụng Apps4Mobile sẽ kế thừa những đặc tính đặc thù của ứng dụng di động như tính di động, tính đơn thể, tính kết nối… trong khi MobileApps sẽ kế thừa những thách thức liên quan đến các ứng dụng nhận biết ngữ cảnh Từ quan điểm của kiểm thử, chúng ta xác định Apps4Mobile như

là một ứng dụng mà định hướng bởi user input (đầu vào của người sử dụng), chạy trên các thiết bị di động với tài nguyên hạn hẹp Còn MobileApps là ứng dụng đặc biệt của Apps4Mobile mà dữ liệu đầu vào từ môi trường xung quanh của thiết bị và

từ hành động của người dùng để cho ra kết quả dựa vào ngữ cảnh Do đó, các kỹ thuật kiểm thử khác nhau sẽ được yêu cầu cho từng loại ứng dụng

1.3.2.Tính đặc thù của ứng dụng di động ảnh hưởng đến việc kiểm thử phần mềm

Có thể nhóm các ứng dụng cho di động nói chung theo đặc thù riêng của nó như Bảng 1.2

Bảng 1.2 Phân loại ứng dụng di động theo đặc thù riêng và kiểm thử tương ứng [74]

Loại ứng

dụng mobile

Các trạng thái đặc thù/riêng biệt

Các loại kiểm thử được xem

e Kết nối di động (Mobile Connectivity)

Độ tin cậy, hiệu năng, an ninh, kiểm thử chức năng thông qua các mạng khác nhau

Tài nguyên bị giới hạn Kiểm thử hiệu năng và giám sát chức năng (*)

Sự tự trị (autonomy) Theo dõi tiêu thụ năng lượng (*) Giao diện người dùng (UI) GUI testing

Nhận biết bối cảnh

Kiểm thử các chức năng mở rộng và các chức năng phụ thuộc vào ngữ cảnh (*)

Trang 30

Loại ứng

dụng mobile

Các trạng thái đặc thù/riêng biệt

Các loại kiểm thử được xem

Hệ điều hành mới (O.S) Kiểm thử tính tương thích

Sự đa dạng của điện thoại

và hệ điều hành

Kiểm thử mức độ bao phủ tính đa dạng (*)

Touch screen- màn hình cảm ứng

Tính dễ sử dụng và khả năng phản hồi khi cảm ứng

(*) các loại kiểm thử được nghiên cứu trong luận án này

1.4 Phương pháp phát triển linh hoạt

Qui trình phát triển phần mềm truyền thống đã không còn phù hợp khi các công ty đang cố gắng rút ngắn thời gian sản xuất và đưa sản phẩm thị ra trường sớm Trong nhiều trường hợp, nhiều nghiên cứu khác nhau [23, 32, 33, 44, 103, 105, 116,117], việc kiểm soát chất lượng thường giảm hoặc hoãn lại do thời hạn cuối bị giảm hoặc

bị quá thời gian của các giai đoạn phát triển Các công ty phát triển phần mềm cần có một qui trình phù hợp có thể đánh giá chất lượng trong từng giai đoạn phát triển sản phẩm của họ mà không cần can thiệp vào tiến độ giao hàng Chính điều này đã buộc các công ty phần mềm hiện nay chuyển sang việc sử dụng các phương pháp phát triển linh hoạt (Agile Development Methodology- Agile)

Agile là triết lý phát triển phần mềm mà nhà phát triển sẽ phải thực hiện sản xuất sản phẩm với lịch trình giao hàng ngắn bằng cách tạo ra một sản phẩm với tính năng

ít hơn thay vì hạ thấp các tiêu chuẩn chất lượng của các sản phẩm tương tự Với triết

lý và phương pháp phát triển phần mềm linh hoạt được cụ thể cho từng công ty riêng

và thực hành tốt nhất của họ không thể dễ dàng áp dụng cho một tổ chức hay công ty khác Hơn nữa, nhiều công ty đang gặp phải các vấn đề trong việc chuyển đổi từ cách tiếp cận truyền thống sang tiếp cận linh hoạt Một trong những nguyên nhân của vấn

đề này là các công ty đang cố tái sử dụng các kỹ thuật và công cụ từ quá trình phát triển truyền thống mà có thể không được áp dụng trong phương pháp phát triển linh hoạt

Trang 31

Agile không phải là một qui trình phát triển phần mềm theo định nghĩa mà là một triết lý dựa trên một tập hợp các nguyên tắc Những nguyên tắc này được gọi là

"Tuyên ngôn Agile" [35],[105]

Một số quy trình phát triển phần mềm sử dụng một số các nguyên tắc đó, như: Lập trình cực hạn (XP), Scrum, Dynamic Systems Development Method (DSDM), Feature Driven Development (FDD), thường đề cập đến chúng như là phương pháp phát triển phần mềm nhanh, linh hoạt

1.4.1 Phát triển hướng kiểm thử TDD

TDD (Test-Driven Development) có thể được hiểu là mô hình phát triển với trọng tâm hướng về việc kiểm thử TDD được xây dựng theo hai tiêu chí: Test-First (Kiểm thử trước) và Refactoring (điều chỉnh mã nguồn) [8,10] Hình 1.2 thể hiện qui trình phát triển TDD Trong đó, khi một yêu cầu phần mềm được đặt ra:

Hình 1.2 Quy trình phát triển TDD [7]

o Người lập trình viên soạn thảo kịch bản kiểm thử (test case) cho yêu cầu đó trước tiên và chạy thử kịch bản đó lần đầu tiên Hiển nhiên, việc chạy thử sẽ đưa ra kết quả thất bại vì chức năng đó chưa được xây dựng (và thông qua kết quả đó, ta cũng kiểm tra được là kịch bản kiểm thử đó được viết đúng)

o Theo đó, dựa vào mong muốn của kịch bản kia, người lập trình sẽ xây dựng một lượng mã nguồn (source code) vừa đủ để lần chạy thứ 2 của kịch bản đó thành công

o Nếu trong lần chạy thứ hai vẫn đưa ra một kết quả thất bại, điều đó có nghĩa là

thiết kế chưa đáp ứng yêu cầu, người lập trình lại chỉnh sửa mã nguồn và chạy lại kịch bản đến khi thành công

Trang 32

o Khi kịch bản kiểm thử được chạy thành công, người lập trình tiến hành chuẩn

hóa đoạn mã nguồn (base-line code) và tiếp tục hồi quy với kịch bản kiểm thử tiếp theo Việc chuẩn hóa bao gồm thêm các chú thích, loại bỏ các dư thừa, tối

ưu các biến

1.4.2 Phát triển hướng hành vi BDD

Trong mô hình TDD nhiệm vụ kiểm thử do lập trình viên đảm nhiệm và vai trò chuyên hóa của người kiểm thử gần như không còn nữa Trong mô hình TDD người kiểm thử chấp nhận (Acceptance Tester) không tồn tại Tuy nhiên, việc cộng gộp vai trò (code-test) phát sinh vấn đề quá tải cho người lập trình viên Để làm tốt công việc, xuyên suốt chu trình người lập trình viên phải chú ý thêm những vấn đề thuần túy của

kiểm thử như: “Cái gì cần kiểm thử và cái gì không?”, “Viết bao nhiêu kịch bản là

đủ?”, “Làm sao để hiểu là kiểm thử đó thất bại?”, “Bắt đầu kiểm thử từ đâu?” Để

giải quyết vấn đề phát sinh mà vẫn tận dụng triệt để lợi ích của phương pháp TDD mang lại, Dan North phát triển một mô hình mới với tên gọi (Hình 1.3): Behavior-Driven Development – BDD (hoặc cũng có thể hiểu là Acceptance Test-Driven Development – ATDD) [1, 12,14] Trong đó, vai trò mới trong việc thiết kế kiểm thử (Test Design) được đặt ra:

o Thay vì chờ đợi sản phẩm hoàn thành và kiểm thử, người kiểm thử tham gia

vào quá trình xây dựng mã nguồn với vai trò phân tích và xây dựng kịch bản kiểm thử dưới góc độ ngôn ngữ tự nhiên dễ hiểu từ các câu chuyện của người

o Đồng thời, người kiểm thử giúp đỡ lập trình viên trong việc giải thích và đưa

ra các phương án xây dựng mã nguồn mang tính thực tiễn với người dùng ngay trước khi bắt tay vào việc lập trình

o Người lập trình viên liên hệ mật thiết với người kiểm thử và xây dựng mã nguồn với những phương án mà người kiểm thử cung cấp theo mô hình TDD

o Kịch bản kiểm thử được phân chia làm 2 lớp: Lớp chấp nhận

(feature/acceptance test) và lớp đơn vị (unit test)

o Theo đó, kịch bản kiểm thử lớp đơn vị mang thuần tính thiết kế và phục vụ cho việc kiểm thử lớp đơn vị (Unit test) còn kịch bản kiểm thử lớp chấp nhận có thể được tái sử dụng cho quá trình kiểm thử hồi quy về sau

Trang 33

Hình 1.3 Mô hình BDD – TDD trong Agile mô phỏng bởi Paul Littlebury [12]

Từ mô hình BDD -TDD cho thấy được sự ưu việt mà BDD mang lại, đặc biệt là trong các dự án phần mềm lớn và phức tạp, khi cả hai khía cạnh phân hóa vai trò và chất lượng phải đi đôi Ngoài ra, việc thực thi kịch bản kiểm thử và xử lý sớm các vấn đề thiết kế ngay trong khâu xây dựng sẽ giúp giảm thiểu tối đa chi phí và công sức sửa chữa lỗi

Trong khi khái niệm BDD mang tính lý thuyết, việc ứng dụng của nó lại mang nặng tính thực nghiệm Để phát huy lợi ích về thời gian trong việc xây dựng kịch bản kiểm thử, ngôn ngữ và cách truyền tải là một thử thách khi phải đáp ứng khả năng đọc hiểu từ cả 2 khía cạnh: tự nhiên và thiết kế Bằng sự vay mượn từ ngôn ngữ viết câu chuyện người dùng (User Story), ngôn ngữ Gherkin được phát triển để phục vụ nhu cầu đó với cấu trúc đơn giản, hướng đối tượng và tương đồng cho mọi kịch bản: Given – When – Then [12]

Given: Là một chủ thẻ ATM ngân hàng

When: Tôi thực hiện giao dịch rút tiền

Then: Tôi có thể rút được tiền trong tài khoản của tôi và thực hiện một số giao dịch khác

Điều kiện cho kiểm thử chấp nhận được mô tả theo đặc tả này, được phân tích và sinh từ user story

Given: Bối cảnh của hệ thống là gì? Những điều kiện trước nào phải đúng trước khi hành

động được kiểm tra? Dữ liệu gì trong hệ thống?

When: Điều gì sẽ được kiểm tra? Đầu vào những dữ liệu sẽ được kiểm tra thông qua các

quy luật kinh doanh khi các hành động xảy ra?

Then: Để phản hồi với các hành động, các kết quả quan sát được là gì? Các kết quả dự kiến

là gì? Hậu điều kiện hoặc dữ liệu đầu ra quan sát bởi người sử dụng là gì?

Ví dụ cụ thể từ user story sinh kiểm thử chấp nhận:

Trang 34

User story title: Khách hàng rút tiền mặt từ ATM

As a “Khách hàng”

I want to “rút tiền mặt từ máy ATM”

So that I “không phải xếp hàng ở ngân hàng”

Acceptance Criterion 1 (điều kiện chấp nhận 1)

Given “tài khoản đó là đáng tin cậy”

And “Thẻ là hợp lệ”,

And “bộ phân phối có chứa tiền mặt – còn tiền trong máy ATM”

When “Khách hàng yêu cầu rút tiền”

Then “đảm bảo đây là tài khoản ghi nợ”

And “đảm bảo tiền mặt được phân phối”

And “đảm bảo tiền được nhả ra từ máy ATM”

Acceptance Criterion 2 (điều kiện chấp nhận 2)

Given “khách hàng rút quá số tiền mặt cho phép”

And “thẻ là hợp lệ”,

When “khách hàng yêu cầu rút tiền mặt”

Then “đảm bảo thông báo từ chối được hiển thị”

And “đảm bảo rằng tiền sẽ không được nhả ra từ máy ATM”

1.4.3 Kiểm thử trong môi trường phát triển Agile Scrum

Các mô hình hướng Agile như TDD-BDD đang dần thay đổi vai trò của một kiểm thử viên (Acceptance Tester) truyền thống trong việc kiểm thử Công việc kiểm thử dựa trên nguyên tắc đợi sản phẩm phần mềm hoàn tất (một phần hoặc toàn phần) và thực thi kiểm thử trên sản phẩm như một người dùng cuối không còn phù hợp Thay vào đó, vai trò của người kiểm thử có xu hướng chuyển dần sang việc bảo trì chất lượng phần mềm và hỗ trợ kỹ sư lập trình trong việc tối ưu sự tiện dụng của sản phẩm ngay từ khâu xây dựng Các kỹ sư kiểm thử cần có khả năng xây dựng và thực thi các

bộ kiểm thử mang tính bảo trì chất lượng Đặc biệt, kiểm thử hồi quy tự động và các

bộ kiểm thử tải là phần việc duy nhất kỹ sư phát triển không đảm nhiệm [93,110]

1.5 Các thách thức của kiểm thử ứng dụng di động

Nghiên cứu của luận án tập trung phân tích những thách thức và các hướng nghiên cứu tiềm năng trong tương lai về (i) qui trình và môi trường kiểm thử, (ii) kỹ thuật kiểm thử, (iii) các mức kiểm thử, (iv) phạm vi kiểm thử được thực hiện

Một số thách thức và xu hướng kiểm thử cho ứng dụng di động:

Trang 35

o Khách hàng: Kỳ vọng của khách hàng là một trong những thách thức chính đối

với các nhà phát triển di động Mỗi người dùng có kỳ vọng từ các ứng dụng di động là duy nhất, dẫn đến việc phát triển và cung cấp một sản phẩm thỏa mãn cho khách hàng là khá khó khăn Theo khảo sát của Compuware [71], có gần 80% người dùng xóa một ứng dụng sau khi sử dụng nó lần đầu tiên Bốn lý do hàng đầu để xóa ngay lập tức sau khi cài đặt là: thiết kế xấu, khả năng sử dụng kém, thời gian tải chậm, treo máy Gần 60% người sử dụng sẽ xóa một ứng dụng mà có yêu cầu đăng ký và hơn một nửa số người dùng mong đợi một ứng dụng có thể khởi động trong 2 giây Dựa trên những con số cho thấy rằng, người dùng di động có kỳ vọng thực sự cao khi nói đến khả năng sử dụng, hiệu năng và độ tin cậy của ứng dụng di động Hướng kiểm thử về hiệu năng, tính

dễ sử dụng và độ tin cậy của ứng dụng là rất quan trọng cần phải được thực hiện

o Nền tảng di động và sự phân mảnh thiết bị: Các nhà cung cấp điện thoại di

động khác nhau và các nền tảng di động khác nhau sẽ là một thách thức lớn cho phát triển và kiểm thử Dựa trên các số liệu từ OpenSignal [7], gần 19.000 thiết bị Android có sẵn trên thị trường Cho nên không thể và không cần thiết phải thử nghiệm trên tất cả các thiết bị Các phần cứng và phần mềm có thể kết hợp trên các nền tảng cũng là một thách thức lớn cho phát triển và kiểm thử Giải pháp thực hiện là phân nhóm thiết bị, thực hiện kiểm thử tổ hợp để làm giảm số lượng kiểm thử, giảm khối lượng công việc của kiểm thử, tăng năng suất

o Vòng đời của ứng dụng di động: Đối với các ứng dụng di động, chu kỳ sống (vòng đời) được coi là các trạng thái khác nhau mà một ứng dụng có thể trải qua trong thời gian chạy của nó và chuyển đổi giữa các trạng thái Khi phát triển các ứng dụng di động chạy trên hệ điều hành Android hay iOS, các nhà phát triển phải quan tâm các trạng thái của chu kỳ sống để đảm bảo chính xác hành vi của ứng dụng trong mọi trường hợp Điều này sẽ đảm bảo rằng các nhà phát triển có thể xây dựng một ứng dụng di động đáng tin cậy và đầy đủ, hoạt động một cách chính xác và có thể duy trì tính toàn vẹn dữ liệu [45,60 ,88] Có hai nghiên cứu đã đề xuất và đánh giá cách tiếp cận kiểm tra sự phù hợp của

Trang 36

các ứng dụng di động cho các mô hình vòng đời [35], [36] Tuy nhiên, các phương pháp được đề xuất là rất cơ bản và hầu hết các bước quan trọng được

đề xuất là thủ công và phụ thuộc vào các nhà phát triển hoặc nhận thức của kiểm thử viên về vấn đề này

o Qui trình kiểm thử: Qui trình kiểm thử ứng dụng di động bao gồm nhiều hoạt

động khác nhau nhưng chỉ tập trung vào khâu chọn lựa kỹ thuật, phương pháp, lựa chọn kịch bản kiểm thử và cách thức thực thi Các ứng dụng MobileApps nhận các giá trị đầu vào từ các đối tượng ngữ cảnh khác nhau như người dùng, sensor và các thiết bị kết nối, các dữ liệu vào từ các ngữ cảnh khác nhau và luôn thay đổi Điều này sẽ dẫn đến việc không thể dự đoán được mức độ biến động của các giá trị đầu vào mà ứng dụng sẽ nhận Do đó, các điều kiện kiểm thử mới sẽ được yêu cầu cung cấp các hướng dẫn, các luật và chiến lược cho việc sẽ lựa chọn kịch bản kiểm thử nào để đảm bảo mức độ bao phủ tối đa trong trường hợp không dự đoán được mức độ biến đổi của dữ liệu vào theo ngữ cảnh Đối với các ứng dụng Apps4Mobile, việc thực thi kiểm thử cơ bản giống với các ứng dụng truyền thống Còn đối với các ứng dụng MobileApps, thông tin ngữ cảnh sẽ là thách thức cho việc thực thi các trường hợp kiểm thử Hiện tại các trình giả lập không thể mô phỏng được thực tế của các điện thoại với các sensor, GPS, hay các kết nối Kỹ thuật ghi (capture) và chạy lại (replay) mới

có thể được triển khai cho việc thực thi các trường hợp kiểm thử với dữ liệu vào phụ thuộc ngữ cảnh trong suốt giai đoạn lựa chọn trường hợp kiểm thử Áp dụng phương pháp kiểm thử hướng ngữ cảnh, kiểm thử hướng mô hình là hướng giải quyết cho thách thức này

o Kiểm thử chức năng: Các kỹ thuật kiểm thử chức năng sẽ yêu cầu xác định cả

ứng dụng và môi trường mà nó hoạt động Cách tiếp cận dựa trên trạng thái có thể được xem là một phần hữu hiệu cho việc xác định các trạng thái khác nhau cho một ứng dụng di động có thể tính đến khi nhận các dữ liệu cảm ứng khác nhau Cũng có thể sử dụng cách tiếp cận dựa trên trạng thái (State-based) cho

mô hình các chế độ thực thi kiểm thử khác nhau như (chế độ low battery, flight mode, meeting) Các công cụ hiện tại như Robotium có thể được sử dụng;

Trang 37

MonkeyRunner có thể dùng kiểm thử chức năng cho ứng dụng Android MobileTest là công cụ kiểm thử tự động hộp đen cho các ứng dụng di động

o Kiểm thử đơn vị và kiểm thử tích hợp: Các công cụ, các nghiên cứu hiện nay

tập trung nhiều cho kiểm thử đơn vị (Unit test) còn kiểm thử tích hợp dường như ít được quan tâm khai thác Đối với việc lập trình các ứng dụng di động hiện nay, kiểm thử đơn vị được tập trung triển khai và hỗ trợ nhiều, iOS có hướng dẫn cho kiểm thử đơn vị; Android có Junit Tuy nhiên cả 2 trường hợp đều không xem xét đến giá trị ngữ cảnh (contextual values)

o Kiểm thử tích hợp: Trong khi hầu hết các cách tiếp cận kiểm thử hiện tại đều

xem xét các ứng dụng di động trong sự cô lập Kiểm thử tích hợp các ứng dụng

di động là nói đến việc kiểm thử tính giao tiếp giữa các ứng dụng thông qua ý định hoặc nơi cung cấp nội dung trong nền tảng Android [76] Thông thường các ứng dụng di động không tồn tại riêng một mình mà nó có nhu cầu trao đổi

dữ liệu với các thành phần khác hoặc các ứng dụng thuộc hệ điều hành Tương

tự, các ứng dụng di động cũng thường yêu cầu giao tiếp với các ứng dụng khác bên ngoài như các trang web mạng xã hội (như Facebook, Twitter và MySpace) [79]

o Kiểm thử độ tin cậy và hiệu năng: Hiệu năng và độ tin cậy của ứng dụng phụ

thuộc rất lớn vào tài nguyên của thiết bị di động, phụ thuộc vào chế độ hoạt động của thiết bị, chất lượng kết nối và mức độ biến thiên thông tin ngữ cảnh Các kỹ thuật kiểm thử mới cho phân tích độ tin cậy và hiệu năng của ứng dụng phải xem xét đến các đặc tính liên quan sự thay đổi ngữ cảnh và sự khác nhau của thiết bị Các kỹ thuật phân tích khi run-time có thể cũng được thích ứng để giám sát tài nguyên và trạng thái kết nối

o Kiểm thử bộ nhớ và năng lượng: Lãng phí, rò rỉ bộ nhớ có thể làm hạn chế tài

nguyên của hệ thống, các tiến trình đang hoạt động có thể làm giảm năng lượng của thiết bị Có thể sử dụng các độ đo để đo lường, ước lượng năng lượng sử dụng và tiêu thụ năng lượng được đề xuất để tự động dự đoán mức độ rò rỉ bộ nhớ và mất mát năng lượng Nghiên cứu hiện tại có iOS Instruments cho phép phân tích rò rỉ bộ nhớ (memory leaks) Tuy nhiên, việc phân tích như vậy là chưa đầy đủ Thompson et al [41] [111] đã đề xuất một công cụ hướng mô

Trang 38

hình để mô hình hóa các kiến trúc phần mềm di động một cách liên tục được

sử dụng để sinh mã mô phỏng ước lượng tiêu thụ điện năng

o Kiểm thử bảo mật: Tính bảo mật đặc biệt có liên quan đến tính di động của

thiết bị vào các vùng mạng có mức độ an ninh là khác nhau Một trojan có thể truy xuất vào thông tin cá nhân, các mạng riêng và thông tin ngữ cảnh riêng tư như vị trí người dùng ứng dụng đang đứng Các mạng khác nhau đại diện cho tính đặc thù của các ứng dụng di động nên phương pháp kiểm tra an ninh truyền thống được thay đổi để xem xét các yếu tố ngữ cảnh phải được mô phỏng nhằm kiểm tra những dữ liệu được truyền từ các thiết bị di động

o Kiểm thử tự động: Hầu hết các phát triển ứng dụng di động được coi là phát

triển nhanh chóng và các đội dự án sẽ phân phối các ứng dụng cho thị trường trong một thời gian ngắn để theo kịp với nhu cầu thị trường Với sự hỗ trợ của kiểm thử tự động, kỹ sư kiểm thử có nhiều khả năng để có thể bắt kịp với các

kỹ sư phát triển để duy trì sự nhanh nhẹn này Hơn nữa, kiểm thử tự động giúp tiết kiệm thời gian cho các kỹ sư kiểm thử, hạn chế sai sót của các kiểm thử thủ công Những công cụ hỗ trợ kiểm thử tự động hiện tại chủ yếu là kiểm thử đơn

vị và kiểm thử giao diện UI [34]

o Kiểm thử dòng sản phẩm: Kiểm thử một ứng dụng trên nhiều thiết bị khác nhau

thực sự là một thách thức quan trọng, đặc biệt như Android OS, các diện thoại khác nhau sẽ cung cấp các thành phần phần cứng và tính năng khác nhau cũng như các nhà sản suất điện thoại tùy biến hệ điều hành khác nhau Việc xem xét hơn 130 điện thoại di động khác nhau đang chạy Android OS với 7 phiên bản khác nhau và nếu cứ mỗi thiết bị có 02 firmwares thì sẽ có đến 1800 tổ hợp khác nhau Do đó, việc kiểm thử trên nhiều thiết bị sẽ được thay thế bởi các kỹ thuật được tự động hiệu quả hơn về mặc chi phí Một cách tiếp cận khác là cho phát hành bản kiểm thử beta (miễn phí) trên các thiết bị khác nhau, từ đó thu thập dữ liệu lỗi, dữ liệu khi chạy để phân tích và tìm lỗi

1.6 Kết chương

Trong Chương 1, luận án đã trình bày tổng quan về điện thoại di động thông minh, ứng dụng cho điện thoại di động, phân loại ứng dụng di động, các số liệu thống kê và

Trang 39

xu hướng sử dụng ứng dụng di động Các thách thức trong phát triển và kiểm thử ứng dụng di động, qui trình phát triển và kiểm thử ứng dụng di động Các nội dung trình bày trong chương này thể hiện được các cơ sở lý luận và thực tiễn yêu cầu mà nhiệm

vụ của luận án cần phải đưa ra để giải quyết

Trong các Chương tiếp theo, luận án sẽ được cụ thể hóa các đề xuất và cách thực nghiệm để đánh giá các phương pháp, kỹ thuật hay cách tiếp cận thực hiện kiểm thử ứng dụng di động Android

Trang 40

CHƯƠNG 2 CÁC KỸ THUẬT TỐI ƯU HÓA, TÁI CẤU TRÚC VÀ PHÂN TÍCH MÃ NGUỒN CỦA ỨNG DỤNG

DI ĐỘNG

Trong chương này, các kỹ thuật được nghiên cứu và phát triển bao gồm (1) kỹ thuật phân tích, tối ưu mã nguồn Java dựa trên PMD và Android lint, xây dựng tập qui tắt mới (sau đây gọi là “tập luật” hay “luật”) cùng với công cụ hỗ trợ phân tích

mã tự động, tái cấu trúc mã nguồn để giảm tiêu thụ năng lượng, nâng cao hiệu năng cho ứng dụng Android và (2) Kỹ thuật phân tích mã nguồn nhằm đánh giá mức độ bao phủ mã nguồn, xác định lỗi cấu trúc, lỗi logic tiềm ẩn trong chương trình cũng như đánh giá khả năng chịu lỗi của một chương trình viết bằng Java

2.1 Đặt vấn đề

Phân tích và tối ưu hóa mã nguồn là các kỹ thuật cải thiện chất lượng phần mềm

và tăng hiệu suất của hệ thống Thanh tra và xem xét mã nguồn là các kỹ thuật kiểm thử tĩnh được sử dụng để nâng cao chất lượng và độ tin cậy của ứng dụng Phân tích

mã nguồn nhằm phát hiện ra các khiếm khuyết và các vấn đề tiềm ẩn trong một ứng dụng dựa trên kinh nghiệm đã có [1-3] Kiểm thử tĩnh là một hình thức kiểm thử phần mềm có thể được áp dụng trong từng giai đoạn phát triển khi mà phần mềm chưa được thực thi Hoạt động chủ yếu là kiểm tra sự minh bạch của mã, thuật toán hoặc tài liệu Người lập trình có thể sử dụng loại thử nghiệm này để cải thiện chất lượng của mã nguồn và sản phẩm [15] Ngoài ra, việc phân tích và đánh giá mức độ bao phủ mã nguồn, xác định lỗi cấu trúc, lỗi logic cũng như đánh giá khả năng chịu lỗi của một chương trình, của một phương thức (hay một hàm) khi kiểm thử hộp trắng là hoạt động rất quan trọng và cần thiết để đảm bảo chương trình hoạt động đúng và tin cậy Do đó, sự cần thiết phải có kỹ thuật, phương pháp kiểm thử hộp trắng để giúp người phát triển có thể biết được mức độ bao phủ các câu lệnh, bao phủ các nhánh, bao phủ các đường của từng phương thức Hơn nữa, thông qua phương pháp và mô hình kiểm thử này, người phát triển có thể biết được phương thức đó tồn tại những loại lỗi nào và thông tin vị trí lỗi, với bộ dữ liệu đầu vào như thế nào thì phương thức bộc lộ ra các lỗi nhưng không biết được chính xác vị trí lỗi, hoặc phương thức chưa

xử lý chặt khiến nó kém khả năng chịu lỗi Từ tất cả các thông tin thu được từ mô

Ngày đăng: 27/12/2020, 10:18

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

🧩 Sản phẩm bạn có thể quan tâm

w