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

Ứng dụng robotium để kiểm thử các chương trình trên android

85 7 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 85
Dung lượng 5,26 MB

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

Nội dung

Ngày nay cùng với sự phát triển mạnh mẽ của hệ điều hành Android trên các dòng điện thoại khác nhau các dự án phần mềm hoặc ứng dụng liên quan đến nó càng ngày càng tăng cao Vậy vấn đề đặt ra là làm thế nào để đảm bảo được chất lượng của một sản phẩm phần mềm bất kỳ đặc biệt là trên Android OS đối với xu hướng phát trển thời nay? Đối với mô hình phát triển phần mềm hoàn chỉnh như bây giờ người ta thấy rằng giai đoạn kiểm thử chất lượng sản phẩm trước khi đưa đến tay người tiêu dùng có ý nghĩa quan trọng Kiểm thử phần mềm là một hoạt động giữ vai trò rất quan trọng để bảo đảm chất lượng phần mềm và là hoạt động mang tính sống còn trong các dự án sản xuất hoặc gia công phần mềm Vì vậy kiểm thử phần mềm đã trở thành quy trình bắt buộc trong các dự án phát triển phần mềm trên thế giới kể cả ở Việt Nam Có rất nhiều giải pháp hỗ trợ kiểm thử chương trình phần mềm trên Android OS hiện nay ví dụ như BlueStacks App Player Android on Intel Architecture Calablash… Và sau khi nghiên cứu Framework Robotium dùng hỗ trợ các đối tác kiểm thử chạy trên thiết bị di động sủ dụng hệ điều hành Android luận văn đã áp dụng framework này để xây dựng một quy trình kiểm thử hỗ trợ kiểm thử trên dự án Android Nó mang lại những lợi ích đáng kể và có hiệu quả cao hơn so với việc kiểm thử trực tiếp trên IDE Android Studio

Trang 1

ĐẠI HỌC ĐÀ NẴNG TRƯỜNG ĐẠI HỌC BÁCH KHOA -

NGUYỄN VĂN NAM

ỨNG DỤNG ROBOTIUM ĐỂ KIỂM THỬ CÁC

CHƯƠNG TRÌNH TRÊN ANDROID

LUẬN VĂN THẠC SĨ KHOA HỌC MÁY TÍNH

Đà Nẵng - Năm 2017

Trang 2

ĐẠI HỌC ĐÀ NẴNG TRƯỜNG ĐẠI HỌC BÁCH KHOA -

NGUYỄN VĂN NAM

ỨNG DỤNG ROBOTIUM ĐỂ KIỂM THỬ CÁC

CHƯƠNG TRÌNH TRÊN ANDROID

Chuyên ngành: KHOA HỌC MÁY TÍNH

Trang 3

LỜI CAM ĐOAN

Tôi xin cam đoan:

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

Tác giả luận văn ký và ghi rõ họ tên

NGUYỄN VĂN NAM

Trang 4

MỤC LỤC

LỜI CAM ĐOAN i

MỤC LỤC ii

DANH MỤC CÁC BẢNG vi

DANH MỤC CÁC HÌNH VẼ vi

MỞ ĐẦU 1

Chương 1 CƠ SỞ LÝ THUYẾT 6

1.1 Kiểm thử phần mềm 6

1.1.1 Tổng quan về kiểm thử phần mềm 6

1.1.2 Quy trình kiểm thử phần mềm 6

1.1.2.1 Kiểm thử đơn vị (Unit Test) 7

1.1.2.2 Kiểm thử tích hợp (Integration Test) 7

1.1.2.3 Kiểm thử hệ thống (System Test) 8

1.1.2.4 Kiểm thử chấp nhận sản phẩm (Acceptance Test) 10

1.1.3 Kỹ thuật kiểm thử phần mềm 10

1.1.4 Kỹ thuật kiểm thử chức năng 10

1.1.5 Kỹ thuật kiểm thử cấu trúc 11

1.1.6 Chiến lược kiểm thử phần mềm 11

1.2 Khái niệm về kiểm thử trên điện thoại thông minh 12

1.2.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 13

1.2.2 Lựa chọn điện thoại thông minh để kiểm thử 13

1.2.3 Các dạng kiểm thử trên Android 14

1.2.4 Nền tảng kiểm thử Android 16

1.2.4.1 Instrument framework (IF) 17

1.2.4.2 Kiến trúc kiểm thử ứng dụng trên Android 18

1.2.4.3 Các mục tiêu kiểm thử 20

1.2.5 Các công cụ hỗ trợ kiểm thử Android hiện nay 20

1.2.5.1 Nền tảng kiểm thử Android Automator 20

1.2.5.2 Nền tảng kiểm thử Robotium 21

1.2.5.3 Nền tảng kiểm thử Roboelectric 23

1.2.5.4 UIAutomator Android 24

1.2.5.5 Espesso 24

1.2.6 So sánh các framework kiểm thử trên Android hiện nay 25

Chương 2 GIẢI PHÁP ỨNG DỤNG ROBOTIUM ĐỂ KIỂM THỬ ỨNG DỤNG TRÊN ANDROID 26

2.1 Các vấn đề kiểm thử các ứng dụng trên Android 26

2.1.1 Mô tả vấn đề 26

Trang 5

2.1.2 Hạn chế của việc kiểm thử ứng dụng trên nền tảng Android 27

2.2 Đề xuất giải pháp cải tiến 27

2.2.1 Phân tích tìm kiếm giải pháp 27

2.2.2 Đề xuất giải pháp 30

2.2.3 Xây dựng quy trình kiểm thử ứng dụng di động trên Android 30 2.2.3.1 Mô tả quy trình 30

2.2.3.2 Xây dựng quy trình 31

2.3 Ví dụ áp dụng quy trình trên để kiểm thử dự án Android sử dụng Robotium 33 2.3.1 Tạo dự án kiểm thử 33

2.3.2 Áp dụng quy trình để kiểm thử dự án Android 36

2.4 Kết luận 38

Chương 3 CÀI ĐẶT VÀ THỬ NGHIỆM 39

3.1 Cài đặt giải pháp 39

3.1.1 Cài đặt môi trường 39

3.1.2 Viết kịch bản kiểm thử 40

3.1.3 Thực thi kiểm thử 42

3.1.4 Kết quả kiểm thử 44

3.2 Kiểm thử ứng dụng quản lý nhân sự 45

3.2.1 Mô tả ứng dụng 45

3.2.2 Thực thi kiểm thử 45

3.2.3 Đánh giá kết quả 47

3.3 Kiểm thử ứng dụng quản lý chi tiêu cá nhân 48

