Tại sao test iOS?

Phát hành lần đầu tiên vào 29-05-2007, iOS là tên của nền tảng của apple cho các ứng dụng mobile. Không giống android, apple không cho phép iOS cài đặt trên các phần cứng không phải của apple. iOS và các ứng dụng của iOS chỉ cài đặt được trên các thiết bị của apple. Các ứng dụng của bạn buộc phải tương thích với 4 loại thiết bị và các phiên bản iOS.

Đây là câu hỏi thông thường khi developer tạo ra 1 ứng dụng iOS

Không quan trọng bạn đầu tư bao nhiêu thời gian vào thiết kế và thực hiện, những sai lầm là không thể tránh khỏi, và các bug sẽ xuất hiện. Có 1 số bug phổ biến trên ứng dụng iOS. Như thể hiện trong hình dưới đây:

1. Application crashing
Một trong những vấn đề gây khó chịu nhất khi sử dụng các thiết bị của apple là 1 ứng dụng có thể bị crash thường xuyên trong quá trình thực thi. Nhiều lần ứng dụng bị crash vì có 1 vài bug hoặc memory leak trong các ứng dụng.

2. Ứng dụng không tương thích
Ứng dụng IOS của bạn có thể chạy hoàn hảo trên phiên bản iOS hiện tại, nhưng nếu iOS đã được nâng cấp nó có thể không làm việc vì các lý do không tương thích.

3. Lỗ hổng bảo mật
Lỗ hổng bảo mật trên iOS cho phép hacker tấn công các thiết bị iOS của bạn, ăn cắp thông tin cá nhân của bạn. Cho đến nay, các lỗ hổng bảo mật nghiệm nghiêm trọng của iphone đã được tìm ra trong các phiên bản iOS khác nhau.

4. Memory leak
Memory leaks là các khối bộ nhớ được cấp phát mà chương trình không còn sử dụng nữa. Memory leak dẫn đến ứng dụng iOS của bạn bị crash. Chúng là các bug và phải luôn luôn được fix.

Sơ đồ tư duy của việc test iOS


Như hiển thị ở hình trên, sơ đồ tư duy của việc test iOS biểu diễn tất cả các mục mà tester cần xem xét khi tiến hành test iOS.

Chiến lược của việc test iOS.

Hình dưới giới thiệu 1 số loại chiến lược phổ biến của việc test iOS

Test tự động

Test tự động là lợi thế vượt trội của việc test iOS. Nó cho phép bạn phát hiện các bug và các vấn đề về hiệu năng 1 cách nhanh chóng. Lợi ích của việc test tự động như sau:

  • Automated testing có thể chạy trên nhiều thiết bị, tiết kiệm thời gian cho bạn
  • Automated testing có thể tương thích các SDK. Bạn có thể chạy test trên các phiên bản SDK khác nhau.
  • Automated testing tăng năng suất test của bạn, tiết kiệm chi phí phát triển phần mềm
  • Có rất nhiều framework mã nguồn mở hỗ trợ Automated testing trên iOS.

Unit testing với UCUnit

Khi SDK của iOS đầu tiên được phát hành, nó thiếu khả năng unit testing. Vì vậy, apple đã mang lại giải pháp unit test ONUnit trong SDK phiên bản 2.2 của iOS.

OCUnit là 1 testing framework cho C-Object trong mac OS. Ưu điểm lớn nhất của OCUnit framework là sự tích hợp chặt chẽ vào trong môi trường phát triển XCode như dưới:

1 vài lợi ích của OCUnit được biểu diễn như hình dưới

UI Testing với UI Automation


UI Automation là 1 thư viện javascript được cung cấp bởi tập đoàn apple, có thể được sử dụng để thực hiện automated test trên các thiết bị thật và trên iOS giả lập. Framework này được bổ sung tới iOS SDK 4.0. Sử dụng UI Automation, bạn có thể test tự động các ứng dụng không chỉ trên các thiết bị mô phỏng mà còn trên các thiết bị thật.

UI Automation mang đến cho bạn các lợi ích:

  • Giảm ảnh hưởng của test thủ công
  • Sử dụng ít bộ nhớ của bạn để thực hiện tất cả các bài test của bạn.
  • Đơn giản hóa thủ tục UI testing (user interface) của bạn (chỉ cần ấn 1 đến 3 nút và chạy toàn bộ gói test của bạn).

