TỔNG QUAN VỀ CÔNG TY TMA VÀ VI ̣ TRÍ TESTER
Giới thiệu tổng quát về công ty TMA Bình Định
1.1.1 Quá trình hình thành và phát triển của công ty:
TMA Solutions, thành lập vào năm 1997, là một trong những tập đoàn công nghệ hàng đầu tại Việt Nam, sở hữu đội ngũ 4000 kỹ sư và phục vụ cho các tập đoàn công nghệ cao danh tiếng trên toàn cầu.
TMA, với 26 năm phát triển bền vững, đã tạo dựng đội ngũ hơn 4,000 kỹ sư tài năng và nhiệt huyết, được khách hàng đánh giá cao Họ cùng nhau xây dựng hình ảnh TMA như một đối tác tin cậy trên bản đồ công nghệ thông tin toàn cầu.
- TMA hiện có 7 chi nhánh tại Việt Nam (6 tại TP Hồ Chí Minh và 1 ở TP Quy Nhơn) cùng với 6 văn phòng ở nước ngoài (Mỹ, Canada, Pháp, Nhật, Úc, Singapore)
Vào tháng 6 năm 2018, TMA đã khai trương chi nhánh tại Bình Định Sau 5 năm hoạt động, TMA Bình Định đã có sự phát triển mạnh mẽ với hơn 400 kỹ sư, bao gồm nhiều kỹ sư từ TP.HCM trở về quê hương làm việc.
Vào tháng 8 năm 2018, TMA đã chính thức khởi công xây dựng Công viên Sáng tạo TMA Bình Định (TMA Innovation Park – TIP) trên diện tích 10 hecta tại Thung lũng Sáng tạo Quy Nhơn (Quy Nhon Innovation Park – QNIVY) với tổng vốn đầu tư lên đến hàng trăm tỷ đồng.
Hình 1 Logo công ty TMA Solutions Bình Định 1.1.2 Tầm nhìn và sứ mệnh:
Công viên Sáng tạo TMA, trung tâm phần mềm đầu tiên tại Thung lũng Sáng tạo Quy Nhơn, hướng đến việc trở thành trung tâm phát triển phần mềm và công nghệ cao hàng đầu miền Trung Với sứ mệnh thúc đẩy công nghệ 4.0 tại Việt Nam, công viên bao gồm nhiều cơ sở như Trung tâm Phát triển Phần Mềm, Xưởng Phần mềm, Trung tâm R&D, Trung tâm Khoa học Dữ liệu và Học viện Công Nghệ, với tổng diện tích sử dụng hơn 15,000m².
TMA cung cấp giải pháp toàn diện cho khách hàng với kinh nghiệm phong phú, đồng hành từ giai đoạn tư vấn, phát triển ý tưởng, phân tích yêu cầu, thiết kế, kiểm thử cho đến khi hoàn thiện sản phẩm và vận hành hệ thống 24/7.
Lập kế hoạch dự án là quá trình xác định các mục tiêu và chiến lược của khách hàng, đồng thời sắp xếp các giai đoạn triển khai theo thứ tự ưu tiên.
Tư Vấn (Solutions Consulting) là quá trình phân tích hệ thống hiện tại của doanh nghiệp và đề xuất các giải pháp tối ưu, giúp các công ty áp dụng công nghệ mới Mục tiêu chính là nâng cao năng lực cạnh tranh và cải thiện hiệu quả hoạt động, từ đó tạo ra giá trị bền vững cho doanh nghiệp.
+ Phát Triển Sản Phẩm Mẫu (Prototyping, Proof of Concept): Đánh giá tính khả thi của ý tưởng Phát triển sản phẩm mẫu trong thời gian ngắn nhất
+ Nghiên Cứu & Phát Triển (R&D): Đánh giá và thử nghiệm các công nghệ và phương pháp khác nhau để đề xuất giải pháp khả thi và phù hợp nhất
Thiết kế giao diện (UX/UI Design) bao gồm việc phát triển giao diện cho website, smartphone và máy tính bảng, nhằm cải thiện tính tương tác và nâng cao trải nghiệm người dùng.
+ Phát Triển Phần Mềm (Software Development): Phát triển phần mềm với các công nghệ khác nhau Nâng cấp phần mềm sẵn có
+ Kiểm Thử Phần Mềm (Software Testing): Đánh giá chất lượng phần mềm với nhiều tiêu chí khác nhau Kiểm thử tự động
+ Chuyển Đổi Hệ Thống (Porting & Migration): Chuyển đổi hệ thống cũ sang các công nghệ mới để tăng hiệu suất Chuyển đổi dữ liệu
Quản trị hệ thống (IT Managed Services) bao gồm tư vấn và thiết kế hệ thống mạng, máy tính, đường truyền và bảo mật Dịch vụ này cũng quản lý máy chủ và điện toán đám mây, đồng thời hỗ trợ và bảo trì các ứng dụng Đặc biệt, giải pháp điều hành và giám sát hệ thống mạng thông qua Trung tâm Vận hành Mạng (NOC) là một phần quan trọng trong quản trị hệ thống.
Security services involve the assessment, evaluation, and enhancement of information security systems This includes the establishment of a Security Operation Center (SOC) for effective cybersecurity monitoring.
Tổng quan về vị trí Tester
1.2.1 Mô tả về vị trí Tester:
Tester là những người có nhiệm vụ kiểm tra phần mềm nhằm phát hiện lỗi, sai sót và các vấn đề có thể ảnh hưởng đến hiệu suất của phần mềm khi đưa vào sử dụng Họ thực hiện các quy trình kiểm tra để xác định các lỗi, bug và mọi vấn đề mà người dùng có thể gặp phải trong quá trình sử dụng sản phẩm.
1.2.2 Các kỹ năng cần có của một Tester:
Để thành công trong lĩnh vực kiểm thử phần mềm, việc nắm vững kiến thức cơ bản là rất quan trọng Bạn cần hiểu về ngôn ngữ lập trình, hệ điều hành, cơ sở dữ liệu, mạng máy tính và các công nghệ liên quan khác Những kiến thức này sẽ giúp bạn có cái nhìn sâu sắc hơn về phần mềm và thực hiện các kiểm thử một cách hiệu quả.
Để trở thành một tester xuất sắc, việc luôn đổi mới và sáng tạo là rất quan trọng Công nghệ và phương pháp kiểm thử phần mềm liên tục phát triển, vì vậy bạn cần cập nhật kiến thức thường xuyên và sẵn sàng học hỏi các kỹ thuật mới để áp dụng hiệu quả trong công việc.
Kỹ năng phân tích là yếu tố quan trọng giúp bạn nhanh chóng nắm bắt thông tin, nhạy bén trong việc nhận diện vấn đề và đạt độ chính xác cao Hãy chú ý xem xét vấn đề từ nhiều khía cạnh khác nhau, phân tích từng chức năng để phát hiện và khắc phục những lỗi nhỏ nhất.
Khả năng học hỏi nhanh là yếu tố quan trọng giúp bạn tiến bộ trong công việc Bằng cách học hỏi từ những người có kinh nghiệm, bạn có thể nắm bắt quy trình và công cụ testing một cách hiệu quả, từ đó phát triển sự nghiệp bền vững trong tương lai.
Kỹ năng giao tiếp và làm việc nhóm là rất quan trọng đối với Tester, vì họ thường xuyên tương tác với các thành viên trong nhóm phát triển và các bên liên quan khác Giao tiếp rõ ràng và hiệu quả giúp đảm bảo rằng các lỗi và vấn đề được ghi nhận và giải quyết kịp thời.
Kỹ năng ngoại ngữ, đặc biệt là tiếng Anh, đóng vai trò quan trọng trong ngành công nghệ thông tin, đặc biệt cho vị trí Tester Cải thiện khả năng đọc hiểu tiếng Anh sẽ giúp bạn nắm bắt kiến thức chuyên sâu qua các tài liệu quốc tế Hơn nữa, thành thạo tiếng Anh cũng gia tăng cơ hội việc làm tại các công ty nước ngoài đang tìm kiếm nhân lực tại Việt Nam.
Tester cần có sự tỉ mỉ, chi tiết và kiên trì trong quá trình kiểm thử phần mềm Họ phải thực hiện từng bước kiểm tra một cách nhất quán, kiên nhẫn kiểm tra mọi chức năng và lặp lại quy trình kiểm thử nhiều lần để đảm bảo tính ổn định và hiệu quả của sản phẩm.
- Từ một nghề còn khá xa lạ đối với các bạn trẻ, Tester đang dần trở thành một nghề
Nhu cầu tuyển dụng Tester tại Việt Nam đang gia tăng, tạo ra cơ hội nghề nghiệp ổn định với khả năng thăng tiến rõ ràng dựa trên năng lực và thâm niên Môi trường làm việc năng động, tiếp xúc trực tiếp với khách hàng nước ngoài, cùng với mức lương thưởng hấp dẫn và ổn định, là những lợi thế nổi bật của nghề này Ngoài ra, Tester thường xuyên được cập nhật công nghệ mới, giúp nâng cao kỹ năng và giá trị bản thân trong thị trường lao động hiện nay.
CƠ SỞ LÝ THUYẾT
Tổng quan về kiểm thử phần mềm
2.1.1 Giới thiệu về kiểm thử phần mềm:
Kiểm thử phần mềm là quá trình tìm kiếm và phát hiện lỗi trong phần mềm, nhằm đảm bảo rằng sản phẩm đáp ứng đầy đủ các yêu cầu của khách hàng Hoạt động này không chỉ giúp xác minh tính chính xác của phần mềm mà còn cung cấp cái nhìn độc lập, cho phép đánh giá và hiểu rõ các rủi ro liên quan đến việc triển khai phần mềm.
- Mục tiêu của kiểm thử phần mềm:
+ Xác định chất lượng của sản phẩm
+ Ngăn chặn phòng tránh lỗi
+ Sẵn sàng tích hợp các thành phần
+ Cung cấp thông tin để ra quyết định
+ Xác minh và xác thực yêu cầu của người dùng
+ Xây dựng sự tự tin trong công việc
Hình 2 Vòng đời phát triển phần mềm
SDLC, hay Vòng đời phát triển phần mềm, là quy trình sản xuất phần mềm nhằm đảm bảo chất lượng cao nhất với chi phí thấp nhất trong thời gian ngắn nhất Quy trình này cung cấp một chu trình có cấu trúc cho từng giai đoạn, giúp tổ chức nhanh chóng phát triển sản phẩm chất lượng cao, đã qua kiểm tra và sẵn sàng triển khai cho người dùng.
+ Phân tích yêu cầu & lập kế hoạch: “Yêu cầu” là giai đoạn đầu tiên trong quá trình
Trong quy trình SDLC, nhóm phát triển thu thập yêu cầu từ các bên liên quan như khách hàng, chuyên gia và nhà quản lý để tạo ra tài liệu đặc tả yêu cầu phần mềm Giai đoạn này kết thúc với việc hoàn thiện tài liệu yêu cầu, là nền tảng cho các giai đoạn phát triển tiếp theo Đồng thời, giai đoạn lập kế hoạch giúp xác định chi phí và nguồn lực tối thiểu cần thiết để thực hiện yêu cầu sản phẩm, đồng thời cung cấp các kế hoạch dự trù nhằm giảm thiểu rủi ro có thể xảy ra.
Trong giai đoạn thiết kế, hệ thống và tài liệu thiết kế phần mềm được chuẩn bị dựa trên tài liệu đặc tả yêu cầu, giúp xác định kiến trúc tổng thể của hệ thống Kết thúc giai đoạn này, tài liệu thiết kế hoàn thành và được xem xét bởi tất cả các bên liên quan Quy trình này dựa trên nhiều yếu tố như đánh giá rủi ro, tính bền vững của phần mềm, thiết kế các mô-đun, cũng như các hạn chế về ngân sách và thời gian, từ đó lựa chọn phương pháp thiết kế tối ưu cho sản phẩm.
Giai đoạn phát triển là thời điểm mà các lập trình viên tiến hành viết mã và xây dựng ứng dụng dựa trên tài liệu thiết kế và thông số kỹ thuật đã được xác định Trong giai đoạn này, các nhiệm vụ được chia thành các mô-đun và phân bổ cho từng nhà phát triển, sử dụng ngôn ngữ lập trình và framework đã chọn.
Sau khi hoàn tất lập trình phần mềm, sản phẩm sẽ được chuyển cho các tester để thực hiện kiểm thử Các tester sẽ xây dựng các tình huống kiểm thử (test case) nhằm kiểm tra phần mềm Mục tiêu của quá trình kiểm thử là xác minh và đảm bảo rằng chất lượng sản phẩm đáp ứng đúng yêu cầu đã đề ra.
Mục tiêu của giai đoạn triển khai là đưa phần mềm vào môi trường production để người dùng có thể sử dụng Nhiều doanh nghiệp chọn triển khai phần mềm trên các môi trường khác như môi trường dàn dựng và môi trường phát triển, giúp các bên trải nghiệm sản phẩm một cách an toàn và rà soát sai sót trước khi phần mềm chính thức hoạt động.
Bảo trì phần mềm là giai đoạn quan trọng sau khi triển khai, trong đó công ty phát triển sẽ hỗ trợ và xử lý các lỗi phát sinh trong quá trình sử dụng Các hoạt động bảo trì bao gồm sửa lỗi và cập nhật phần mềm để đảm bảo hiệu suất và tính ổn định.
2.1.2 Các nguyên tắc của kiểm thử phần mềm:
Kiểm thử phần mềm giúp phát hiện và giảm thiểu lỗi, nhưng không thể đảm bảo rằng sản phẩm hoàn toàn không còn lỗi Dù đã áp dụng nhiều phương pháp kiểm thử, người dùng cuối vẫn có thể gặp phải những lỗi chưa được phát hiện trong môi trường thực Điều này cho thấy kiểm thử chỉ có thể chứng minh sự tồn tại của lỗi, chứ không thể khẳng định rằng phần mềm đã hoàn toàn hoàn hảo Vì vậy, luôn có khả năng tồn tại những lỗi không được phát hiện trong phần mềm, ngay cả khi không tìm thấy lỗi trong quá trình kiểm thử.
Kiểm thử toàn diện là điều không thể thực hiện do sự đa dạng và phức tạp của các sản phẩm phần mềm hiện nay, được phát triển trên nhiều nền tảng và công nghệ mới Việc kiểm tra toàn bộ các module và tính năng trong suốt quá trình kiểm thử gặp nhiều khó khăn, đặc biệt khi có sự gia tăng của khả năng kết nối dữ liệu lớn Thay vì cố gắng kiểm thử toàn bộ, nên xác định mức độ quan trọng và ưu tiên các module cần kiểm thử, tập trung vào những phần thiết yếu hoặc có nguy cơ cao hơn.
Kiểm thử sớm giúp phát hiện lỗi dễ dàng hơn, từ đó sửa chữa trước khi chúng trở thành những vấn đề phức tạp hơn Việc thực hiện kiểm thử ngay từ đầu không chỉ tiết kiệm thời gian mà còn giảm thiểu công sức cần thiết để tìm và khắc phục các lỗi.
Lỗi phân bố tập trung xảy ra khi các lỗi chỉ xuất hiện ở một số module nhất định của sản phẩm, không phân tán đều Khi phát hiện một bug trong một module cụ thể, cần tiến hành kiểm tra kỹ lưỡng để phát hiện các lỗi tiềm ẩn khác.
Nghịch lý thuốc trừ sâu trong kiểm thử phần mềm chỉ ra rằng việc sử dụng lặp đi lặp lại một bộ test case sẽ không còn hiệu quả trong việc phát hiện lỗi mới Để khắc phục tình trạng này, việc rà soát và cập nhật bộ test case cùng với test data là rất cần thiết Điều này bao gồm việc thay đổi hoặc thêm mới các giá trị nhập vào và kết quả mong đợi, nhằm đảm bảo rằng quá trình kiểm thử luôn hiệu quả và phát hiện được lỗi mới.
Kiểm thử cần phải dựa vào ngữ cảnh cụ thể của từng sản phẩm, vì mỗi sản phẩm có những yêu cầu riêng biệt Nhiệm vụ của người kiểm thử là xây dựng bộ Test Case phù hợp với từng ngữ cảnh Ví dụ, việc sử dụng cùng một bộ Test Case cho cả ứng dụng Website và ứng dụng Mobile là một sai lầm, do sự khác biệt lớn về giao diện, kích thước, tính tương thích, phiên bản, bộ nhớ và hành vi thao tác của người dùng Do đó, Test Case cho ứng dụng Website cần phải khác biệt so với ứng dụng Mobile, mặc dù chúng thuộc cùng một sản phẩm.
Dù tất cả lỗi trong phần mềm đã được khắc phục, thành công của sản phẩm phần mềm không chỉ dựa vào việc không còn lỗi Sản phẩm có thể không phù hợp với nhu cầu thực tế, gây khó khăn cho người sử dụng hoặc trở nên lỗi thời do quá trình phát triển kéo dài Do đó, việc cho rằng một sản phẩm không có lỗi là đồng nghĩa với thành công là quan niệm sai lầm.
- QA là người chịu trách nhiệm đảm bảo chất lượng sản phẩm thông qua việc đưa ra quy trình làm việc giữa các bên liên quan
Các loại kiểm thử phần mềm
Kiểm thử thủ công là một phương pháp kiểm thử phần mềm, trong đó người kiểm thử thực hiện các trường hợp kiểm thử mà không sử dụng công cụ tự động Mục tiêu chính của kiểm thử thủ công là phát hiện lỗi, sự cố và các vấn đề trong ứng dụng phần mềm.
+ Tester có phản hồi trực quan nhanh và chính xác
+ Ít tốn kém hơn vì chúng ta không cần phải chi ngân sách cho các công cụ và các quy trình tự động hóa
+ Có thêm khả năng phán đoán của con người
- Manual testing ít tin cậy hơn bởi nó được thực hiện bởi con người => Dễ xảy ra sai sót hơn
+ Với một số task khó thực hiện thủ công như performance testing/load testing và stress testing thì manual testing rất khó để thực hiện
+ Qúa trình thực hiện các ca kiểm thử không được ghi lại, do vậy nó không có tính tái sử dụng
Kiểm thử tự động, hay còn gọi là Test Automation, là quá trình mà tester viết kịch bản và sử dụng phần mềm để kiểm tra sản phẩm, tự động hóa các quy trình thủ công Nó cho phép chạy lại nhanh chóng và lặp đi lặp lại các kịch bản kiểm thử đã thực hiện thủ công Ngoài kiểm thử hồi quy, kiểm thử tự động còn được áp dụng để đánh giá ứng dụng từ góc độ tải, hiệu suất và căng thẳng Phương pháp này không chỉ mở rộng phạm vi kiểm tra mà còn nâng cao độ chính xác, tiết kiệm thời gian và chi phí so với kiểm tra thủ công.
+ Thời gian thực hiện kiểm thử tốn ít thời gian hơn
+ Tiết kiệm được nguồn nhân lực
+ Có khả năng tái sử dụng đối với các test case cần test lại nhiều lần
+ Đòi hỏi tester phải có kiến thức về lập trình
+ Chi phí lựa chọn công cụ tự động và viết test script cao
+ Đòi hỏi tester phải có kiến thức về lập trình
➢ Khi nào thì sử dụng Manual Testing và khi nào thì sử dụng Automation Testing? Đối với Manual testing:
Kiểm thử khám phá (Exploratory Testing) là một phương pháp kiểm thử phần mềm yêu cầu sự tương tác và đánh giá từ con người Để thực hiện loại kiểm thử này một cách hiệu quả, người kiểm thử cần sở hữu những kỹ năng cần thiết nhằm đảm bảo quá trình đánh giá diễn ra chính xác và đầy đủ.
Kiểm thử khả năng sử dụng là quá trình đánh giá độ thân thiện, hiệu quả và tiện lợi của sản phẩm đối với người dùng Yếu tố trực quan của người dùng đóng vai trò quan trọng nhất trong quá trình này, vì vậy phương pháp kiểm thử thủ công được xem là lựa chọn tối ưu để đảm bảo chất lượng trải nghiệm người dùng.
- Ad-hoc Testing: Trong kịch bản test này, không có một phương pháp cụ thể nào
Phương pháp này không yêu cầu lập kế hoạch kiểm thử mà thực hiện đánh giá phần mềm hoặc ứng dụng thông qua các thử nghiệm ngẫu nhiên Đối với kiểm thử tự động (Automation Testing), quy trình này giúp phát hiện lỗi một cách nhanh chóng và hiệu quả.
- Regression Testing: Automation testing được ưu tiên sử dụng vì các thay đổi Code thường xuyên và khả năng chạy các hồi quy một cách kịp thời
- Load Testing: Kiểm thử tự động cũng là cách tốt nhất để hoàn thành các thử nghiệm có hiệu quả khi nó đi kèm để tải thử nghiệm
- Performance Testing: Thử nghiệm mà đòi hỏi sự mô phỏng của hàng ngàn người dùng đồng thời đòi hỏi tự động hóa
Kiểm thử bảo mật (Security Testing) là một loại kiểm thử phần mềm nhằm đảm bảo rằng hệ thống và ứng dụng được bảo vệ an toàn trước các lỗ hổng, mối đe dọa và nguy hiểm có thể gây ra tổn thất nghiêm trọng.
- Mục tiêu của kiểm thử bảo mật là:
+ Để xác định các mối đe dọa trong hệ thống
+ Để đo lường các lỗ hổng tiềm ẩn của hệ thống
+ Để giúp phát hiện mọi rủi ro bảo mật có thể có trong hệ thống
- Các lĩnh vực trọng tâm chính trong kiểm tra bảo mật:
+ Bảo mật phần mềm hệ thống
+ Bảo mật ứng dụng phía khách hàng
+ Bảo mật ứng dụng phía máy chủ
- API là từ viết tắt của Giao diện lập trình ứng dụng
Kiểm tra API là phương pháp kiểm tra phần mềm tập trung vào việc đánh giá chức năng, độ tin cậy, hiệu suất và bảo mật của các API Đây là một phần quan trọng trong thử nghiệm tích hợp, giúp xác thực logic của kiến trúc bản dựng một cách hiệu quả và nhanh chóng.
Các phương pháp kiểm thử phần mềm
Static testing là phương pháp kiểm thử phần mềm không cần thực thi chương trình, mà tập trung vào việc xem xét và đánh giá mã nguồn, tài liệu, yêu cầu, thiết kế và các thành phần khác của phần mềm để phát hiện lỗi và vấn đề tiềm ẩn trong quá trình phát triển.
Kiểm thử động là phương pháp kiểm tra ứng dụng hoặc phần mềm trong quá trình thực thi, nhằm xác nhận tính chính xác của nó Quá trình này bao gồm việc tương tác với phần mềm, nhập các giá trị đầu vào và đánh giá xem đầu ra có đạt yêu cầu hay không.
2.3.3 White Box Testing & Black Box Testing & Gray Box Testing:
Hình 7 Phương pháp kiểm thử hộp trắng
Kiểm thử Hộp Trắng là phương pháp kiểm thử mà kiểm thử viên có quyền truy cập vào cấu trúc nội bộ của hệ thống hoặc phần mềm, bao gồm mã nguồn Phương pháp này cho phép kiểm thử viên kiểm tra các luồng điều khiển, cấu trúc dữ liệu và bộ nhớ của hệ thống, nhằm đảm bảo rằng các thành phần bên trong hoạt động chính xác và tương thích với nhau.
+ Giúp hệ thống tối ưu hóa các dòng lệnh một cách đơn giản
+ Giúp các tester phát hiện lỗi dễ dàng trong mỗi dòng lệnh
+ Loại bỏ nhanh chóng dòng lệnh có lỗi tiềm ẩn hoặc không quan trọng
Sau khi áp dụng phương pháp kiểm thử phần mềm này, các tester sẽ dễ dàng đạt được độ bao phủ lớn hơn trong các trường hợp kiểm thử tiếp theo.
+ Khi tìm lỗi tiềm ẩn của hệ thống, có nhiều luồng không thể kiểm tra được bằng cách kiểm tra chi tiết từng dòng lệnh
+ Tester cần có chuyên môn cao và dày dặn kinh nghiệm
Hình 8 Phương pháp kiểm thử hộp đen
Kiểm thử hộp đen là phương pháp kiểm thử phần mềm mà không yêu cầu hiểu biết về cấu trúc bên trong của phần mềm Người kiểm thử chỉ tập trung vào các đầu vào và đầu ra, nhằm đảm bảo hệ thống hoạt động như mong đợi từ góc nhìn của người dùng cuối Phương pháp này giúp người kiểm thử đánh giá hiệu suất và chức năng của hệ thống mà không cần biết chi tiết về cách triển khai nội bộ.
+ Tester không cần phải truy cập vào từng dòng lệnh
+ Hiệu quả và phù hợp với hệ thống có số lượng lớn dòng lệnh
+ Phân biệt một cách rõ ràng quan điểm của nhà phát triển và người dùng
+ Không đòi hỏi tester phải có kiến thức về ngôn ngữ lập trình khi kiểm thử phần mềm
+ Bị giới hạn bởi độ bao phủ của các trường hợp kiểm thử
+ Khó khăn trong việc thiết kế đầy đủ mọi trường hợp kiểm thử
+ Thực tế không mang lại hiệu quả cao bởi các tester bị giới hạn kiến thức về hệ thống
+ Các tester chỉ tập trung vào dòng lệnh dễ xảy ra lỗi, khó có thể kiểm tra tất cả đoạn lệnh của hệ thống
Hình 9 Phương pháp kiểm thử hộp xám
Kiểm thử hộp xám là phương pháp kết hợp giữa kiểm thử hộp trắng và hộp đen, cho phép tester tiếp cận một phần cấu trúc bên trong sản phẩm Trong quá trình này, họ có thể truy cập vào cấu trúc dữ liệu và thuật toán của chương trình để thiết kế test case, nhưng khi thực hiện kiểm thử, họ sẽ hoạt động như người dùng cuối, tương tự như kiểm thử hộp đen.
+ Là sự kết hợp của kiểm thử hộp đen và hộp trắng nên sẽ tối ưu hơn
+ Kiểm tra bằng phương pháp hộp màu xám có thể thiết kế kịch bản thử nghiệm phức tạp một cách thông minh hơn
+ Rất khó để liên kết lỗi khi thực hiện kiểm tra hộp xám cho một ứng dụng có hệ thống phân tán.
Các cấp độ của kiểm thử
Hình 10 Các cấp độ kiểm thử
Kiểm thử đơn vị là một phương pháp kiểm thử phần mềm, trong đó các thành phần riêng lẻ như hàm, lớp và phương thức được kiểm tra Thông thường, các lập trình viên sẽ thực hiện kiểm thử này Phương pháp chính được sử dụng trong giai đoạn kiểm thử đơn vị là kiểm thử hộp trắng.
Kiểm thử tích hợp là một phương pháp kiểm thử phần mềm, trong đó nhiều mô-đun của ứng dụng được kết hợp và kiểm tra tổng thể Mục tiêu chính của kiểm thử tích hợp là phát hiện lỗi ở giao diện, giao tiếp và luồng dữ liệu giữa các mô-đun.
- Một số phương pháp kiểm thử tích hợp :
Phương pháp kiểm thử Top Down là một kỹ thuật kiểm thử phần mềm diễn ra theo luồng điều khiển của hệ thống, bắt đầu từ các đơn vị cao nhất và tiến dần xuống các đơn vị cấp thấp hơn Trong quá trình này, các thành phần chính được kiểm tra trước, giúp đảm bảo rằng các chức năng quan trọng hoạt động đúng trước khi kiểm tra các chi tiết nhỏ hơn.
+ Phương pháp kiểm thử Bottom Up: Các đơn vị cấp thấp sẽ được kiểm tra trước rồi mới chuyển sang cấp đơn vị cao hơn
Phương pháp kiểm thử Hybrid/Sandwich là sự kết hợp giữa hai phương pháp Top Down và Bottom Up, cho phép kiểm thử diễn ra khi các module cấp cao được tích hợp xen kẽ với các module cấp thấp.
System Testing là giai đoạn kiểm thử cuối cùng của một hệ thống đã được tích hợp hoàn chỉnh, nhằm xác minh tính tuân thủ của hệ thống đối với các yêu cầu đã được chỉ định.
System Testing là một phương pháp kiểm thử hộp đen, tập trung vào việc đánh giá chức năng của toàn bộ hệ thống Các tester không chỉ kiểm tra chức năng mà còn xem xét giao diện và các hành vi của hệ thống liên quan đến các hoạt động bên ngoài phần mềm từ góc nhìn của người dùng Mục tiêu chính của kiểm thử hệ thống là đảm bảo rằng hệ thống đáp ứng các yêu cầu và chức năng đã được xác định trong quy trình phát triển.
- Một số phương pháp kiểm thử hệ thống:
Kiểm thử hồi quy là quá trình kiểm tra nhằm đảm bảo rằng các thay đổi trong một phiên bản phần mềm, bao gồm việc thêm mới tính năng, thay đổi hoặc sửa lỗi, không gây ảnh hưởng tiêu cực đến các tính năng khác và không tạo ra lỗi mới.
Kiểm thử phục hồi là quá trình xác minh tính đáng tin cậy của phần mềm, đảm bảo rằng nó có khả năng phục hồi hiệu quả khi xảy ra sự cố.
Kiểm thử tính khả dụng là quá trình nhằm đảm bảo hệ thống dễ sử dụng và đáp ứng đầy đủ các mục tiêu ban đầu đã đề ra.
Kiểm tra căng thẳng (stress test) là một phương pháp kiểm thử hiệu năng, trong đó hệ thống được vận hành đến giới hạn tối đa cho đến khi gặp sự cố Mục tiêu của kiểm tra này là xác định ngưỡng hoạt động của hệ thống.
Kiểm thử chịu tải là một phương pháp đánh giá khả năng hoạt động của hệ thống khi phải xử lý một lượng tải nhất định, thường liên quan đến số lượng người dùng truy cập đồng thời.
Khi nhóm kiểm thử hệ thống hoàn toàn hài lòng với sản phẩm, sản phẩm đó đã sẵn sàng để đưa vào sử dụng Giai đoạn này được thực hiện bởi khách hàng nhằm đảm bảo rằng phần mềm hoạt động đúng như mong đợi của họ.
- Có 2 loại kiểm thử chấp nhận:
Alpha Testing là giai đoạn thử nghiệm nội bộ quan trọng, diễn ra sau khi hoàn tất các thử nghiệm chấp nhận và trước khi phần mềm được đưa vào thử nghiệm beta Giai đoạn này do các nhóm phát triển trang web thực hiện nhằm đảm bảo chất lượng sản phẩm trước khi phát hành.
Beta Testing là giai đoạn thử nghiệm cuối cùng, trong đó các công ty phát hành phần mềm cho một nhóm người dùng bên ngoài, không chỉ giới hạn trong đội ngũ kiểm thử nội bộ Phiên bản phần mềm trong giai đoạn này được gọi là phiên bản beta, và hầu hết các công ty đều thu thập phản hồi từ người dùng để cải thiện sản phẩm.
Kỹ thuật thiết kế Testcase
2.5.1 Thiết kế dựa trên đặc điểm kỹ thuật:
Hình 11 Kỹ thuật phân vùng tương đương
Phân vùng tương đương là một kỹ thuật phân loại đầu vào thành các nhóm dựa trên logic nhất định Người kiểm tra sẽ chọn một đầu vào từ mỗi phân vùng để thiết kế và thực hiện các trường hợp kiểm tra Nếu đầu vào được chọn hợp lệ hoặc không hợp lệ, thì toàn bộ phân vùng đó cũng sẽ được coi là hợp lệ hoặc không hợp lệ.
● Phân tích giá trị biên:
Hình 12 Kỹ thuật phân tích giá trị biên
Phân tích giá trị biên là một phương pháp quan trọng trong việc phát hiện lỗi tại các giá trị biên Các trường hợp thử nghiệm được thiết kế dựa trên các giá trị biên của phân vùng tương đương Khi đầu vào nằm trong giá trị biên, trường hợp thử nghiệm sẽ được coi là kiểm thử tích cực Ngược lại, nếu đầu vào nằm ngoài giá trị biên, thì đó sẽ là thử nghiệm tiêu cực.
Hình 13 Kỹ thuật kiểm tra bảng quyết định
Bảng quyết định là một kỹ thuật kiểm tra quan trọng, giúp người kiểm tra đánh giá đầu ra bằng cách kết hợp các đầu vào khác nhau Nó trình bày các điều kiện đầu vào và các hành động hoặc đầu ra tương ứng, từ đó hỗ trợ xây dựng logic phần mềm hiệu quả dựa trên bảng quyết định.
● Kiểm tra chuyển đổi trạng thái:
Hình 14 Kỹ thuật kiểm tra chuyển đổi trạng thái
Khi áp dụng kỹ thuật chuyển đổi trạng thái, người kiểm tra phải phân tích phần mềm theo một trình tự cụ thể, tương ứng với thứ tự chuyển đổi trạng thái trong sơ đồ Kỹ thuật này giúp kiểm tra khả năng nhập, thoát và chuyển đổi trạng thái của phần mềm một cách hiệu quả.
2.5.2 Thiết kế dựa trên kinh nghiệm:
Đoán lỗi là một kỹ thuật kiểm thử phần mềm dựa trên kinh nghiệm, cho phép tester đưa ra phỏng đoán có căn cứ về các lỗi tiềm ẩn trong phần mềm Kỹ thuật này yêu cầu tester phải có năng khiếu và kinh nghiệm để thực hiện hiệu quả.
Thử nghiệm thăm dò là một phương pháp kiểm tra kỹ thuật không yêu cầu chuẩn hóa hay lịch trình cố định Trong quá trình kiểm thử khám phá, người kiểm tra thực hiện đồng thời việc phân tích phần mềm, thiết kế và thực hiện kiểm thử Hơn nữa, công tác lập kế hoạch và ghi chép kết quả cũng diễn ra một cách linh hoạt trong suốt quá trình kiểm tra.
Bug và vòng đời của Bug
Bug là những lỗi phần mềm trong chương trình và hệ thống máy tính, dẫn đến việc kết quả không chính xác hoặc hoạt động không đạt yêu cầu.
Bug Life Cycle là chu trình bao gồm các trạng thái mà một Bug trải qua từ khi phát hiện cho đến khi được khắc phục Mục đích của việc thiết lập quy trình này là giúp các cá nhân chịu trách nhiệm dễ dàng quản lý và theo dõi trạng thái của Bug cho đến khi nó được loại bỏ hoàn toàn khỏi hệ thống.
Khi tester thực hiện kiểm thử, nếu gặp bất kỳ trường hợp nào không đạt kết quả mong đợi, họ sẽ ghi lại lỗi Lỗi được ghi lại sẽ có trạng thái ban đầu là "New".
• Assigned: Một khi bug đã được đăng bởi tester thì test leader sẽ phê duyệt lỗi và chuyển giao lỗi cho nhóm phát triển
Khi một lỗi được ghi nhận bởi tester, đội phát triển sẽ tiến hành kiểm tra và phân tích để xác định tính chính xác của lỗi đó Tại giai đoạn này, lỗi sẽ có trạng thái là "Open".
Khi Developer đã hoàn tất việc sửa lỗi và xác nhận rằng vấn đề đã được khắc phục, bug sẽ được chuyển sang trạng thái "Fixed/Đã sửa".
Sau khi sửa lỗi, nhà phát triển bàn giao lại bug cho đội kiểm thử Do quá trình kiểm tra vẫn đang diễn ra, trạng thái của bug được xác định là "đang chờ kiểm tra lại" hoặc "kiểm tra lại đang chờ xử lý".
• Retest: Sau khi fix bug xong , các tính năng và chức năng đã sẵn sàng hoạt động
Tester sẽ tiến hành kiểm tra lại, thực hiện các test case lỗi để xem bug đó đã được sửa hay chưa
Sau khi thực hiện kiểm tra, nếu không phát hiện lỗi nào trong phần mềm, lỗi đó sẽ được coi là đã được sửa và trạng thái sẽ được ghi nhận là "Verified".
• Reopen: Bug vẫn tồn tại sau khi developer fix thì lúc này tester sẽ chuyển trạng thái thành Reopen
Sau khi lỗi được khắc phục, tester xác nhận rằng bug đã được sửa thành công và không còn xuất hiện trong ứng dụng Lúc này, phần mềm sẽ được chuyển sang trạng thái "closed", có nghĩa là bug đã được sửa chữa và đang chờ kiểm tra cũng như phê duyệt.
Sau khi ghi nhận lỗi, Test Leader sẽ kiểm tra xem lỗi đó có bị lặp lại nhiều lần hay không, hoặc có hai lỗi khác nhau nhưng phản ánh cùng một vấn đề Trong trường hợp này, lỗi sẽ được đánh dấu là Duplicate Điều này có thể xảy ra khi cùng một lỗi được ghi nhận bởi hai tester khác nhau, thường do cùng một module hoặc phần mềm được kiểm thử bởi nhiều tester.
• Rejected: Nếu Developer nhận thấy rằng đó không phải là bug do có thể tester hiểu sai về chức năng thì sẽ chuyển trạng thái về Rejected
Nếu một lỗi (bug) hoàn toàn chính xác nhưng không nằm trong phạm vi phát hành hiện tại, hoặc nếu lỗi đó có mức độ nghiêm trọng thấp và thời gian phát hành đang gấp rút, thì có thể để lại và sửa chữa sau Những lỗi như vậy sẽ được đánh dấu là “Deferred”.
• Not a bug: Nếu nó không ảnh hưởng đến chức năng của ứng dụng thì trạng thái được gán cho lỗi là “Not a bug”.
Tổng quan về Python
Python là một ngôn ngữ lập trình mạnh mẽ, hướng đối tượng và cấp cao, được phát triển bởi Guido van Rossum Với cấu trúc dữ liệu tiên tiến và phương pháp lập trình đơn giản nhưng hiệu quả, Python trở thành lựa chọn phổ biến cho nhiều lập trình viên.
- Phát triển Web : Python được sử dụng để xây dựng các ứng dụng web và trang web thông qua các framework như Django và Flask
Python là ngôn ngữ phổ biến trong khoa học dữ liệu và máy học, nhờ vào các thư viện mạnh mẽ như NumPy, Pandas, Matplotlib và Scikit-learn.
Tự động hóa kiểm thử phần mềm là một quy trình quan trọng, trong đó các nhà phát triển sử dụng các khung kiểm thử đơn vị Python như Unittest, Robot và PyUnit để kiểm tra các hàm mà họ đã viết Việc áp dụng các công cụ này giúp nâng cao hiệu quả và độ chính xác trong quá trình phát triển phần mềm.
Python là ngôn ngữ lập trình phổ biến cho phân tích dữ liệu nhờ vào các thư viện mạnh mẽ như NumPy và Pandas Những thư viện này giúp đơn giản hóa các tác vụ phân tích và dọn dẹp dữ liệu, ngay cả khi làm việc với các bộ dữ liệu lớn.
Python đang ngày càng được ưa chuộng trong phát triển phần mềm ERP, cung cấp giải pháp hiệu quả cho doanh nghiệp Nhiều hệ thống ERP nổi bật như Odoo và Tryton đã giúp các doanh nghiệp, từ nhỏ đến lớn, quản lý toàn bộ hoạt động và hàng tồn kho một cách hiệu quả.
- Ngoài ra,Python còn được sử dụng trong nhiều lĩnh vực khác nhau do tính linh hoạt và cộng đồng phát triển rộng lớn.
Tổng quan về Selenium
Hình 16 Công cụ kiểm thử Selenium
Selenium là một bộ công cụ kiểm thử tự động miễn phí và mã nguồn mở, được thiết kế cho các ứng dụng web và tương thích với nhiều trình duyệt trên các nền tảng khác nhau như Mac, Linux và Windows Nó không chỉ hoạt động như một công cụ độc lập mà còn là một bộ công cụ phần mềm đa dạng, đáp ứng các nhu cầu kiểm thử khác nhau của tổ chức.
+ Selenium Integrated Development Environment ( IDE)
2.8.2 Ưu điểm và nhược điểm của Selenium:
- Selenium là một công cụ mã nguồn mở
- Có thể mở rộng cho rất nhiều các công nghệ khác nhau
Selenium hỗ trợ nhiều ngôn ngữ lập trình như Java, Python và C#, cho phép các nhà phát triển viết kịch bản kiểm thử bằng ngôn ngữ mà họ ưa thích.
Selenium có khả năng tích hợp với nhiều công cụ kiểm thử và khung thực thi như TestNG, JUnit, cùng nhiều công cụ khác, từ đó nâng cao hiệu quả của quy trình tự động hóa kiểm thử.
- Chỉ hỗ trợ các ứng dụng trên web
- Không thể kiểm thử các ứng dụng dành cho thiết bị di động, máy tính để bàn
- Người kiểm thử cần có kỹ năng và kinh nghiệm lập trình tốt để thiết lập và tích hợp Selenium với các công cụ và framework khác
- Mất thời gian thiết lập và tích hợp các framework khác khi build dự án mới.
TRIỂN KHAI KIỂM THỬ
Tổng quan về website Guru99 Bank
3.1.1 Giới thiệu về website Guru99 Bank:
Trang web Guru99 Bank được thiết kế nhằm tạo ra một môi trường lý tưởng cho việc thử nghiệm và học tập về quy trình kiểm thử phần mềm, đặc biệt tập trung vào các khía cạnh liên quan đến ứng dụng ngân hàng.
Trang web https://www.demo.guru99.com/V4/ cung cấp một môi trường ảo cho phép người dùng thực hiện kiểm thử phần mềm trên giao diện ngân hàng ảo Người dùng có thể tương tác với các chức năng quan trọng như quản lý tài khoản, chuyển khoản và kiểm tra lịch sử giao dịch, giúp họ thực hành và nâng cao kỹ năng kiểm thử.
- Giao diện của website Guru99 Bank:
Link website: https://www.demo.guru99.com/V4/
Hình 17 Màn hình đăng nhập website Guru99 Bank
Hình 18 Màn hình trang chủ của website Guru99 Bank 3.1.2 Đặc tả chức năng:
- Tác nhân: Người sử dụng: Người sử dụng đã có tài khoản trong hệ thống Guru99
- Mục đích: Đăng nhập vào tài khoản người dùng để truy cập các tính năng khác của hệ thống
+ Người dùng đã có tài khoản đăng nhập trên hệ thống
+ Đã cung cấp đúng thông tin đăng nhập (tên người dùng và mật khẩu)
- Luồng sự kiện chính - Đăng nhập thành công:
✓ Người dùng truy cập trang đăng nhập trên trang web Guru99 Bank
✓ Trang đăng nhập hiển thị các trường dữ liệu: "UserID" và "Password"
✓ Người dùng nhập UserID và Password đúng sau đó nhấn nút "Login"
✓ Hệ thống xác minh thông tin đăng nhập:
✓ Hệ thống đưa người dùng vào trang chính của tài khoản, hiển thị thông tin tài khoản và các dịch vụ liên quan
- Luồng thay thế - Đăng nhập với thông tin sai:
✓ Người dùng truy cập trang đăng nhập trên trang web Guru99 Bank
✓ Trang đăng nhập hiển thị các trường dữ liệu: "UserID" và "Password"
✓ Người dùng nhập tên đăng nhập và mật khẩu không chính xác sau đó nhấn nút "Đăng nhập"
✓ Hệ thống xác minh thông tin đăng nhập
✓ Thông tin sai: Hiển thị thông báo lỗi: "User or password is not valid."
❖ Chức năng “Add New Customer”:
- Tác nhân: Người dùng: Người sử dụng có quyền truy cập và thực hiện chức năng tạo khách hàng mới
- Mục đích: Thêm một khách hàng mới vào hệ thống
+ Người dùng đã đăng nhập vào tài khoản
- Luồng sự kiện chính - Tạo mới khách hàng thành công:
✓ Người dùng truy cập trang quản lý khách hàng trên trang web Guru99 Bank
✓ Trang quản lý khách hàng hiển thị các tùy chọn, bao gồm "Add New Customer"
✓ Người dùng chọn tùy chọn "Add New Customer"
✓ Trang tạo khách hàng mới hiển thị các trường nhập liệu: "Customer Name",”Gender","Date of Birth","Address","City","State","PIN","Mobile Number","E-mail" và "Password"
✓ Người dùng điền thông tin cần thiết cho khách hàng sau đó nhấn nút
✓ Hệ thống xác minh thông tin và tạo khách hàng mới:
✓ Nếu thông tin hợp lệ: Hệ thống thông báo thành công và hiển thị thông tin về khách hàng vừa được tạo
✓ Nếu thông tin không hợp lệ: Hiển thị thông báo lỗi về các trường thông tin sai hoặc thiếu.
Thiết kế Test case
Link Excel thiết kế Test Case chức năng “Login” và “Add New Customer” : https://docs.google.com/spreadsheets/d/1FaGlepKqsmOcaqdZZYaWFN9x2XjCi3chtPtd DyHmnk0/edit?usp=sharing
3.2.1 Test Case chức năng “Login”
Hình 19 Test Case chức năng "Login" (1)
Hình 20 Test Case chức năng "Login" (2) 3.2.2 Test Case chức năng “Add New Customer”
Hình 21 Test case chức năng “Add New Customer”(1)
Hình 22 Test case chức năng “Add New Customer” (2)
Hình 23 Test case chức năng "Add New Customer" (3)
Hình 24 Test case chức năng "Add New Customer" (4)
Automation Testing
❖ Test Case cho chức năng “Login”
Hình 25 Login unsuccessful by blank 1 of fields
Hình 26 Login Unsuccessful by UserID
Hình 27 Login Unsuccessful by Password
Hình 28 Login unsuccessful by UserID and Password
❖ Test Case cho chức năng “Add New Customer”
Hình 30 Add New Customer unsuccessful by blank field
Hình 31 Add New Customer unsuccessful when PIN less than 6 Digits
Hình 32 Add New Customer unsuccessful with Email Already Exist
Hình 33 Add New Customer Successful
Kết quả
Hình 34 Kết quả Test Case “Login unsuccessful by blank fields”
Hình 35 Kết quả Test Case “Login unsuccessful by UserID”
Hình 36 Kết quả Test Case “Login unsuccessful by Password ”
Hình 37 Kết quả Test Case “Login unsuccessful by UserID and Password”
Hình 38 Kết quả Test Case “Login Successful”
Hình 39 Kết quả Test Case“Add New Customer unsuccessful by blank field”
Hình 40 Kết quả Test Case “Add New Customer unsuccessful when PIN less than 6 digits”
Hình 41 Kết quả Test Case “Add New Customer unsuccessful with Email Already
Hình 42 Kết quả Test Case "Add New Customer Successful"
Báo cáo kiểm thử
Hình 44 Chức năng "Add New Customer"
KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN
- Nắm được kiến thức về kiểm thử phần mềm
- Hiểu được quy trình kiểm thử và phân biệt được các loại kiểm thử,các cấp độ kiểm thử phần mềm
- Nắm được kiến thức cơ bản về thư viện Selenium
- Áp dụng được những kiến thức đã được học tập vào kiểm thử chức năng trên Web
2 Những vấn đề còn tồn tại và hướng phát triển:
❖ Vấn đề còn tồn tại
Kiến thức về kiểm thử tự động và việc áp dụng thư viện Selenium có thể khá phức tạp, đặc biệt là khi thời gian thực tập hạn chế, dẫn đến việc chưa thể hiểu sâu và thực hành nhiều hơn trong lĩnh vực này.
- Chưa thực hiện đầy đủ các trường hợp thử nghiệm để đảm bảo độ bao phủ
- Vẫn còn nhiều lỗi trong quá trình thực hiện các bài kiểm thử
- Học thêm một số ngôn ngữ lập trình như Python,Java để phát triển bản thân
- Tìm hiểu thêm một số công cụ kiểm thử khác.