3.3.1 Mô tả ứng dụng 48

3.3.2 Thực thi kiểm thử 49

3.3.3 Đánh giá kết quả 51

3.4 Kiểm thử ứng dụng quản lý sinh viên 51

3.4.1 Mô tả ứng dụng 51

3.4.2 Thực thi kiểm thử 52

3.4.3 Đánh giá kết quả 54

3.5 Nhận xét đánh giá 54

3.6 Kết luận 55

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

TÀI LIỆU THAM KHẢO 58

QUYẾT ĐỊNH GIAO ĐỀ TÀI LUẬN VĂN(Bản sao)……….59

PHỤ LỤC ……… 1

Trang 6

ỨNG DỤNG ROBOTIUM ĐỂ KIỂM THỬ CHƯƠNG TRÌNH TRÊN

ANDROID

Học viên: Nguyễn Văn Nam Chuyên ngành: Khoa khọc máy tính

Mã số: 60.48.01 Khóa: K31 Trường Đại học Bách khoa - ĐHĐN

Tóm tắt - Ngày nay, cùng với sự phát triển mạnh mẽ của hệ điều hành Android trên

các dòng điện thoại khác nhau, các dự án phần mềm hoặc ứng dụng liên quan đến nó càng ngày càng tăng cao Vậy, vấn đề đặt ra là làm thế nào để đảm bảo được chất lượng của một sản phẩm phần mềm bất kỳ, đặc biệt là trên Android OS đối với xu hướng phát trển thời nay? Đối với mô hình phát triển phần mềm hoàn chỉnh như bây giờ, người ta thấy rằng giai đoạn kiểm thử chất lượng sản phẩm trước khi đưa đến tay người tiêu dùng có ý nghĩa quan trọng

Kiểm thử phần mềm là một hoạt động giữ vai trò rất quan trọng để bảo đảm chất lượng phần mềm và là hoạt động mang tính sống còn trong các dự án sản xuất hoặc gia công phần mềm Vì vậy, kiểm thử phần mềm đã trở thành quy trình bắt buộc trong các dự

án phát triển phần mềm trên thế giới, kể cả ở Việt Nam

Có rất nhiều giải pháp hỗ trợ kiểm thử chương trình phần mềm trên Android OS hiện nay, ví dụ như BlueStacks App Player, Android on Intel Architecture, Calablash… Và sau khi nghiên cứu Framework Robotium dùng hỗ trợ các đối tác kiểm thử chạy trên thiết

bị di động sủ dụng hệ điều hành Android, luận văn đã áp dụng framework này để xây dựng một quy trình kiểm thử hỗ trợ kiểm thử trên dự án Android Nó mang lại những lợi ích đáng kể và có hiệu quả cao hơn so với việc kiểm thử trực tiếp trên IDE (Android Studio)

Từ khóa – kiểm thử phần mềm; kiểm thử phần mềm trên di động; kiểm thử phần mềm

trên android; kiểm thử phần mềm với robotium; kiểm thử phần mềm android với robotium

Trang 7

ROBOTIUM APPLICATION TO TEST THE SOFTWARE

PROGRAMS ON ANDROID OS

Abstract - Nowadays, along with the rapid development of Android Operating System

(OS) on the various smart phone brands, the number of software projects or applications related to Android OS is increasing Thus, the question is how to ensure the quality of any software products, especially ones on the Android OS against the current trend? For the completed software development models as currently, the software testing of the product before releasing the consumer plays an important role

Software testing is an essential part of the software quality assurance and is a vital activity in the software production or out-sourcing Therefore, software testing has become a required process in software development projects all around the world, including Viet Nam

Many software testing support solutions are developed today, such as BlueStacks App Player, Android on Intel Architecture, Calablash… And after studying the Robotium Framework, which supports to testing partners to run on mobile devices with Android

OS, this thesis applies this framework to build a testing support process for Android projects It brings some significant benefits and is more effective than directly testing on the IDE (Android Studio)

Key words – software testing; android testing; mobile testing; android testing with

Robotium; testing android in robotium

Trang 8

DANH MỤC BẢNG

1.1 So sánh các framework kiểm thử Android hiện nay 25 3.1 Thống kê kết quả ca kiểm thử đăng nhập hệ thống 43 3.2 Thống kê kết quả ca kiểm thử ứng dụng quản lý nhân sự 47

3.3 Thống kê kết quả ca kiểm thử ứng dụng quản lý thu chi cá

nhân

51

3.4 Thống kê kết quả ca kiểm thử ứng dụng quản lý sinh viên 54

Trang 9

1.3 Định dạng tệp manifest trong kiểm thử đơn vị Android 18

2.1 Mô hình hóa qui trình kiểm thử các ứng dụng Android sử

2.5 Kịch bản kiểm thử cho chương trình máy tính 33 2.6 Kết quả thực thi kiểm thử chương trình máy tính 35 3.1 Thực thi kiểm thử màn hình đăng nhập hệ thống 39 3.2 Kết quả kiểm thử màn hình đăng nhập hệ thống 40

3.7 Kết quả kiểm thử màn hình thêm mới nhân viên 44

3.11 Kết quả kiểm thử màn hình quản lý chi tiêu 47

3.13 Kết quả kiểm thử màn hình quản lý sinh viên 49

Trang 10

MỞ ĐẦU

1 Lý do chọn đề tài

Ngày nay, các phần mềm ngày càng trở lên phức tạp và đồ sộ, việc tạo ra một sản phẩm phần mềm có thể bán được trên thị trường đòi hỏi sự nỗ lực của hàng chục, hàng trăm thậm chí hàng ngàn nhân viên Để tạo ra một sản phẩm thì không phải chỉ do một tổ chức đứng ra làm từ đầu đến cuối, mà đòi hỏi sự liên kết, tích hợp của rất nhiều sản phẩm, thư viện lập trình của nhiều tổ chức khác nhau Từ đó đòi hỏi việc kiểm thử phần mềm ngày càng trở nên quan trọng và rất phức tạp Song song với sự phát triển các công nghệ lập trình, các ngôn ngữ lập trình… thì công nghệ và kỹ thuật kiểm thử phần mềm ngày càng phát triển và mang tính khoa học

Kiểm thử là một trong những hoạt động quan trọng trong tiến trình phát triển phần mềm Nó góp một phần rất lớn trong việc đánh giá chất lượng của một phần mềm và là qui trình bắt buộc trong các dự án phát triển phần mềm trên thế giới cũng như trong nước Có rất nhiều kỹ thuật kiểm thử phần mềm được phát triển Trong đó, kiểm thử là một trong những kỹ thuật hỗ trợ việc đánh giá chất lượng một phần mềm