Công cụ UIAutomation làm việc từ các script, được viết trong javascript. Nó mô phỏng các event của người dùng trên các ứng dụng target iOS.
UIAutomation Cons vs .Pros

Pros Cons
1. Hỗ trợ tốt hồi đáp và luân phiên Nó không phải mã nguồn mở, ít hỗ trợ từ developer
2. Có thể chạy UIAutomation test trên các thiết bị, không chỉ trên mô phỏng Không thể tích hợp tốt với các công cụ khác
3. Phát triển bởi javascript, nó là 1 ngôn ngữ phổ biến


Hình trên cho thấy 1 số lớp phổ biến trong UIAutomation framework

  • UIAElement class là 1 super class cho tất cả các yếu tố UI trong ngữ cảnh của Automation
  • UIATarget class đại diện cho các yếu tố UI cấp cao của hệ thông test
  • UIALogger class cung cấp các thông tin test và lỗi về chức năng truy xuất
  • UIAActivityView class cho phép các truy cập tới và điều khiển của các activity view trong ứng dụng của bạn
  • UIAActionSheet class cho phép các truy cập tới và điều khiển của các action sheet trong ứng dụng của bạn
  • Event action của user
    • UISlider class
    • UIAButton class
    • UIAKey class
    • UIAKeyboard class

Các framework automated testing khác

  • MonkeyTalk: 1 Công cụ để tự động test các ứng dụng iOS, Android, HTML5 và Adobe. Nó là một môi trường tích hợp để quản lý và chạy các bộ phần mềm test
  • Frank: Automated Acceptance Test framework cho iPhone và iPad
  • KIF: là 1 iOS intergration test framework. Nó cho phép dễ dàng tự động hoá các ứng dụng iOS bằng cách tận dụng các thuộc tính truy cập mà hệ điều hành tạo sẵn cho những ứng dụng ẩn.

Manual testing

Exploratory testing

Nó là 1 bài test mà không có kế hoạch test mẫu. Exploratory testing là 1 phương thức test chi phí thấp nhưng có thể bỏ qua các lỗi tiềm ẩn trong ứng dụng iOS của bạn.
Exploratory testing Cons Vs. Pros

Pros Cons
1. Cần chuẩn bị ít, sớm phát hiện các lỗi quan trọng Yêu cầu kỹ năng cao của 1 tester
2. Không cần kế hoạch test tăng tốc độ phát hiện lỗi Phạm vi test thấp. Không đảm bảo tất cả các yêu cầu của bạn được test
3. Hầu hết các lỗi được phát hiện sớm bởi 1 số exploratory testing Thiếu tài liệu test

User testing

User testing là 1 loại manual testing trên IOS. Mục đích của việc test này là để tạo ra các ứng dụng tốt hơn, không chỉ các ứng dụng bug-free. Hình dưới sẽ cho thấy 4 loại của User testing

Concept testing:

Đánh giá phản ứng của người dùng đối với một ý tưởng ứng dụng trước khi phát hành ra thị trường. Phương thức của Concept testing trên iOS được mô tả như dưới đây

Usability testing:

Usability testing là 1 bài test dễ sử dụng trên ứng dụng iOS của bạn. Trong iOS testing, usability testing có thể được lưu lại để ghi nhớ hoặc chia sẻ với người khác.

Có 1 vào công cụ hỗ trợ usability testing trên iOS.

Magitest, một bài usability testing của iOS đơn giản cho các trang web và ứng dụng.

Delight.io, công cụ này có thể bắt các tương tác người dùng thực trên ứng dụng iOS của bạn.

Beta testing:

Beta testing là 1 bài test tích hợp với dữ liệu thực để nhận phản hồi cuối cùng từ người dùng. Để phân phối các ứng dụng của bạn cho beta testing, bạn phải làm theo các bước dưới đây.

  • Pre-condition: Nếu bạn đang test thử nghiệm một mục cuối cùng cho việc phát hành, hãy chắc chắn giá trị của ứng dụng trước khi phân phối nó tới các tester.
  • Find tester via service: bạn thu thập các ID thiết bị từ các tester và thêm chúng vào member center.
  • Tạo ad-hoc distribution: ad-hoc distribution cho phép tester chạy ứng dụng của bạn trên thiết bị của họ mà không cần Xcode. Bước này bao gồm 2 bước phụ
    • Tạo distribution certificates
    • Tạo các Ad hoc provisioning profile
  • Solicit feedback from tester: tester tiến hành test và gửi report lỗi cho bạn. Sau khi ứng dụng của bạn được phát hành, bạn có thể nhận các report từ iTunes connect.

