PHẦN 1. MỞ ĐẦU 1. Tên đề tài Kiểm thử tự động chức năng hệ thống quản lý kho hàng với công cụ Junit 2. Lý do chọn đề tài Trong những năm gần đây ngành công nghệ thông tin nói chung và kĩ thuật phần mềm nói riêng đã có những bước phát triển mạnh mẽ. Các phần mềm ngày càng được ứng dụng rộng rãi trong mọi lĩnh vực của cuộc sống mà trong đó các phần mềm quản lý đã đặc biệt chứng tỏ được tính ưu việt và tiệních của mình Nhưng cũng từ đó nảy sinh ra nhiểu vấn đề về lỗi hỏng hóc phần mềm không đáng có gây ra các ảnh hưởng nghiêm trọng đến xã hội, kinh tế Những lỗi này có thể do tự bản thân phần mềm bị hỏng học không được kiểm duyệt kĩ lưỡng trước khi đưa ra cho người dùng hay cũng có thể do người dùng cố tình phá hoại nhằm đánh cắp thông tin cá nhân như mã số tài khoản ngân hàng, số điện thoại, danh bạ tin nhắn,…Những vấn đề nan giải và cấp thiết này càng có xu hướng mở rộng trong các năm gần đây, điển hình như sự cố máy tính Y2K năm 2000 làm tê liệt nhiều hệ thống máy tính lớn hay như càng có nhiều loại virus phá hoại mới xuất hiện, tấn công vào các lỗ hổng bảo mật phần mềm là tê liệt nhiều hệ thống phần mềm và phần cứng. Từ đây ta dễ dàng nhận ra là mặc dù phần mềm phát triển ngày càng phức tạp nhưng vấn đề chất lượng vẫn là một dẩu hỏi lớn cần xem xét cẩn thận. Do đó yêu cầu đặt ra là cần có công tác kiểm thử phần mềm thật kĩ lưỡng nhằm ngăn chặn các lỗi hay hỏng hóc có tiềm tàng bên trong phần mềm mà ta chưa kịp nhận ra. Tuy nhiên vì phần mềm ngày càng lớn, hàng nghìn module, có thể do cả một công ty hàng nghìn người phát triển vì vậy để kiểm thử được một phần mềm lớn như vậy sẽ tốn rất nhiều công sức và thời gian nếu làm thủ công, chưa kể đến chất lượng kiểm thử sẽ không cao và thật chính xác phù hợp với yêu cầu. Theo nhiều tính toán thì công việc kiểm thử đóng vai trò hết sức quan trọng trong quy trình phát triển phần mềm nó đóng góp tới 30%-70% tổng toàn bộ chi phí cho việc sản xuất phần mềm. Vì vậy cần có các hệ thống kiểm thử phần mềm một cách tự động cho phép ta thực hiện được các công việc một cách nhanh chóng và độ an toàn chính xác cao nhất có thể. Và đó là lí do nhóm em lựa chọn đề tài “ Kiểm thử tự động chức năng hệ thống quản lý kho hàng với công cụ Junit ” để nghiên cứu, tìm hiều và đề ra các giải pháp mới để cải tiến các quy trình kiểm thử như hiện nay sao cho năng suất cao nhất. 3. Mục đích Đề tài “ Kiểm thử tự động chức năng hệ thống quản lý kho hàng với công cụ Junit ” tìm hiểu về kiểm thử phần mềm,kiểm thử tự động,tìm hiểu về công cụ Junit và kiểm thử chức năng của hệ thống quản lý kho hàng bằng công cụ kiểm thử tự động Junit. 4. Bố cục Nội dung chính đề tài chia làm 3 chương Chương 1: Tổng quan về kiểm thử phần mềm : phần này chúng ta sẽ đi tìm hiểu về một số khái niện phần mềm và kiểm thử phần mềm. Chương 2: Tìm hiểu về công cụ kiểm thử tự động Junit : phần này chúng ta sẽ tìm hiểu về lịch sử công cụ kiểm thử tự động Junit, cách cài đặt và một số bước thực hiện cơ bản. Chương 3: Ứng dụng công cụ Junit để kiểm thử tự động chức năng của hệ thống quản lí kho hàng . 5. Phương pháp tiếp cận Đọc lý thuyết: thu thập tài liệu, thống kê lý thuyết. Phân tích mẫu Thực nghiệm thực tế PHẦN 2 NỘI DUNG CHƯƠNG 1. TỔNG QUAN VỀ KIỂM THỬ PHẦN MỀM 1.1 Phần mềm 1.1.1 Định nghĩa phần mềm Theo định nghĩa của IEEE: Bao gồm các chương trình máy tính, các thủ tục, các tài liệu có thể liên quan và các dữ liệu liên quan đến hoạt động của hệ thống máy tính Theo định nghĩa của ISO: 4 thành phần cơ bản của phần mềm: •Chương trình máy tính (code) •Các thủ tục •Tài liệu •Dữ liệu cần thiết để vận hành phần mềm 1.1.2 Đặc trưng của phần mềm -Phần mềm được kỹ nghệ, không được chế tạo theo nghĩa cổ điển -Có tính phức tạp cao và luôn thay đổi -Phần mềm không nhìn thấy được 1.2 Định nghĩa kiểm thử phần mềm Theo Glenford Myers: •Kiểm thử là quá trình vận hành chương trình để tìm ra lỗi Theo IEEE: Kiểm thử là •Là quá trình vận hành hệ thống hoặc thành phần dưới những điều kiện xác định, quan sát hoặc ghi nhận kết quả và đưa ra đánh giá về hệ thống hoặc thành phần đó. •Là quá trình phân tích phần mềm để tìm ra sự khác biệt giữa điều kiện thực tế và điều kiện yêu cầu và dựa vào điểm khác biệt đó để đánh giá tính năng phần mềm
Trang 1TRƯỜNG ĐẠI HỌC CÔNG NGHIỆP HÀ NỘI
KHOA CÔNG NGHỆ THÔNG TIN
BÀI TẬP LỚN
ĐỀ TÀI: KIỂM THỬ TỰ ĐỘNG CHỨC NĂNG QUẢN LÝ KHO
HÀNG VỚI CÔNG CỤ KIỂM THỬ JUNIT
Giảng viên hướng dẫn : Th.s Nguyễn Đức Lưu
Lớp : KTPM K9 HKPSinh viên thực hiện : Nguyễn Minh Đức
Phạm Minh HồngTrần Văn Dương
Hà Nội, 2018
Trang 2TRƯỜNG ĐẠI HỌC CÔNG NGHIỆP HÀ NỘI
KHOA CÔNG NGHỆ THÔNG TIN
Phạm Minh HồngTrần Văn Dương
Hà Nội, 2018
Trang 3Luund7@gmail.com LỜI CẢM ƠN
Trong suốt quá trình học tập và làm bài tập lớn, nhóm 14 đà nhận được sựhướng dẫn, giúp đờ nhiệt tình của quý thầy cô trong khoa Công nghệ thông tintrường Đại học Công nghiệp Hà Nội và các bạn trong bộ môn để hoàn thành đề tàinghiên cứu của nhóm Với lòng kính trọng và sự biết ơn sâu sắc, nhóm 14 xin đượcbày tỏ lời cảm ơn chân thành tới thầy Nguyễn Đức Lưu - người thầy đà hết lònggiúp đờ, dạy bảo, động viên và tạo mọi điêu kiện thuận lợi cho nhóm trong suốtquá trình học tập và hoàn thành bài tập lớn cùa nhóm, cùng tất cả các thầy cô trongkhoa, trong trường và bạn bè trong bộ môn đầ giúp đờ nhóm trong quá trình họctập
Những đóng góp cùa mọi người là kinh nghiệm quý báu giúp cho các thànhviên trong nhóm sẽ có những dự tính sau này trong khi làm đồ án tốt nghiệp và saukhi tốt nghiệp
Chúng em xin chân thành cảm ơn !
Trang 4MỤC LỤC
LỜI CẢM ƠN 2
MỤC LỤC 3
PHẦN 1 MỞ ĐẦU 5
PHẦN 2 NỘI DUNG 7
CHƯƠNG 1 TỔNG QUAN VỀ KIỂM THỬ PHẦN MỀM 7
1.1 Phần mềm 7
1.1.1 Định nghĩa phần mềm 7
1.1.2 Đặc trưng của phần mềm 7
1.2 Định nghĩa kiểm thử phần mềm 7
1.3 Mục tiêu của kiểm thử 7
1.4 Phân loại kiểm thử 8
1.4.1 Dựa vào mục đích kiểm thử 8
1.4.2 Dựa vào chiến lược kiểm thử 8
1.4.3 Dựa vào phương pháp tiến hành kiểm thử 8
1.4.4 Dựa vào kỹ thuật kiểm thử 9
1.5 Đối tượng thực hiện kiểm thử 9
1.6 Quy trình kiểm thử 9
1.7 Các cấp độ kiểm thử 10
1.8 Các loại hình kiểm thử 11
Trang 51.9 Các cấp độ kiểm thử 11
1.9.1 Kiểm thử đơn vị- Unit testing 11
1.9.2 Kiểm thử tích hợp 13
1.9.3 Kiểm thử hệ thống 14
1.9.4 Kiểm thử chấp nhận 14
1.10 Kiểm thử tự động 14
1.10.1 Tổng quan về kiểm thử tự động 14
1.10.2 Quy trình kiểm thử tự động 15
1.10.3 Ưu , nhược điểm của kiểm thử tự động 16
1.10.4 Một số công cụ kiểm thử tự động 16
CHƯƠNG 2 GIỚI THIỆU VỀ CÔNG CỤ KIỂM THỬ JUNIT 17
2.1 Lịch sử phát triển của Junit 17
2.2 Junit là gì? 17
2.3 Lợi ích của Junit 18
2.4 Cài đặt 19
2.5 Các phương thức trong Junit 19
2.6 Cách sử dụng cơ bản 19
2.7 Hướng dẫn sử dụng cơ bản của junit trong eclip 25
Trang 6ra các ảnh hưởng nghiêm trọng đến xã hội, kinh tế Những lỗi này có thể do tự bảnthân phần mềm bị hỏng học không được kiểm duyệt kĩ lưỡng trước khi đưa ra chongười dùng hay cũng có thể do người dùng cố tình phá hoại nhằm đánh cắp thôngtin cá nhân như mã số tài khoản ngân hàng, số điện thoại, danh bạ tin nhắn,…Những vấn đề nan giải và cấp thiết này càng có xu hướng mở rộng trong các nămgần đây, điển hình như sự cố máy tính Y2K năm 2000 làm tê liệt nhiều hệ thốngmáy tính lớn hay như càng có nhiều loại virus phá hoại mới xuất hiện, tấn công vàocác lỗ hổng bảo mật phần mềm là tê liệt nhiều hệ thống phần mềm và phần cứng.
Từ đây ta dễ dàng nhận ra là mặc dù phần mềm phát triển ngày càng phức tạpnhưng vấn đề chất lượng vẫn là một dẩu hỏi lớn cần xem xét cẩn thận
Do đó yêu cầu đặt ra là cần có công tác kiểm thử phần mềm thật kĩ lưỡngnhằm ngăn chặn các lỗi hay hỏng hóc có tiềm tàng bên trong phần mềm mà ta chưakịp nhận ra Tuy nhiên vì phần mềm ngày càng lớn, hàng nghìn module, có thể do
cả một công ty hàng nghìn người phát triển vì vậy để kiểm thử được một phầnmềm lớn như vậy sẽ tốn rất nhiều công sức và thời gian nếu làm thủ công, chưa kểđến chất lượng kiểm thử sẽ không cao và thật chính xác phù hợp với yêu cầu Theo
Trang 7nhiều tính toán thì công việc kiểm thử đóng vai trò hết sức quan trọng trong quytrình phát triển phần mềm nó đóng góp tới 30%-70% tổng toàn bộ chi phí cho việcsản xuất phần mềm Vì vậy cần có các hệ thống kiểm thử phần mềm một cách tựđộng cho phép ta thực hiện được các công việc một cách nhanh chóng và độ an
toàn chính xác cao nhất có thể Và đó là lí do nhóm em lựa chọn đề tài “ Kiểm thử
tự động chức năng hệ thống quản lý kho hàng với công cụ Junit ” để nghiên
cứu, tìm hiều và đề ra các giải pháp mới để cải tiến các quy trình kiểm thử như hiệnnay sao cho năng suất cao nhất
3 Mục đích
Đề tài “ Kiểm thử tự động chức năng hệ thống quản lý kho hàng với công
cụ Junit ” tìm hiểu về kiểm thử phần mềm,kiểm thử tự động,tìm hiểu về công cụ
Junit và kiểm thử chức năng của hệ thống quản lý kho hàng bằng công cụ kiểm thử
tự động Junit
4 Bố cục
Nội dung chính đề tài chia làm 3 chương
Chương 1: Tổng quan về kiểm thử phần mềm : phần này chúng ta sẽ
đi tìm hiểu về một số khái niện phần mềm và kiểm thử phần mềm.Chương 2: Tìm hiểu về công cụ kiểm thử tự động Junit : phần nàychúng ta sẽ tìm hiểu về lịch sử công cụ kiểm thử tự động Junit, cáchcài đặt và một số bước thực hiện cơ bản
Chương 3: Ứng dụng công cụ Junit để kiểm thử tự động chức năngcủa hệ thống quản lí kho hàng
Trang 85 Phương pháp tiếp cận
Đọc lý thuyết: thu thập tài liệu, thống kê lý thuyết
Phân tích mẫu
Thực nghiệm thực tế
Trang 9PHẦN 2 NỘI DUNG
CHƯƠNG 1 TỔNG QUAN VỀ KIỂM THỬ PHẦN MỀM
1.1 Phần mềm
1.1.1 Định nghĩa phần mềm
Theo định nghĩa của IEEE: Bao gồm các chương trình máy tính, các thủ tục,
các tài liệu có thể liên quan và các dữ liệu liên quan đến hoạt động của hệ thốngmáy tính
Theo định nghĩa của ISO: 4 thành phần cơ bản của phần mềm:
• Chương trình máy tính (code)
• Các thủ tục
• Tài liệu
• Dữ liệu cần thiết để vận hành phần mềm
1.1.2 Đặc trưng của phần mềm
-Phần mềm được kỹ nghệ, không được chế tạo theo nghĩa cổ điển
-Có tính phức tạp cao và luôn thay đổi
-Phần mềm không nhìn thấy được
1.2 Định nghĩa kiểm thử phần mềm
Theo Glenford Myers:
• Kiểm thử là quá trình vận hành chương trình để tìm ra lỗi
Theo IEEE: Kiểm thử là
Trang 10• Là quá trình vận hành hệ thống hoặc thành phần dưới những điều kiệnxác định, quan sát hoặc ghi nhận kết quả và đưa ra đánh giá về hệthống hoặc thành phần đó
• Là quá trình phân tích phần mềm để tìm ra sự khác biệt giữa điều kiệnthực tế và điều kiện yêu cầu và dựa vào điểm khác biệt đó để đánh giátính năng phần mềm
1.3 Mục tiêu của kiểm thử
- Tìm ra được càng nhiều lỗi càng tốt trong điều kiện về thời gian đã định vànguồn lực sẵn có
- Chứng minh rằng sản phẩm phần mềm phù hợp với các đặc tả của nó
- Xác thực chất lượng kiểm thử phần mềm đã dùng chi phí và nỗ lực tối thiểu
- Thiết kế tài liệu kiểm thử một cách có hệ thống và thực hiện nó sao cho cóhiệu quả, tiết kiệm được thời gian công sức
1.4 Phân Loại Kiểm Thử
Phân loại kiểm thử dựa trên các yếu tố:
• Mục đích kiểm thử
• Chiến lược kiểm thử
• Phương pháp kiểm thử
• Kỹ thuật kiểm thử
Trang 111.4.1 Dựa Vào Mục Đích Kiểm Thử
- Kiểm thử đơn vị, module
- Kiểm thử tải dữ liệu (load testing)
- Kiểm thử tải trọng (stress testing)
- Kiểm thử hiệu suất (performance testing)
1.4.2 Dựa vào chiến lược kiểm thử
Trang 121.4.3 Dựa vào phương pháp tiến hành kiểm thử
• Kiểm thử động có thể bắt đầu trước khi chương trình đã hoàn tất
1.4.4 Dựa vào kỹ thuật kiểm thử
Kiểm thử hộp trắng
• Kiểm thử theo góc nhìn thực hiện
• Cần có kiến thức về chi tiết thiết kế và thực hiện bên trong
• Kiểm thử dựa vào phủ các lệnh, các nhánh, phủ các điều kiện con
Trang 141.6 Quy trình kiểm thử
1.7 Các cấp độ kiểm thử
Kiểm thử đơn vị- Unit testing
Kiểm thử tích hợp- Integration testing
Kiểm thử hệ thống- System testing
Kiểm thử chấp nhận- Acceptance testing
Trang 15 Kiểm thử phi chức năng:
• Tập trung vào kiểm thử sản phẩm, hệ thống phần mềm cần kiểm thử cónhững đặc tính tốt như thế nào (how well)
• Kiểm thử phi chức năng có thể được sử dụng ở mọi cấp độ kiểm thửnhưng thường được sử dụng hiệu quả nhất trong cấp độ kiểm thử hệ thống
và kiểm thử chấp nhận sản phẩm
Kiểm thử liên quan đến sự thay đổi:
Trang 16• Thực hiện hoạt động kiểm thử khi có sự thay đổi trên hoặc trong sảnphẩm
• Sự thay đổi của sản phẩm phần mềm có thể là:
- Sửa chữa các lỗi tìm được
- Sản phẩm được nâng cấp, được thay đổi về chức năng
1.9 Các cấp độ kiểm thử
1.9.1 Kiểm thử đơn vị- Unit testing
Kiểm thử đơn vị nhằm kiểm tra đơn vị thiết kế nhỏ nhất- một module phầnmềm Một module hoạt động thường có trao đổi thông tin với module mứcdưới và mức trên nó, do đó phạm vi phát hiện lỗi liên quan chặt chẽ tớimodule này
Người tiến hành kiểm thử đơn vị: lập trình viên cùng nhóm của mình.
Kỹ thuật kiểm thử đơn vị: chủ yếu là hộp trắng, trong các trường hợp cần
thiết có thể sử dụng thêm kỹ thuật kiểm thử hộp đen
Trang 17Kỹ thuật kiểm thử đơn vị
Module không phải là một chương trình độc lập, nên cần phát triển thêm các
Driver và Stub để tiến hành kiểm thử đơn vị
Bộ lái (driver): là một hàm main điều khiển việc đưa dữ liệu vào và nhận
kết quả của module đang cần kiểm thử
Cuống (stub): là một chương trình máy tính dùng để thay thế cho một
module phần mềm sẽ được xác định sau (IEEE)
Stub (dummy program): Là một đoạn mã dùng để mô phỏng hoạt động của
thành phần còn thiếu
Trang 181.9.2 Kiểm thử tích hợp
Kiểm thử tích hợp nhằm nhận được một bộ phận chức năng hay một hệ contốt
Là một kỹ thuật có tính hệ thống để xây dựng cấu trúc của chương trình
Từ các module đã qua kiểm thử đơn vị, xây dựng cấu trúc chương trình đảmbảo tuân theo thiết kế
Có hai cách tích hợp:
Tích hợp từng bước Theo cách này có 3 chiến lược:
- Tích hợp từ dưới lên(bottom-up testing)
Trang 19- Tích hợp từ trên xuống (top-down testing)
- Kết hợp 2 chiến lược trên (sandwich testing)
Tích hợp đồng thời: kiểm thử vụ nổ lớn (big bang testing)
Các lỗi thường gặp
• Dữ liệu bị mất khi đi qua một giao diện
• Hiệu ứng 1 module vô tình gây ra ảnh hưởng tới các module khác
• Sự kết hợp các chức năng phụ có thể không tạo ra được chức năngchính mong muốn
• Các sai sót nhỏ có thể trở thành thảm họa
• Có thể gặp vấn đề với các cấu trúc dữ liệu toàn cục
1.9.3 Kiểm thử hệ thống
Khi nào có thể thực hiện kiểm thử hệ thống:
• Hệ thống cần kiểm thử đã hoàn thiện
• Kiểm thử tích hợp và đơn vị đã hoàn thành
• Sản phẩm được tích hợp đúng thiết kế
• Các tài liệu đặc tả đã là bản cuối cùng
• Các tài liệu hỗ trợ kiểm thử như test plan, test case đã hoàn thành
1.9.4 Kiểm thử chấp nhận
Kiểm thử chấp nhận (aceptance testing) : vận hành hệ thống trong môitrường của người sử dụng
Kiểm thử alpha (alpha testing)
• Người dùng thực hiện với số liệu giả lập
Trang 20• Trong môi trường phát triển
Kiểm thử beta (beta testing)
• Người dùng thực hiện với số liệu thực
• Trong môi trường ứng dụng thực
1.10 Kiểm thử tự động
1.10.1 Tổng quan về kiểm thử tự động
Kiểm thử tự động: áp dụng các công cụ giúp thực hiện việc kiểm thử phầnmềm
Nên sử dụng công cụ tự động khi:
• Không đủ tài nguyên
• Kiểm thử hồi quy
• Kiểm tra khả năng vận hành của phần mềm trong môi trường đặc biệt
Test script: nhóm mã lệnh đặc tả kịch bản dùng để tự động hóa một trình tựkiểm thử
Test scipt: có thể tạo thủ công hoặc tạo tự động dùng công cụ kiểm thử tựđộng
Trang 211.10.2 Quy trình kiểm thử tự động
1 Tạo test script
Giai đoạn này ta dùng test tool để ghi lại các thao tác lên PM cần kiểm tra
và tự động sinh ra test script
2 Chỉnh sửa lại test script
Chỉnh sửa lại test script thực hiện kiểm tra theo đúng yêu cầu đặt ra, cụ thể
là làm theo test case cần thực hiện
3 Chạy test script để kiểm thử tự động
Giám sát hoạt động kiểm tra phần mềm của test script
4 Đánh giá kết quả
Kiểm tra kết quả thông báo sau khi thực hiện kiểm thử tự động Sau đó bổsung, chỉnh sửa những sai sót
Trang 221.10.3 Ưu , nhược điểm của kiểm thử tự động
Ư u điểm:
• Kiểm thử phần mềm không cần can thiệp của tester
• Giảm chi phí thực hiện kiểm tra số lượng lớn các test case hoặc testcase lặp lại nhiều lần
• Giả lập tình huống khó có thể thực hiện bằng tay
Nhược điểm:
• Mất chi phí tạo các script để thực hiện kiểm thử tự động
• Tốn chi phí dành cho bảo trì các script
• Đòi hỏi tester phải có kỹ năng tạo và thay đổi script cho phù hợp testcase
• Không áp dụng tìm được các lỗi mới cho phần mềm
1.10.4 Một số công cụ kiểm thử tự động
Công cụ tự động Quick Test Pro, Junit, Selenium, Robotium…
Trang 23CHƯƠNG 2 GIỚI THIỆU VỀ CÔNG CỤ KIỂM THỬ JUNIT
2.1 Lịch sử phát triển của Junit
Vào giũa nhũng năm 90 của thế kỷ 20, Kent Beck đã phát triển một bộ thửnghiệm đầu tiên cho SmairTalk
Beck và Gamma phát triển Junit trên một chuyến bay từ Zurick đếnWashington DC
Từ đó trở di Junit trở thành công cụ chuẩn cho phát triển thách thức trongJava
Ngày nay, Junit được tích hợp sẵn trong các IDE cùa Java (Eclipse, BlueJ,Jbuilder, DrJava)
2.2 Junit là gì?
Các ngôn ngữ lập trình như như ASP, C++, C, Delphi, Perl, PHP, REBOL,Python,… đều có bộ hỗ trợ Unit Test riêng của nó JUnit là mộtframework được dùng cho Unit Test trong Java JUnit được xây dựng bởiErich Gamma và Kent Beck, hai người nổi tiếng nhất về lập trình XP
Trong JUnit có các Test Case là các lớp của Java, các lớp này bao gồmmột hay nhiều các phương thức cần kiểm tra, và Test Case này lại đượcnhóm với nhau để tạo thành Test Suite Mỗi phương thức thửtrong JUnit phải được thực thi nhanh chóng Tốc độ ở đây là điều tối quantrọng vì càng nhiều phép thử được viết và tích hợp vào bên trong quá trình
Trang 24phần mềm thì càng tốn nhiều thời gian để hơn cho việc chạy toàn bộ TestSuite.
Những người lập trình không muốn bị ngắt quãng trong một thời gian dàitrong khi các phép thử đang chạy, do đó các phép thử mà càng chạy lâu thì
sẽ có nhiều khả năng là các lập trình viên sẽ bỏ qua bước này Các phépthử được thiết kế để khi chạy mà không cần có sự can thiệp của conngười
Mỗi phép thử trong JUnit là một phương thức public, không có đối số vàđược bắt đầu bằng chữ test ( testXXX()) Nếu chúng ta không tuân thủtheo qui tắc này thì JUnit sẽ không xác định được các phương thức testmột cách tự động
2.3 Lợi ích của Junit
JUnit tránh cho người lập trình phải làm đi làm lại những việc kiểm thửnhàm chán bằng cách tách biệt mã kiểm thử ra khỏi mã chương trình,đồng thời tự động hóa việc tổ chức và thi hành các bộ số liệu kiểm thử
Thoạt tiên, khi sử dụng JUnit, ta có thể có cảm giác là JUnit chỉ làm mấtthêm thời gian cho việc kiểm thử: Thay vì phải viết thêm các lớp vàphương thức mới phục vụ cho công tác kiểm thử, ta có thể soạn nhanhmột bộ số liệu rồi viết ngay vào trong phương thức main() và quan sátngay kết quả kiểm thử Vì quá trình soạn số liệu và quá trình kiểm thửdiễn ra đồng thời, nên ta sẽ dễ dàng nhận biết được ngay chương trình đãchạy đúng trên bộ số liệu kiểm thử hay không, mà không cần nhìn vào tínhiệu “xanh” mà JUnit có thể hỗ trợ
Nhưng khi tổ chức lại chương trình cho hợp lý hơn (refactoring) hoặc khiphải thay đổi chương trình để phục vụ cho nhu cầu mới, các bộ số liệu
Trang 25kiểm thử trước đây sẽ cần được sử dụng lại để chắc chắn rằng những thayđổi trong chương trình không làm phương hại đến những thành quả trước
đó, lúc này ta sẽ phải mất thời gian để tìm hiểu lại xem bộ số liệu trướcđây sẽ tương ứng với kết xuất gì vì ta không thể nhớ hết mọi hoạt độngkiểm thử đã diễn ra Việc nhớ lại những kiểm thử đã qua sẽ chẳng thú vị
vì không đem đến cho ta điều gì mới Nếu phải kiểm thử trên những bộ
số liệu lớn thì gánh nặng của việc tổ chức kiểm thử sẽ chồng chất thêm.JUnit giúp người lập trình tự động hóa các công việc nhàm chán, và chỉcần nhìn thấy tín hiệu “xanh” là người lập trình có thể an tâm rằngmodule đã được lập trình đúng
2.4 Cài đặt
- Phiên bản cài đặt: 1.4 hoặc 1.5.
- Công cụ được cài đặt trên hệ điều hành Windows.
- Yêu cầu về phần mềm hỗ trợ: phần mềm Eclipse.
- Yêu cầu khác: máy đã cài đặt biến môi trường Java, bộ framewwork
Apache POI
2.5 Các phương thức trong Junit
• assertXXXQ: Các phương thức dạng assertXXX( ) được dùng đế kiểm tra các điều kiện khác nhau
• SetUp() và teardown(): Hai phương thức này là 1 phân cùa lớpJunit.framewor1<.TestCase Khi sử dụng 2 phương thức này sẽ giúp chúng tatránh được việc trùng mã khi nhiềuu test cùng chia sẻ nhau ở phân khởi tạo vàdọn dẹp các biến
Trang 26• Tố chức các phép thử: Mỏi phép thử (Test Case) chi nên kiẽm tra phân cụ thếcủa một chức năng nào đỏ Chúng ta không nên kẻt hợp nhiêu phép thử khônglén quan đẽn nhau vào trong cùng 1 phương thúc testXXX( )
public class MessageUtil {
private String message ;
//Constructor
//@param message to be printed
public MessageUtil ( String message ){
this message = message ;
}
Trang 27
// prints the message
public String printMessage (){
System out println ( message );
return message ;
}
}
Tạo lớp kiểm tra
Tạo một lớp kiểm tra java, TestJunit.java
Thêm một phương pháp thử nghiệm testPrintMessage () vào lớp kiểm tra của bạn
Thêm Annotaion @Test to method testPrintMessage ()
Thực hiện điều kiện kiểm tra và kiểm tra điều kiện sử dụng assertEquals API của JUnit
Tạo một tên tệp java class TestJunit.java trong C:\>
JUNIT_WORKSPACE
import org junit Test ;
import static org junit Assert assertEquals ;
public class TestJunit {
Trang 28String message = "Hello World" ;
MessageUtil messageUtil = new MessageUtil ( message );
@Test
public void testPrintMessage () {
assertEquals ( message , messageUtil printMessage ());
}
}
Tạo lớp chạy thử
Tạo một lớp java TestRunner
Sử dụng phương pháp runClasses của lớp JUnitCore của JUnit để chạy trường hợp thử nghiệm của lớp test đã tạo ở trên
Nhận kết quả của các trường hợp thử nghiệm chạy trong Đối tượng kết quả.Nhận lỗi (s) bằng phương thức getFailures () của đối tượng Result
Nhận kết quả bằng cách sử dụng phương thức wasSuccessful () của đối tượng Result
Tạo tệp tin lớp java có tên TestRunner.java
trong C:\>JUNIT_WORKSPACE để thực hiện (các) trường hợp kiểm tra
Trang 29import org junit runner JUnitCore ;
import org junit runner Result ;
import org junit runner notification Failure ;
public class TestRunner {
public static void main ( String [] args ) {
Result result = JUnitCore runClasses ( TestJunit class );
for ( Failure failure : result getFailures ()) {
System out println ( failure toString ());
}
System out println ( result wasSuccessful ());
}
}
Biên dịch MessageUtil, Test case và Test Runner classes sử dụng javac
C:\JUNIT_WORKSPACE>javac MessageUtil.java TestJunit.java
TestRunner.java
Bây giờ chạy Runner thử nghiệm, mà sẽ chạy các trường hợp thử nghiệmđược xác định trong các lớp Test Case được cung cấp
C:\JUNIT_WORKSPACE>java TestRunner
Trang 30Xác minh đầu ra.
Hello World
true
Bây giờ, hãy cập nhật TestJunit trong C: \> JUNIT_WORKSPACE để thửnghiệm không thành công Thay đổi chuỗi thông báo
import org junit Test ;
import static org junit Assert assertEquals ;
public class TestJunit {
String message = "Hello World" ;
MessageUtil messageUtil = new MessageUtil ( message );
@Test
public void testPrintMessage () {
message = "New Word" ;
assertEquals ( message , messageUtil printMessage ());
Trang 31import org junit runner Result ;
import org junit runner notification Failure ;
public class TestRunner {
public static void main ( String [] args ) {
Result result = JUnitCore runClasses ( TestJunit class );
for ( Failure failure : result getFailures ()) {
System out println ( failure toString ());
Trang 32 Tạo Project
1 Menu File => New => Project…
2 Chọn Java Project trong hộp thoại New Project và nhấn Next
Trang 333 Trong hộp thoại New Java Project điền thông tin và chọn Next
Project name: tên của project
Chọn jre: phiên bản của thư viện và máy ảo java
4 Cấu hình thư viện (nếu không có thì để mặc định) và nhấn Finish
Trang 345 Kết quả
Tạo lớp trong java
1 Click chuột phải vào thư mục src => chọn New => chọn Class
Trang 352 Trong hộp thoại New Java Class điền các giá trị sau và chọn Finish
• Package: demo => phân nhóm các lớp đối tượng
• Name: PhanSo
• SuperClass: lớp cha (nếu có)
Trang 36• Interfaces: các interface cần thực thi (nếu có)
3. Trong lớp PhanSo, định nghĩa các thuộc tính, hàm khởi tạo mặc định
và hàm cộng
Tạo lớp PhanSoTest trong test package
Trang 371. Chuột phải vào Project => chọn New => chọn Junit Test case
2 Trong hộp thoại New Junit Test case chú ý các thuộc tính sau và chọn Next
Package: tên package
Name: tên lớp
Trang 38 Class under Test: tên lớp được test
3 Muốn test hàm/phương thức nào thì chọn và nhấn Finish
4 Kết quả
Trang 39 Sử dụng các hàm AssertXXX để so sánh kết quả