Luận văn này tập trung nghiên cứu các vấn đề về kiểm thử các ứng dụng trên nền tảng Android sử dụng framework robotium, đây là công cụ hỗ trợ rất mạnh trong việc kiểm thử chức năng các ứng dụng Khi kiểm thử hệ thống, người kiểm thử phải làm việc với các chức năng do GUI cung cấp Các sự kiện không mong đợi, có nhiều cách để nhập và xuất dữ liệu với miền dữ liệu nhập vào rất lớn làm cho người lập trình viên khó kiểm soát lỗi

Lập trình ứng dụng trên điện thoại hiện nay ở Việt Nam rất phổ biến các ứng dụng trên Android, iOS, Window Phone ngày càng nhiều Tuy nhiên, các công ty

Trang 11

phần mềm gặp nhiều khó khăn trong việc kiểm thử các phần mềm này bởi các lý

do sau:

- Các kỹ thuật viên kiểm thử chưa có một phương pháp, hay qui trình nhất

quán để kiểm tra tính đúng đắn của các sản phẩm trên điện thoại

- Trong quá trình phát triển phần mềm, sản phẩm luôn phải cập nhật liên tục

Mỗi lần phiên bản mới được phát hành người kiểm thử phải tiến hành kiểm thử hồi quy tất cả các thành phần, để tránh không bị xung đột

- Miền dữ liệu nhập vào cho các thành phần quá lớn, nhiều ràng buộc

- Các sự kiện xảy ra không mong đợi

- Giao diện phải nhất quán theo chuẩn, điều này tạo cho phần mềm có tính

khả dụng

- Việc kiểm thử các ứng dụng trên điện thoại di động chạy trên hệ điều hành

Android hiện vẫn còn chưa hoàn chỉnh Đã có rất nhiều công cụ giúp giải quyết kiểm thử cho các ứng dụng trên nền tảng Android, tuy nhiên vẫn chưa phải là giải quyết được tất cả

Vì lý do trên tôi đề xuất chọn đề tài luận văn cao học:

“Ứng dụng Robotium để kiểm thử các chương trình trên Android”

2 Mục đích và ý nghĩa đề tài

Mục đích

Với những lý do được nêu ở trên, đề tài sẽ hướng đến việc nghiên cứu về công

cụ Robotium để kiểm thử các ứng dụng di động trên nền tảng Android Từ đó giải quyết được bài toán chi phí, khó khăn khi kiểm thử tự động các ứng dụng trên nền tảng Android một cách hiệu quả và nhanh chóng

Ý nghĩa khoa học

- Nắm vững và vận dụng tốt kỹ thuật kiểm thử tự động dựa trên công cụ

Robotium

- Đề xuất được giải pháp kiểm thử chức năng, kiểm thử giao diện trên nền

tảng Android một cách tự động và hiệu quả, tiết kiệm chi phí

Trang 12

- Kết quả có thể làm tài liệu tham khảo cho các kiểm thử viên của các đơn vị

phát triển phần mềm, hoặc các học viên – sinh viên trong việc nghiên cứu

kiểm thử phần mềm trên di động

3 Ý nghĩa thực tiễn

Đề tài mang ý nghĩa thực tiễn rất lớn trong thời kì ứng dụng di động ngày càng phổ biến và đóng vai trò không thể thiếu trong đời sống hằng ngày Nó giúp cho các nhà phát triển phần mềm biết được khả năng của ứng dụng, điều chỉnh một cách hợp lý cũng như kịp thời đưa ra những phương án giải quyết phù hợp cho các vấn đề liên quan Giúp đảm bảo tính tin cậy của ứng dụng và tránh những rủi ro đáng tiếc trong quá trình sử dụng phần mềm

4 Mục tiêu và nhiệm vụ

Mục tiêu

Mục tiêu của đề tài là nghiên cứu sử dụng framework Robotium vào việc kiểm thử tự động các chức năng của ứng dụng trên điện thoại Để thực hiện được mục tiêu này thì cần đạt được những mục tiêu cụ thể sau:

- Nắm vững các kỹ thuật kiểm thử chức năng các ứng dụng trên di động chạy

hệ điều hành Android

- Nắm vững cách sử dụng thư viện Robotium để phát triển các kỹ thuật kiểm

thử

- Tìm hiểu và đề xuất được giải pháp giải quyết bài toán kiểm thử chức năng

trên ứng dụng điện thoại một cách hiệu quả

Nhiệm vụ

Để đạt được những mục tiêu trên thì nhiệm vụ đặt ra của đề tài là:

- Nghiên cứu sử dụng công cụ Robotium

- Nghiên cứu, phân tích và cài đặt giải pháp kiểm thử ứng dụng sử dụng công

cụ Robotium để kiểm thử

Trang 13

- Xây dựng giải pháp và ứng dụng kiểm thử tự động các ứng dụng phần mềm điện thoại trên nền tảng Android

- Đánh giá kết quả theo yêu cầu của đề tài

5 Đối tượng và phạm vi nghiên cứu

- Kỹ thuật kiểm thử ứng dụng trên Android

- Công cụ hỗ trợ tự động hóa trong kiểm thử Robotium

- Quy trình kiểm thử phần mềm trên nền tảng Android

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

- Thu nhập và phân tích các tài liệu và thông tin liên quan đến đề tài

- Thảo luận, lựa chọn phương hướng giải quyết vấn đề

- Xây dựng quy trình kiểm thử

- Kiểm tra, thử nghiệm và đánh giá kết quả

7 Ý nghĩa khoa học và thực tiễn

- Kết quả nghiên cứu có thể làm tài liệu tham khảo cho các đơn vị phát triển phần mềm đang cần tiến hành kiểm thử các chương trình trên Android có sử dụng giao diện đồ họa

- Phần nghiên cứu lý thuyết: sẽ cung cấp một cách nhìn tổng quát về quá trình kiểm thử phần mềm, các loại kiểm thử phần mềm và công cụ hỗ trợ việc kiểm thử

- Phần thực nghiệm: cung cấp một quy trình kiểm thử tự động cho các ứng dụng trên Android sử dụng công cụ Robotium để nâng cao hiệu quả công việc cho nhân viên kiểm thử

Trang 14

8 Cấu trúc luận văn

Chương 1: Cơ sở lý thuyết

Trình bày các khái niệm về kiểm thử ứng dụng phần mềm, các thành phần cơ bản và các loại kiểm thử phần mềm được sử dụng phổ biến hiện nay

Chương 2: Giải pháp ứng dụng công cụ Robotium để kiểm thử ứng dụng di động trên Android