A/B testing

A/B testing là một trong những cách mạnh mẽ nhất để đánh giá hiệu quả của ứng dụng iOS của bạn. Nó sử dụng các thử nghiệm ngẫu nhiên với hai thiết bị, A và B.

A/B testing bao gồm 3 bước chính:

  • Configure a test: Chuẩn bị 2 phiên bản của ứng dụng iOS của bạn (A va B) và test metric
  • Test: Test 2 phiên bản ứng dụng iOS ở trên đồng thời trên các thiết bị
  • Analyze: Đánh giá và lựa chọn phiên bản tốt hơn để phát hành

Các công cụ sau hỗ trợ A/B testing trên iOS

  • Arise: A/B testing cho cả iOS và Android. Nó có thể được tích hợp vào ứng dụng iOS của bạn và làm cho quá trình test nhanh hơn.

Các phương pháp tốt nhất cho A/B testing

  • Xác định mục tiêu của bài test. Bất kỳ bài test nào cũng là vô ích nếu không có mục tiêu.
  • Xem các end user sử dụng ứng dụng của bạn lần đầu tiên.
  • Chỉ chạy một bài test cho mỗi lần cập nhật. Tiết kiệm thời gian của bạn khi tiến hành kiểm tra.
  • Giám sát cẩn thận bài test của bạn. Bạn có thể học kinh nghiệm từ bài test của mình bằng cách theo dõi nó.

Các phương pháp tốt nhất của iOS testing

Đây là một số mẹo bạn nên biết khi thiết lập bài test ứng dụng iOS của bạn.

  1. Kiểm tra ứng dụng trên một thiết bị thật để nhận biết được hiệu suất thật.
  2. Cải thiện phương pháp test của bạn, bởi vì các phương pháp test truyền thống không còn đủ khả năng để bao phủ tất cả các bài test trên iOS
  3. Sử dụng console log để test ứng dụng iOS. Đây là 1 tính năng của IOS bao gồm thông tin từ mọi ứng dụng trên thiết bị.
  4. Tài liệu các lỗi ứng dụng sử dụng câu lệnh built-in screen shot. Nó giúp developer hiểu được lỗi xảy ra như thế nào.
  5. Crashing report là công cụ hữu ích khi test ứng dụng của bạn. Chúng có thể phát hiện chi tiết các crash và log để bạn có thể điều tra các lỗi dễ dàng.

MYTHS về iOS testing

Phần này sẽ xem xét 1 vài lý thuyết và thực tế phổ biến của iOS testing.

VD: Test ứng dụng trên iOS và android là giống nhau.

iOS và android là 2 nền tảng được phát triển bởi tập đoàn apple và google. Chúng khác nhau hoàn toàn. Ví dụ về môi trường test, các framework test, các ngôn ngữ chương trình.

VD: Test ứng dụng trên iOS mô phỏng là đủ.

IOS mô phỏng là không đủ cho việc test các ứng dụng. Bởi vì iOS mô phỏng có 1 vài giới hạn.

  • Giới hạn về phần cứng (Camera, Microphone input, cảm biến)
  • UI của ứng dụng của bạn có thể chạy nhanh hơn và mượt mà hơn trên thiết bị
  • Hạn chế về các API
  • Một số framework không được hỗ trợ (Media Player, Store Kit, Message UI..)

VD: Mọi người sẽ download các ứng dụng của tôi trên app store bởi vì nó có nhiều tính năng.

Ứng dụng của bạn càng có nhiều tính năng, càng có nhiều lỗi bạn có thể gặp phải. Không có người dùng nào muốn tải ứng dụng của bạn nếu vẫn còn nhiều khuyết điểm.
Tham khảo: http://www.guru99.com/getting-started-with-ios-testing.html