1. Trang chủ
  2. » Thể loại khác

Vai trò của kiểm thử tự động trong quy trình kiểm thử phần mềm : Luận văn ThS. Công nghệ thông tin: 60 48 10

72 29 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 72
Dung lượng 10,26 MB

Nội dung

ĐẠI HỌC QUỐC GIA HÀ NỘI TRƯỜNG ĐẠI HỌC CÔNG NGHỆ NGUYỄN THỊ HUỆ VAI TRÕ CỦA KIỂM THỬ TỰ ĐỘNG TRONG QUY TRÌNH KIỂM THỬ PHẦN MỀM LUẬN VĂN THẠC SĨ Hà Nội - 2012 ĐẠI HỌC QUỐC GIA HÀ NỘI TRƯỜNG ĐẠI HỌC CÔNG NGHỆ NGUYỄN THỊ HUỆ VAI TRÕ CỦA KIỂM THỬ TỰ ĐỘNG TRONG QUY TRÌNH KIỂM THỬ PHẦN MỀM LUẬN VĂN THẠC SĨ Ngành Chuyên ngành Mã số CÔNG NGHỆ THÔNG TIN CÔNG NGHỆ PHẦN MỀM 60 48 10 NGƯỜI HƯỚNG DẪN KHOA HỌC: TS Đặng Văn Hưng Hà Nội - 2012 BẢNG CÁC CHỮ VIẾT TẮT DANH SÁCH CÁC HÌNH VÀ BẢNG BIỂU – 1.1 Đ 1.2 N 1.3 C 7 CHƢƠNG – QUY TRÌNH KIỂM THỬ PHẦN MỀM 2.1 QUY TRÌNH PHÁT TRIểN PHầN MềM: 2.2 QUY TRÌNH KIểM THử PHầN MềM 2.3 G PHầN MềM TRONG VÕNG 2.4 CÁC Kỹ THUậT KIểM THử PHầN MềM 2.4.1 Kiểm thử hộp trắng (White-box) CHƢƠNG –TỰ ĐỘNG HÓA KIỂM THỬ PHẦN MỀM 3.1 ĐịNH NGHĨA: 3.2 MƠ HÌNH CHUNG CủA Tự ĐộNG HĨA KIểM THử PHầN MềM 3.3 CÔNG Cụ KIểM THử Tự ĐộNG 3.3.1 Lý sử dụng công cụ kiểm thử 3.3.2 Các bước thực kiểm thử tự động 3.3.3 Công cụ hỗ trợ quy trình kiểm thử phần mềm 3.4 CHUN MƠN HĨA CON NGƯờI 3.5 CHI PHÍ TRONG KIểM THử Tự ĐộNG PHầN MềM 3.6 MộT Số HạN CHế TRONG Tự ĐộNG HĨA KIểM THử CHƢƠNG – TÌM HIểU CÔNG Cụ TESTCOMPLETE 4.1 L 4.2 H 4.3 C TESTCOMPLETE9 4.4 N SCRIPT 4.5 S TESTCOMPLETE9 4.6 CÁC BƯớC TạO MộT Dự ÁN KIểM THử VớI TESTCOMPLETE 4.7 V 4.8 ĐÁNH GIÁ CÔNG Cụ KIểM THử TESTCOMPLETE 4.8.1 So với mơ hình chung kiểm thử tự động 4.8.2 So với công cụ kiểm thử khác 4.9 NGHIÊN CứU Kỹ THUậT KIểM CHứNG THIếT Kế 4.9.3 Ví dụ minh họa: CHƢƠNG – 9 11 12 12 14 15 17 17 17 18 18 19 20 22 23 23 26 26 27 27 28 28 33 34 56 56 57 59 59 60 61 71 O 72 BẢNG CÁC CHỮ VIẾT TẮT Từ viết tắt ECG Ý nghĩa Electrocardiography PDA Personal Digital Assistant ADL Activities of Daily Living SAECA Signal Algorithm Event Condition Action UML Unified Modeling Language Giải thích tiếng Việt Điện tim đồ Thiết bị kỹ thuật số hỗ trợ cá nhân Các hoạt động hàng ngày Tín hiệu thuật tốn hoạt động điều khiển kiện Ngơn ngữ mơ hình hóa DANH SÁCH CÁC HÌNH VÀ BẢNG BIỂU Số Tên hình/bảng biểu trang Hình 2.1 Quy trình kiểm thử phần mềm 10 Hình 2.2 Mơ hình chữ V hiển thị thiết kế kiểm thử sớm 12 Hình 3.1 Mơ hình chung tự động hóa kiểm thử 17 Hình 3.2 Cơng cụ hỗ trợ quy trình kiểm thử phần mềm 20 Hình 4.1 Giao diện Project Explorer TestComplete 29 Hình 4.2 Cửa sổ làm việc TestComplete 30 Hình 4.3 31 Hình 4.4 Đối tượng Process TestComplete 32 Hình 4.5 Ứng dụng hộp đen TestComplete 32 Hình 4.6 Ứng dụng hộp trắng TestComplete 33 Hình 4.7 Giao diện Patients Management Hình 4.8 Hộp thoại Create New Project 34 35 Hình 4.9 Xác định ứng dụng cần kiểm thử 36 Hình 4.10 Thêm ứng dụng kiểm thử vào dự án 36 Hình 4.11 Thêm tùy chọn Autorun cho ứng dụng kiểm thử 37 Hình 4.12 Thiết lập chế độ hiển thị trực quan kiểm thử 38 Hình 4.13 Chọn ngơn ngữ viết Script 39 Hình 4.14 Hộp thoại ghi kiểm thử Recording 41 Hình 4.15 Chức Append to Test cơng cụ trình soạn thảo Hình 4.16 Thực chạy ứng dụng cần kiểm thử 42 Hình 4.17 Giao diện quản lý bệnh nhân Patients Management Hình 4.18 Hộp thoại chỉnh sửa thơng tin bệnh nhân 42 Hình 4.19 Giao diện hiển thị tùy chọn cho Checkpoint Hình 4.20 Giao diện tạo Property Checkpoint 44 Hình 4.21 Nội dung ca kiểm thử Hình 4.22 Giao diện Test Visualizer 46 42 43 44 47 Hình 4.23 Giao diện Visualizer Frame Hình 4.24 Giao diện hiển thị thao tác ca kiểm thử 47 Hình 4.25 Thao tác đăng nhập hệ thống kiểm thử Hình 4.26 Thao tác chỉnh sửa thơng tin bệnh nhân 49 Hình 4.27 Tổ chức cấu trúc thao tác TestComplete Hình 4.28 Giao diện hiển thị chức Run Test 51 Hình 4.29 Cửa sổ hiển thị trình thực kiểm thử Hình 4.30 Giao diện hiển thị kết kiểm thử 53 Hình 4.31 Giao diện Log hiển thị kết kiểm thử Hình 4.32 Giao điện hiển thị chi tiết thao tác tạo lỗi 55 Hình 4.33 TestComplete mơ hình chung tự động hóa kiểm thử Hình 4.34 Nền tảng kiến trúc hệ thống 57 Hình 4.35 Tổng quan hệ thống Hình 4.36 Lược đồ UML giao thức thiết kế - SAECA 62 Hình 4.37 Phân tích liệu ECG chèn thêm thơng tin mẫu Hình 4.38 Sơ đồ xử lý liệu ECG 64 Hình 4.39 Mơ hình trạng thái hệ thống Hình 4.40 Mơ hình trạng thái module lưu trữ liệu 65 Hình 4.41 Ứng dụng mơ máy chủ IIS Hình 4.42 Giao diện chạy thử ứng dụng 66 Hình 4.43 Mã nguồn ứng dụng mơ Hình 4.44 Mã nguồn chương trình khách 67 Hình 4.45 Giao diện chương trình khách Hình 4.46 Kết mong đợi xây dựng trước 68 Hình 4.47 Kết chạy thực tế TestComplete Hình 4.48 Kết chạy kiểm thử TestComplete 70 48 50 52 54 56 62 63 64 66 67 68 69 70 – - (thực kiểm tra cách nhanh chóng “rẻ nhất” có thể) Các chạy tay Trong lĩnh vực Kiểm thử tự động có nhiều cơng cụ kiểm thử thương mại tiếng, phổ biến TestComplete, QuickTest Professional, WinRunner, Rational Robot, SilkTest, JTest,…Trong số đó, Test Complete phiên Automated‟s QA SmartBear tốt mạnh, bao gồm nhiều chức điển hình cơng cụ kiểm thử tự động Nó thực thi kiểm thử nhiều mức: Kiểm thử đơn vị, tích hợp, hệ thống chấp nhận Đây loại công cụ phổ biến sử dụng Việc thực kiểm chứng thiết kế trình tạo sản phẩm phần mềm đặc biệt phần mềm phức tạp giúp làm tăng hiệu kinh tế nhờ việc phát lỗi sớm – từ bước thiết kế phần mềm rút ngắn thời gian chi phí hồn thành sản phẩm, đảm bảo tính tin cậy, an toàn hệ thống làm Tuy nhiên, thiết kế thường khơng dạng chương trình cài đăt chạy Một câu hỏi đặt liệu áp dụng cơng cụ kiểm thử vào kiểm chứng thiết kế không? Trả lời cho câu hỏi luận văn có trình bày cách tiếp cận dùng công cụ kiểm thử vào việc kiểm thử thiết kế mà cụ thể công cụ kiểm thử TestComplete Dùng kỹ thuật trừu tượng hóa, biến đổi thiết kế thành mơ hình tiến hành để kiểm thử công cụ kiểm thử nhằm phát lỗi giai đoạn sớm 1.2 Luận văn tập trung nghiên cứu tự động hóa kiểm thử phần mềm gồm khái niệm, lợi ích cách thức thực tự động hóa, số công cụ kiểm thử phần mềm tập trung vào việc tìm hiểu cơng cụ kiểm thử TestComplete – công cụ sử dụng phổ biến Ngồi ra, luận văn có trình bày phương pháp sử dụng công cụ kiểm thử TestComplete kiểm chứng thiết kế phần mềm 1.3 Phần cịn lại luận văn có cấu trúc sau: Chương 2: Quy trình kiểm thử phần mềm Chương trình bày mơ hình phát triển phần mềm quy trình kiểm thử mơ hình phát triển phần mềm Chương 3: Các kỹ thuật kiểm thử phần mềm Chương trình bày sơ qua hai kỹ thuật kiểm thử: Hộp đen (Black box), Hộp trắng (White box) việc lựa chọn kiểu kiểm thử cho hệ thống phần mềm Chương 4: Tự động hóa kiểm thử phần mềm Chương trình bày khái niệm, mơ hình chung tự động hóa kiểm thử, lợi ích cách thức thực tự động hóa kiểm thử phần mềm Giới thiệu số công cụ kiểm thử tự động sâu vào việc tìm hiểu cơng cụ kiểm thử TestComplete Trình bày phương pháp sử dụng công cụ kiểm thử kiểm chứng thiết kế Chƣơng – QUY TRÌNH KIỂM THỬ PHẦN MỀM quy trình phát triển phần mềm điều quan trọng Nếu viết nh ), bạn thấy phương thức bạn sử dụng khác nhiều so với cơng ty lớn sử dụng để phát triển phần mềm Để tạo sản phẩm phần mềm lớn bao gồm hàng chục, hàng trăm, thậ làm việc chặt chẽ.Chi tiết việc họ làm, cách thức họ tương tác, cách thức họ định thành phần quy trình phát triển phần mềm 2.1 Quy trình phát triển phần mềm: 2.2 Quy trình kiểm thử phần mềm Quy trình kiểm thử gồm hoạt động sau: − Kế hoạch kiểm thử (test planning) − Thiết kế kiểm thử (test design) − Triển khai kiểm thử (test implementation) − Thực thi kiểm thử (test execution) − Đánh giá kiểm thử (test evaluation) Quy trình kiểm thử mơ tả hình vẽ đây: 10 Hình 2.1: Quy trình kiểm thử phần mềm Mỗi hoạt động có chuyển giao riêng từ khâu đến khâu khác Cuối cùng, báo cáo lỗi tài liệu cho kết Đội triển khai sử dụng tài liệu để xác định nguyên nhân gây lỗi sửa chữa chúng Sau kế hoạch kiểm thử xây dựng, dựa đầu vào cụ thể (ngân sách, nguồn lực, thời gian), bước phân tích yêu cầu xác định mục tiêu kiểm thử cho đội kiểm thử Pha thiết kế kiểm thử chủ yếu tập trung vào xác định thiết kế thủ tục kiểm thử Ở bước định làm xác định cần kiểm thử tay kiểm thử tự động Các ca kiểm thử thủ tục kiểm thử kết pha triển khai kiểm thử Các kịch kiểm thử (Test scripts) viết ngôn ngữ lập trình xác định Visual Basic, Java C++ Ở pha này, số kịch kiểm thử sử dụng lại từ kiểm thử trước Thực thi kiểm thử có kế hoạch thủ tục kiểm thử đầu vào Sau thực thi kiểm thử, kết kiểm thử đánh giá Oracle Oracle chuyên gia định kết hay sai 58 ng QAForums VBScript, Jscript, C# VBScript Script, C++ Script, Delphi Script (Web IE, Firefox Testing) IE ( ) (Manual Testing) (Quality Center) (Web Load/Performance Testing) Web (Web Testing) Services DUnit, JUnit, NUnit, (Unit Testing MSTest Integration) (Quality Center) NET (.NET Testing) 59 PowerBuilder ++ 4.9 Nghiên cứu kỹ thuật kiểm chứng thiết kế 4.9.1 (Design checking) Hầu hết đặc tả mơ tả đối tượng vơ tận, không gian trạng thái chúng vô hạn Thậm chí khơng gian trạng thái hữu hạn, thường lớn để kiểm chứng mơ hình trực tiếp Vì vậy, thay xây dựng mơ hình trừu tượng số lượng nhỏ mơ hình trừu tượng đại diện cho tập lớn (có thể vơ hạn) mơ hình cụ thể Nếu trừu tượng có tính chất định, kết thu từ việc kiểm tra mơ hình trừu tượng hợp lý cho mơ hình cụ thể Với tập đầy đủ , ta xác định hàm ánh xạ giá trị tập đầy đủ với giá trị tập trừu tượng hóa : Ví dụ: miền Int trừu tượng hóa thành miền Int* thông qua hàm ánh xạ 60 Những hàm tạo ánh xạ đối tượng phức hợp định nghĩa hàm ánh xạ đơn tồn miền giá trị Ví dụ, tập số nguyên ánh xạ với tập 4.9.2 Ki Cơ sở việc sử dụng kỹ thuật Việc thực kiểm chứng thiết kế trình tạo sản phẩm phần mềm đặc biệt phần mềm phức tạp giúp làm tăng hiệu kinh tế nhờ việc phát lỗi sớm – từ bước thiết kế phần mềm rút ngắn thời gian chi phí hồn thành sản phẩm, đảm bảo tính tin cậy, an tồn hệ thống làm Tuy nhiên, thiết kế thường không dạng chương trình cài đăt chạy Chính vậy, để kiểm chứng thiết kế công cụ TestComplete ta thực việc chuyển thiết kế thành mơ hình /chương trình chạy được, sau sử dụng cơng cụ kiểm thử để kiểm thử vét cạn chương trình : - Bước 1: Chọn nhánh thiết kế cần kiểm chứng - Bước 2: Chuyển thiết kế sang mơ hình trừu tượng (chẳng hạn dạng máy hữu hạn trạng thái) - Bước 3: Tạo giả chương trình mơ hoạt động máy hữu hạn trạng thái bước gồm: o Tập hữu hạn trạng thái o Các hàm chuyển trạng thái - Bước 4: Vét cạn kịch kiểm thử giả chương trình ngơn ngữ script TestComplete - Bước 5: Sử dụng TestComplete để kiểm thử tìm lỗi thiết kế 61 4.9.3 Ví dụ minh họa: Mơ tả tốn Một mục tiêu quan trọng quy trình chăm sóc sức khỏe người bệnh ln biết tình trạng sức khỏe tư vấn chuyên gia y tế họ cần nơi đâu Một thiết bị cầm tay tích hợp khởi đầu cho hệ thống Một điểm nhấn quan trọng liên quan đến mục tiêu thu nhận thông tin sức khỏe sớm để đưa biện pháp phòng ngừa Mong muốn phát triển hệ thống theo dõi điện tim đồ (ECG) thông qua thiết bị điện thoại thơng minh để u cầu ghi lại thông tin liên quan nhịp tim biết nguyên nhân ta thấy có dấu hiệu loạn nhịp tim xảy Các thành phần hệ thống: - Một thiết bị không dây, mô đun để lưu trữ thu thập thơng tin - Một thuật tốn kiểm tra nhịp tim theo thời gian thực hiệu - Một hệ thống tương tác có qui tắc (Sự kiện – Điều kiện – Giải pháp) - Một hệ thống giao diện người dùng đơn giản giúp ta yêu cầu bổ sung thêm thơng tin từ người dùng Phân tích toán Các thành phần hệ thống - Hệ thống sử dụng Bluetooth kênh không dây để nhận tín hiệu ECG chuyển thành tín hiệu nhịp tim đập ghi nhận đồng thời ghi lại thông tin liên quan để giúp cho việc phân tích sau tốt - Hệ thống theo dõi biến thiên nhịp tim từ tín hiệu ECG dựa vào để tìm thay đổi tần số nhịp tim liên quan đến hoạt động hàng ngày người dùng Những tần số khác phụ thuộc vào hoạt động khác ghi lại nhãn (label, subject)như: Làm việc, chơi thể thao, đọc báo, xem phim, … 62 Hình 4.34: Nền tảng kiến trúc hệ thống Hình 4.36 thành phần hệ thống thực tế Ta chia hệ thống thành phần là: Truyền liệu, thu nhận tín hiệu xử lý tín hiệu (dựa thơng tin ngữ cảnh sử dụng quy tắc E-C-A) Trong phạm vi nghiên cứu không sử dụng thiết bị đo ECG thực, thay vào thiết bị mô để đọc liệu ECG từ tệp tin gửi đến thiết bị cầm tay (PDA) thông qua thiết bị thu phát Bluetooth máy tính cá nhân (PC) Tổng quan hệ thống hình 4.37 Hình 4.35: Tổng quan hệ thống 63 Khi tín hiệu ECG gửi đến PDA, chúng phân tích thuật tốn kiểm tra nhịp ECG Sau nhịp kiểm tra, coi tín hiệu đầu vào cho mức (tương tác kiện nhịp sinh thuật toán kiểm tra nhịp), làm chuỗi phân tích kiện, qua đánh giá điều kiện u cầu thơng tin ngữ cảnh tương ứng với hoạt động người dùng (ADL: Active Daily Living), sau có đầy đủ thông tin hệ thống lưu trữ ngữ cảnh thực thi hành động tương ứng với tình trạng nhịp tim bệnh nhân Thiết kế hệ thống Với mục đích ví dụ phục vụ cho việc kiểm thử tự động, xét đến giao thức lý thuyết hệ thống SAECA viết tắt Tín hiệu (Signal) – Thuật tốn (Algorithm) – ECA Khi tín hiệu thu nhận được, thuật toán tương ứng xử lý liệu đến truyền kết tính tốn vào cho ECA để đưa định nhận hành động tương ứng với tình Hình 4.37 minh họa luồng làm việc hệ thống SAECA: Hình 4.36: Lược đồ UML giao thức thiết kế - SAECA − Pha 1: Gửi thông tin Trước liệu ECG truyền đi, chia chuyển thành dạng “số nguyên” Để tăng cường độ xác liệu, hệ thống kết 64 hợp ID bệnh nhân, tần suất lấy mẫu số mẫu với liệu ECG sau: Hình 4.37: Phân tích liệu ECG chèn thêm thông tin mẫu − Pha 2: Nhận xử lý liệu: Khi nhận liệu ECG đến hệ thống tạo mẫu rỗng để lưu trữ thông tin đến Hệ thống biết trước thông tin người dùng (do người dùng nhập vào) bao gồm: ID bệnh nhân Nếu kết phân tích trùng với thông tin bệnh nhân, hệ thống phân tích để lấy mã số mẫu liệu ECG Dữ liệu ECG lưu trữ tệp tin phân tích thuật tốn Hình 4.38: Sơ đồ xử lý liệu ECG 65 Chú ý: Sai lầm mơ hình nằm chỗ: khơng tính đến tần suất lấy mẫu mà sử dụng ID bệnh nhân, xảy trường hợp tràn nhớ hệ thống! Bởi có thể, trường hợp lỗi, phận thu nhận gửi lặp gửi liên tục mẫu! Đây lỗi mơ hình cần tìm thơng qua vét cạn thực stress test TestComplete 9! Hình 4.39: Mơ hình trạng thái hệ thống 66 Hình 4.40: Mơ hình trạng thái module lưu trữ liệu Xây dựng giả chương trình Giả chương trình mơ ứng dụng web viết ASP NET MVC 4.0 ngôn ngữ C# chạy máy chủ ứng dụng web IIS 8.0 Hình 4.41: Ứng dụng mơ máy chủ IIS 67 Hình 4.42: Giao diện chạy thử ứng dụng Hình 4.43: Mã nguồn ứng dụng mơ Chúng ta tạo thêm chương trình client để mô việc thu nhận gửi liệu đến server 68 Hình 4.44: Mã nguồn chương trình khách Hình 4.45: Giao diện chương trình khách 69 Kiểm thử vét cạn TestComplete Dựa thông tin đầu vào (PatientID, SampleRate, ECGData) vả trạng thái ta xây dựng vét cạn tập ca kiểm thử sau (được chia thành nhóm chính): − Trường hợp 1: Mã bệnh nhân đúng, tần suất chuẩn, liệu thay đổi (từ thấp (40) đến cao (200)) gồm ca kiểm thử − Trường hợp 2: Mã bệnh nhân khơng xác, tần suất chuẩn, liệu thay đổi (từ thấp (40) đến cao (200)) gồm ca kiểm thử − Trường hợp 3: Mã bệnh nhân đúng, tần suất cực tiểu (0), liệu thay đổi (từ thấp (40) đến cao (200)) gồm ca kiểm thử Với ca kiểm thử, ta sử dụng TestComplete để nhập trước kết mong đợi (expected result) sau tiến hành chạy tự động Phân tích kết Có 01 ca kiểm thử trường hợp thất bại có tập trạng thái sau: - Mã bệnh nhân - Tần suất cực tiểu - Tập liệu gồm mẫu trạng thái (thấp nhất, trung bình, cao nhất) Hình 4.46: Kết mong đợi xây dựng trước 70 Hình 4.47: Kết chạy thực tế TestComplete Hình 4.48: Kết chạy kiểm thử TestComplete Có tập trạng thái, tiến hành lần ngược (debug) giả chương trình phát lỗi hệ thống thời điểm kiểm tra lưu trữ liệu 71 – Kiểm thử phần mềm, nội dung nghiên cứu triển khai từ sớm mẻ giới, vấn đề cấp thiết cho việc nâng cao chất lượng phần mềm Trong luận văn này, tác giả trình bày tổng quan quy trình kiểm thử phần mềm, sâu vào nghiên cứu tự động hóa kiểm thử phần mềm nghiên cứu công cụ kiểm thử TestComplete – công cụ kiểm thử phổ biến Luận văn trình bày cách tiếp cận áp dụng công cụ kiểm thử vào việc iểm thử thiết kế mà cụ thể công cụ kiểm thử TestComplete Dùng kỹ thuật trừu tượng hóa, biến đổi thiết kế thành mơ hình tiến hành để kiểm thử công cụ kiểm thử nhằm phát lỗi giai đoạn sớm Hướng phát triển luận văn nghiên cứu ngơn ngữ mơ hình phù hợp, từ kết hợp với nghiên cứu công cụ sinh giả chương trình tự động thực kiểm thử vét cạn cơng cụ TestComplete cho giả chương trình 72 Tiếng Việt Nguyễn Xuân Huy (1994), Công nghệ phần mềm, Đại học Tổng hợp Tp Hồ Chí Minh Tiếng Anh Kanglin Li and Menqi Wu (2004), Effective Software Test Automation: Developing an Automated Software Testing Tool, Sybex, San Francisco Mark Fewster and Dorothy Graham (1994), Software Test Automation Effective use of test execution tools, Copyright @ by ACM Press, Great Britain Myers and Glenford (1979), The Art of Software Testing, Willey, New York Pettichord and Bret (1996), Success with test automation, in Proceedings of the Ninth International Quality Week, Sofware Research, San Francisco, California, Available at http://www.io.com/~waznio/succpap.htm Ron Patton (2005), Software Testing, Sams Publishing, the United States of America http://smartbear.com/support

Ngày đăng: 23/09/2020, 21:12

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w