Chương này trình bày các vấn đề còn tồn tại trong kiểm thử ứng dụng Android, sau đó đề xuất quy trình ứng dụng Robotium để kiểm thử phần mềm trên điện thoại di động Android

Chương 3: Cài đặt và thử nghiệm

Trong chương này chúng ta sẽ áp dụng qui trình đã đề xuất ở chương 2 để tiến hành kiểm thử một vài ứng dụng Android thực tế và dựa vào kết quả đạt được

để đưa ra kết luận

Trang 15

CƠ SỞ LÝ THUYẾT

Chương này trình bày các khái niệm về kiểm thử ứng dụng phần mềm, các thành phần cơ bản và các loại kiểm thử ứng dụng phần mềm được sử dụng phổ biến hiện nay

1.1 Kiểm thử phần mềm

1.1.1 Tổng quan về kiểm thử phần mềm

Kiểm thử phần mềm là quá trình thực thi một hệ thống phần mềm để xác định xem phần mềm có đúng với đặc tả không và thực hiện trong môi trường như mong đợi hay không [1]

Mục đích của kiểm thử phần mềm là tìm ra lỗi chưa được phát hiện, tìm một cách sớm nhất và bảo đảm rằng lỗi sẽ được sửa

Mục tiêu của kiểm thử phần mềm là thiết kế tài liệu kiểm thử một cách có hệ thống và thực hiện nó sao cho có hiệu quả, nhưng tiết kiệm được thời gian, công sức và chi phí

1.1.2 Quy trình kiểm thử phần mềm

Cấp độ kiểm thử phần mềm được thể hiện như hình dưới đây

Hình 1.1 Bốn cấp độ cơ bản của kiểm thử phần mềm [1]

Trang 16

1.1.2.1 Kiểm thử đơn vị (Unit Test)

Một đơn vị (Unit) là một thành phần phần mềm nhỏ nhất mà ta có thể kiểm thử được, ví dụ: các hàm (Function), thủ tục (Procedure), lớp (Class), hoặc các phương thức (Method) [2]

Kiểm thử đơn vị thường do lập trình viên thực hiện Công đoạn này cần được thực hiện càng sớm càng tốt trong giai đoạn viết code và xuyên suốt chu kỳ phát triển phần mềm [2]

Mục đích của kiểm thử đơn vị là bảo đảm thông tin được xử lý và kết xuất (khỏi Unit) là chính xác, trong mối tương quan với dữ liệu nhập và chức năng xử lý của Unit Điều này thường đòi hỏi tất cả các nhánh bên trong Unit đều phải được kiểm tra để phát hiện nhánh phát sinh lỗi [2]

Cũng như các mức kiểm thử khác, kiểm thử đơn vị cũng đòi hỏi phải chuẩn bị trước các ca kiểm thử (hay trường hợp kiểm thử) (test case) hoặc kịch bản (test script), trong đó chỉ định rõ dữ liệu vào, các bước thực hiện và dữ liệu mong muốn

sẽ xuất ra Các test case và test script được giữ lại để sử dụng sau này

1.1.2.2 Kiểm thử tích hợp (Integration Test)

Kiểm thử tích hợp kết hợp các thành phần của một ứng dụng và kiểm thử như một ứng dụng đã hoàn thành Trong khi kiểm thử đơn vị kiểm tra các thành phần

và Unit riêng lẻ thì kiểm thử tích hợp kết hợp chúng lại với nhau và kiểm tra sự giao tiếp giữa chúng [1]

Kiểm thử tích hợp có hai mục tiêu chính là:

 Phát hiện lỗi giao tiếp xảy ra giữa các Unit

 Tích hợp các Unit đơn lẻ thành các hệ thống con (gọi là subsystem) và cuối cùng là nguyên hệ thống hoàn chỉnh chuẩn bị cho kiểm thử ở mức hệ thống (system test)

Có 4 loại kiểm thử trong kiểm thử tích hợp như sau:

Trang 17

 Kiểm thử cấu trúc (Structure test): Kiểm thử nhằm bảo đảm các thành phần bên trong của một chương trình chạy đúng, chú trọng đến hoạt động của các thành phần cấu trúc nội tại của chương trình, chẳng hạn các lệnh

và nhánh bên trong

 Kiểm thử chức năng (Functional test): Kiểm thử chỉ chú trọng đến chức năng của chương trình, không quan tâm đến cấu trúc bên trong, chỉ khảo sát chức năng của chương trình theo yêu cầu kỹ thuật

 Kiểm thử hiệu năng (Performance test): Kiểm thử việc vận hành của hệ thống

 Kiểm thử khả năng chịu tải (Stress test): Kiểm thử các giới hạn của hệ thống

1.1.2.3 Kiểm thử hệ thống (System Test)

Mục đích của kiểm thử hệ thống là kiểm thử xem thiết kế và toàn bộ hệ thống (sau khi tích hợp) có thỏa mãn yêu cầu đặt ra hay không

Kiểm thử hệ thống kiểm tra cả các hành vi chức năng của phần mềm lẫn các yêu cầu về chất lượng như độ tin cậy, tính tiện lợi khi sử dụng, hiệu năng và bảo mật

Kiểm thử hệ thống bắt đầu khi tất cả các bộ phận của phần mềm đã được tích hợp thành công Thông thường loại kiểm thử này tốn rất nhiều công sức và thời gian Trong nhiều trường hợp, việc kiểm thử đòi hỏi một số thiết bị phụ trợ, phần mềm hoặc phần cứng đặc thù, đặc biệt là các ứng dụng thời gian thực, hệ thống phân bố, hoặc hệ thống nhúng Ở mức độ hệ thống, người kiểm thử cũng tìm kiếm các lỗi, nhưng trọng tâm là đánh giá về hoạt động, thao tác, sự tin cậy và các yêu cầu khác liên quan đến chất lượng của toàn hệ thống

Điểm khác nhau then chốt giữa kiểm thử tích hợp và kiểm thử hệ thống là kiểm thử hệ thống chú trọng các hành vi và lỗi trên toàn hệ thống, còn kiểm thử tích hợp chú trọng sự giao tiếp giữa các đơn thể hoặc đối tượng khi chúng làm việc cùng nhau Thông thường ta phải thực hiện kiểm thử đơn vị và kiểm thử tích hợp để bảo

Trang 18

đảm mọi Unit và sự tương tác giữa chúng hoạt động chính xác trước khi thực hiện kiểm thử hệ thống

Sau khi hoàn thành kiểm thử tích hợp, một hệ thống phần mềm đã được hình thành cùng với các thành phần đã được kiểm tra đầy đủ Tại thời điểm này, lập trình viên hoặc kiểm thử viên (Tester) bắt đầu kiểm thử phần mềm như một hệ thống hoàn chỉnh Việc lập kế hoạch cho kiểm thử hệ thống nên bắt đầu từ giai đoạn hình thành và phân tích các yêu cầu

