Với bộ kiểm thử CTS này Google cũng hỗ trợ các đối tác một công cụ để có thể kiểm thử nhanh với các thiết bị trước khi ra thị trường nằm trong bộ CTS.. Sau khi nghiên cứu phương pháp CTS
Trang 1ĐẠI HỌC QUỐC GIA HÀ NỘI TRƯỜNG ĐẠI HỌC CÔNG NGHỆ
Trang 2ĐẠI HỌC QUỐC GIA HÀ NỘI TRƯỜNG ĐẠI HỌC CÔNG NGHỆ
Phan Thị Huế
PHƯƠNG PHÁP VÀ CÔNG CỤ ĐỂ HỖ TRỢ KIỂM THỬ PHẦN MỀM ANDROID
Ngành: Công nghệ thông tin
Chuyên ngành: Kĩ thuật phần mềm
Mã số: 60.48.01.03
LUẬN VĂN THẠC SĨ
NGƯỜI HƯỚNG DẪN CHÍNH: PGS.TS Trương Ninh Thuận
NGƯỜI HƯỚNG DẪN PHỤ: TS Trịnh Thanh Bình
HÀ NỘI – 2016
Trang 3Lời cảm ơn
Trước tiên, em xin bày tỏ lòng biết ơn chân thành và sâu sắc tới Thầy giáo PGS.TS Trương Ninh Thuận và TS Trịnh Thanh Bình đã tận tình chỉ bảo, hướng dẫn, động viên và giúp đỡ em trong suốt quá trình thực hiện đề tài luận văn
Em xin gửi lời cảm ơn sâu sắc tới các Thầy Cô trong Khoa Công nghệ thông tin
đã truyền đạt kiến thức quý báu cho em trong hai năm học vừa qua
Con xin nói lên lòng biết ơn vô hạn đối với Cha Mẹ luôn là nguồn động viên, chăm sóc và khích lệ con trên mỗi bước đường học vấn
Cuối cùng, xin chân thành cảm ơn các Anh Chị và Bạn Bè, các thành viên lớp K19, K20 KTPM đã ủng hộ, giúp đỡ tôi trong suốt thời gian tôi học tập trên giảng đường và thực hiện đề tài luận văn này
Tôi xin chân thành cảm ơn!
Hà Nội, ngày 01 tháng 10 năm 2016
Học viên
Phan Thị Huế
Trang 4PHƯƠNG PHÁP VÀ CÔNG CỤ ĐẺ HỖ TRỢ KIỂM THỬ
PHẦN MỀM ANDROID Phan Thị Huế
Khóa K20KTPM, ngành công nghệ thông tin
Tóm tắt Luận văn:
Ngày nay với sự phát triển rộng rãi của hệ điều hành Android trên các dòng điện thoại thì việc tạo ra các phần mềm, dự án liên quan đến Android càng ngày càng tăng lên Do đó các giải pháp hỗ trợ kiểm thử phần mềm Android sẽ rất có ý nghĩa trong việc kiểm thử chất lượng sản phẩm của các nhà phát triển trước khi đưa đến người dùng Theo thống kê của Google Android chiếm 75% thị phần điện thoại thông minh trên toàn thế giới vào thời điểm quý 3 năm 2012 và sau 2 năm đã có hơn một tỷ máy được kích hoạt Android Sự thành công của hệ điều hành này đã dẫn đến “cuộc chiến điện thoại thông minh” giữa các hãng sản xuất điện thoại Và bất kỳ một chiếc điện thoại nào muốn kích hoạt Android đều phải trải qua tất cả các ca kiểm thử của Google Các ca kiểm thử đó được Google phát triển và tích hợp trong công cụ CTS (Compatibility Test Suite) mà các đối tác phải tuân theo
Với mỗi nền tảng của Android được ra đời, Google cung cấp các bộ API tương ứng với nền tảng đó Tương ứng với bộ API này tương ứng là tập các ca kiểm thử CTS Mục đích là kiểm tra sự tương thích của các thiết bị Android với nền tảng đó Với bộ kiểm thử CTS này Google cũng hỗ trợ các đối tác một công cụ để có thể kiểm thử nhanh với các thiết bị trước khi ra thị trường nằm trong bộ CTS
Sau khi nghiên cứu phương pháp CTS Google hỗ trợ các đối tác kiểm thử trên thiết bị di động chạy Android, luận văn đã áp dụng phương pháp này và xây dựng một công cụ hỗ trợ kiểm thử trên dự án Android Junit Test và mang lại những lợi ích đáng
kể và có hiệu quả cao so với việc kiểm thử trực tiếp trên IDE (eclipse)
Trang 5Lời cam đoan
Tôi xin cam đoan phương pháp và công cụ để hỗ trợ kiểm thử phần mềm Andoid được trình bày trong luận văn này là do tôi thực hiện dưới sự hướng dẫn của PGS.TS Trương Ninh Thuận và TS Trịnh Thanh Bình
Tất cả những tham khảo từ các nghiên cứu liên quan đề được nêu nguồn gốc một các rõ ràng từ danh mục tài liệu tham khảo trong luận văn Trong luận văn, không có việc sao chép tài liệu, công trình nghiên cứu của người khác mà không chỉ rõ về tài liệu tham khảo
Hà Nội, ngày 01 tháng 10 năm 2016
Tác giả
Phan Thị Huế
Trang 6MỤC LỤC
CHƯƠNG 1: GIỚI THIỆU VỀ LUẬN VĂN VÀ LÝ DO CHỌN ĐỀ TÀI 5
1 Kiểm thử ứng dụng trên hệ điều hành Android 5
2 Nội dung luận văn 6
3 Cấu trúc của luận văn 7
CHƯƠNG 2: KHÁI QUÁT VỀ KIỂM THỬ ỨNG DỤNG TRÊN ĐIỆN THOẠI THÔNG MINH 8
1 Các yếu tố ảnh hưởng đến hoạt động của phần mềm trên điện thoại thông minh .8
2 Lựa chọn điện thoại thông minh để kiểm thử 8
3 Các dạng kiểm thử trên Android 9
4 Nền tảng kiểm thử Android 10
4.1 Instrument framework (IF) 11
4.2 Kiến trúc kiểm thử trên Android 12
5 Các mục tiêu kiểm thử 13
CHƯƠNG 3: GIỚI THIỆU VỀ CTS 14
1 Giới thiệu về Compatibility Test Suite (CTS) 14
2 Nguyên lý và cách thức làm việc của CTS [3] 15
2.1 Docs 16
2.2 Repository 16
2.3 Tools 17
3 Cài đặt phương pháp CTS 18
3.1 Môi trường vật lý trên thiết bị kiểm thử 18
3.2 Cài đặt môi trường máy tinh 18
3.3 Cài đặt trên thiết bị kiểm thử 18
4 Cách chạy các ca kiểm thử CTS 19
4.1 Sao chép dữ liệu vào thiết bị 19
4.2 Kiểm thử một Plan 19
4.3 Các câu lệnh hỗ trợ tối ưu thời gian kiểm thử 20
4.4 Tái kiểm thử trên kết quả cũ 21
4.5 Báo cáo kết quả 21
Trang 7CHƯƠNG 4: ỨNG DỤNG CHẠY CTS TRONG KIỂM THỬ ANDROID JUNIT
TEST PROJECT 23
1 Phương pháp CTS áp dụng kiểm thử với dự án Android Junit Test 23
2 Cách tạo tệp tin apk và xml từ Eclipse 25
2.1 Tạo tệp tin apk sử dụng Eclipse 25
2.2 Cách tạo tệp tin xml từ dự án trên Eclipse 26
3 Quá trình kiểm thử trên thiết bị 28
4 Ưu điểm của công cụ so với kiểm thử trực tiếp trên Eclipse 29
CHƯƠNG 5: XÂY DỰNG CÔNG CỤ CTS EXECUTOR 30
1 Môi trường và các công cụ sử dụng để thực nghiệm 30
1.1 Cấu hình phần cứng 30
1.2 Các phần mềm sử dụng 30
2 Phân tích thiết kế phần mềm 31
2.1 Phân tích các ca sử dụng 31
2.2 Biểu đồ trình tự 32
2.3 Biểu đồ hoạt động 33
3 Mô tả công cụ hỗ trơ kiểm thử 34
3.1 Tổng quan về công cụ 34
3.2 Chi tiết các chức năng 35
4 Xây dựng tập ca kiểm thử thử nghiệm với công cụ CTS Executor 40
4.1 Xây dựng tập các ca kiểm thử 40
4.2 Kết quả thực nghiệm với công cụ CTS Executor 40
CHƯƠNG 6: KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN 42
Trang 8Danh sách hình vẽ
Hình 2.1 : Định dạng file manifest trong Android Junit Test 11
Hình 2.2 : Kiến trúc testing framework [1] 12
Hình 3.1 : Qui trình đạt được Google’s certification 14
Hình 3.2 : Phương thức sử dụng CTS 15
Hình 3.3 : Cấu trúc của CTS 15
Hình 3.4 : Danh sách các ca kiểm thử 16
Hình 3.5 : Danh sách các tệp xml và apk 16
Hình 3.6 : Danh sách các pakage trong Plan 17
Hình 3.7 : Thư mục kết quả chạy 21
Hình 3.8 : Minh họa cho kết quả chạy bằng phương pháp CTS 22
Hình 3.9 : Chi tiết kết quả chạy của một ca kiểm thử 22
Hình 4.1 : Xây dựng tệp apk và xml từ dự án 24
Hình 4.2 : Tệp tin apk được biên dịch từ dự án Android Junit Test 24
Hình 4.3 : Nội dung cho tập tin xml 24
Hình 4.4 : Cấu trúc của tệp Plan 25
Hình 4.5 : Kiểm tra trạng thái của thiết bị kiểm thử 25
Hình 4.6 : Xây dựng tệp apk từ dự án kiểm thử sử dụng Eclipse 25
Hình 4.7 : Đường dẫn chứa tệp apk sau khi build bằng Eclipse 26
Hình 4.8 : Công cụ tạo file xml từ dự án Android Junit 26
Hình 4.9 : Test suite diagram 27
Hình 4.10 : Tệp tin xml sau khi được tạo ra từ dự án kiểm thử 27
Hình 4.11 : Multi USB Port 28
Hình 4.12 : Quá trình kiểm thử trên thiết bị di động 28
Hình 5.1: Biểu đồ ca sử dụng khởi động chương trình 31
Hình 5.2: Biểu đồ ca sử dụng khi kết nối điện thoại 31
Hình 5.3: Biểu đồ ca sử dụng thực hiện chạy chương trình CTS executor 32
Hình 5.4: Biểu đồ trình tự khi người dùng kết nối điện thoại 32
Hình 5.5: Biểu đồ trình tự khi chạy chương trình CTS Executor 33
Hình 5.6: Biểu đồ hoạt động chạy chương trình CTS Executor 33
Trang 9Hình 5.7: Màn hình CTS Executor 34
Hình 5.8 : Cài đặt thư mục các ca kiểm thử và lưu trữ báo cáo kết quả 37
Hình 5.9 : Tập các test case dùng trong chương trình kiểm thử 38
Hình 5.10 : Kết quả chạy chương trình kiểm thử 39
Hình 5.11 : Kết quả kiểm thử xuất dưới file excel 39
Trang 10Danh sách bảng biểu
Bảng 3.1 : Bảng minh họa CTS versions cho các phiên bản Android 14
Bảng 3.2: Câu lệnh hỗ trợ kiểm thử trong CTS 17
Bảng 4.1 : Bảng minh họa ưu điểm của công cụ CTS Executor 29
Bảng 5.1 : Bảng minh họa cấu hình phần cứng để chạy công cụ CTS Executor 30
Bảng 5.2 : Danh sách các phân mềm sử dụng 30
Bảng 5.4 : Bảng hiển thị icon cho các trạng thái kết nối 35
Bảng 5.5 : Bảng hiển thị cho các trạng thái của Bluetooth 35
Bảng 5.6 : Bảng các trạng thái hiển thị của wifi 35
Bảng 5.7 : Bảng các trạng thái hiển thị của sim 36
Bảng 5.8 : Bảng hiển thị các trạng thái để chạy và dừng chương trình 36
Bảng 5.9 : Tập các ca kiểm thử thực nghiệm 40
Bảng 5.10 : Kết quả thực nghiệm 40
Trang 11Danh sách các từ viết tắt
CTS Compatibility Test Suite CDD Compatibility Defination Document IDE Integrated Development Environment API Application Programming Interface
AAPT Asset Package Tool
Trang 12CHƯƠNG 1: GIỚI THIỆU VỀ LUẬN VĂN VÀ LÝ DO CHỌN
ĐỀ TÀI
1 Kiểm thử ứng dụng trên hệ điều hành Android
Với sự phát triển không ngừng của Internet cộng với trào lưu mạng xã hội bùng
nổ điện thoại thông minh đang ngày càng được sử dụng nhiều nhằm đáp ứng nhu cầu giải trí đa dạng của người dùng Từ một chiếc điện thoại thông minh chỉ được cài sẵn vài ba ứng dụng của nhà sản xuất thì nay với các thiết bị chạy hệ điều hành nhúng như Android có thể dễ dàng đáp ứng được nhu cầu của người dùng bằng cách cài thêm phần mềm bên thứ ba không gây trở ngại nào
Từ đây lại đặt ra một vấn đề hiển nhiên là kiểm thử các phần mềm chạy trên các thiết bị di động xem chúng có đáp ứng được các yêu cầu đề ra ban đầu hay không trước khi phân phát sản phẩm đến tay người tiêu dùng Có hàng nghìn các thiết bị và các phiên bản Android mà ứng dụng của bạn cần phải tương thích với chúng Một vài lỗi, sai lầm xuất hiện trong phần mềm Android như sau [1]:
- Cài đặt ứng dụng bị lỗi
- Ứng dụng bị treo khi hoạt động
- Màn hình hiển thị ứng dụng có vấn đề
- Ứng dụng bị treo khi tài nguyên không khả dụng
- Hiển thị lỗi khi ứng dụng ở chế độ màn hình xoay ngang hoặc dọc
Những lầm tưởng phổ biến và thực tế trong quá trình kiểm thử phần mềm Andoird thường thấy gồm có [4]:
Lầm tưởng 1: Tất cả các thiết bị Android đều giống nhau thử nghiệm trên giả lập
là đủ Điều này hoàn toàn sai lầm, ví dụ một ứng dụng hoạt động hoàn hảo trên thiết bị giả lập nhưng trên một số thiết bị thực tế, nó bị treo trong quá trình thực hiện Thiết bị giả lập không đủ để thực hiện kiểm thử trên điện thoại di động Do đó phải thử nghiệm ứng dụng trên các thiết bị thực tế
Lầm tưởng 2: Thực hiện kiểm thử trên một số thiết bị phổ biến là đủ Điều này hoàn toàn sai vì các thiết bị khác nhau ứng dụng được hiển thị khác nhau, vì mỗi thiết
bị có phần cứng, kích cỡ màn hình, bộ nhớ khác nhau Phải kiểm thử ứng dụng trên các thiết bị khác nhau, phiên bản hệ điều hành khác nhau và địa điểm khác nhau, tốc
độ mạng khác nhau
Lầm tưởng 3: Kiểm kê thăm dò trước khi ra mắt sản phẩm là đủ
Lầm tưởng 4: Nếu có một số lỗi trong ứng dụng thì người dùng sẽ hiểu, điều này hoàn toàn sai lầm Nếu ứng dụng không hoạt động và có lỗi xảy ra thì người dùng sẽ
gỡ bỏ ứng dụng đó Vì thế vấn đề chất lượng là yếu tố tiên quyết ảnh hưởng đến danh tiếng và niềm tin của khách hàng
Trang 13Do đó để có một phần mềm chất lượng trước khi đến tay người dùng cần một chiến lược kiểm thử chính xác trên nhiều các thiết bị khác nhau, phiên bản hệ điều hành Android khác nhau gồm có:
- Kiểm thử đơn vị (Unit test)
- Kiểm thử tích hợp (Integration test)
- Kiểm thử hoạt động (Operational test)
- Kiểm thử hiệu năng (Performance test)
- Kiểm thử hệ thống (System test)
- Kiểm thử người dùng hay kiểm thử chấp nhận
Giảm lược được thời gian kiểm thử và có một kết quả kiểm thử chính xác nhất thì việc tìm ra các phương pháp và xây dựng công cụ hỗ trợ kiểm thử là rất cần thiết Hiện nay trên thị trường việc kiểm thử đơn vị (Unit test) chỉ được thực hiện trực tiếp trên các môi trường phát triển như Eclipse, Android Studio mà chưa có một công cụ nào hỗ trợ kiểm thử đơn vị nào thay thế Đây chính là lý do để em tìm hiểu phương pháp và xây dựng công cụ để hỗ trợ kiểm thử Android Junit Test
2 Nội dung luận văn
Luận văn khái quát về kiểm thử trên các thiết bị thông minh sử dụng hệ điều hành Android và giới thiệu về nền tảng kiểm thử của hệ điều hành này Sau đó đi sâu vào nghiên cứu phương pháp kiểm thử CTS do Google đề xuất để kiểm tra sự tương thích của Android với các thiết bị sử dụng hệ điều hành này Từ phương pháp nghiên cứu đã xây dựng cách tiếp cận kiểm thử một dự án Android Junit Test, đồng thời xây dựng công cụ hỗ trợ kiểm thử các phần mềm Android Junit trên các thiết bị di dộng thực tế Công cụ đã mang lại những ưu điểm đáng kể so với việc kiểm thử trực tiếp hiện nay trên các môi trường phát triển như Eclipse hay Android Studio Nó mang đến một giao diện thân thiện với người dùng và hỗ trợ nhưng tính năng trực quan Luận văn cũng đưa ra việc thử nghiệm công cụ CTS Executor trên dự án Android Junit Test thực tế Knox custom API Test để so sánh với việc kiểm thử trực tiếp dự án này trên Eclipse Qua thực nghiệm đã chỉ ra những ưu điểm công cụ CTS Executor mang lại cũng như chỉ ra những hướng phát triển thêm của luận văn trong tương lai
Trang 143 Cấu trúc của luận văn
Nội dung của luận văn được chia thành các chương như sau:
Chương 1: Giới thiệu về luận văn và lý do chọn đề tài
Chương 2: Khái quát về kiểm thử ứng dụng trên điện thoại thông minh sử dụng
hệ điều hành Android
Chương 3: Luận văn trình bày phương pháp kiểm thử CTS của Google hỗ trợ
các đối tác kiểm thử thiết bị di động sử dụng nền tảng Android trước khi ra thị trường
Chương 4: Luận văn trình bày cách thức áp dụng phương pháp CTS để xây
dựng công cụ hỗ trợ và phát triển phẩm mềm Android Junit test
Chương 5: Luận văn trình bày thực nghiệm trong việc áp dụng công cụ để
kiểm thử một dự án Android Junit Test thực tế so với kiểm thử trực tiếp trên môi trường phát triển Eclipse
Chương 6: Tóm lược kết quả đạt được của luận văn và định hướng phát triển trong tương lai
Trang 15CHƯƠNG 2: KHÁI QUÁT VỀ KIỂM THỬ ỨNG DỤNG TRÊN ĐIỆN THOẠI THÔNG MINH
Đã qua rồi cái thời điện thoại chỉ sử dụng để gọi và nghe, máy tính chỉ giới hạn dùng trong một số các lĩnh vực Giờ đây với sự phát triển không ngừng của internet và trào lưu mạng xã hội bùng nổ từ một chiếc điện thoại thông thường chỉ được cài sẵn một vài ứng dụng của nhà sản xuất thì nay những thiết bị chạy các hệ điều hành nhúng như Andoird, iOS Đặc biệt Android là hệ điều hành mã nguồn mở do Google phát hành cho phép nhà phát triển tạo ra các phần mềm vô cùng đa dạng và phong phú để đáp ứng nhu cầu sử dụng và giải trí của người dùng Và các phần mềm đó cần phải kiểm thử có đáp ứng được các yêu cầu đề ra hay không.Trong chương này luận văn sẽ
đi vào tìm hiểu khái quát về kiểm thử phần mềm trên hệ điều hành Android [1]:
1 Các yếu tố ảnh hưởng đến hoạt động của phần mềm trên điện thoại thông minh
Tuổi thọ của pin: Bình thường một chiếc điện thoại có thời lượng pin đủ dùng
trong nhiều ngày nhưng với những chiếc điện thoại thông minh do sử dụng rất nhiều các dịch vụ giải trí như kết nối mạng, nghe nhạc, xem phim nên thời lượng pin bị rút ngắn đi rất nhiều thường xuyên phải nạp điện Vì vậy khi phát triển phần mềm trên điện thoại thông minh cần tính toán đến dung lượng pin khi phần mềm đó hoạt động
Kết nối mạng: Các ứng dụng trên điện thoại luôn tiêu thụ tài nguyên khi chúng
kết nối mạng Bản chất của di động là vị trí luôn thay đổi người dùng có thể ngắt kết nối mạng ở những vùng không hỗ trợ Phần mềm phát triển phải thiết kế có khả năng hoạt động ngay cả khi không có kết nối mạng (offline) chẳng hạn như gửi thư điện tử hay viết tin nhắn và ngay sau khi mạng được kết nối thì thư và tin nhắn mà người dùng
đã soạn thảo trước đó được gửi tự động
Phần cứng khác nhau: Sự khác nhau giữa các thiết bị và phần mềm cài trên
từng thiết bị này, bao gồm kích cỡ màn hình, chipset, bộ nhớ trong, bộ nhớ ngoài, và những cảm biến được hỗ trợ, GPS, bàn phím và đầu vào của thiết bị Lý tưởng nhất phần mềm phát triển có thể hoạt động trên mọi thiết bị phần cứng và nền tảng khác nhau
Giới hạn về tài nguyên: Hầu hết các thiết bị di động đều có tài nguyên hạn chế
như tốc độ xử lý của CPU, không gian lưu trữ Vì vậy vấn đề tiết kiệm tài nguyên hệ thống của các ứng dụng cũng rất cần được xem trọng
2 Lựa chọn điện thoại thông minh để kiểm thử
Hầu hết các đội kiểm thử đều không có đủ tất cả mọi mẫu điện thoại cần thiết nên trên mỗi nền tảng ta có thể chọn ra các thiết bị di động tiêu biểu để kiểm thử
Chọn đúng thiết bị cần kiểm thử, vì mỗi thiết bị đều có những tính năng đặc thù riêng ví dụ như iOS thì chỉ có năm mẫu có màn hình kích thước khác nhau là iPad (9.7
Trang 16inches), iPad Mini (7.9 inches), iPhone 4S (3.5 inches) và iPhone 5 (4.0 inches) trong khi Android thì có tới hơn 10 nhà sản xuất phần cứng như Samsung, Sony, HTC, Google, LG với hàng trăm mẫu màn hình kích thước khác nhau Nắm bắt được các kiến thức cơ bản của môi trường lập trình SDK để từ đó ta có thể tạo được các máy ảo (Emulator) phù hợp để kiểm thử Nhưng việc kiểm thử trên máy ảo khác xa hoàn toàn với việc kiểm thử trên các thiết bị thực tế Đây là một trong những sai lầm quan trọng của việc kiểm thử trên các thiết bị di động Để đảm bảo ứng dụng hoạt động tốt trên các thiết bị thật thì nên kiểm thử trên một số các thiết bị như sau:
Các thiết bị phổ biển bao gồm: Iphone 5s của Apple, Nokia N73
Các thiết bị Android phổ biến: Samsung Galaxy Nexus chạy Android 4.0
Các thiết bị ít phổ biến: Sony Xperia Z1, 2
3 Các dạng kiểm thử trên Android
Kiểm thử đơn vị (Unit testing): Được khuyến nghị nên sử dụng cho các đơn vị
mã nhỏ (API) Một đơn vị mã nhỏ có thể có một vài phương thức riêng lẻ hay phương thức quan hệ trong một tệp chương trình Kiểm thử đơn vị chỉ kiểm tra một phần nhỏ của chương trình để xem chúng hoạt động có đúng không Với Android, kiểm thử đơn
vị được tạo và chạy như một phần của qui trình phát triển phần mềm Kiểm thử đơn vị được viết bởi lập trình viên phát triển phần mềm đó Các lập trình viên nên phân lập các thành phần để kiểm thử và phải có khả năng tái kiểm thử Đó chính là lý do tại sao kiểm thử đơn vị và các đối tượng giả lập thường đặt cùng nhau
Kiểm thử tích hợp: Khi kiểm thử đơn bị đã thành công thì kiểm thử tích hợp sẽ
giúp ta kiểm thử được cả ứng dụng khi kết hợp các modul với nhau Như đã đề cập ở bên trên kiểm thử đơn vị đã đủ linh hoạt để thay thế các loại kiểm thử khác, bao gồm
cả kiểm thử tích hợp Bởi kiểm thử tích hợp sẽ cần nhiều mã hơn nên mất nhiều thời gian, nhất là với các thiết bị di động tài nguyên luôn hạn hẹp Để khắc phục ta có thể chạy các công việc tốn thời gian một cách bất đồng bộ và chỉ kiểm thử tích hợp khi kiểm thử đơn vị đã thành công
Kiểm thử hoạt động (Activity): Activity là khái niệm đồng nhất và cũng là
thành phần quan trọng nhất trong ứng dụng Android Một activity là một thành phần rời rạc và liên kết chia sẻ dữ liệu với các thành phần khác trong Android thông qua giao diện và các nguồn chạy ngầm Android SDK cũng bao gồm các nền tảng cho phép kiểm thử tự động các Activity Thông thường Andoird Activity cần tích hợp với
hệ thống để thực thi được Các Activity cần ActivityManager cung cấp vòng đời và truy cập vào các tài nguyên, hệ thống file và cơ sở dữ liệu Tương tự Service và ContentProvider, tất cả các thành phần này được Android testing framework hỗ trợ cho việc kiểm thử dễ dàng
Kiểm thử hiệu năng: Quá trình kiểm thử này sẽ đo hiệu năng của các thành
phần trong hệ thống bằng cách lặp đi lặp lại việc gọi một chức năng hay một API nào
Trang 17đó Kiêm thử hiệu nặng được thực hiện để xác định hệ thống hoặc hệ thống con thực hiện một khối lượng công việc cụ thể nhanh như thế nào Nó cũng có thể dùng để xác nhận và xác minh những thuộc tính chất lượng khác của hệ thống như khả năng mở rộng, độ tin cậy và sử dụng tài nguyên Một hệ thống được cho là kiểm tra hiệu năng tốt phải đảm bảo các yếu tố như liệu có đáp ứng đủ cho người dùng một cách nhanh chóng, liệu việc xử lý dữ liệu có đáp ứng được yêu cầu của người dùng, khả năng chịu tải và hơn thế nữa Ngoài ra liệu có xử lý được số lượng giao dịch lớn cùng một thời điểm
Kiểm thử hệ thống: Ứng dụng kiểm thử hệ thống là kiểm thử toàn bộ ứng dụng
Một vài nền tảng bao gồm cả việc kiểm thử cả chương trình nhỏ chạy ngầm bên dưới
Có một số các phần mềm kiểm thử tự động có thể sinh ra các tác tử (Agent) chạy ngầm trên thiết bị di động để tạo ra các test scrip kiểm thử một cách tự động Các tác
tử này có một vài dạng như chạy trên thiết bị và cho phép chúng tương tác với ứng dụng hay chạy trên các ứng dụng riêng lẻ Kiểm thử hệ thống cũng đo đặc tính hiệu năng của các thành phần lặp lại nhiều lần để có thể tối ưu hóa phần mềm
Kiểm thử giao diện: Là một quá trình rất quan trọng trong kiểm thử trên điện
thoại thông minh Một ứng dụng lý tưởng là có thể hoạt động trên mọi phần cứng và mọi nền tảng Các thao tác như cuộn (scroll), kéo (drag), xoay màn hình (rotate), (chọn) click, (giữ lâu) long click, chạm (touch) Mọi ứng dụng cần phải được kiểm tra xem có thể hoạt động tốt trên thiết bị đó hay chưa
Kiểm thử cài đặt: Sau khi đóng gói phần mềm cần cài đặt việc kiểm thử có
thành công không trước khi bàn giao cho khách hàng
4 Nền tảng kiểm thử Android
Nền tảng kiểm thử của Android cung cấp rất tiện dụng được mở rộng từ nền tảng kiểm thử của Junit chuẩn với nhiều tính năng phù hợp với các chiến lược kiểm thử Những tính năng này bao gồm:
Bổ sung các class Android mở rộng từ JUnit cho phép truy cập vào các đối tượng hệ thống trong Android
Instrumentation framework cho phép kiểm soát và kiểm tra ứng dụng
Các đối tượng giả lập (Mock) được sử dụng phổ biến trong hệ thống Android để kiểm tra khả năng chịu tải của các ứng dụng
Các công cụ cho phép thực hiện kiểm thử riêng lẻ hay chạy cả một dãy các lệnh kiểm thử mà có thể không cần đến Instrumentation framework (IF)
Hỗ trợ quản lí kiểm thử trong ADT plugin của Eclipse và cả chế độ dòng lệnh của hệ điều hành
Trang 184.1 Instrument framework (IF)
Instrumentation framework là một phần cơ bản của nền tảng kiểm thử trong Android IF điều khiển ứng dụng kiểm thử và cho phép gắn các đối tượng thay thế giả lập (Mock object) vào ứng dụng để chạy Ví dụ ta có thể tạo một đối tượng giả lập Context trước khi ứng dụng bắt đầu và cho phép ứng dụng sử dụng nó Tất cả mọi tương tác giữa ứng dụng và môi trường xung quanh có thể sử dụng phương pháp tiếp cận này Ta cũng có thể tách riêng ứng dụng của chúng ta trong một môi trường giới hạn để lấy về kết quả, hoặc các dữ liệu được lưu trữ và không thay đổi như Content Provider, cơ sở dữ liệu hay thậm chí là hệ thống các tệp tin
Một dự án Android thường có một dự án kiểm thử tương ứng với tên kết thúc bằng “Test” Bên trong một dự án kiểm thử file AndroidManifest.xml khai báo thẻ cho biết IF là <instrumentation></ instrumentation> Ví dụ: giả sử dự án Android có file manifest có dạng sau:
Hình 2 1 : Định dạng file manifest trong Android Junit Test
Nhìn ví dụ này có thể thấy ngay rằng trong thẻ khai báo IF là <instrumentation> với thuộc tính name là trình chạy kiểm thử test runner, class mặc định của Android testing API (android.test.runner), ta cũng có thể tùy biến class này bằng cách kế thừa
từ class InstrumentationTestRunner, thuộc tính targetPackage chỉ ra package của ứng dụng mà ta muốn kiểm thử (trong ví dụ là AddressContacts)
Trang 194.2 Kiến trúc kiểm thử trên Android
Hình 2 2 : Kiến trúc testing framework [1]
Trong kiến trúc này InstrumentationTestRunner làm nhiệm vụ trung gian trong việc chạy các các ca kiểm thử Các thành phần chính trong kiến trúc này:
- Application package: chứa toàn bộ ứng dụng để kiểm thử
- Test projects: chứa các mã nguồn, file manifest và những file khác dùng để kiểm thử ứng dụng Ta có thể sử dụng Eclipse để tạo ra dự án kiểm thử này
- Testing API: Nơi chứa các ca kiểm thử đã được cài đặt
- Junit: có thể sử dụng các class Junit testcase để kiểm thử đơn vị
- Instrumentation: Android Instrumentation là một tập các phương thức điều khiển trong hệ thống Andoird Các điều khiển này độc lập với vòng đời của ứng dụng và chúng cũng kiểm soát cách Android tải ứng dụng để chạy Thông thường Android framework không cung cấp cách để gọi trực tiếp các hàm callback trong vòng đời của một ứng dụng như onCreate(), onResume(), nhưng với instrumentation ta có thể gọi các hàm này thông qua các phương thức như getActivity(), activity.finish(),
- Test case classes: Android cung cấp một vài class kế thừa từ lớp TestCase và Assert của Junit framework như Application TestCase, Instrumentation TestCase,
- Mock Object: để chống sự phụ thuộc (dependency injection) trong kiểm thử, Adroid cung cấp các class để tạo các đối tượng hệ thống giả lập như MockContext, MockContentProvider,
Trang 20- MonkeyRunner: những API để thực thi trong môi trường với ngôn ngữ là Python
- Monkey: một công cụ dòng lệnh để kiểm thử khả năng chịu tải của ứng dụng thông qua công cụ adb của hệ điều hành Android
5 Các mục tiêu kiểm thử
Trong suốt quá trình phát triển phần mềm, các ca kiểm thử sẽ hướng đến các thiết
bị khác nhau Từ đơn giản, phức tạp và tốc độ kiểm thử trên máy ảo đến trên một thiết
bị thật cụ thể nào đó Ngoài ra có một vài trường hợp trung gian như chạy kiểm tra trên một máy ảo cục bộ JVM hay DVM, phụ thuộc vào từng trường hợp Mỗi trường hợp đều có ưu và nhược điểm riêng Máy ảo có lẽ là thiết bị phù hợp nhất mà ta có thể thay đổi gần như tất cả các tham số cấu hình để mô phỏng các điều kiện khác nhau cho các ca kiểm thử
Thiết bị thật dùng để kiểm thử hiệu năng vì trên máy ảo sẽ không thể tính ra được các thông số trên thiết bị thật sẽ như thế nào Rendering, filling, và các trường hợp khác phải được kiểm tra trước khi ứng dụng được chuyển giao cho người dùng cuối Tóm lại ứng dụng nên được kiểm tra ở mọi trường hợp, đây là cách tốt nhất để phát hiện những lỗi trước hơn khi là lỗi được phát hiện bởi khách hàng khi sử dụng
Trang 21CHƯƠNG 3: GIỚI THIỆU VỀ CTS
1 Giới thiệu về Compatibility Test Suite (CTS)
Hệ điều hành Android được phát triển bởi Google từ năm 2008 và đã phát hành
12 phiên bản tính đến tháng 10 năm 2016 Tính đến năm 2014 đã có hơn 1 tỉ 3 thiết bị
sử dụng hệ điều hành Android được đưa ra thị trường Mỗi chiếc điện thoại sử dụng Android trước khi đến với tay người dùng phải vượt qua tất cả các ca kiểm thử sự tương thích của phần cứng và phần mềm thông qua bộ các ca kiểm thử của Google phát hành song song với từng phiên bản hệ điều hành Android Quá trình bao gồm các bước sau:
Hình 3.1 : Qui trình đạt được Google’s certification
Để hỗ trợ nhà sản xuất kiểm thử bộ các ca kiểm thử này trên các sản phẩm của
họ, Google đã đưa ra một phương thức CTS (Compatibility test suite) Compatibility Test Suite [2] là một phương thức nhằm hỗ trợ chạy các ca kiểm thử nhanh và chính xác nhất Nếu thiết bị thỏa mãn được bộ các ca kiểm thử này thì Google mới cấp phép cho sử dụng hê điều hành của họ Mỗi phiên bản mới của hê điều hành Android được phát hành Google đều đưa ra ra một bộ kiểm thử bao gồm các API mới của phiên bản Android đó
Bảng 3.1 : Bảng các ca kiểm thử cho các phiên bản Android
Phiên bản Android Phiên bản CTS Số ca kiểm thử
Trang 22Quá trình kiểm thử sẽ được mô phỏng đơn giản theo mô hình sau:
Hình 3.2 : Phương thức sử dụng CTS
Phương thức kiểm thử này gồm bốn bước cơ bản:
- Bước 1: Tải và cài đặt CTS trên máy tính
- Bước 2: Kết nối thiết bị cần kiểm thử với máy tính qua dây cáp USB
- Bước 3: Thực thi CTS Toàn bộ ca kiểm thử sẽ được đẩy qua thiết bị và sẽ được thực thi trên thiết bị sau đó kết quả sẽ được trả về và lưu trữ trên máy tính
- Bước 4: Kiểm tra kết quả của các ca kiểm thử
2 Nguyên lý và cách thức làm việc của CTS [3]
Hình 3.3 : Cấu trúc của CTS
Trang 23Phương pháp CTS gồm 3 phần chính Repository, Tools, Docs
2.1 Docs
Phần này bao gồm các tài liệu của Google giới thiệu về hệ điều hành Android tương ứng với phiên bản đó Các API được sử dụng trong từng phiên bản của hệ điều hành này bao gồm tên API, các tham số của nó và miêu tả chi tiết hoạt động của API
đó
2.2 Repository
Phần này gồm 3 phần: Test case, Plans và Result
Phần 1: Testcases - Trong thư mục testcase có chứa các tệp apk( nội dung các ca
kiểm thử) và tệp xml (tên các ca kiểm thử) Hai tệp này được đặt tên giống nhau Danh sách các ca kiểm thử được liệt kê theo tệp xml như sau:
Hình 3.4 : Danh sách các ca kiểm thử
Tệp apk (android application package) là bộ cài đặt ứng dụng trên hệ điều hành android Khi build các ca kiểm thử tương ứng sẽ được tệp này Nó chính là file nén ZIP dự trên định dạng JAR sử dụng phần mở rộng là *.apk
Hai tệp xml và apk được đặt tên giống nhau và đặt trong thư mục cts\repository\testcases”
“.\android-Hình 3.5 : Danh sách các tệp xml và apk Phần 2: Plans - Việc gọi các ca kiểm thử (.xml) tương ứng với nội dung ca kiểm thử
(.apk) sẽ được thực thi nhờ vào một tệp tin “plan” trong thư mục cts\repository\plans” Nó khai báo tên gói “package”của tệp tin apk cần được kiểm thử
Trang 24“.\android-Hình 3.6 : Danh sách các pakage trong Plan Phần 3: Results - Chứa kết quả sau khi kiểm thử ở thiết bị dưới dạng xml Các ca
kiểm thử sau khi được thực thi trên thiết bị kiểm thử sẽ trả về kết quả tương ứng Các
kết quả này sẽ được lưu trữ trong thư mục “.\android-cts\repository\results”
Bảng 3.2: Câu lệnh hỗ trợ kiểm thử trong CTS
1 run cts plan <test_plan_name> Kiểm thử một plan
2 run cts package <package_name> Kiểm thử một package
3 run cts class <class_name> Kiểm thử một class
Trang 253 Cài đặt phương pháp CTS
3.1 Môi trường vật lý trên thiết bị kiểm thử
Wifi: Tùy theo nhu cầu của ứng dụng chạy ta yêu cầu phải kết nối wifi hay
không Thiết bị được kiểm thử (Device Under Test –DUT) có thể là điện thoại di động, đồng hồ thông minh sẽ kết nối wifi phục vụ cho việc kiểm thử để đảm bảo các ca kiểm thử được thực thi trong môi trường chuẩn và cho kết quả chính xác Một số testcase sẽ được kiểm thử bằng môi trường mạng di động nên việc sử dụng dữ liệu di động từ thẻ sim cũng sẽ được yêu cầu
Bluetooth: Nếu thiết bị test hỗ trợ bluetooth và yêu cầu phải được kết nối với
bluetooth trong các ca kiểm thử thì phải đặt ít nhất ba điểm phát bluetooth trong bán kính năm mét
Thẻ sim: Thiết bị cần được lắp sim nếu nó hỗ trợ tính năng SIM
Thẻ nhớ: Thiết bị cần lắp thẻ nhớ nếu phần cứng hỗ trợ khe thẻ nhớ
3.2 Cài đặt môi trường máy tinh
ADB và AAPT: Trước khi chạy CTS phải đảm bảo được cả Android Debug Bridge (adb) và Asset Package Tool (AAPT) được cài đặt trong đường dẫn hệ thống máy tính
Java Development Kit (JDK): Cần cài đặt chính xác phiên bản của java development kit:
- CTS 5.0 and later: Java 7
- CTS 4.4 and earlier: Java 6 Tải và đọc hướng dẫn sử dụng công cụ CTS của Google tại địa chỉ trang web: https://source.android.com/compatibility/downloads.html
3.3 Cài đặt trên thiết bị kiểm thử
Trước khi chạy CTS phải khôi phục cài đặt gốc của thiết bị bằng cách truy cập
thiết bị vào phần Cài đặt > Sao lưu và cài đăt > Khôi phục và cài đặt
Lưu ý: Quá trình này sẽ xóa sạch dữ liệu của người sử dụng thiết bị
- Cài đặt ngôn ngữ trên thiết bị
- Bật dữ liệu di động, định vị của thiết bị
- Kết nối wifi, bluetooth nếu các ca kiểm thử có yêu cầu
- Đảm bảo thiết bị không được bảo mật
- Khởi tạo chế độ USB debugging trên thiết bị bằng cách truy cập vào Cài đặt sau đó chọn cài đặt cho người phát triển và kích hoạt chế độ kết nối USB