TỔNG QUAN VỀ CÔNG TY TMA SOLUTIONS BÌNH ĐỊNH
Giới thiệu tổng quát về doanh nghiệp thực tập
1.1.1 Tổng quan về doanh nghiệp Được thành lập năm 1997, TMA là tập đoàn công nghệ hàng đầu Việt Nam với
TMA hiện có 4000 kỹ sư và phục vụ khách hàng là các tập đoàn công nghệ cao hàng đầu từ 30 quốc gia Công ty có 7 chi nhánh tại Việt Nam, trong đó 6 chi nhánh ở TP.HCM và 1 ở TP Quy Nhơn, cùng với 6 chi nhánh quốc tế tại Mỹ, Úc, Canada, Đức, Nhật Bản và Singapore.
Tháng 6 năm 2018, TMA đã mở chi nhánh tại Bình Định Sau 4 năm, TMA Bình Định đã phát triển nhanh chóng với hơn 400 kỹ sư, trong đó có nhiều kỹ sư đang làm việc tại TP.HCM đã trở về làm việc tại quê hương.
Tháng 8 năm 2018, TMA đã 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 10 hecta tại Thung lũng Sáng tạo Quy Nhơn (Quy Nhon Innovation Park – QNIVY) với vốn đầu tư hàng trăm tỷ đồng.
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, đặt mục tiêu 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 Quy Nhơn thành điểm đến công nghệ 4.0 tại Việt Nam, Công viên Sáng tạo TMA 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 vượt quá 15,000m2.
Tài chính, Ngân hàng & Bảo hiểm:
● Quản lý tài sản (Wealth management, asset management)
● Thị trường vốn (Capital market)
● Quản lý vốn (Fund management)
● Quản lý đầu tư (Investment management)
● Thanh toán di động (Mobile payment)
● Phân tích tài chính (Financial analysis)
● Tài chính doanh nghiệp (Corporate finance)
● Quy trình bảo hiểm (Insurance process and workflow)
● Hỗ trợ bán bảo hiểm (Insurance sale support)
● Đào tạo bảo hiểm (Insurance agent training)
Thương mại điện tử & Phân phối:
● Tư vấn, thiết kế, phát triển và triển khai hệ thống phần mềm trọn gói về thương mại điện tử
● Quản lý phân phối sản phẩm
● Phân tích hành vi khách hàng
● Phân tích thông tin bệnh nhân và sử dụng thuốc
● Hệ thống thông tin y tế
● Quản lý và phân tích dịch bệnh
● Hồ sơ y tế điện tử
● Hỗ trợ chẩn đoán lâm sàng
● Theo dõi sức khỏe người già 24/24
● Quản lý người cách ly tại nhà
● Phân tích hành vi học online
● Phân tích năng lực học sinh
● Quản lý và điểm danh tự động
● Các ứng dụng quản lý mạng
● Website dịch vụ khách sạn và du lịch
● Phần mềm dịch vụ khách sạn
● Quản lý khách sạn tự động
Hình 1 1 Sơ Đồ Cơ Cấu Tổ Chức Công Ty
● Board of Advisors: Cố vấn cho công ty.
● CEO: Giám đốc điều hành của công ty.
● Delivery Centers: Trung tâm chuyển giao sản phẩm cho khách hàng.
TMA Mobile Solutions (TMS) chuyên phát triển ứng dụng di động và thử nghiệm, cung cấp các dịch vụ điện thoại di động và giá trị gia tăng cho các nhà khai thác di động Công ty tập trung vào việc tạo ra các ứng dụng chất lượng cao, hỗ trợ cung cấp nội dung và dịch vụ cho doanh nghiệp.
● ICT R&D Center (iRDC - Information and Communications Technology Research
& Development Center): Trung tâm nghiên cứu và phát triển công nghệ thông tin và truyền thông.
● TMA Training Center (TTC): Trung tâm đào tạo nhân lực.
● Student Development Center (SDC): Có nhiệm vụ liên kết với sinh viên, nhận sinh viên thực tập tại công ty nhằm thu hút và bồi dưỡng nhân tài.
Phát triển kinh doanh là việc nâng cao mối quan hệ với khách hàng hiện tại và mở rộng kết nối với các khách hàng tiềm năng từ các thị trường như Mỹ, Úc, Canada, Đức, Nhật Bản và Singapore.
● Business Departments: Bộ phận hỗ trợ (HR/Admin, IT/ Security, )
Cung cấp đầy đủ gói bảo hiểm y tế (BHYT) và bảo hiểm xã hội (BHXH) cho nhân viên, chương trình bảo hiểm chăm sóc sức khỏe toàn diện với mức bảo hiểm cao giúp nhân viên dễ dàng tiếp cận khám chữa bệnh và sử dụng dịch vụ y tế chất lượng tại các bệnh viện uy tín.
Chính sách cho vay tiền không lãi suất, không thế chấp để chia sẻ với nhân viên nỗi lo về tài chính.
Quỹ Team building hỗ trợ các hoạt động ngoại khóa hàng năm cho nhân viên.
Quỹ khen thưởng hàng Quý (TMA Quarterly Star Performer) cho nhân viên xuất sắc lên đến 1 tỷ đồng/năm.
Tổng quan về vị trí việc làm
1.2.1 Yêu cầu về kiến thức và kĩ năng
● Kỹ năng làm việc nhóm
Một Tester cần có kiến thức vững về các ngôn ngữ lập trình như Java, C++, AutoIT, và Python Ngoài ra, việc hiểu biết về Database/SQL và các lệnh Linux là cần thiết để xử lý hiệu quả các dự án có khối lượng dữ liệu lớn.
Understanding specialized knowledge and effective use of support tools is crucial in the industry Key tools include Test Management systems, Defect Tracking software, and Automation Tools/Frameworks such as TestComplete, Ranorex, Selenium, and JMeter.
1.2.2 Công việc của một Tester
Là những chuyên gia kiểm tra chất lượng phần mềm, nhiệm vụ của chúng tôi là phát hiện lỗi, sai sót và các vấn đề tiềm ẩn có thể ảnh hưởng đến chất lượng sản phẩm phần mềm.
Trực tiếp thẩm định, xác minh xem hệ thống phần mềm này có đáp ứng các yêu cầu kỹ thuật và yêu cầu nghiệp vụ hay không.
Hoàn thiện sản phẩm nhằm đáp ứng tối đa những yêu cầu đặt ra của khách hàng cả về mặt số lượng lẫn chất lượng.
Bắt đầu từ việc trở thành Junior Tester sau đó dần phát triển thành Senior Tester, sau đó có thể phát triển theo 3 hướng:
Hướng quản lý — Test Manager/Test Lead
Hướng kỹ thuật — Test Automation Engineer
Hướng quản lý sản phẩm — Business Analyst, PM
CƠ SỞ LÝ THUYẾT
Tổng quan về kiểm thử phần mềm
2.1.1 Khái niệm kiểm thử phần mềm
Kiểm thử phần mềm là quá trình gồm nhiều hoạt động nhằm phát hiện lỗi và đánh giá chất lượng của hệ thống Điều này được thực hiện thông qua việc thực hiện các bài kiểm tra và các hoạt động khác, đảm bảo tuân thủ vòng đời phát triển phần mềm.
Kiểm thử phần mềm không chỉ nhằm phát hiện và xác nhận các chức năng hoạt động đúng mà còn đảm bảo rằng tài liệu, đặc tả và phần mềm đáp ứng đầy đủ yêu cầu của khách hàng và phù hợp với người dùng.
2.1.2 Vai trò của kiểm thử phần mềm
Kiểm thử phần mềm là một bước quan trọng vì con người thường mắc sai lầm Mặc dù một số lỗi có thể không nghiêm trọng, nhưng nhiều lỗi khác lại có thể gây thiệt hại lớn Do đó, việc kiểm tra kỹ lưỡng mọi sản phẩm là cần thiết để phát hiện và khắc phục các sai sót tiềm ẩn.
Kiểm thử phần mềm là một bước quan trọng để phát hiện các khiếm khuyết và lỗi trong quá trình phát triển Điều này không chỉ giúp xây dựng lòng tin của khách hàng vào tổ chức mà còn duy trì sự hài lòng của họ với ứng dụng Đảm bảo rằng ứng dụng hoạt động ổn định là cần thiết, vì bất kỳ lỗi nào phát sinh sau này có thể dẫn đến chi phí cao và ảnh hưởng đến các giai đoạn phát triển tiếp theo.
2.1.3 Mục tiêu của kiểm thử phần mềm
Mục tiêu của kiểm thử phần mềm rất đa dạng và phụ thuộc theo từng ngữ cảnh:
Tìm ra được lỗi trong phần mềm và khiến lỗi xảy ra trong phần mềm.
Giảm thiểu được mức độ rủi ro khi tạo ra một sản phẩm phần mềm kém chất lượng.
Xác định được rằng các component đã được test hoàn toàn và đã hoạt động đúng với mong đợi của khách hàng.
Xác thực rằng các yêu cầu kỹ thuật của hệ thống đã được bao quát và đã có đầy đủ trong hệ thống.
Đánh giá và cải thiện các nguồn thông tin khác như yêu cầu, user story, thiết kế hệ thống hay là code.
2.1.4 7 nguyên tắc trong kiểm thử phần mềm
Kiểm tra chỉ cho thấy sự hiện diện của các khiếm khuyết.
Kiểm thử toàn bộ là điều không thể.
Lỗi thường được phân bố tập trung.
Nghịch lý thuốc trừ sâu (Test lặp lại nhiều).
Kiểm thử phụ thuộc vào nhiều ngữ cảnh.
Sai lầm về 1 phần mềm hoàn toàn sạch lỗi.
Phân biệt Error, Bug, Fault, Failure
Error: Lỗi là hành động của con người tạo ra kết quả không chính xác dẫn đến lỗi.
Fault = Bug: Sự hiện diện của lỗi tại thời điểm thực thi phần mềm, khiến cho chức năng hay phần mềm không hoạt động được như mong đợi.
Failure: Kết quả chênh lệch giữa thực tế và mong đợi
Phân biệt Verification và Validation
a Verification: Đảm bảo quá trình thiết kế sản phẩm đi đúng hướng để cung cấp tất cả các chức năng cho khách hàng.
Quá trình xác minh diễn ra ngay từ giai đoạn đầu của phát triển, bao gồm việc đánh giá và tổ chức các cuộc họp, xem xét tài liệu, kiểm tra mã, yêu cầu và thông số kỹ thuật để đảm bảo tính chính xác và đầy đủ của dự án.
Xác minh trả lời câu hỏi: Chúng ta có đang làm sản phẩm đúng hướng không? b Validation:
Xác định xem kết quả phần mềm cuối có phù hợp, đúng với yêu cầu và mong đợi của khách hàng hay không?
Việc xác thực được thực hiện ở cuối quá trình phát triển và diễn ra sau khi hoàn tất xác minh.
Xác nhận: Sản phẩm chúng ta làm có phù hợp không?
Phân biệt QA và QC
a QA (Quality Assurance): là quá trình đánh giá và đảm bảo rằng sẽ đạt được kết quả đã đề ra.
Mục tiêu của QA là phòng tránh gặp lỗi
QA không thực hiện việc chạy thử phần mềm
QA đảm bảo rằng các hoạt động của chúng ta được thực hiện đúng cách, trong khi QC (Kiểm soát chất lượng) là quy trình xác nhận rằng hệ thống đã đáp ứng được các yêu cầu đã đặt ra.
Mục tiêu của QC là tìm ra được lỗi và cải thiện hệ thống từ các lỗi đó
QC luôn luôn chạy thử phần mềm
QC đảm bảo cho kết quả chúng ta đang làm đúng.
Software Development Process
Giai đoạn phân tích và thu thập yêu cầu là quá trình thảo luận với khách hàng để hiểu rõ những yêu cầu và mong muốn của họ đối với hệ thống Sau đó, chúng tôi sẽ đánh giá và đưa ra những góp ý phù hợp nhằm hoàn thiện các yêu cầu đó.
Sau khi thu thập đầy đủ thông tin và yêu cầu về hệ thống, bước tiếp theo là lập kế hoạch triển khai dự án Điều này bao gồm việc phân chia công việc và xác định vai trò cho từng thành viên trong nhóm, cũng như xây dựng timeline cụ thể cho từng phần của dự án.
Thiết kế sản phẩm bắt đầu từ việc hiểu rõ yêu cầu của khách hàng, từ đó xây dựng cấu trúc và chức năng phần mềm một cách hợp lý và phù hợp nhất với mong muốn của họ Đồng thời, cần đảm bảo rằng người dùng có thể dễ dàng sử dụng sản phẩm.
Implementation: Giai đoạn tiến hành coding sản phẩm
Testing: Sau khi có sản phẩm thì tiến hành giai đoạn kiểm thử để đảm bảo rằng các mục tiêu ban đầu sẽ được thực hiện đầy đủ
Deployment: Kiểm thử hoàn tất sẽ tiến hành bàn giao cho khách hàng và sau đó nếu có vấn đề sẽ thực hiện bảo trì cho sản phẩm.
Software Testing Type
Kiểm thử thủ công là phương pháp kiểm tra phần mềm mà không sử dụng bất kỳ phần mềm tự động hoặc script nào Trong loại kiểm thử này, người tester đóng vai trò như người dùng cuối để phát hiện lỗi hoặc kết quả không đúng mong đợi Manual testing được áp dụng qua nhiều giai đoạn, bao gồm kiểm thử đơn vị (Unit Testing), kiểm thử tích hợp (Integration Testing), kiểm thử hệ thống (System Testing) và kiểm thử chấp nhận người dùng (User Acceptance Testing).
Kiểm thử tự động là phương pháp kiểm thử trái ngược với kiểm thử thủ công, trong đó người kiểm thử sử dụng các script hoặc phần mềm hỗ trợ để thực hiện quá trình kiểm thử Phương pháp này giúp thực hiện nhanh chóng và hiệu quả các trường hợp kiểm thử lặp đi lặp lại, tiết kiệm thời gian và nguồn lực.
Kiểm thử bảo mật là quá trình nhằm phát hiện các mối nguy tiềm ẩn, lỗ hổng và điểm yếu trong phần mềm, từ đó ngăn chặn các cuộc tấn công có thể xảy ra nhằm trục lợi.
Mục tiêu chính của Kiểm thử Bảo mật là xác định và kiểm soát các mối nguy hiểm, nhằm ngăn chặn sự cố và đảm bảo hệ thống hoạt động ổn định Ngoài ra, nó còn giúp phát hiện các lỗ hổng bảo mật và hỗ trợ lập trình viên sửa lỗi thông qua mã nguồn.
Kiểm thử API là quá trình xác minh tầng giao diện chính của phần mềm, nhằm kiểm tra các chức năng, độ tin cậy và bảo mật của giao diện Thay vì nhập dữ liệu từ bàn phím và chờ đợi phản hồi, kiểm thử API sử dụng phần mềm để gửi thông tin tới tầng API và nhận dữ liệu trả về.
Software Testing Methodologies
Static Testing là kỹ thuật kiểm thử giúp phát hiện lỗi mà không cần thực thi chương trình Phương pháp này nhằm ngăn chặn lỗi ngay từ giai đoạn đầu của phát triển phần mềm, từ đó làm cho việc phát hiện và xử lý lỗi trở nên dễ dàng hơn.
Hầu hết các thành phần và giai đoạn trong quy trình phát triển phần mềm đều có thể áp dụng kiểm thử tĩnh, bao gồm tài liệu đặc tả, mã nguồn, kế hoạch kiểm thử và các trường hợp kiểm thử.
Kiểm thử hành vi phần mềm là phương thức kiểm tra nhằm đánh giá cách thức hoạt động của hệ thống với các đầu vào khác nhau Mục tiêu chính là phát hiện điểm yếu hoặc thiếu sót trong quá trình hoạt động của phần mềm Điều này đảm bảo rằng phần mềm hoạt động chính xác và không có lỗi sau khi hoàn thành.
Kiểm thử hộp trắng, hay còn gọi là kiểm tra thủy tinh hoặc kiểm tra hộp mở, là quá trình kiểm tra chi tiết về logic và cấu trúc bên trong của mã.
Người kiểm tra cần biết hoạt động bên trong của mã nguồn và tìm ra đơn vị/đoạn mã nào đang hoạt động không phù hợp.
Kiểm thử hộp đen là một kỹ thuật kiểm thử phần mềm mà người kiểm thử không cần quan tâm đến hoạt động bên trong của hệ thống Trong phương pháp này, người kiểm thử không biết kiến trúc hệ thống và không cần quyền truy cập vào mã nguồn, tập trung vào việc kiểm tra chức năng của phần mềm dựa trên yêu cầu và đặc tả.
Trong quá trình kiểm tra hộp đen, người kiểm tra tương tác với giao diện người dùng của hệ thống bằng cách cung cấp đầu vào và kiểm tra đầu ra mà không cần biết cách thức thực hiện đầu vào.
Kỹ thuật kiểm thử Grey Box là phương pháp mà người kiểm thử sử dụng kiến thức về cấu trúc và hoạt động của mã nguồn để kiểm tra phần mềm Đây là sự kết hợp giữa kiểm thử Black Box và White Box, nhằm phát hiện và xác định các lỗi do mã không chính xác hoặc sai lệch trong cấu trúc phần mềm.
Software Testing Levels
Kiểm thử đơn vị (Unit Testing) là phương pháp kiểm thử phần mềm tập trung vào việc kiểm tra một thành phần hoặc chức năng cụ thể trong hệ thống một cách độc lập Mục tiêu của kiểm thử đơn vị là xác minh tính chính xác của mã nguồn đối với yêu cầu thiết kế Thường được thực hiện trong giai đoạn lập trình, kiểm thử này chủ yếu do các lập trình viên (DEV) thực hiện.
Kiểm thử phần mềm là quá trình đánh giá sự tương tác và giao diện giữa nhiều thành phần và chức năng khác nhau Mục tiêu chính của kiểm thử này là phát hiện lỗi có thể xảy ra khi hai hoặc nhiều chức năng hoạt động đồng thời.
Kiểm thử xác minh toàn bộ hệ thống phần mềm là quá trình đánh giá và kiểm tra toàn diện theo đặc tả ban đầu Mục tiêu chính là đảm bảo phần mềm hoạt động mượt mà trên nhiều nền tảng và thiết bị khác nhau.
Kiểm thử chấp nhận là quá trình xác thực phần mềm nhằm đảm bảo rằng sản phẩm đã đáp ứng đầy đủ yêu cầu của khách hàng Quá trình này nên được thực hiện bởi người dùng cuối để đảm bảo tính chính xác và khả năng sử dụng của phần mềm.
PHÂN TÍCH HỆ THỐNG DEMO GURU99 BANK
Tổng quan về hệ thống
Trang web Demo Guru99 Bank được phát triển như một nền tảng thực nghiệm cho khóa học của Guru99, cho phép người dùng giả định vai trò quản lý ngân hàng Chức năng chính của nó là quản lý thông tin khách hàng và tài khoản ngân hàng, phục vụ cho những người học về kiểm thử phần mềm cần một môi trường để thực hành.
Các chức năng chính của Website Demo Guru99 Bank
Quản lý thông tin Khách Hàng: New, Edit, Delete Customer
Quản lý thông tin Tài Khoản: New, Edit, Delete Account
Quản lý tiền trong Tài Khoản:
+Balance Enquiry, Mini statement, Customised Statement
Mô Tả Người Dùng: Hệ thống có người dùng là Manager (Admin)
Login Người dùng sử dụng tài khoản để đăng nhập vào hệ thống
Website Demo Guru99 Bank New Customer Người dùng thêm thông tin một khách hàng mới vào hệ thống
Edit Customer Người dùng sửa thông tin của 1 khách hàng đã tồn tại (Địa chỉ, email, PIN, SĐT)
Delete Customer Người dùng xóa thông tin của 1 khách hàng ra khỏi hệ thống chỉ khi khách không có tài khoản tiết kiệm đang hoạt động
Người dùng tạo tài khoản cho khách hàng, 1 khách hàng có thể có nhiều tài khoản như mong muốn, có 2 loại tài khoản là Saving và Current
Edit Account Người dùng có thể sửa loại tài khoản của khách hàng
Delete Account Người dùng có thể xóa tài khoản của khách hàng
Deposit Người dùng có thể thêm tiền vào số dư của 1 tài khoản cụ thểWithdrawal Người dùng có thể rút tiền từ 1 tài khoản
Người dùng có thể thực hiện chuyển tiền giữa các tài khoản một cách dễ dàng, đồng thời cũng có thể kiểm tra số dư tài khoản của mình để nắm rõ tình hình tài chính.
Mini Statement Người dùng có thể kiểm tra được 5 giao dịch gần nhất của 1 tài khoản mong muốn
Người dùng có thể chọn mốc thời gian để kiểm tra được giao dịch xảy ra trong khoản thời gian đó của 1 tài khoản mong muốn
Bảng 1.Mô Tả Chức Năng Hệ Thống
Use Case tổng quát hệ thống Demo Guru99 Bank
Hình 2 Use Case Tổng Quát Website Guru99 Bank
Work Flow hệ thống
Hình 3 Work Flow Tổng Quát Hệ Thống
Phân tích yêu cầu
Sơ đồ Use Case chi tiết cho chức năng “Đăng Nhập”:
Hình 4 Use Case Chi Tiết "Đăng Nhập" Đặc tả yêu cầu chức năng Đăng Nhập:
Trigger: Khi người dùng muốn đăng nhập vào hệ thống
Pre-Conditions: Người dùng truy cập vào trang Web Guru99 Bank và đã có tài khoản. Post-Conditions: Người dùng đăng nhập hệ thống thành công.
Người dùng cần nhập ID Tài Khoản và mật khẩu vào hai ô nhập liệu Nếu mật khẩu không chính xác, có thể nhấn nút Reset để xóa thông tin đã nhập Nếu thông tin đúng, hãy nhấn nút để tiếp tục.
Bước 2 Sau khi nhập Id và Mật khẩu, người dùng click nút “Login”
Bước 3 Hệ thống xác thực thông tin
Bước 4 Sau khi xác nhận thông tin, hệ thống điều hướng người dùng sang trang chủ
Hình 6 Màn hình Trang chủ
Bước 5 Kết thúc Use Case
Khi người dùng bỏ trống các trường bắt buộc như “User ID” và “Password”, hệ thống sẽ thông báo lỗi với nội dung: “User -ID must not be blank” và “Password must not be blank”, yêu cầu người dùng quay lại bước 1 để nhập đầy đủ thông tin.
Hình 3 1 Lỗi bỏ tróng Field
Khi người dùng nhập sai UserId hoặc Password khi đăng nhập, hệ thống hiển thị popup thông báo: “User or Password is not valid” → Quay lại bước 1
Hình 7 Popup Báo Lỗi Đăng Nhập
3.4.2 Chức năng Tạo Khách Hàng
Sơ đồ Use Case chi tiết cho chức năng “Tạo Khách Hàng”:
Hình 8 Use Case Chi Tiết “Tạo Khách Hàng” Đặc tả yêu cầu chức năng Tạo Khách Hàng:
Trigger: Khi người dùng muốn thêm thông tin khách hàng mới vào hệ thống
Pre-Conditions: Người dùng truy cập vào trang Web Guru99 Bank và đã đăng nhập. Post-Conditions: Hệ thống ghi nhận thông tin người dùng mới thành công.
Basic Flow: Giao diện màn hình Tạo Khách Hàng:
Hình 9 Màn Hình Tạo Khách Hàng
Bước 1 Người dùng nhấp chọn mục New Customer từ trang chủ để tiến hành tạo khách hàng mới
Bước 2 Người dùng bắt đầu nhập thông tin của khách hàng theo form sẵn và bấm nút
Bước 3 Sau khi hệ thống xác nhận đúng tất cả các thông tin sẽ tiến hành lưu thông tin và hiển thị thông tin khách hàng vừa mới tạo
Hình 10 Màn Hình Hiển Thị Thông Tin Khách Vừa Tạo Bước 4 Kết thúc Use Case
+ Khi người dùng bỏ trống 1 trong các trường trong form Tạo Khách Hàng thì sẽ hiển thị thông báo “Field Name-must not be blank” -> Quay lại bước 2
When users enter incorrect formats in the Customer Name, Address, City, State, PIN, or Mobile Number fields, such as special characters, an error message stating “Special characters are not allowed” will be displayed Users will then need to return to step 2 to correct their entries.
Khi người dùng nhập sai định dạng cho các trường như Tên Khách Hàng, Thành Phố, hoặc Tiểu Bang bằng cách sử dụng số, hệ thống sẽ hiển thị thông báo “Không cho phép nhập số” Người dùng cần quay lại bước 2 để chỉnh sửa thông tin.
Khi người dùng nhập sai định dạng vào trường PIN và số điện thoại di động, ví dụ như nhập chữ cái, hệ thống sẽ hiển thị thông báo “Characters are not allowed” và yêu cầu quay lại bước 2.
Khi người dùng nhập PIN không đủ 6 chữ số, hệ thống sẽ hiển thị thông báo “PIN Code must have 6 Digits” và yêu cầu quay lại bước 2 để nhập lại.
Khi người dùng nhập địa chỉ E-mail không hợp lệ, như thiếu ký tự @, dư ký tự @, thiếu dấu “.” hoặc không có ký tự sau dấu “.”, hệ thống sẽ hiển thị thông báo “Email-ID is not valid” và yêu cầu quay lại bước 2 để sửa đổi.
Hình 16 Lỗi Nhập Email Sai Định Dạng
CHƯƠNG 4 THỰC HIỆN KIỂM THỬ
Kế hoạch kiểm thử
Dự án được tiến hành với hình thức kiểm tra chức năng, xác minh các chức năng đã hoạt động đúng với yêu cầu.
Kiểm thử tự động với phương thức Black Box Testing
Kiểm thử với 2 chức năng là Login và New Customer, thiết kế Test Case theo 7
-Wrong UserID/ Correct Password Login Validate Error -Correct UserID/ Wrong Password Login Validate Error -Correct UserID/ Correct Password Login Successful
-Wrong Format Customer Name Field Submit Validate Thrown Errors
-Wrong Format PIN Field Submit Validate Thrown Errors -Blank 1 Random Field Submit Validate Thrown Errors
-Correct All Fields Submit Successful
Bảng 2 Test Scenario Của Dự Án
Môi trường kiểm thử
Thiết bị: Laptop và Desktop
Link Website kiểm thử: https://demo.guru99.com/v4/
Công cụ kiểm thử
Thực thi kiểm thử Selenium On Pycharm
Quản lý Test Case Unittest Tool In Selenium
Quản lý và theo dõi lỗi HTML Test Report
Bảng 3 Công Cụ Kiểm Thử
Test Case kiểm thử
Test Case Login: 3 Test Case
Test Case New Customer: 11 Test Case
Thực hiện kiểm thử
12 inst.driver.get("https://demo.guru99.com/v4/")
16 def test_unlogin_user(self):
17 self.user = self.driver.find_element_by_name("uid")
18 self.user.send_keys("mngr517892")
19 self.password = self.driver.find_element_by_name("password")
20 self.password.send_keys("hoang@123")
21 self.driver.find_element_by_name("btnLogin").click()
22 fail = self.driver.switch_to_alert()
25 self.assertEqual("User or Password is not valid", text)
27 def test_unlogin_pass(self):
28 self.user = self.driver.find_element_by_name("uid")
29 self.user.send_keys("mngr516708")
30 self.password = self.driver.find_element_by_name("password")
31 self.password.send_keys("qyqyhub")
32 self.driver.find_element_by_name("btnLogin").click()
33 fail=self.driver.switch_to_alert()
36 self.assertEqual("User or Password is not valid",text)
38 def test_login_success(self):
40 self.user = self.driver.find_element_by_name("uid")
41 self.user.send_keys("mngr516708")
42 self.password = self.driver.find_element_by_name("password")
43 self.password.send_keys("hoang@123")
44 self.driver.find_element_by_name("btnLogin").click()
4.5.2 Chức năng “Tạo Khách Hàng”
12 inst.driver.get("https://demo.guru99.com/v4/")
16 def generate_random_string(len):
18 return ''.join(random.choice(kitu) for _ in range(len))
21 def test_addcus_name_space(self):
22 user = self.driver.find_element_by_name('uid')
24 password = self.driver.find_element_by_name('password')
26 self.driver.find_element_by_name('btnLogin').click()
28 self.driver.find_element_by_xpath("//a[contains(text(),'New Customer')]").click()
29 self.driver.find_element_by_name('name').send_keys(' ha')
31 self.name = self.driver.find_element_by_xpath("//*[contains(text(),'First character can')]").text
32 self.name1 = "First character can not have space"
33 self.assertEqual(self.name, self.name1)
34 self.driver.find_element_by_xpath("//input[@value='f']").click()
35 self.driver.find_element_by_name("dob").send_keys('290902')
36 self.driver.find_element_by_name("addr").send_keys('HungVuong')
37 self.driver.find_element_by_name("city").send_keys('Quang Nam')
38 self.driver.find_element_by_name("state").send_keys('Da Nang')
39 self.driver.find_element_by_name("telephoneno").send_keys('015478965')
40 mail_random=f"{self.generate_random_string(9)}@gmail.com"
41 self.driver.find_element_by_name("emailid").send_keys(mail_random)
42 self.driver.find_element_by_name("password").send_keys('7654321')
43 self.driver.find_element_by_name('pinno').send_keys('432154')
44 self.driver.find_element_by_xpath("//tbody/tr[14]/td[2]/input[1]").click()
45 fail = self.driver.switch_to_alert()
48 self.assertEqual("please fill all fields", text)
52 def test_addcus_name_num(self):
53 user = self.driver.find_element_by_name('uid')
55 password = self.driver.find_element_by_name('password')
57 self.driver.find_element_by_name('btnLogin').click()
59 self.driver.find_element_by_xpath("//a[contains(text(),'New Customer')]").click()
60 self.driver.find_element_by_name('name').send_keys('123')
62 self.name = self.driver.find_element_by_xpath("//*[contains(text(),'Numbers are not')]").text
63 self.name1 = "Numbers are not allowed"
64 self.assertEqual(self.name, self.name1)
65 self.driver.find_element_by_xpath("//input[@value='f']").click()
66 self.driver.find_element_by_name("dob").send_keys('290902')
67 self.driver.find_element_by_name("addr").send_keys('HungVuong')
68 self.driver.find_element_by_name("city").send_keys('Quang Nam')
69 self.driver.find_element_by_name("state").send_keys('Da Nang')
70 self.driver.find_element_by_name("telephoneno").send_keys('015478965')
71 self.driver.find_element_by_name("emailid").send_keys('phuong852@gmail.com')
72 self.driver.find_element_by_name("password").send_keys('7654321')
73 self.driver.find_element_by_name('pinno').send_keys('432154')
74 self.driver.find_element_by_xpath("//tbody/tr[14]/td[2]/input[1]").click()
75 fail = self.driver.switch_to_alert()
78 self.assertEqual("please fill all fields", text)
82 def test_addcus_name_spec(self):
83 user = self.driver.find_element_by_name('uid')
85 password = self.driver.find_element_by_name('password')
87 self.driver.find_element_by_name('btnLogin').click()
89 self.driver.find_element_by_xpath("//a[contains(text(),'New Customer')]").click()
90 self.driver.find_element_by_name('name').send_keys('@ha')
91 self.name = self.driver.find_element_by_xpath("//*[contains(text(),'Special characters are')]").text
92 self.name1 = "Special characters are not allowed"
93 self.assertEqual(self.name, self.name1)
94 self.driver.find_element_by_xpath("//input[@value='f']").click()
95 self.driver.find_element_by_name("dob").send_keys('290902')
96 self.driver.find_element_by_name("addr").send_keys('HungVuong')
97 self.driver.find_element_by_name("city").send_keys('Quang Nam')
98 self.driver.find_element_by_name("state").send_keys('Da Nang')
99 self.driver.find_element_by_name("telephoneno").send_keys('015478965')
100 self.driver.find_element_by_name("emailid").send_keys('phuong852@gmail.com')
101 self.driver.find_element_by_name("password").send_keys('7654321')
102 self.driver.find_element_by_name('pinno').send_keys('432154')
103 self.driver.find_element_by_xpath("//tbody/tr[14]/td[2]/input[1]").click()
104 fail = self.driver.switch_to_alert()
107 self.assertEqual("please fill all fields", text)
111 def test_addcus_pin_space(self):
112 user = self.driver.find_element_by_name('uid')
114 password = self.driver.find_element_by_name('password')
116 self.driver.find_element_by_name('btnLogin').click()
118 self.driver.find_element_by_xpath("//a[contains(text(),'New Customer')]").click()
119 self.driver.find_element_by_name('name').send_keys('Phuong')
120 self.driver.find_element_by_xpath("//input[@value='f']").click()
121 self.driver.find_element_by_name("dob").send_keys('290902')
122 self.driver.find_element_by_name("addr").send_keys('HungVuong')
123 self.driver.find_element_by_name("city").send_keys('Quang Nam')
124 self.driver.find_element_by_name("state").send_keys('Da Nang')
125 self.driver.find_element_by_name('pinno').send_keys(' 23')
126 self.pin = self.driver.find_element_by_xpath("//*[contains(text(),'First character can not')]").text
127 self.pin1 = "First character can not have space"
128 self.assertEqual(self.pin, self.pin1)
129 self.driver.find_element_by_name("telephoneno").send_keys('015478965')
130 self.driver.find_element_by_name("emailid").send_keys('phuong852@gmail.com')
131 self.driver.find_element_by_name("password").send_keys('7654321')
132 self.driver.find_element_by_xpath("//tbody/tr[14]/td[2]/input[1]").click()
133 fail = self.driver.switch_to_alert()
136 self.assertEqual("please fill all fields", text)
140 def test_addcus_pin_spec(self):
141 user = self.driver.find_element_by_name('uid')
143 password = self.driver.find_element_by_name('password')
145 self.driver.find_element_by_name('btnLogin').click()
147 self.driver.find_element_by_xpath("//a[contains(text(),'New Customer')]").click()
148 self.driver.find_element_by_xpath("//tbody/tr[4]/td[2]/input[1]").send_keys('Phuong')
149 self.driver.find_element_by_xpath("//input[@value='f']").click()
150 self.driver.find_element_by_name("dob").send_keys('290902')
151 self.driver.find_element_by_name("addr").send_keys('HungVuong')
152 self.driver.find_element_by_name("city").send_keys('Quang Nam')
153 self.driver.find_element_by_name("state").send_keys('Da Nang')
154 self.driver.find_element_by_name('pinno').send_keys('!@')
155 self.pin = self.driver.find_element_by_xpath("//*[contains(text(),'Special characters')]").text
156 self.pin1 = "Special characters are not allowed"
157 self.assertEqual(self.pin, self.pin1)
158 self.driver.find_element_by_name("telephoneno").send_keys('015478965')
159 self.driver.find_element_by_name("emailid").send_keys('phuong852@gmail.com')
160 self.driver.find_element_by_name("password").send_keys('7654321')
161 self.driver.find_element_by_xpath("//tbody/tr[14]/td[2]/input[1]").click()
162 fail = self.driver.switch_to_alert()
165 self.assertEqual("please fill all fields", text)
169 def test_addcus_pin_char(self):
170 user = self.driver.find_element_by_name('uid')
172 password = self.driver.find_element_by_name('password')
174 self.driver.find_element_by_name('btnLogin').click()
176 self.driver.find_element_by_xpath("//a[contains(text(),'New Customer')]").click()
177 self.driver.find_element_by_name('name').send_keys('Phuong')
178 self.driver.find_element_by_xpath("//input[@value='f']").click()
179 self.driver.find_element_by_name("dob").send_keys('290902')
180 self.driver.find_element_by_name("addr").send_keys('HungVuong')
181 self.driver.find_element_by_name("city").send_keys('Quang Nam')
182 self.driver.find_element_by_name("state").send_keys('Da Nang')
183 self.driver.find_element_by_name('pinno').send_keys('haha')
184 self.pin = self.driver.find_element_by_xpath("//*[contains(text(),'Characters are not')]").text
185 self.pin1 = "Characters are not allowed"
186 self.assertEqual(self.pin, self.pin1)
187 self.driver.find_element_by_name("telephoneno").send_keys('015478965')
188 self.driver.find_element_by_name("emailid").send_keys('phuong852@gmail.com')
189 self.driver.find_element_by_name("password").send_keys('7654321')
190 self.driver.find_element_by_xpath("//tbody/tr[14]/td[2]/input[1]").click()
191 fail = self.driver.switch_to_alert()
194 self.assertEqual("please fill all fields", text)
198 def test_addcus_pin_6(self):
199 user = self.driver.find_element_by_name('uid')
201 password = self.driver.find_element_by_name('password')
203 self.driver.find_element_by_name('btnLogin').click()
205 self.driver.find_element_by_xpath("//a[contains(text(),'New Customer')]").click()
206 self.driver.find_element_by_name('name').send_keys('Phuong')
207 self.driver.find_element_by_xpath("//input[@value='f']").click()
208 self.driver.find_element_by_name("dob").send_keys('290902')
209 self.driver.find_element_by_name("addr").send_keys('HungVuong')
210 self.driver.find_element_by_name("city").send_keys('Quang Nam')
211 self.driver.find_element_by_name("state").send_keys('Da Nang')
212 self.driver.find_element_by_name('pinno').send_keys('784')
213 self.pin = self.driver.find_element_by_xpath("//*[contains(text(),'PIN Code must')]").text
214 self.pin1 = "PIN Code must have 6 Digits"
215 self.assertEqual(self.pin, self.pin1)
216 self.driver.find_element_by_name("telephoneno").send_keys('015478965')
217 self.driver.find_element_by_name("emailid").send_keys('phuong83@gmail.com')
218 self.driver.find_element_by_name("password").send_keys('7654321')
219 self.driver.find_element_by_xpath("//tbody/tr[14]/td[2]/input[1]").click()
220 fail = self.driver.switch_to_alert()
223 self.assertEqual("please fill all fields", text)
227 def test_addcus_blank1field(self):
228 user = self.driver.find_element_by_xpath("//tbody/tr[1]/td[2]/input[1]")
230 password = self.driver.find_element_by_name('password')
232 self.driver.find_element_by_name('btnLogin').click()
234 self.driver.find_element_by_xpath("//a[contains(text(),'New Customer')]").click()
235 self.driver.find_element_by_name('name').send_keys('Phuong')
236 self.driver.find_element_by_xpath("//input[@value='f']").click()
237 self.driver.find_element_by_name("dob").send_keys('290902')
238 self.driver.find_element_by_name("addr").send_keys('HungVuong')
239 self.driver.find_element_by_name("city").send_keys('Quang Nam')
240 self.driver.find_element_by_name("pinno").send_keys('789456')
241 self.driver.find_element_by_name("telephoneno").send_keys('015478965')
242 self.driver.find_element_by_name("emailid").send_keys('phuong852@gmail.com')
243 self.driver.find_element_by_name("password").send_keys('7654321')
244 self.driver.find_element_by_xpath("//tbody/tr[14]/td[2]/input[1]").click()
245 fail = self.driver.switch_to_alert()
248 self.assertEqual("please fill all fields", text)
252 def test_addcus_success(self):
254 user = self.driver.find_element_by_name('uid')
256 password = self.driver.find_element_by_name('password')
258 self.driver.find_element_by_name('btnLogin').click()
260 self.driver.find_element_by_xpath("//a[contains(text(),'New Customer')]").click()
261 self.driver.find_element_by_name('name').send_keys('Phuong')
262 self.driver.find_element_by_xpath("//input[@value='f']").click()
263 self.driver.find_element_by_name("dob").send_keys('290902')
264 self.driver.find_element_by_name("addr").send_keys('HungVuong')
265 self.driver.find_element_by_name("city").send_keys('Quang Nam')
266 self.driver.find_element_by_name("state").send_keys('Da Nang')
267 self.driver.find_element_by_name("pinno").send_keys('789456')
268 self.driver.find_element_by_name("telephoneno").send_keys('015478965')
269 mail_random = f"{self.generate_random_string(9)}@gmail.com"
270 self.driver.find_element_by_name("emailid").send_keys(mail_random)
271 self.driver.find_element_by_name("password").send_keys('7654321')
272 self.driver.find_element_by_xpath("//tbody/tr[14]/td[2]/input[1]").click()
4.5.3 Tạo bản Report Test Case
10 login = unittest.TestLoader().loadTestsFromTestCase(AutoTest)
11 new=unittest.TestLoader().loadTestsFromTestCase(AutoTest2)
12 test_suite=unittest.TestSuite([login,new])
13 outfile = open(dir + "/LoginTestReport.html", "w")
15 runner = HtmlTestRunner.HTMLTestRunner(stream=outfile,title='Test Report',description='Summary about Automati on Test on Guru99 Bank Web')
Hình 17 Màn Hình Report Test Case
KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN
Quy trình kiểm thử phần mềm rất quan trọng, bao gồm các bước cần thiết để đảm bảo chất lượng sản phẩm Để thực hiện kiểm thử hiệu quả, bạn cần nắm vững các kiến thức cơ bản về kiểm thử, từ lý thuyết đến thực hành Hơn nữa, việc học và tiếp cận với kiểm thử tự động sẽ giúp nâng cao hiệu suất và độ chính xác trong quy trình kiểm thử, góp phần cải thiện chất lượng phần mềm.
- Cách giao tiếp trong môi trường làm việc chuyên nghiệp, cách soạn văn bản, mail, cách thuyết trình sao cho đúng.
- Học được các ngôn ngữ như Python, HTML nhằm phục vụ cho dự án.
- Áp dụng những kiến thức và kinh nghiệm trong kì thực tập để hoàn thành mục tiêu, thành thục được việc sử dụng Selenium để kiểm thử tự động.
- Đề tài còn đơn giản và chưa thể hiện toàn bộ kiến thức đã học.
- Chưa áp dụng được toàn bộ kiến thức đã học vì chỉ thực hiện Kiểm thử tự động.
- Vẫn chưa tham gia được vào dự án thực tế của công ty
Tiếp tục mở rộng và nâng cao kiến thức cơ bản về kiểm thử, không chỉ dừng lại ở lĩnh vực này mà còn hướng tới những công việc lớn hơn như thiết kế hệ thống và phân tích yêu cầu của khách hàng.
Định hướng phát triển từ Tester với mục tiêu trở thành Business Analyst, nhằm hiểu rõ hơn và tích lũy kinh nghiệm trong việc phân tích hệ thống từ cấp độ thấp lên các cấp độ cao hơn.