Đòi hỏi nhiều công sức, thời gian và tính chính xác, khách quan, kiểm thử hệ thống được thực hiện bởi một nhóm kiểm tra viên hoàn toàn độc lập với nhóm phát triển dự án để đảm bảo tính chính xác và khách quan [1]

Kiểm thử hệ thống thường có các loại kiểm thử sau:

 Kiểm thử chức năng (Functional test): Bảo đảm các hành vi của hệ thống thỏa mãn đúng yêu cầu thiết kế

 Kiểm thử khả năng vận hành (Performance test): Bảo đảm tối ưu việc phân bổ tài nguyên hệ thống (ví dụ bộ nhớ) nhằm đạt các chỉ tiêu như thời gian xử lý hay đáp ứng câu truy vấn

 Kiểm thử khả năng chịu tải (Stress test hay Load test): Bảo đảm hệ thống vận hành đúng dưới áp lực cao (ví dụ nhiều người truy xuất cùng lúc) Stress test tập trung vào các trạng thái tới hạn, các "điểm chết", các tình huống bất thường như đang giao dịch thì ngắt kết nối (xuất hiện nhiều trong test thiết bị như POS, ATM)

 Kiểm thử cấu hình (Configuration test): Đảm bảo hệ thống hoạt động tương thích với các loại phần cứng khác nhau

 Kiểm thử khả năng bảo mật (Security test): Bảo đảm tính toàn vẹn, bảo mật của dữ liệu và của hệ thống

 Kiểm thử khả năng phục hồi (Recovery test): Bảo đảm hệ thống có khả năng khôi phục trạng thái ổn định trước đó trong tình huống mất tài

Trang 19

nguyên hoặc dữ liệu, đặc biệt quan trọng đối với các hệ thống giao dịch như ngân hàng trực tuyến

1.1.2.4 Kiểm thử chấp nhận sản phẩm (Acceptance Test)

Mục đích của kiểm thử chấp nhận là kiểm thử khả năng chấp nhận cuối cùng để chắc chắn rằng sản phẩm là phù hợp và thỏa mãn các yêu cầu của khách hàng và khách hàng chấp nhận sản phẩm

Trong giai đoạn kiểm thử chấp nhận thì người kiểm tra là khách hàng Khách hàng sẽ đánh giá phần mềm với mong đợi theo những thao tác sử dụng quen thuộc của họ Việc kiểm tra ở giai đoạn này có ý nghĩa hết sức quan trọng tránh cho việc hiểu sai yêu cầu cũng như sự mong đợi của khách hàng

Gắn liền với giai đoạn kiểm thử chấp nhận thường là một nhóm những dịch vụ

và tài liệu đi kèm, phổ biến như hướng dẫn cài đặt, sử dụng, v.v…Tất cả tài liệu đi kèm phải được cập nhật và kiểm tra chặt chẽ [1]

1.1.3 Kỹ thuật kiểm thử phần mềm

Mục tiêu của kiểm thử là phải thiết kế các trường hợp kiểm thử có khả năng cao nhất trong việc phát hiện nhiều lỗi với thời gian và công sức tối thiểu Do đó có thể chia các kỹ thuật kiểm thử thành hai loại:

 Kỹ thuật kiểm thử hộp đen (Black – box Testing) hay còn gọi là kỹ thuật kiểm thử chức năng (Functional Testing)

 Kỹ thuật kiểm thử hộp trắng (White – box Testing) hay còn gọi là kỹ thuật kiểm thử cấu trúc (Structural Testing)

1.1.4 Kỹ thuật kiểm thử chức năng

Trong kỹ thuật kiểm thử chức năng, dữ liệu kiểm thử được xuất phát từ đặc tả phần mềm bao gồm: đặc tả các yêu cầu (đối với kiểm thử hệ thống), đặc tả thiết kế (đối với kiểm thử tích hợp) và đặc tả chi tiết mô đun (đối với kiểm thử đơn vị) Trong kỹ thuật này, kiểm thử viên xem phần mềm như là một hộp đen Kiểm thử viên hoàn toàn không quan tâm cấu trúc và hành vi bên trong của phần mềm (không thể nhìn thấy những gì bên trong hộp đen) Kiểm thử viên chỉ cần quan tâm

Trang 20

đến việc tìm các hiện tượng mà phần mềm không hành xử theo đúng đặc tả của nó (kiểm thử viên chỉ biết những gì phần mềm dự kiến thực hiện và những gì dự kiến không thực hiện, mà không thể nhìn vào bên trong xem nó hoạt động như thế nào)

Vì thế, dữ liệu kiểm thử sẽ xuất phát từ đặc tả

Kiểm thử chức năng cố gắng tìm các loại lỗi sau:

- Các chức năng thiếu hoặc không đúng

- Các lỗi giao diện

- Các lỗi trong cấu trúc dữ liệu, trong truy cập cơ sở dữ liệu bên ngoài

- Các lỗi thi hành

- Các lỗi khởi tạo hoặc kết thúc

1.1.5 Kỹ thuật kiểm thử cấu trúc

Kỹ thuật kiểm thử cấu trúc dựa trên sự phân tích mã chương trình hoặc một mô hình của mã chương trình để xây dựng các phép thử theo các tiêu chuẩn bao phủ

Kỹ thuật kiểm thử cấu trúc cho phép chúng ta kiểm thử cấu trúc bên trong của phần mềm, với mục đích kiểm tra tất cả các câu lệnh và điều kiện tồn tại trong phần mềm đó Trong kỹ thuật này kiểm thử viên lấy dữ liệu thử xuất phát từ việc kiểm tra logic của chương trình (không quan tâm đến đặc tả) [1]

1.1.6 Chiến lược kiểm thử phần mềm

Chiến lược kiểm thử phần mềm tích hợp các phương pháp thiết kế trường hợp kiểm thử phần mềm thành một chuỗi các bước được lập kế hoạch rõ ràng Chiến lược kiểm thử là một sự kết hợp của kế hoạch kiểm thử, thiết kế trường hợp kiểm thử, thực thi kiểm thử, tập hợp kết quả kiểm thử và sự đánh giá kết quả

Mỗi mức kiểm thử đòi hỏi xác định chiến lược kiểm thử Các chiến lược kiểm thử không loại trừ lẫn nhau, chúng có thể được sử dụng đơn lẻ hoặc đồng thời Lý tưởng là kiểm thử cho một ứng dụng bao gồm nhiều chiến lược để phát hiện được hết các lỗi

