2 Chi tiết yêu cầu các chức nănga Quản lý hàng hoá - Mỗi loại hàng hóa sẽ được ràng buộc bởi các thông tin chính: Mã Hàng, Tên Hàng, Nhà Cung Cấp, Số Lượng.. - Hàng được nhập kho được rà
QUẢN LÝ NHÓM
Đánh giá quá trình làm việc nhóm
II) Quản lý các tuần
- Thời gian: Từ ngày: 10/07/2023 đến ngày 16/07/2023
- Nội dung: Thảo luận tìm đề tài, phân chia nhóm theo từng chức năng với đề tài cần kiểm thử Thực hiện trao đổi thảo luận, đọc, hiểu tài liệu thiết kế phục vụ cho việc kiểm thử hộp đen.
Stt Họ tên Đánh giá
- Thời gian: Từ ngày: 17/07/2023 đến ngày 23/07/2023
- Trao đổi làm bài tập nhằm hoàn thành kiểm thử hộp đen.- Lên đồ thị nguyên nhân kết quả, bảng quyết định và các trường hợp kiểm thử của chức năng ký gửi và thêm nhân viên.
Stt Họ tên Đánh giá
- Thời gian: Từ ngày: 24/07/2023 đến ngày 30/07/2023
- Nội dung: Hoàn thành kiểm thử hộp đen, tiến hành đánh giá
Kiểm thử hộp trắng thực hiện tìm source code của chức năng, xác định các nút, đồ thị đường diễn tiến, xác định trường hợp kiểm thử và xác định testcase.
Stt Họ tên Đánh giá
- Thời gian: Từ ngày: 31/07/2023 đến ngày 6/08/2023
- Nội dung: Hoàn thành kiểm thử hộp trắng, tổ chức ôn luyện cho kỳ thi giữa kỳ, chuẩn bị kiến thức làm kiểm thử module
Stt Họ tên Đánh giá
- Thời gian: Từ ngày: 1/08/2023 đến ngày 9/08/2023
- Nội dung: Hoàn thành kiểm thử module của 2 chức năng chính và các hàm phụ thuộc.
Stt Họ tên Đánh giá
Tổng kết
Stt Họ tên Đánh giá
NỘI DUNG
Tài liệu phác thảo dự án
1) Yêu cầu nghiệp vụ của phần mềm
Hệ thống chức năng phần mềm bao gồm các phần:
- Quản lý việc nhận ký gửi
2) Chi tiết yêu cầu các chức năng a) Quản lý hàng hoá
- Mỗi loại hàng hóa sẽ được ràng buộc bởi các thông tin chính: Mã Hàng, Tên Hàng, Nhà Cung Cấp, Số Lượng.
- Ngoài ra còn có thể có thêm Loại Hàng, Đơn vị,… tuỳ thuộc hàng hoá
- Thực hiện thêm mới khi nhập sản phẩm, Thay Đổi Bổ Sung cho một loại hàng hoá nào đó, Xoá thông tin hàng hóa khi có lỗi sản phẩm hay gặp sự cố sản phẩm… b) Quản lý nhập hàng
- Hàng nhập từ các công ty.
- Đặt hàng qua điện thoại hoặc Gmail, sau khi thanh toán tiền qua thẻ ngân hàng thì sẽ được nhân viên công ty giao đến shop Shop có nhiệm vụ kiểm tra hàng rồi nhập kho.
- Hàng được nhập kho được ràng buộc với các thông tin: Tên Nhà Cung Cấp, Ngày Nhập, Số Lượng, Giá Thành, Nguồn Gốc, Mã Nhập Hàng, Gói Hàng, Mã Chi Tiết Nhập
- Có các chức năng thêm/xóa/sửa phiếu nhập đó c) Quản lý nhà cung cấp
- Ràng buộc bởi các thông tin: Mã NCC, Tên NCC, Địa Chỉ, Số TK, Liên Hệ
- Các tính năng hệ thống:
+ Thêm mới NCC: Khi làm hợp đồng nhập hàng từ công ty mới
+ Sửa thông tin NCC: Khi nhập sai hoặc một vài NCC thay đổi thông tin + Xóa NCC: Khi không hợp tác nhập hàng từ NCC hoặc sai thông tin NCC. e) Quản lý bán hàng
- Sau khi khách hàng đặt mua sản phẩm thì sẽ lập hoá đơn (2 hoá đơn – 1 cho khách – 1 giữ lại) Sau khi thanh toán đủ tiền thì sẽ giao sản phẩm cho Khách Hàng
- Ràng buộc các sản phẩm khách hàng chọn phải còn hàng, Khách Hàng phải thanh toán Tiền Mặt hoặc chuyển khoản cho Shop rồi mới nhận sản phẩm.
- Hoá đơn có các thông tin: Mã HĐ, Ngày Lập, Tổng Giá, Chi Tiết hoá đơn có các thông tin hàng hoá,… ->Đại loại như siêu thị f) Quản lý Ký gửi và Chăm sóc
- Là các dịch vụ của shop, thích hợp với các “SEN” không có nhiều thời gian với “BOSS” thì có thể đến shop ký gửi nhờ chăm sóc trong thời gian ngắn
- Các Ràng buộc Chính về thông tin Chủ khi đến gửi “BOSS”: Tên SEN,
CMNN/CCCN, Địa Chỉ, SĐT, Thông tin của BOSS
+ Ràng buộc về thông tin của BOSS: Tên, Cân Nặng, Giấy tờ tiêm chủng.
- Sau khi Lấy thông tin xong thì “SEN” chọn chuồng cho “BOSS” và thống nhất giá COMBO duy nhất.
- Ký gửi có ngày gửi ngày trả
- Có cả tên nhân viên chăm sóc BOSS.
- Sau khi hoàn tất sẽ có 2 phiếu Gửi giống nhau với các ràng buộc thông tin: Tên BOSS,Tên SEN, số chuồng, ghi chú.
+Ràng buộc: Sau này nhận BOSS thì SEN phải đưa shop phiếu gửi BOSS.
- Chuồng sẽ được ràng buộc các thông tin: Mã chuồng, Tên chuồng, Diện Tích, các trạng thái Có/Chưa Có pet.
- Đương nhiên có các chứng năng Thêm/Sửa/Xóa khi ký gửi cho khách/thay đổi thông tin/xóa thông tin hoặc đã xong ngày ký gửi g) Kiểm Kho
- Chủ hoặc nhân viên kiểm tra sản phẩm trong kho để đặt hàng mới
+ Ràng buộc: số lượng sản phẩm < 5 Thì cần hiển thị cần nhập hàng.
- Gồm các báo cáo theo Ngày/Tuần/Tháng/Năm về doanh thu, hàng hoá,… h) Quản Lý nhân viên
- Nhân Viên nhận lương theo tháng.
+ Nếu nghỉ ca nào sẽ trừ ca đó
+ Trừ lương nếu vi phạm hoặc làm thất thoát
+ Thưởng sẽ tuỳ Chủ shop.
- Ràng buộc về mặt thông tin: Mã NV, Tên NV, CMND/CCCN, Địa Chỉ, SĐT
- Các thủ tục: Lưu/Sửa/Xoá nhân viên.
+ Lưu: tạo mới nhân viên, nhập thông tin rồi lưu lại
+ Sửa: thay đổi thông tin nhân viên
+ Xoá thông tin nhân viên khỏi hệ thống (có thể nhân viên nghỉ làm…)
=>Có thể chứa các chức năng khác (các phần chức năng nhỏ hơn) không theo tài liệu yêu cầu này nhưng vẫn phù hợp hỗ trợ cho phần mềm và các chức năng chính miễn sao nó giúp cho shop một phần nào đó chuyển đổi số (***) Đó là sự sáng tạo và kinh nghiệm từng trải của các bạn.
3) Yêu cầu của người sử dụng
- PM Thân thiện dễ sử dụng
- Câu từ dùng trong PM ngắn gọn rõ ràng
- Dùng ngôn ngữ chuyên ngành và từ ngữ toàn dân
- Rõ ràng, gọn không rườm rà quá hoa hoè
- Giao diện thân thiện dễ dùng.
II TÀI LIỆU PHÂN TÍCH VÀ THIẾT KẾ GIAO DIỆN
1) Tài Liệu Mô Tả UC và Đặt Tả bằng tài liệu AD
1.2.4) Quản Lý Báo Cáo Thống Kê
1.2.5) Quản Lý Ký Gửi và Chăm Sóc
✔ Tên trường hợp sử dụng
+ NHẬP HÀNG cho phép cửa hàng nhập thêm các loại hàng hóa cho chó, mèo từ các nhà cung cấp.
✔ Actor : Chủ shop, Nhà cung cấp.
+ Nhà cung cấp gởi hàng tới, chủ cửa hàng sẽ thực hiện các công việc liên quan đến NHẬP HÀNG trong gói QUẢN LÝ NHẬP HÀNG.
+ Khi nhà cung cấp gởi hàng đến Chủ cửa hàng sẽ thực hiện công việc kiểm hàng và thanh toán.
[ngoại lệ] Mặt hàng không đảm bảo về số lượng hoặc chất lượng.
+ Chủ cửa hàng sẽ thông báo lại cho nhà cung cấp về tình trạng hàng hóa và yêu cầu lại mặt hàng khác hoặc bổ sung thêm số lượng.
[Ngoại lệ] Nhà cung cấp mới chưa được đăng kí.
[Ngoại lệ] Hàng hóa mới chưa được đăng kí.
Mặt hàng không đảm bảo về số lượng hoặc chất lượng
+ Nếu hàng nhà cung cấp giao đến không đảm bảo chất lượng sẽ từ chối nhận hàng.
+ Nếu nhà cung cấp giao hàng không đủ số lượng cửa hàng yêu cầu, sẽ yêu cầu nhà cung cấp bổ sung đủ số lượng hàng theo yêu cầu.
+ Đăng ký nhà cung cấp mới.
+ Đăng ký mặt hàng mới.
✔ Cách thoát khỏi trường hợp sử dụng
+ Sau khi hoàn tất việc cập nhật thông tin hàng hóa cho nhà cung cấp, chủ cửa hàng sẽ thực hiện thoát ra khỏi phần mềm trên giao diện Form NHẬP HÀNG.
✔ Các điều kiện đặc biệt
+ Chủ cửa hàng phải có mặt tại cửa hàng lúc nhà cung cấp gởi hàng tới.
+ Sau khi nhập hàng xong phải tiến hành cập nhật lại các mặt hàng.
*Biểu Đồ Hoạt Động AD
✔ Tên trường hợp sử dụng
+ Cho phép khách hàng mua đồ theo nhu cầu của mình, nhân viên cửa hàng sẽ đáp ứng yêu cầu của khách hàng.
✔ Actor : Khách hàng, Chủ shop, Nhân viên.
+ Khách hàng yêu cầu mua đồ tại cửa hàng, nhân viên quản lý việc bán hàng sẽ thực hiện chức năng bán hàng cho khách.
+ Khách hàng nêu thông tin loại hàng mà mình muốn mua, với nhân viên bán hàng Nhân viên sẽ thực hiện chức năng bán hàng của mình.
[Ngoại lệ] loại phụ kiện mà khách hàng yêu cầu không có trong cửa hàng hoặc hết hàng
+ Nhân viên bán hàng ghi lại yêu của khách hàng, cho khách hàng xem hàng theo yêu cầu, lập hóa đơn, in hóa đơn và thanh toán tiền.
+ Nhân viên bán hàng cập nhật lại thông tin hàng hóa.
[Ngoại lệ] loại sản phẩm mà khách hàng yêu cầu không đủ số lượng
+ Nếu khách hàng có nhu cầu đặt hàng, nhân viên bán hàng sẽ lập hóa đơn đặt hàng cho khách, liên hệ tới nhà cung cấp Nhân viên bán hàng sẽ gửi thông tin đến nhân viên phụ trách nhập hàng để cập nhật lại thông tin hàng cần nhập.
Phụ kiện mà khách hàng yêu cầu không có trong cửa hàng
+ Nhân viên bán hàng sẽ thông báo cho khách hàng và tư vấn cho khách hàng một số mặt hàng khác.
Phụ kiện khách yêu cầu đã hết hoặc không đủ số lượng
+ Nhân viên sẽ thông báo cho khách hàng và hỏi khách hàng có muốn mua đặt mua các sản phẩm khác hay không.
✔ Cách thoát khỏi trường hợp sử dụng:
+ Sau khi đã thực hiện các yêu cầu của khách hàng, lập hóa đơn, in hóa đơn và thanh toán, nhân viên bán hàng sẽ chọn thoát ra khỏi phần mềm trên giao diện Form BÁN HÀNG.
✔ Các điều kiện đặc biệt
+ Số lượng của hàng mà được khách hàng lựa chọn phải bằng hoặc lớn hơn số lượng yêu cầu của khách hàng.
+ Sau khi thanh toán, cập nhật thông tin hóa đơn, in hóa đơn và giao hóa đơn lại cho khách hàng.
*Biểu Đồ Hoạt Động AD
* Tên trường hợp sử dụng:
NHÂN VIÊN cho phép nhập thêm thông tin nhân viên mới
✔ Actor : Chủ shop, Nhân viên
Khi có nhân viên mới, quản lý thực hiện chức năng cập nhật thông tin nhân viên mới trong gói Nhân viên
Nhà quản lý truy cập danh sách nhân viên, kiểm tra thông tin nhân viên, cập nhật và lưu thông tin nhân viên mới
Bước 1:Truy cập danh sach nhân viên.
Bước 2: Nhấn Thêm nhân viên
Bước 3: Kiểm tra thông tin nhân viên
Bước 4: Cập nhật thông tin nhân viên
Bước 5: Lưu thông tin nhân viên
+Thông tin nhân viên không hợp lệ.
+ Nếu thông tin nhập vào không hợp lệ thì kick vào ô báo lỗi rồi nhập lại.
✔ Cách thoát khỏi trường hợp sử dụng
+ Sau khi hoàn tất việc cập nhật thông tin Nhân viên dùng bấm “Thoát” để thoát khỏi giao diện Quản lý nhân viên.
✔ Các điều kiện đặc biệt
+ Người dùng phải thực hiện đăng nhập thành công.
1.3.4) Quản lý báo cáo thống kê:
✔ Tên trường hợp sử dụng
+ Quản lý báo cáo thống kê.
+ NHẬP HÀNG cho phép cửa hàng xem,cập nhật,báo cáo, thống kê về doanh thu ,Hàng nhập và hàng bán trong 1 khoảng thời gian nhất định
✔ Actor : Chủ shop, Nhân viên
Khi muốn thống kê doanh thu, Chủ Shop và Nhân Viên có thể truy cập vào gói THỐNG KÊ để xem đầy đủ dữ liệu đã được thống kê của cửa hàng.
+ Bước 1 : Chủ shop hoặc nhân viên gửi yêu cầu thống kê
+ Bước 2 : Hệ thống hiển thị giao diện thống kê
+ Bước 3 : Chủ shop hoặc nhân viên chọn loại hình thống kê (Thống kê doanh thu, thống kê hàng nhập, thống kê bán hàng)
+ Bước 4 : Chủ shop hoặc nhân viên chọn hình thức thống kê(Thống kê theo ngày, thống kê theo tháng, thống kê theo năm)
[Ngoại lệ] Người dùng Đăng nhập không thành công.
+Không thể thực hiện thống kê.
+ Bước 1 Nếu người dùng đăng nhập không thành công thì hệ thống sẽ yêu cầu đăng nhập lại hoặc nhấn vào quên mật khẩu.
+ Bước 2 : Nhập thông tin để lấy mã xác minh
✔ Cách thoát khỏi trường hợp sử dụng
+ Sau khi hoàn tất việc xem xét báo cáo thống kê Người dùng bấm “Thoát” để thoát khỏi giao diện Thống Kê.
✔ Các điều kiện đặc biệt
+ Người dùng phải thực hiện đăng nhập thành công.
1.3.5) Quản lý Kí Gửi Và Chăm Sóc:
✔ Tên trường hợp sử dụng
+Quản lý kí gửi và chăm sóc.
+Quản lý tất cả các hoạt động liên quan đến việc kí gửi , chăm sóc.
✔ Actor : Khách hàng, Chủ shop, Nhân viên
+ Khi có yêu cầu kí gửi thú cưng của khách hàng.
+ Bước 1 : Khách yêu cầu kí gửi.
+ Bước 2 : Nhân viên kiểm tra tình trạng của thú cưng
+ Bước 3 : Nhân viên nhập thông tin thú cưng.
+ Bước 4 : Khách hàng chọn loại dịch vụ ( theo combo hoặc dịch vụ bình thường) + Bước 5 : Khách hàng chọn chuồng.
+ Bước 6 : Nhân viên nhập thông tin chuồng.
+ Bước 7 : Nhân viên nhập thông tin khách hàng
+ Bước 8 : Xuất phiếu kí gửi
[Ngoại lệ] Tình trạng thú cưng không đủ tiêu chuẩn về sức khỏe
+Không thể thực hiện kí gửi.
+Shop không còn chuôfng trống.
+Thức ăn phù hợp cho thú cưng thiếu
Nếu tình trạng sức khỏe của thú cưng không đảm bảo để có thể gửi ký gửi, khách hàng có thể mang thú cưng về hoặc ký cam kết miễn trừ trách nhiệm từ phía cửa hàng đối với bất kỳ tình trạng xấu đi của thú cưng nếu vẫn muốn tiến hành ký gửi.
+ Nếu thức ăn phù hợp cho thú cưng thiếu shop sẽ thực hiện liên hệ với nhà cung cấp để cung cấp thêm thức ăn
✔ Cách thoát khỏi trường hợp sử dụng
+ Sau khi hoàn tất việc xem xét báo cáo thống kê Người dùng bấm “Thoát” để thoát khỏi giao diện Kí Gửi.
✔ Các điều kiện đặc biệt
+ Thú cưng đủ tiêu chuẩn về sức khỏe
+ Shop còn chuồng trống, thức ăn
+Khách phải mang theo đúng phiếu kí gửi khi nhận lại thú cưng.
✔ Tên trường hợp sử dụng
+ Cho phép Nhân viên nhập thêm thông tin khách hàng đã đến mua hàng hoặc sữ dụng dịch vụ của shop.
✔ Actor : Khách hàng, Chủ shop, Nhân viên
+ Nhập thêm thông tin khách hàng.
+ Bước 1: Nhân viên yêu cầu nhập thông tin khách hàng.
+ Bước 2 : Hiển thị giao diện thêm thông tin khách hàng.
+ Bước 3 : Kiểm tra thông tin khách hàng.
[ngoại lệ] Ở bước 3 nếu thông tin khách hàng đã tồn tại thì báo khách hàng đã tồn tại.
+Thông tin nhập vào không hợp lệ.
+ Khách hàng đã tồn tại thì nhấn thoát.
+ Nếu thông tin nhập vào không hợp lệ thì kick vào ô báo lỗi rồi nhập lại.
✔ Cách thoát khỏi trường hợp sử dụng
+ Sau khi hoàn tất việc them thông tinNgười dùng bấm “Thoát” để thoát khỏi giao diện Quản lý nhân viên.
✔ Các điều kiện đặc biệt
+ Người dùng phải thực hiện đăng nhập thành công.
3) Biểu Đồ Tuần Tự (Sequence Diagram)
13 Xem Danh Sách Nhân Viên
23 Xem Danh Sách Khách Hàng
28 In Phiếu Thống Kê Báo Cáo
4) Tài Liệu Mô Tả Về Dữ Liệu a) Biểu đồ lớp b) Thiết kế trên SQL c) Chi tiết
5) Tài Liệu Thiết Kế Giao Diện
3.Thệ Thống-Thông Tin Tài Khoản
III) CÀI ĐẶT MỘT SỐ CHỨC NĂNG CHO DỰ ÁN
-Chức năng thêm 1 nhân viên import java.awt.BorderLayout; import java.awt.EventQueue; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.border.EmptyBorder; import javax.swing.table.DefaultTableModel; import javax.swing.JScrollPane; import javax.swing.JTabbedPane; import javax.swing.JTextField; import javax.swing.JMenuBar; import javax.swing.JMenu; import java.awt.Color; import java.awt.SystemColor; import java.awt.TextField; import javax.swing.UIManager; import javax.swing.JMenuItem; import javax.swing.JOptionPane; import javax.swing.JPopupMenu; import java.awt.Component; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import java.io.BufferedReader; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.InputStreamReader; import java.io.OutputStreamWriter; import java.io.PrintWriter; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.util.ArrayList; import javax.swing.JCheckBoxMenuItem; import javax.swing.ImageIcon; import javax.swing.JButton; import java.awt.event.ActionListener; import java.awt.event.ActionEvent; import javax.swing.JTable; import java.awt.Font; public class nhanvien extends JFrame { private JPanel contentPane; private JTextField textField; private JTextField textField_1; private JTextField textField_2; private JTextField textField_3; private JTextField textField_4; private JTextField textField_5; private JTextField textField_6; private JTable table;
*/ public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() { public void run() { try { nhanvien frame = new nhanvien(); frame.setVisible(true);
*/ public ArrayList a=new ArrayList(); public ArrayList b=new ArrayList(); public int d=-1; public void nhapdulieusql()
String sql="select * from nhanvien";
PreparedStatement cmd= ketnoi.cn.prepareStatement(sql); ResultSet rs= cmd.executeQuery(); while(rs.next())
String s=rs.getString(1)+";"+rs.getString(2)+";"+rs.getString(3)+";"+rs.getStrin g(4)+";"+rs.getString(5); a.add(s);
} rs.close(); ketnoi.cn.close();
Bảng mẫu mặc định mh = mới Bảng mẫu mặc định (); mh.addColumn ("Mã nhân viên"); mh.addColumn ("Tên nhân viên"); mh.addColumn ("Chứng minh thư"); mh.addColumn ("Địa chỉ"); mh.addColumn ("Số điện thoại"); cho (int i = 0; i < a.size (); i ++)
Object[] t=new Object[5]; t=s; mh.addRow(t);
} public void luu(String st)
String sql="insert into nhanvien values(?,?,?,?,?)"; PreparedStatement cmp=ketnoi.cn.prepareStatement(sql);
String[] s=st.split("[;]"); cmp.setString(1, s[0]); cmp.setString(2, s[1]); cmp.setString(3, s[2]); cmp.setString(4, s[3]); cmp.setString(5, s[4]); cmp.executeUpdate(); cmp.close();
} } public void xoa(String st)
PreparedStatement cmp=ketnoi.cn.prepareStatement("Delete From nhanvien Where manv=?"); cmp.setString(1, st); cmp.executeUpdate();
} } public int ktmanv(String stt)
String[] st1=a.get(i).split("[;]"); if ( stt.equalsIgnoreCase(st1[0])==true) return 0;
Kiểm thử hộp đen
1) Phân lớp tương đương a) Xác định lớp tương đương
Giá trị kiểm thử Lớp tương đương hợp lệ Lớp tương đương không hợp lệ
Ký tự nhập vào -Mã ký gửi là một chuỗi ký tự bao gồm chữ số và chữ cái (1) Bắt đầu bằng chữ cái (2) độ dài mã bằng 5
-Tên chủ là một chuỗi ký tự có dạng ký tự (4) và độ dài nằm trong khoảng [1,30]
-Liên hệ là chuỗi ký tự có dạng chữ số (6) có độ dài là 10 ký tự (7).
-Số CMND là chuỗi ký tự các chữ số (8) có độ dài là
- Tên pet là ký tự có dạng
-Mã ký gửi có ký tự đặc biệt
(28) bắt đầu bằng chữ số (29) có độ dài 30 (20)
- Một trong các ký tự nhập vào chuỗi số CMND là ký tự dạng chữ
- hoặc có chứa kí tự đặc biệt (22) hoặc có độ dài khác 9 (23)
-Địa chỉ là chuỗi có độ dài 100
- Một trong các ký tự nhập vào trong chuỗi số điện thoại là ký tự dạng chữ (26) hoặc ký tự đặc biệt (27) hoặc có độ dài khác 10 (28) b) Các ca kiểm thử
+ Các ca kiểm thử hợp lệ là các ca kiểm thử bao phủ các lớp tương đương hợp lệ (1), (2),(3),(4),(5),(6),(7),(8),(9),(10),(11),(12)
Mã nhân viên: NV01 Tên nhân viên : Nguyễn Văn A
Số CMND : 192012345 Địa chỉ: 1 Hùng Vương
Số điện thoại: 0912345678 + Các ca kiểm thử không hợp lệ
(16) Mã nhân viên:NV01 (NV01 đã tồn tại)
(17) Tên nhân viên: Nguyễn Văn 4
(18) Tên nhân viên: Nguyễn Hữu @
(19) Tên nhân viên là 1 chuỗi rỗng.
(20) Tên nhân viên: Nguyễn Trần Hữu Hoàng Huỳnh Lê Bảo Thiên (21) CMND: 1972A5673
(24) Địa chỉ: là 1 chuỗi rỗng
(25) Địa chỉ: 1806/127/2/6/15/48/2A khu phố 6 đường Huỳnh Tấn Phát, thị trấn Nhà Bè, huyện Nhà Bè, thành phố Hồ Chí Minh
2) Phân tích giá trị biên
Phân tích giá trị biên có 77 trường hợp kiểm thử cho chức năng thêm nhân viên
3) Đồ thị nguyên nhân kết quả a) Đồ thị nguyên nhân kết quả
1 Mã nhân viên là một chuỗi các ký tự dạng chữ và dạng số, phải bắt đầu bằng chữ cái và có độ dài bằng 4.
2 Mã nhân viên chưa tồn tại trong dữ liệu.
3 Tên nhân viên là một chuỗi ký tự dạng chữ có độ dài thuộc
4 Số CMND là chuỗi ký tự dạng số có độ dài bằng 9
5 Địa chỉ là chuỗi ký tự có độ dài thuộc [1,100].
6 Số điện thoại là chuỗi ký tự dạng số có độ dài bằng 10
R1 Thông báo “ Mã nhân viên không hợp lệ ”.
R2 Thông báo “ Mã nhân viên đã tồn tại”.
R3 Thông báo “ Tên nhân viên không hợp lệ ”
R4 Thông báo “ Số CMND không hợp lệ ”.
R5 Thông báo “ Địa chỉ không hợp lệ ”.
R6 Thông báo “ Số điện thoại không hợp lệ ”.
R7 Thông báo “ Thêm nhân viên thành công” Hệ thống thêm mới một nhân viên vào CSDL”. Đồ thị nguyên nhân kết quả b) Bảng quyết định
Bảng quyết định c) Các trường hợp kiểm thử
STT Các điều kiện Các ca kiểm thử Hành động
1 Mã nhân viên là dữ liệu rỗng
2 Mã nhân viên chứa ký tự đặc biệt
3 Mã nhân viên là một chuỗi bắt đầu bằng chữ số
4 - Mã nhân viên là một chuỗi ký tự chỉ bao gồm chữ cái và chữ số, bắt đầu bằng chữ cái và có độ dài khác
5 - Mã nhân viên là một chuỗi ký tự chỉ bao gồm chữ cái và chữ số, bắt đầu bằng chữ cái và có độ dài bằng
- Mã nhân viên nhập vào đã tồn tại trong dữ liệu
Mã nhân viên: NV01 Trong CSDL đã tồn tại NV01
Mã nhân viên phải thỏa mãn các tiêu chí sau: Gồm chữ cái và chữ số, bắt đầu bằng chữ cái, có độ dài 4 ký tự và chưa từng tồn tại trong hệ thống.
- Tên nhân viên có độ dài không thuộc [1,30]
Mã nhân viên: NV1 Tên nhân viên: “”
7 - Mã nhân viên là một chuỗi ký tự chỉ bao gồm chữ cái và chữ số, phải bắt đầu bằng chữ cái và có độ dài bằng 4, chưa tồn tại
Mã nhân viên: NV1 Tên nhân viên: Nguyễn 1
- Tên nhân viên chứa chữ số
8 - Mã nhân viên là một chuỗi ký tự chỉ bao gồm chữ cái và chữ số, phải bắt đầu bằng chữ cái và có độ dài bằng 4, chưa tồn tại
- Tên nhân viên chứa ký tự đặc biệt
Mã nhân viên: NV1 Tên nhân viên: Nguyễn @
9 - Mã nhân viên là một chuỗi ký tự chỉ bao gồm chữ cái và chữ số, phải bắt đầu bằng chữ cái và có độ dài bằng 4, chưa tồn tại
- Tên nhân viên là một chuỗi ký tự có dạng chữ và có độ dài thuộc
- Số CMND là chuỗi ký tự có chứa chữ cái
Mã nhân viên: NV1 Tên nhân viên : Nguyễn Văn An
10 - Mã nhân viên là một chuỗi ký tự chỉ bao gồm chữ cái và chữ số, phải bắt đầu bằng chữ cái và có độ dài bằng 4, chưa tồn tại
- Tên nhân viên là một chuỗi ký tự có dạng chữ và có độ dài thuộc
Mã nhân viên: NV1 Tên nhân viên : Nguyễn Văn An
Số CMND là chuỗi ký tự có chứa kí tự đặc biệt
11 - Mã nhân viên là một chuỗi ký tự chỉ bao gồm chữ cái và chữ số, phải bắt đầu bằng chữ cái và có độ dài bằng 4, chưa tồn tại
- Tên nhân viên là một chuỗi ký tự có dạng chữ và có độ dài thuộc
Số CMND là chuỗi ký tự có dạng số và có độ dài khác 9
Mã nhân viên: NV1 Tên nhân viên : Nguyễn Văn An
12 - Mã nhân viên là một chuỗi ký tự chỉ bao gồm chữ cái và chữ số, phải bắt đầu bằng chữ cái và có độ dài bằng 4, chưa tồn tại
- Tên nhân viên là một chuỗi ký tự có dạng chữ và có độ dài thuộc
- Số CMND là chuỗi ký tự có dạng số và có độ dài bằng 9
- Địa chỉ là chuỗi ký tự có chứa kí tự đặc biệt
Mã nhân viên: NV1 Tên nhân viên : Nguyễn Văn An
13 - Mã nhân viên là một Mã nhân viên: NV1 R5 chuỗi ký tự chỉ bao gồm chữ cái và chữ số, phải bắt đầu bằng chữ cái và có độ dài bằng 4, chưa tồn tại
- Tên nhân viên là một chuỗi ký tự có dạng chữ và có độ dài thuộc
- Số CMND là chuỗi ký tự có dạng số và có độ dài bằng 9
- Địa chỉ là chuỗi ký tự chỉ bao gồm chữ cái và chữ số và có độ dài không thuộc [1,100]
Tên nhân viên : Nguyễn Văn An
14 - Mã nhân viên là một chuỗi ký tự chỉ bao gồm chữ cái và chữ số, phải bắt đầu bằng chữ cái và có độ dài bằng 4, chưa tồn tại
- Tên nhân viên là một chuỗi ký tự có dạng chữ và có độ dài thuộc [1,30]
- Số CMND là chuỗi ký tự có dạng số và có độ dài bằng 9
- Địa chỉ là chuỗi ký tự chỉ bao gồm chữ cái và chữ số và có độ dài thuộc [1,100]
Mã nhân viên: NV1 Tên nhân viên : Nguyễn Văn An
Số CMND : 192045127 Địa chỉ: 1 Phan Đình Phùng
- Số điện thoại là chuỗi ký tự có chứa kí tự chữ cái
15 - Mã nhân viên là một chuỗi ký tự chỉ bao gồm chữ cái và chữ số, phải bắt đầu bằng chữ cái và có độ dài bằng 4, chưa tồn tại
- Tên nhân viên là một chuỗi ký tự có dạng chữ và có độ dài thuộc [1,30]
- Số CMND là chuỗi ký tự có dạng số và có độ dài bằng 9
- Địa chỉ là chuỗi ký tự chỉ bao gồm chữ cái và chữ số và có độ dài thuộc [1,100]
- Số điện thoại là chuỗi ký tự có chứa kí tự đặc biệt
Mã nhân viên: NV1 Tên nhân viên : Nguyễn Văn An
Số CMND : 192045127 Địa chỉ: 1 Phan Đình Phùng
16 - Mã nhân viên là một chuỗi ký tự chỉ bao gồm chữ cái và chữ số, phải bắt đầu bằng chữ cái và có độ dài bằng 4, chưa tồn tại
- Tên nhân viên là một chuỗi ký tự có dạng chữ và có độ dài thuộc [1,30]
Mã nhân viên: NV1 Tên nhân viên : Nguyễn Văn An
Số CMND : 192045127 Địa chỉ: 1 Phan Đình Phùng
- Số CMND là chuỗi ký tự có dạng số và có độ dài bằng 9
- Địa chỉ là chuỗi ký tự chỉ bao gồm chữ cái và chữ số và có độ dài thuộc [1,100]
- Số điện thoại là chuỗi ký tự có dạng số và có độ dài khác 10
Kiểm thử hộp trắng
2) Đồ thị đường diễn tiến.
3) Xác định số đường kiểm thử
4) Xác định TestCase Đường kiểm thử
Giá trị đầu vào Kết quả mong đợi
1 - pp = 0 Hiện thị thông báo:
“Chưa chọn đăng ký ký gửi”
Lưu và thêm vào CSDL
Hiển thị thông báo nhập mã nhân viên
Hiển thị thông báo “chưa nhập đủ thông tin” lưu và thêm và CSDL
Hiển thị:”Chưa nhập đầy đủ thông tin”
Lưu và thêm vào CSDL
Hiển thị:”Chưa nhập đầy đủ thông tin”
Lưu và thêm vào CSDL
Hiển thị: “Chưa nhập đầy đủ thông tin”
Lưu và thêm vào CSDL
-TextField.getText khác rỗng -TextField_1.getText khác rỗng -TextField_2.getText khác rỗng -TextField_3.getText khác rỗng -TextField_4.getText khác rỗng -TextField_6.getText bằng rỗng
Hiển thị thông báo “chưa nhập đủ thông tin” lưu và thêm và CSDL
Hiển thị: “Chưa nhập đầy đủ thông tin”
Lưu và thêm vào CSDL
Hiển thị: “Chưa nhập đầy đủ thông tin”
Lưu và thêm vào CSDL
Hiển thị: “Chưa nhập đầy đủ thông tin”
Lưu và thêm vào CSDL
Hiển thị: “Chưa nhập đầy đủ thông tin”
Lưu và thêm vào CSDL
- kiem tra ngay textField_7.getText == 0
Hiển thị : “Số ngày trả không hợp lệ”
Lưu và thêm vào CSDL
Lưu và thêm vào CSDL
II) CHỨC NĂNG THÊM NHÂN VIÊN
2) Đồ thị đường diễn tiến.
3) Xác định số đường kiểm thử V(G)
Các đường kiểm thử là:
4) Xác định TestCase Đường kiểm thử Giá trị đầu vào Kết quả mong đợi
1 - Nhập dữ liệu vào các -TextField 2,3,4,5,6,7
2 - Nhập dữ liệu vào các -TextField 2,3,4,5,6,7
Hiển thị thông báo nhập mã nhân viên
3 - Nhập dữ liệu vào các -TextField 2,3,4,5,6,7
2 đã trùng mã nhân viên
Hiển thị thông báo mã nhân viên đã tồn tại
4 - Nhập dữ liệu vào các -TextField 2,3,4,5,6,7
- kiểm tra TextField2.getText không trùng mã nhân viên
Thêm thông tin nhân viên,lưu thông tin nhân viên và hiển thị public void actionPerformed(ActionEvent e) {
JOptionPane.showMessageDialog(btnNewButton_4, "Nhập mã nhân viên"); else if ((ktmanv(s1)==0))
JOptionPane.showMessageDialog(btnNewButton_4, "Mã nhân viên đã tồn tại Yêu cầu nhập lại"); else
{ a.add(st); luu(st); hienthi();
III) Các hàm phụ trợ
1) Kiểm tra ngày a) Xác định các nút b) Đồ thị đường diễn tiến c) Xác định số đường kiểm thử
Các đường kiểm thử là:
Ca kiểm thử Giá trị đầu vào Kết quả mong đợi
1 chuỗi st Trả về giá trị đúng,nếu là 1
2 chuỗi st Trả về giá trị sai,nếu là 0
2) Hàm lưu trữ a) Xác định các nút b) Đồ thị đường diễn tiến c) Xác định số đường kiểm thử
Ca kiểm thử Giá trị đầu vào Kết quả mong đợi
1 chuỗi st Lưu trữ vào CSDL
3) Kiểm tra mã nhân viên a) Xác định các nút b) Đồ thị đường diễn tiến c) Xác định số đường kiểm thử
1-2-3-8-9-10 d) Xác định TestCase Đường kiểm thử
Giá trị đầu vào Kết quả mong đợi
1 i=0 i= a.size() table.setModel(mh)
Hiển thị thông báo: Hiển thị các nhân viên vừa thêm
2 mh i=0 i < a.size() String[] s=a.get(i).split("[;]");
Object[] t=new Object[5]; t=s; mh.addRow(t);
Hiển thị thông báo: Hiển thị các nhân viên vừa thêm
Kiểm thử Module
Hàm xử lý ký gửi:
Ta cần phải khẳng định chương trình trên đúng với yêu cầu đặt ra.
Thật vậy, gọi mệnh đề thể hiện tính chất dữ liệu vào của chương trình {A} và mệnh đề thể hiện tính chất dữ liệu ra cần có {B}, ta có
{B: e C { True, False}, S = S1…Sn N, textfleid1…TexFleid11 String, Nếu tồn∈ ∈ tại TextFleid[i] bằng “” thì hàm kết thúc dữ liệu không thay đổi.
- , textfleid1…TexFleid11 String, Nếu không tồn tại TextFleid[i] bằng “” và∈ textFleid7 bằng “0” thì dữ liệu không thay đổi
Dữ liệu được lưu} xét {A, E1: } P {B}
1 Với {A ,E1:} P1 {B} = { A [ShowMessage| “Chưa chọn đăng ký ký gửi”] }
Xét 2.2.2 với {A , !E1: !E2, !E3} P6 {C} ta có C1= {C[S | textField.getText()+”;”+textField_1.getText()+”;”+textField_2.getText()
+”;”+comboBox_1.getSelectedItem.toString()+”;”+textField_6.getText()
+textField_7.getText()+textField_8.getText()+”;”+textField_9.getText()
+comboBox_2.getSelectedItem.toString()+textField_11.getText()]
Dễ dàng ta thấy {A} ==L=> {B} điều phải chứng minh.
II) Chức năng thêm nhân viên
- Mệnh đề vào / ra của chức năng thêm nhân viên:
+ MĐ vào: {A: s1,s2,s3,s4,s5,st ∈ String; textField_2.getText() ,textField_3.getText() , textField_4.getText() ,textField_5.getText() ,textField_6.getText() ∈ String}
+ MĐ ra : {B: s1,s2,s3,s4,s5,st ∈ String; textField_2.getText() ,textField_3.getText() , textField_4.getText() ,textField_5.getText() ,textField_6.getText() ∈ String Nếu (d = -1 và s1 trống) thì không thay đổi
Nếu (d = -1, s1 không trống và hàm ktmanv(s1) trả về giá trị khác 0), chuỗi st sẽ được thêm vào danh sách a, chuỗi st được lưu, hàm hienthi() được gọi.
Nếu (d = -1, s1 không trống và hàm ktmanv(s1) == 0) thì không thay đổi
Nếu (d khác -1) thì không thay đổi
Ta có : {A}P1{C} xét mệnh đề {C:s1,s2,s3,s4,s5,st ∈ String; textField_2.getText() ,textField_3.getText() , textField_4.getText() ,textField_5.getText() ,textField_6.getText() ∈ String } theo tính chất phép gán:
{C2} = {C1 [s5 | textField_6.getText()]: s1, s2, s3, s4, textField_6.getText() ∈ String ; s1+”;”+s2+”;”+s3+”;”+s4+”;”+textField_6.getText() ∈ String }
{C3} ={C2 [s4 | textField_5.getText()]: s1, s2, s3, textField_5.getText(), textField_6.getText() ∈ String ; s1+”;”+s2+”;”+s3+”;”+textField_5.getText()
{C4} = {C3 [s3 | textField_4.getText()]: s1, s2, textField_4.getText(), textField_5.getText(), textField_6.getText() ∈ String; s1+”;”+s2+”;”+textField_4.getText() +”;”+textField_5.getText()+”;”+textField_6.getText() ∈ String}
{C5} = {C4 [s2 | textField_3.getText()]: s1, textField_3.getText(), textField_4.getText(), textField_5.getText(), textField_6.getText() ∈ String ; s1+”;”+textField_3.getText()
+”;”+textField_4.getText()+”;”+textField_5.getText()+”;”+textField_6.getText() ∈ String } {C6} = {C5 [s1 | textField_2.getText()]: textField_2.getText(), textField_3.getText(), textField_4.getText(), textField_5.getText(), textField_6.getText() ∈ String ; textField_2.getText()+”;”+textField_3.getText()+”;”+textField_4.getText()
+”;”+textField_5.getText()+”;”+textField_6.getText() ∈ String }
Rõ ràng ta có {A}=>L{C6} nên {A}P1{C}
Tiếp tục chương trình, ta có :
{C,E: d==-1}P6{B} a1) {C,E,E1:d==-1,s1.equalsIgnoreCase("")==true}P2{B} a2) {C,E,!E1:d==-1,s1.equalsIgnoreCase("")==false}P3{B} b1){C,E,!E1,E2:d==-1,s1.equalsIgnoreCase("")==false, ktmanv(s1)==0}P4{B} b2){C,E,!E1,!E2:d==-1,s1.equalsIgnoreCase("")==false, ktmanv(s1)!
Vậy {A} P {B} hay chương trình trên là đúng.
III) Các hàm phụ trợ
- Mệnh đề vào / ra của chức năng kiểm tra mã nhân viên:
+ MĐ ra: {B: { KiemTraNgay() ∈ int}} Để chứng minh hàm trên đúng ta cần chứng minh {A} P {B}
Theo tính chất phép gán ta có
{A4}={A3 [ sim | new SimpleDateFormat(“dd//MM/yyyy”)]; SimpleDateFormat} {A}={A4 [date | new Date()];date ∈ Date }
Xét { C} If (t >t2) return 0 else return 1 {B}
Suy ra { C} If (t >t2) return 0 else return 1 {B} là đúng
- Mệnh đề vào / ra của chức năng kiểm tra mã nhân viên:
+ MĐ ra: {B: [DataBase | st ] } Để chứng minh hàm trên đúng ta cần chứng minh {A} P1 {B}
Theo tính chất phép gán ta có
{A1} ={B [ cmd |cmd.close()]; cmd ∈ PreparedStatement}
{A2} ={A1 [ cmd |cmd.executeUpdate()]; cmd ∈ PreparedStatement} {A3} ={A2 [ cmd |cmd.setString(5,s[4])]; cmd ∈ PreparedStatement} {A4} ={A3 [ cmd |cmd.setString(4,s[3])]; cmd ∈ PreparedStatement} {A5} ={A4 [ cmd |cmd.setString(3,s[2])]; cmd ∈ PreparedStatement} {A6} ={A5 [ cmd |cmd.setString(2,s[1])]; cmd ∈ PreparedStatement} {A7} ={A6 [ cmd |cmd.setString(1,s[0])]; cmd ∈ PreparedStatement} {A8} ={A7 [ s |st.split(“;”)]; s ∈ String }
{A9} ={A8 [ cmd |ketnoi().cn.PreparedStatement(sql)]; cmd ∈ PreparedStatement}
{A10} ={A9 [sql | “insert into nhanvien values(?,?,?,?,?,)”]; sql ∈ String} {A} ={A9 [ketnoi | ketnoi.Connect()”];}
3) Kiểm tra mã nhân viên
- Mệnh đề vào / ra của chức năng kiểm tra mã nhân viên:
Hàm trả về 0 khi tìm thấy một chuỗi trong mảng a (đặt tên là st1) sao cho stt.equalsIgnoreCase(st1[0])==true
Hàm trả về 1 khi không tìm thấy một chuỗi nào trong mảng a (đặt tên là st1) thỏa mãn stt.equalsIgnoreCase(st1[0])==true
Xét mệnh đề: {C: a∈String, i ∈ N; a.get(0).split(“[;]”), …, a.get(a.size()-1).split(“[;]”) ∈ String;)
Ta có {A} i=0; {C} Để chứng tỏ {C} là bất biến của đoạn chương trình {P}
Ta cần có {C, i