CƠ SỞ LÍ THUYẾT
Sơ lược về kiểm thử phần mềm và kiểm thử phần mềm
2.1.1 Khái quát về phần mềm: a Định nghĩa phần mềm:
Phần mềm máy tính, hay còn gọi là software, là tập hợp các câu lệnh hoặc chỉ thị được viết bằng nhiều ngôn ngữ lập trình theo một trình tự xác định nhằm thực hiện các nhiệm vụ hoặc chức năng cụ thể Phần mềm hoạt động bằng cách gửi trực tiếp các chỉ thị đến phần cứng hoặc cung cấp dữ liệu để các chương trình phần mềm khác thực hiện nhiệm vụ của mình.
Phần mềm được hiểu một cách trừu tượng là những thành phần không thể cầm nắm như phần cứng, và hoạt động của phần mềm phụ thuộc vào phần cứng để thực hiện các chức năng Phân loại phần mềm gồm các nhóm chính như phần mềm hệ điều hành, phần mềm ứng dụng và phần mềm trung gian, giúp người dùng dễ dàng xác định và sử dụng phù hợp với nhu cầu của mình Việc hiểu rõ các loại phần mềm này giúp nâng cao khả năng quản lý và tối ưu hóa hiệu quả sử dụng máy tính và các thiết bị công nghệ.
Có nhiều cách thức phân loại phần mềm, song có thể chia thành hai loại chính sau:
− Theo phương thức hoạt động:
Phần mềm hệ thống đóng vai trò quan trọng trong việc vận hành máy tính và các thiết bị phần cứng, là cầu nối giúp hệ điều hành liên lạc và điều khiển các thiết bị phần cứng một cách hiệu quả.
+ Phần mềm ứng dụng: để người sử dụng có thể hoàn thành một hay nhiều công việc nào đó
+ Các phần mềm chuyển dịch mã bao gồm trình biên dịch và trình thông dịch + Các nền tảng công nghệ như NET, 1C:DOANH NGHIỆP
− Theo khả năng ứng dụng
+ Phần mềm thời gian thực (các PM anti-virus, PM chat, )
+ PM nhúng: chạy trên các thiết bị đặc thù như điện thoại di động, TV, máy lạnh,
+ PM phân tán: chạy trên nhiều thiết bị, phối hợp hoạt động đồng thời với nhau
7 c Định nghĩa chất lượng sản phẩm
Chất lượng sản phẩm là mức độ đạt được các đặc trưng hay những thuộc tính náo đó của nó (Từ điển American Heritage) Chẳng hạn:
− Chất lượng thiết kế (cấu trúc)
− Sự hoàn thiện (tính năng, kiểu dáng, )
− Sự lâu bền (thời gian dùng, độ mòn cũ, )
Như vậy, Chất lượng của sản phẩm được thể hiện bằng các đặc trưng phù hợp với đặc tả của nó [Theo Crosby,1979] d Định nghĩa chất lượng phần mềm
Chất lượng phần mềm thể hiện qua khả năng đáp ứng đầy đủ các yêu cầu chức năng, tính hoàn thiện và các tiêu chuẩn đặc tả đã được phát triển, đảm bảo rằng phần mềm hoạt động chính xác, ổn định và đáp ứng mong đợi từ người dùng Đây là yếu tố then chốt trong việc xây dựng phần mềm chuyên nghiệp, góp phần nâng cao trải nghiệm người dùng và đảm bảo sự thành công của dự án.
Chất lượng phần mềm đã được định nghĩa bởi nhiều tổ chức và cá nhân khác nhau, phản ánh sự đa dạng về cảm nhận và tiêu chuẩn Trong phạm vi của đồ án này, chúng tôi trình bày một số định nghĩa tiêu biểu nhằm làm rõ khái niệm và tầm quan trọng của chất lượng phần mềm trong phát triển hệ thống công nghệ thông tin.
Chất lượng phần mềm được định nghĩa là mức độ mà một hệ thống, thành phần hệ thống hoặc quá trình đáp ứng đầy đủ các yêu cầu đã được đặc tả Đặc điểm này đảm bảo phần mềm hoạt động chính xác, phù hợp với mong đợi của người dùng và đáp ứng các tiêu chuẩn chất lượng Việc đảm bảo chất lượng phần mềm giúp nâng cao hiệu suất, độ tin cậy và khả năng mở rộng của hệ thống, từ đó nâng cao giá trị sử dụng và sự hài lòng của khách hàng.
+ Định nghĩa 2: Chất lượng phần mềm là mức độ mà một hệ thống, thành phần hệ thống hay tiến trình đáp ứng được yêu cầu và sự mong đợi của khách hàng hay người sử dụng
− Phân tích hai quan điểm của IEEE:
Theo quan điểm của IEEE, việc quá phụ thuộc vào tài liệu đặc tả yêu cầu có thể dẫn đến rủi ro khi xác định yêu cầu không chính xác hoặc thiếu sót Điều này có nghĩa là phần mềm được phát triển đúng theo đặc tả không nhất thiết là phần mềm có chất lượng cao nếu các yêu cầu đó không đúng hoặc chưa đầy đủ.
Theo quan điểm thứ hai của IEEE, khách hàng đôi khi không có nhiều kiến thức về công nghệ, dẫn đến việc họ đưa ra những mong muốn vô cùng vô lý và thay đổi yêu cầu phần mềm nhiều lần, thậm chí trong giai đoạn cuối cùng của dự án Điều này gây ra những khó khăn lớn trong quá trình phát triển phần mềm và ảnh hưởng tới tiến độ cũng như chất lượng dự án.
Chất lượng phần mềm, theo định nghĩa của Pressman, là sự phù hợp của các yêu cầu về hiệu năng và chức năng, đảm bảo phần mềm đáp ứng các tiêu chuẩn phát triển đã được ghi lại rõ ràng trong tài liệu Đặc điểm nổi bật của phần mềm chuyên nghiệp là các đặc tính ngầm định được cấu thành dựa trên các yêu cầu cụ thể, giúp đảm bảo chất lượng và độ tin cậy của sản phẩm.
+ Định nghĩa của Pressman đề xuất ba yêu cầu với chất lượng phần mềm phải được đáp ứng khi phát triển phần mềm:
+ Các yêu cầu chức năng rõ ràng là nhân tố chính quyết định chất lượng đầu ra của phần mềm
+ Các tiêu chuẩn chất lượng phần mềm sẽ được nói đến trong hợp đồng
Trong quá trình phát triển phần mềm, cần đảm bảo các đặc tính ngầm định như tính ổn định, độ tin cậy và khả năng mở rộng, ngay cả khi chúng không được quy định rõ trong hợp đồng Đặc biệt, đảm bảo chất lượng phần mềm là yếu tố then chốt để đáp ứng yêu cầu của khách hàng và duy trì hiệu quả hoạt động của hệ thống Việc chú trọng đến những đặc tính này giúp dự án phát triển thành công, giảm thiểu rủi ro và nâng cao sự hài lòng của người dùng.
Daniel Galin nhấn mạnh rằng Đảm bảo chất lượng phần mềm (Software Quality Assurance) là tập hợp các hành động có hệ thống nhằm đảm bảo quá trình phát triển phần mềm đáp ứng đầy đủ các yêu cầu chức năng, kỹ thuật và quản lý theo đúng lịch trình và trong ngân sách Quá trình này giúp xây dựng niềm tin vững chắc vào chất lượng sản phẩm phần mềm, từ đó giảm thiểu rủi ro và nâng cao hiệu quả dự án phát triển phần mềm.
Tùy thuộc vào từng tổ chức, hệ thống và ngữ cảnh, cũng như mức độ rủi ro của phần mềm, quy trình kiểm thử phần mềm có thể bao gồm nhiều bước khác nhau Tuy nhiên, nhìn chung, mọi quy trình kiểm thử đều có những bước cơ bản đáng chú ý, đảm bảo kiểm tra hiệu quả và chất lượng phần mềm Các bước này giúp phát hiện lỗi sớm, tăng độ tin cậy của sản phẩm và đáp ứng yêu cầu của khách hàng một cách tốt nhất.
Sơ đồ 1 : Qui trình kiểm thử phần mềm
Theo đó một qui trình kiểm thử phần mềm cơ bản gồm 4 giai đoạn:
− Lập kế hoạch kiểm thử : Nhiệm vụ quan trọng trong phần lập kế hoạch kiểm thử là xác định được các yếu tố sau:
+ Các giai đoạn kiểm thử áp dụng cho dự án
+ Các phương pháp kiểm thử
+ Các công cụ kiểm thử
+ Tài nguyên môi trường kiểm thử, bao gồm các tài nguyên phần cứng và phần mềm
+ Mốc bàn giao các tài liệu kiểm thử
− Chuẩn bị kiểm thử : Nhiệm vụ chiến lược của giai đoạn này là:
+ Tìm hiểu nghiệp vụ của hệ thống phải kiểm thử
+ Xây dựng kịch bản kiểm thử, phát triển các thủ tục và các kịch bản kiểm thử tự động(trong trường hợp kiểm thử tự động)
+ Chuẩn bị dữ liệu kiểm thử
+ Xem xét phê duyệt các tài liệu kiểm thử
+ Thực hiện kiểm thử dựa trên các kịch bản kiểm thử,test script, thủ tục, dữ liệu có sẵn từ bước chuẩn bị kiểm thử
+ Tham gia quá trình quản lý lỗi: báo lỗi, sửa lỗi
+ Báo cáo và phân tích dữ liệu kiể m thử:
+ Phân tích nguyên nhân và đề xuất các hành động khắc phục
2.1.2 Khái quát về kiểm thử phần mềm a Định nghĩa kiểm thử phần mềm
Kiểm thử phần mềm là quá trình thực thi một chương trình nhằm xác định lỗi, giúp cung cấp thông tin về chất lượng sản phẩm hoặc dịch vụ cho các bên liên quan Nó mang lại góc nhìn độc lập cho doanh nghiệp để đánh giá và hiểu rõ các rủi ro trong quá trình triển khai phần mềm Kiểm thử giúp phát hiện lỗi sớm, nâng cao chất lượng sản phẩm và giảm thiểu rủi ro toàn diện trong dự án phần mềm.
Kiểm thử phần mềm là quá trình kiểm tra nhằm đảm bảo mã nguồn hoạt động đúng theo thiết kế, không thực hiện các chức năng không mong muốn Đây là bước quan trọng trong quá trình phát triển hệ thống, giúp xác định xem hệ thống mới có đáp ứng đầy đủ các yêu cầu đề ra hay không Các thuật ngữ liên quan đến kiểm thử phần mềm giúp hiểu rõ hơn về các giai đoạn và phương pháp kiểm tra trong quá trình phát triển phần mềm.
Khái quát về kiểm thử tự động trên Android
2.2.1 Phần mềm ứng dụng là gì?
Ứng dụng di động là phần mềm được thiết kế để chạy trên các thiết bị di động như điện thoại thông minh và máy tính bảng Đây là loại phần mềm ứng dụng phổ biến và giúp người dùng thực hiện nhiều hoạt động khác nhau trên điện thoại của mình Các ứng dụng này còn được gọi tắt là ứng dụng hoặc mobile app trong tiếng Anh, và đóng vai trò quan trọng trong cuộc sống hàng ngày cũng như công việc.
Các ứng dụng di động phổ biến đều được phân phối qua các nền tảng như Apple App Store, Google Play, Windows Phone Store và BlackBerry App World, bắt đầu xuất hiện từ năm 2008 Các nền tảng này thường do chủ sở hữu hệ điều hành di động quản lý và cung cấp nhiều loại ứng dụng khác nhau Một số ứng dụng miễn phí, giúp người dùng truy cập dễ dàng mà không tốn phí, trong khi các ứng dụng khác yêu cầu mua để sử dụng các tính năng nâng cao hoặc nội dung đặc biệt.
Thuật ngữ "ứng dụng" là viết tắt của "phần mềm ứng dụng" và thường được gọi là "app" trong tiếng Anh, một thuật ngữ ngày càng phổ biến trên toàn thế giới Năm 2010, từ "app" đã được Hiệp hội American Dialect Society bình chọn là "từ ngữ của năm," phản ánh tầm ảnh hưởng và sự phổ biến của nó trong đời sống hàng ngày.
Một ứng dụng di động là phần mềm được thiết kế để chạy trên smartphone hoặc tablet, thường được phân phối thông qua các cửa hàng ứng dụng do hệ điều hành thiết bị quản lý, như Apple App Store, Google Play, Windows Phone Store và BlackBerry App Store Các nhà cung cấp lớn như Amazon và các nhà sản xuất thiết bị cũng tham gia vào thị trường này, mở rộng phạm vi tiếp cận cho người dùng Người dùng thường tải và cài đặt các ứng dụng qua các cửa hàng này phù hợp với hệ điều hành của mình, giúp ứng dụng tích hợp sâu vào các chức năng và kho lưu trữ của điện thoại thông minh Việc cấp phép và quyền truy cập vào các tính năng của điện thoại cũng được điều chỉnh phù hợp theo sự cho phép của người dùng, đảm bảo an toàn và riêng tư khi sử dụng ứng dụng di động.
2.2.2 Khái quát về hệ điều hành Android
Android hiện là hệ điều hành di động phổ biến nhất hiện nay với thị phần trung bình hơn 50% trên toàn thế giới
Android là hệ điều hành mã nguồn mở dựa trên nền tảng Linux, được thiết kế đặc biệt cho các thiết bị di động màn hình cảm ứng như điện thoại thông minh và máy tính bảng.
Android ban đầu được phát triển bởi Tổng công ty Android với sự hỗ trợ tài chính từ Google, sau đó được Google mua lại vào năm 2005 Hệ điều hành Android chính thức ra mắt vào năm 2007, mở ra bước ngoặt mới cho ngành công nghiệp di động Chiếc điện thoại đầu tiên chạy Android là HTC Dream, được bán ra vào ngày 22 tháng 10 năm 2008, đánh dấu sự bắt đầu của một thời kỳ phát triển mạnh mẽ cho nền tảng này.
Hình 1.11: Tỉ lệ sử dụng các hãng di động
Chính nhờ vào mã nguồn mở và giấy phép linh hoạt, Android cho phép các nhà phát triển thiết bị, mạng di động và lập trình viên tự do tùy chỉnh và phân phối hệ điều hành, góp phần đưa nền tảng này trở thành nền tảng điện thoại thông minh phổ biến nhất thế giới Vào quý 3 năm 2012, Android chiếm 75% thị phần điện thoại di động toàn cầu với hơn 500 triệu thiết bị hoạt động, cùng với 1,3 triệu lượt kích hoạt hàng ngày Tính đến tháng 10 năm 2012, đã có khoảng 700.000 ứng dụng trên Android và lượng tải từ Google Play lên tới 25 tỷ lượt, thu hút người dùng trên toàn thế giới.
22 lớn của iOS từ Apple và một phần nhỏ của Windows Phone, tuy nhiên Android vẫn dẫn đầu thị phần
2.2.3 Ưu và nhược điểm của HĐH Android a Ưu điểm
Hệ điều hành mã nguồn mở mang lại khả năng tùy biến cao, cho phép người dùng tự do chỉnh sửa theo ý muốn mà không gặp sự can thiệp hay hạn chế từ Google, từ đó tối ưu hóa trải nghiệm và phù hợp với nhu cầu cá nhân.
Hệ điều hành Android ngày càng trở nên phổ biến với đa dạng sản phẩm, từ điện thoại bình dân đến các thiết bị cao cấp Nhiều hãng công nghệ hàng đầu ưu ái chọn Android cho các sản phẩm của mình, mang lại sự phong phú về mẫu mã, tính năng và mức giá phù hợp với từng đối tượng người dùng.
− Kho ứng dụng Google Play Store đồ sộ
− Thân thiện và dễ sử dụng
− Khả năng đa nhiệm, chạy cùng lúc nhiều ứng dụng cao b Nhược điểm
Phần mềm mã nguồn mở dễ bị nhiễm phần mềm độc hại và virus do nhiều phần mềm không kiểm soát, kém chất lượng hoặc còn lỗi bảo mật vẫn được sử dụng phổ biến.
− Kho ứng dụng quá nhiều dẫn đến khó kiểm soát chất lượng, thiếu các ứng dụng thật sự tốt
Mặc dù các thiết bị Android cao cấp như Galaxy S5, Galaxy Note 4, Xperia Z3 đã được ra mắt, nhưng thị trường vẫn còn rất nhiều thiết bị Android giá rẻ, bình thường khiến sự phân mảnh của hệ sinh thái này trở nên lớn hơn.
Cập nhật hệ điều hành không tự động trên tất cả các thiết bị, khiến người dùng gặp khó khăn trong việc trải nghiệm các tính năng mới Khi có phiên bản hệ điều hành mới ra mắt, nhiều sản phẩm không được hỗ trợ cập nhật, dẫn đến việc phải mua thiết bị mới để sử dụng các phiên bản mới nhất Điều này gây bất tiện và tốn kém cho người dùng, đồng thời ảnh hưởng đến trải nghiệm người dùng và tính bền vững của thiết bị.
Appium trong kiểm thử tự động trên Android
Appium hoạt động như một server trung gian giúp các test script viết bằng Selenium có thể chạy trực tiếp trên các thiết bị di động Cơ chế hoạt động của Appium khá đơn giản, cho phép tự động hóa các kiểm thử trên các thiết bị chạy hệ điều hành Android hoặc iOS Với khả năng này, Appium giúp dễ dàng kiểm thử ứng dụng trên nhiều loại thiết bị khác nhau, nâng cao hiệu quả và độ chính xác của quá trình kiểm thử phần mềm.
Trong trường hợp của Android, Appium proxy lệnh đến trường hợp thử nghiệm UIAutomator đang chạy trên thiết bị, giúp tự động hóa giao diện người dùng Android dễ dàng hơn UIAutomator là framework tự động hóa UI của Android, hỗ trợ chạy các trường hợp thử nghiệm JUnit trực tiếp trên thiết bị từ dòng lệnh, sử dụng Java làm ngôn ngữ lập trình Tuy nhiên, với Appium, người dùng có thể chạy các thử nghiệm này từ bất kỳ ngôn ngữ nào được WebDriver hỗ trợ, mở rộng khả năng tích hợp và linh hoạt trong kiểm thử Trong sơ đồ hệ thống, file Bootstrap.jar đại diện cho trường hợp kiểm tra được biên soạn bằng Java, tạo ra một máy chủ TCP sau khi chạy, trong đó máy chủ này nằm bên trong thiết bị và khách hàng là Appium, điều này khác biệt so với cách hoạt động trên iOS.
Appium là công cụ kiểm thử tự động cho ứng dụng di động, hỗ trợ kiểm thử các ứng dụng Native, Hybrid và Web trên cả thiết bị vật lý và thiết bị ảo Được phát triển dựa trên nền tảng Selenium, Appium kế thừa cấu trúc, cú pháp và khả năng tương tác với nhiều nền tảng khác nhau như iOS và Android Nhờ đó, Appium cho phép chạy cùng một mã kiểm thử trên nhiều nền tảng di động, tối ưu hóa quá trình kiểm thử tự động và nâng cao hiệu quả phát triển phần mềm.
Khả năng chạy kiểm thử trên nhiều nền tảng của Appium đến từ việc sử dụng thư viện của nó thông qua một server trung tâm Appium chuyển đổi các lệnh trong mã kiểm thử thành các lệnh UIAutomation cho iOS hoặc UIAutomator cho Android, giúp tương tác hiệu quả với thiết bị di động Điều này giúp quy trình kiểm thử trở nên linh hoạt, tiết kiệm thời gian và giảm thiểu rắc rối trong phát triển và kiểm thử ứng dụng đa nền tảng.
Appium is a popular open-source test automation framework widely used for mobile application testing It supports automation of native, hybrid, and mobile web applications built on both iOS and Android platforms Known for its easy installation and user-friendly interface, Appium is considered one of the top tools for mobile automation testing.
2.3.2 Các thành phần của Appium
Chương trình máy chủ Appium (Appium Server) là phần mềm tạo lập máy chủ Java, có nhiệm vụ chuyển đổi các lệnh trong mã kiểm thử thành các lệnh có thể tương tác với thiết bị Nó hỗ trợ tự động hóa kiểm thử ứng dụng di động trên cả iOS và Android bằng cách sử dụng UIAutomation cho iOS và UIAutomator cho Android Với tính năng này, Appium Server giúp các nhà phát triển và tester dễ dàng tự động hóa quy trình kiểm thử một cách hiệu quả và linh hoạt.
Hệ thống thư viện Appium hoạt động giống như Selenium, cung cấp các thư viện giúp nhận diện và tương tác với các đối tượng UI trên ứng dụng di động Các thư viện của Appium được hỗ trợ đa dạng ngôn ngữ lập trình như C#, Java, Python, giúp các kỹ sư kiểm thử tự động dễ dàng lựa chọn ngôn ngữ phù hợp để xây dựng các bộ kiểm thử tự động hiệu quả.
2.3.3 Các nguyên lý của appium
Appium được thiết kế để đáp ứng nhu cầu tự động hóa di động theo triết lý được nêu ra bởi bốn nguyên lý sau:
− Không cần phải biên dịch lại ứng dụng của mình hoăc sửa đổi nó theo bất kỳ cách nào để tự động hóa nó
− Không nên bị khóa vào một ngôn ngữ hoặc khuôn khổ cụ thể để viết và chạy kiểm thử
− Một Framework test tool mobile không nên tái tạo lại bánh xe khi nói đến các API tự động hóa
Một framework kiểm thử phần mềm phải là nguồn mở, phản ánh rõ ràng về mặt tinh thần và thực hành, cũng như phù hợp với tên gọi của nó Appium hoạt động như một "máy chủ HTTP" được xây dựng dựa trên nền tảng Node.js, dùng để tự động hóa kiểm thử ứng dụng iOS và Android thông qua giao thức JSON của WebDriver Để vận hành, Node.js cần phải được cài đặt sẵn trên hệ thống trước khi khởi tạo máy chủ Appium Bạn có thể build và cài đặt Appium từ nguồn hoặc dễ dàng cài đặt trực tiếp qua NPM để tích hợp vào quy trình kiểm thử tự động của mình.
Khi Appium được tải xuống và cài đặt, một máy chủ sẽ được thiết lập trên máy của bạn và cung cấp API REST để nhận yêu cầu kết nối và lệnh từ máy khách Máy chủ này thực thi các lệnh đó trên thiết bị di động (Android/iOS) và phản hồi lại bằng các phản hồi HTTP Để thực hiện các yêu cầu này, Appium sử dụng các framework tự động hóa kiểm thử để xử lý giao diện người dùng của ứng dụng một cách hiệu quả.
2.3.4 Ưu và nhược điểm của Appium a Ưu điểm:
Appium được thiết kế để đáp ứng các yêu cầu của mobile automation như sau:
− Không cần recompile hay modify app trong bất kì trường hợp nào để kiểm thử
− Không cần cố định ngôn ngữ hay framework cụ thể nào để viết hay run test case
− Appium hỗ trợ đa ngôn ngữ
− Không cần mã nguồn để kiểm thử ứng dụng khi có thể kiểm tra trực tiếp
− Có thể tương tác với các ứng dụng như máy ảnh, lịch v v trong kịch bản kiểm thử nếu cần b Nhược điểm:
Hiện tại có rất ít hạn chế trong Appium, một số hạn chế sau đây cũng không phải là trở ngại lớn:
− Đối với Android, Không hỗ trợ cho Android API