Trang 21

Sau khi chiến lược đã được xác định, nó được áp dụng để tạo các trường hợp kiểm thử cụ thể Kiểm thử được lặp lại cho đến khi không còn lỗi, hoặc đạt được mức độ chấp nhận [2]

Quan hệ giữa các mức kiểm thử và các giai đoạn trong vòng đời của một phần mềm có thể được trình bày như sau:

Hình 1.2 Các bước kiểm thử

1.2 Khái niệm về kiểm thử 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à

Các giai đoạn phát triển ứng dụng

Phạm vi và mục tiêu

Yêu cầu chức năng/Thiết kế logic

Thiết kế vật lý

Đặc tả mô hình cấu trúc chương

Mã hoá mô đun/chương trình

Kiểm thử đơn vị Kiểm thử tích hợp Kiểm thử hệ thống Kiểm thử chấp thuận

Kiểm thử

Trang 22

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

1.2.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 [6]

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 [6]

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 [6]

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 [6]

1.2.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ử

Trang 23

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 inches), 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 của Apple

 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

1.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 [4]

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

Trang 24

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 [4]

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 [4]

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 đó 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 [4]

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

Trang 25

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 [4]

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 [4]

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]

1.2.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ử [4]

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 26

1.2.4.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 [7]

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:

Trang 27

Hình 1.3 Định dạng tệp manifest trong kiểm thử đơn vị Android

Nhìn ví dụ này có thể thấy ngay rằng trong thẻ khai báo IF là 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)

1.2.4.2 Kiến trúc kiểm thử ứng dụng trên Android

Hình 1.4 Kiến trúc kiểm thử ứng dụng trên Android [7]

Gói chương trình

InstrumentationRunner

Gói kiểm thử

Các lớp kiểm thử Android

Instrumentation Kiểm thử đơn vị

Đối tượng MOCK Công cụ kiểm thử

Kiểm thử tự động

Trang 28

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 ca kiểm thử của các lớp JUnit để kiểm thử

- 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ử, Android cung cấp các class để tạo các đối tượng hệ thống giả lập như MockContext, MockContentProvider

- 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

Trang 29

1.2.4.3 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

1.2.5 Các công cụ hỗ trợ kiểm thử Android hiện nay

1.2.5.1 Nền tảng kiểm thử Android Automator

Lớp cơ sở của các lớp kiểm thử trên Android là lớp InstrumentationTestCase Lớp cơ sở cung cấp các chức năng sau:

 Điều khiển vòng đời: sử dụng Instrumentation để khởi tạo, tạm dừng, và hủy thành phần bằng cách sử dụng các phương thức được cung cấp bởi các lớp kiểm thử

 Tương tác giao diện người dùng: gửi sự kiện bấm phím ảo hoặc sự kiện chạm tới thành phần giao diện của ứng dụng trong phương thức kiểm thử

 Giúp người phát triển điều khiển môi trường kiểm thử và tách môi trường kiểm thử với môi trường phát triển

 Hai lớp con kiểm thử chính là ActivityInstrumentationTestCase2 và ActivityUnitTestCase

Trang 30

Ưu điểm:

 Giảm thời gian thực hiện

 Tăng năng suất của quá trình phát triển

 Phát hiện lỗi sớm, tiết kiệm chi phí bảo trì

 Nhanh chóng phát hiện và sữa chữa các lỗi trong quá trình thực hiện

 Đảm bảo chất lượng phần mềm

Nhược điểm:

 Không thể sử dụng để giải quyết các vấn đề trên các ứng dụng Android

 Tốc độ thử nghiệm ứng dụng chạy trên Android chậm

 Khó thực hiện những ca kiểm thử phức tạp dẫn đến việc kiểm thử tốn nhiều thời gian

1.2.5.2 Nền tảng kiểm thử Robotium

Robotium là thư viện kiểm thử tự động hàng đầu cho các ứng dụng phát triển Android Robotium được Renas Reda phát triển trong năm 2010, một cơ quan quốc

tế trong việc kiểm thử tự động [10]

Robotium là mã nguồn mở của Android testing framework hỗ trợ tạo các kiểm thử cho ứng dụng Android Robotium kế thừa từ ActivityInstrumentation TestCase2 và cho phép kiểm thử các testcase trên các Activity khác nhau [3] Robotium được thiết kế với các tính năng để tăng tốc độ thử nghiệm ứng dụng Android Nó hỗ trợ hầu như tất cả các phiên bản và các khác của hệ điều hành điện thoại di động của Google Chia sẻ thị trường lớn trên toàn cầu của Android làm cho

nó một trong các khuôn khổ kiểm tra điện thoại di động được sử dụng rộng rãi nhất

Robotium chỉ tập trung vào thử nghiệm ứng dụng Android Do đó, nó hỗ trợ chỉ

có một ngôn ngữ lập trình tức là Java những gì nhà phát triển sử dụng trong khi phát triển ứng dụng Android [3]

Trang 31

Hình 2.1: Sơ đồ cấu trúc nguyên lý làm việc của Robotium [3]

Ưu điểm:

 Kiểm thử ứng dụng Android, bao gồm ứng dụng native và hybrid

 Không đòi hỏi nhiều kiến thức về ứng dụng khi kiểm thử

 Nền tảng Robotium cung cấp điều khiển thao tác trên Activity một cách

tự động

 Chạy kiểm thử trên các ứng dụng Android với tốc độ cao

Nhược điểm:

 Khá rắc rối khi kiểm thử giao diện với Robotium

 Robotium chỉ cho phép kiểm tra lỗi trong ca kiểm thử, bạn không thể kiểm tra chương trình chính khi chạy kiểm thử được

 Robotium còn thiếu tương đối nhiều các thành phần Ví dụ không thể tương tác với thông báo (NotificationBar), hoặc mình không biết có cách nào để làm việc với lựa chọn (picker) và thanh trượt (slider)

Trang 32

1.2.5.3 Nền tảng kiểm thử Roboelectric

Robolectric là một nền tảng cho phép bạn viết các kiểm thử đơn vị và chạy chúng trên môi trường máy ảo mà không cần chạy ứng dụng Android một cách trực tiếp trên thiết bị [11]

Như được chỉ ra ở trên, Roboeletric có thể thực thiện các hành động sau:

 Chặn việc tải các lớp thư viện Android

 Sử dụng java Assist để ghi đè vào các phần của lớp Android

 Bind Shadow hướng đến các lớp Android

 Điều này cho phép thực hiện việc kiểm thử mà không cần môi trường Android

Ưu điểm:

 Giúp lập trình viên lắm rõ hơn về quá trình kiểm thử

 Kiểm thử được các đoạn chương trình xử lý phức tạp có tính logic cao

 Giúp hạn chế lỗi phát sinh trong quá trình chỉnh sửa thay đổi đoạn chương trình

 Cải thiện khả năng bảo trì khi bàn giao chương trình cho người khác, thể hiện bằng cách người khác chỉ cần đọc các ca kiểm thử là hiểu chức năng của đoạn chương trình

 Giúp kiểm thử viên cũng có thể tiếp cận bằng cách ngồi nghĩ ca kiểm thử Nhược điểm:

 Công đoạn thực hiện mất nhiều thời gian do phải viết ca kiểm thử

 Không thích hợp với các đoạn code đơn giản không cần thiết phải kiểm thử

 Khó khăn cho lập trình viên mới, vì phải nghĩ kịch bản trước khi xây dựng chương trình

Trang 33

 Tương tác với bất kỳ ứng dụng nào

 Truy cập vào trạng thái thiết bị

 Thay đổi xoay thiết bị

 Nhấn nút Back, Home hoặc Menu

bộ hóa các hoạt động thử nghiệm với UI của ứng dụng bạn đang thử nghiệm

Espresso phát hiện khi main thread trong trạng thái nhàn rỗi (idle), do đó nó chạy các lệnh kiểm tra vào thời điểm thích hợp, cải thiện độ tin cậy cho việc kiểm thử của bạn

Trang 34

1.2.6 So sánh các framework kiểm thử trên Android hiện nay

Dưới đây là bản so sánh các framework kiểm thử trên nền tảng di động hiện nay:

Bảng 1.1 So sánh các framework kiểm thử hiện nay

Mobile Web có(Android) có(Android) không có

Phiên bản Android

được hỗ trợ tất cả >=16 8,10,15 >=16

Kiểm thử thông báo

Nhà phát triển Robotium Google Google Robolectric

Robotium framework là lựa chọn tốt hơn để tiến hành kiểm thử các ứng dụng trên Android Robotium là khung nền nguồn mở và được xem xét như là một khung nền mở rộng của Android Sử dụng Robotium, kiểm thử viên có thể viết các

ca kiểm tự động cho ứng dụng Android một cách dễ dàng và nhanh chóng tiết kiệm được nhiều thời gian cũng như chi phí

Trang 35

GIẢI PHÁP ỨNG DỤNG ROBOTIUM ĐỂ KIỂM THỬ ỨNG DỤNG TRÊN ANDROID

Trong chương này chúng ta sẽ đi sâu tìm hiểu một công cụ kiểm thử ứng dụng

di động trên nền tảng hệ điều hành Android rất mạnh mẽ hiện nay là Robotium Đồng thời cũng tìm hiểu những khó khăn trong việc kiểm thử các ứng dụng di động mà cộng đồng Android đang gặp phải, từ đó đề xuất giải pháp để cải tiến thêm công cụ mã nguồn mở đầy tiềm năng này

2.1 Các vấn đề kiểm thử các ứng dụng trên Android

2.1.1 Mô tả vấn đề

Kiểm thử một ứng dụng Android có nhiều điểm khác biệt so với việc kiểm thử các lớp Java khác Để kiểm thử một ứng dụng Android, chúng ta nên chạy và tương tác với ứng dụng, có thể là nhập thông tin ở vài vị trí, nhấn vài nút chức năng Nếu cố gắng kiểm thử một ứng dụng Android với các lớp JUnit bình thường

ta có thể gặp vấn đề sau:

1 Thực hiện việc kiểm thử chức năng cho một hoặc vài Activity trong ứng dụng, ta phải sử dụng Context chuẩn của Android cung cấp Trong Android cho phép gửi Intent giả lập tới Activity thông qua kiểm thử nhưng không cho phép Context và Application giả lập do đó không thể tách kiểm thử với môi trường phát triển

2 Kiểm thử một Activity trong môi trường tách biệt Trước khi khởi tạo Activity, có thể thêm đối tượng Context hoặc Application giả lập nhưng không thể gửi Intent giả lập tới Activity khi kiểm thử

3 Khi kiểm thử Service trong Android, phải cân nhắc các ca kiểm thử có thể kiểm thử các trạng thái khác nhau trong vòng đời của Service Nếu các phương thức vòng đời khởi tạo Service như phương thức onCreate()

Trang 36

hoặc onStartCommand() không thiết lập biến toàn cục để xác nhận trạng thái thực hiện dịch vụ có thành công hay không

2.1.2 Hạn chế của việc kiểm thử ứng dụng trên nền tảng Android

 Không thể sử dụng kiểm thử đơn vị để giải quyết các vấn đề trên các ứng dụng Android

 Tốc độ kiểm thử ứng dụng chạy trên Android chậm

 Khó thực hiện những ca kiểm thử phức tạp dẫn đến việc kiểm thử tốn nhiều thời gian

 Việc kiểm thử dịch vụ trên Android gặp nhiều khó khăn và phức tạp

 ProviderTestCase2 tạo đối tượng IsolatedContext cho phép các thao tác với tệp tin và cơ sở dữ liệu nhưng không cho phép thực hiện các tương tác khác với hệ thống Android

2.2 Đề xuất giải pháp cải tiến

2.2.1 Phân tích tìm kiếm giải pháp

Những vấn đề gặp phải khi sử dụng JUnit Android như đề cập ở trên dẫn đến những hạn chế, khó khăn nhất định khi sử dụng kiểm thử những ứng dụng trên điện thoại di động thông minh Android Chúng ta có thể cải tiến những hạn chế đó bằng cách giải quyết những vấn đề sau:

 Giảm thiểu tiêu tốn tài nguyên hệ thống khi thực thi kiểm thử

 Giảm thời gian thực thi

 Đơn giản hóa việc viết mã kiểm thử

 Xử lý được các ca kiểm thử phức tạp và tốn nhiều thời gian

Hiện nay trên thị trường có rất nhiều công cụ hỗ trợ cho việc kiểm thử các ứng dụng trên điện thoại thông minh Android Ví dụ như: Robotium, Roboelectric,

Trang 37

TestComplete, M-Eux, TestQuest Countdown, Test Quest Pro, VNC, Sikuli, Deviceanywhere…

Công cụ chúng ta cần phải thỏa mãn được những yêu cầu sau:

 Nhẹ, ít tiêu tốn tài nguyên

 Có thể dùng để thực hiện kiểm thử chức năng trên các ứng dụng Android

 Có thể chạy độc lập không cần mã nguồn dự án phần mềm

 Hỗ trợ kiểm thử những chức năng phức tạp

Robotium được đưa ra như một giải pháp hoàn hảo cho vấn đề này

Robotium ra đời kế thừa những điểm mạnh của các lớp kiểm thử được tích hợp sẵn trong Android ngoài ra nó khắc phục được những nhược điểm mà công cụ Android Studio chưa hỗ trợ

Công cụ để hỗ trợ cho công việc này có rất nhiều, tuy nhiên tôi chọn nghiên cứu Robotium vì công cụ này có ưu điểm sau:

 Robotium giúp chúng ta dễ dàng viết những đoạn chương trình kiểm thử

mà không cần biết nhiều về kiến thức lập trình di động Android

 Robotium cung cấp API để tương tác trực tiếp với các điều khiển giao diện người dùng trong ứng dụng Android như các điều khiển chỉnh sửa văn bản (EditText), nhãn (TextView) và nút (Button)

 Robotium chính thức hỗ trợ Android 1.6 trở lên

 Không được sửa đổi nền tảng Android bằng Robotium

 Robotium có thể được tích hợp trơn tru với Maven hoặc Ant

 Dự án ứng dụng thử nghiệm và dự án ứng dụng chạy trên cùng một JVM,

đó là, máy ảo Dalvik (DVM)

 Có thể chạy Robotium mà không cần mã nguồn dự án phần mềm

Trang 38

 Robotium có thể làm việc với các công cụ đo lường vùng phủ sóng khác, chẳng hạn như Cobertura và Emma

 Robotium có thể phát hiện các thông báo được hiển thị trên màn hình

 Robotium hỗ trợ các tính năng của Android như các hoạt động, trình đơn,

Những ca kiểm thử trong Robotium được thực hiện tự động, các ca kiểm thử này được thiết kế để khi chạy kiểm thử mà không cần có sự can thiệp của con người Từ những thiết kế như thế, chúng ta có thể thêm các bộ kiểm thử vào quá trình tích hợp và xây dựng phần mềm một cách liên tục để tạo một ra một sản phẩm phần mềm chất lượng tốt nhất

Trang 39

2.2.2 Đề xuất giải pháp

Robotium là lựa chọn tốt hơn để tiến hành kiểm thử ứng dụng Android Robotium là khung nền nguồn mở và được xem như là một khung nền mở rộng Android Sử dụng Robotium, lập trình viên có thể viết các ca kiểm thử tự động cho ứng dụng Android Tuy nhiên, lập trình viên có thể viết các chức năng, hệ thống và các kịch bản kiểm thử chấp nhận, là cầu nối giữa các hoạt động Android

2.2.3 Xây dựng quy trình kiểm thử ứng dụng di động trên Android

Từ những phân tích ở trên, chúng ta tiến hành xây dựng quy trình kiểm thử các ứng dụng trên điện thoại thông minh Android

2.2.3.1 Mô tả quy trình

Trên cơ sở đặc tả yêu cầu của ứng dụng, ta xây dựng các trường hợp kiểm thử cho từng chức năng bằng cách tạo một lớp Java thừa kế từ lớp cha ActivityInstrumentationTestCase2 trong AndroidUnitTest Tiếp theo, ta tạo kịch bản kiểm thử cho từng thành phần trên giao diện ứng dụng, kịch bản này là một chuỗi các RobotiumEvent mô tả các bước kiểm thử Cấu trúc của một kịch bản kiểm thử đã được trình bày trong phần giới thiệu về Robotium

Sau đó ta sử dụng mã lệnh kiểm thử đã xây dựng để tiến hành kiểm thử đơn vị cho ứng dụng Việc kiểm thử có thể được thực hiện song song trên nhiều chức năng Mỗi chức năng không phải là một chương trình độc lập nên mã lệnh kiểm thử chỉ chấp nhận dữ liệu kiểm thử và gởi dữ liệu đó đến các chức năng kiểm thử

và in kết quả liên quan

Sau khi hoàn thành kiểm thử cho từng chức năng, ta tiếp tục sử dụng kịch bản kiểm thử đã xây dựng để kiểm thử từng sự kiện trên mỗi thành phần của giao diện Quá trình này chia làm hai giai đoạn: truy xuất các thành phần giao diện Android

từ mã lệnh kiểm thử và dựa vào kịch bản kiểm thử để kích hoạt các sự kiện được đưa ra trong kịch bản

Trong quá trình kích hoạt các sự kiện, nếu xảy ra ngoại lệ thì phân tích và đánh dấu các lỗi để sửa lại chương trình

Trang 40

2.2.3.2 Xây dựng quy trình

Qui trình trên có thể được mô hình hóa như hình 2.1

Hình 2.1 Mô hình hóa qui trình kiểm thử các ứng dụng Android sử dụng Robotium

Sai Đúng

B1: Tạo kịch bản kiểm thử cho các màn hình ứng dụng

B2: Tạo mã lệnh kiểm thử Robotium

Chỉnh sửa lại chương trình gốc

Ngày đăng: 26/04/2021, 15:02

Nguồn tham khảo

Tài liệu tham khảo Loại Chi tiết
[1] Nguyễn Thanh Bình, Kiểm thử phần mềm, NXB Giáo dục Việt Nam, 2013 Sách, tạp chí
Tiêu đề: Kiểm thử phần mềm
Nhà XB: NXB Giáo dục Việt Nam
[2] Ts. Nguyễn Đình Thúc, Lập trình tiến hóa, NXB Giáo dục, 2001. Tiếng Anh Sách, tạp chí
Tiêu đề: Lập trình tiến hóa
Nhà XB: NXB Giáo dục
[3] Hrushikesh Zadgaonkar, Robotium Automated Testing for Android, November 2013 Sách, tạp chí
Tiêu đề: Robotium Automated Testing for Android
[4] Diego Torres Milano, Android Application Testing Guide Progressing, June 2011 Sách, tạp chí
Tiêu đề: Android Application Testing Guide Progressing
[5] Yuan Zhan and John A. Clark, Search-Based Mutation Testing for Simulink Models, 2000 Sách, tạp chí
Tiêu đề: Search-Based Mutation Testing for Simulink Models
[6] Alex Podelko, Testing Experience, September 2013 Sách, tạp chí
Tiêu đề: Testing Experience
[7] Paperback, Learning Android Application Testing, March 26, 2015 Trang web Sách, tạp chí
Tiêu đề: Learning Android Application Testing
[8] Robotium: http://robotium.com/ Link
[9] Android: https://developer.android.com/training/testing/ui-testing/index.html Link
[10] Emulator: https://www.genymotion.com/ Link

TỪ KHÓA LIÊN QUAN

TRÍCH ĐOẠN

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