-
Design Pattern
- Singleton Design Pattern
- Factory Design Pattern
- Factory Method Design Pattern
- Abstract Factory Design Pattern
- Builder Design Pattern
- Prototype Design Pattern
- Object Pool Design Pattern
- Chain of Responsibility Design Pattern
- Command Design Pattern
- Interpreter Design Pattern
- Iterator Design Pattern
- Mediator Design Pattern
- Memento Design Pattern
- Observer Design Pattern
- Observer Design Pattern - Xử Lý Exception
- Strategy Design Pattern
- Template Method Design Pattern
- Visitor Design Pattern
- Null Object Design Pattern
- Adapter Design Pattern
- Bridge Design Pattern
- Composite Design Pattern
- Decorator Design Pattern
- Flyweight Design Pattern
- Proxy Design Pattern
- S.O.L.I.D
- Clean code
- Lập trình socket
- Java Core
- Multi-Thread
- Spring
- Java Web
- Memory Caching
- Message Queue
- DevOps
- Xây dựng một nền tảng
- MongoDB
- MySQL timestamp
- Properties vs yaml
- Kotlin
- Lập Trình Machine Learning với PyTorch
- Mã Nguồn Mở
- Ezy HTTP
- Free Chat
- Một số kinh nghiệm với Git
- Review cho đồng nghiệp!
- Kinh nghiệm phát triển dự án phức tạp, nhiều người - Tuân thủ
- Kinh nghiệm phát triển dự án phức tạp, nhiều người - Lựa chọn người đi cùng
- Ngành công nghiệp phần mềm tại Việt Nam - Mới chỉ là bắt đầu.
- Ngành công nghiệp phần mềm tại Việt Nam - Dây chuyền sản xuất.
- Ngành công nghiệp phần mềm tại Việt Nam - Thị trường
- Ngành công nghiệp phần mềm tại Việt Nam - Công ăn việc làm
- Setup Dev Environment
- Hello World
- Create a Server Project
- Handle Client Requests
- Using ezyfox-server-csharp-client
- Using ezyfox-es6-client
- Client React.js Interaction
- Build And Deploy In Local
- Tham gia phát triển open source!
- Buôn có bạn, bán có phường
- Đam mê đi đâu rồi?
- Giữa lửa đam mê!
- Tương lai nào cho tester? Thay đổi để dẫn đầu xu thế!
- Tương lai nào cho tester? - Khi thế sự đổi thay!
- Tương lai nào cho lập trình viên? Khi không có hệ quy chiếu!
- Tương lai nào cho lập trình viên - Làm đến bao nhiêu tuổi?
- Tương lai nào cho lập trình viên? Có làm giàu được không?
- Tương lai nào cho lập trình viên? Có cân bằng cuộc sống được không?
- Tương lai nào cho lập trình viên - Nhảy việc đến khi nào?
- Tương lai nào cho lập trình viên - Con đường sự nghiệp (Career path)!
- Tương lai nào cho lập trình viên - Tổng kết lại!
- Con đường sự nghiệp cho lập trình viên - Giai đoạn sơ cấp (Junior)!
- Con đường sự nghiệp cho lập trình viên - Giai đoạn trung cấp (Intermediate)!
- Con đường sự nghiệp cho lập trình viên - Giai đoạn lành nghề (Senior)!
- Giai đoạn lành nghề (Senior) - Giữa những hoang mang!
- Giai đoạn lành nghề (Senior) - Phân hoá trong doanh nghiệp!
- Con đường sự nghiệp cho lập trình viên - Trở thành chuyên gia (Expert)!
- Con đường sự nghiệp cho lập trình viên - Trở thành người ảnh hưởng (Influencer)!
- Các giai đoạn phát triển của lập trình viên - Tổng kết lại!
- Metaverse - Câu chuyện 10 nghìn CCU (Người tham gia đồng thời)
- Metaverse có khả thi ở Việt Nam?
- Lựa chọn nghề nghiệp - DevOps!
- Lựa chọn nghề nghiệp - Project Manager (PM)!
- Lựa chọn nghề nghiệp - Data Engineer!
- Lựa chọn nghề nghiệp - BackEnd Engineer!
- “Talk is cheap. Show me the code” ― Linus Torvalds
- Lựa chọn nghề nghiệp - Web Front-End Engineer!
- Lựa chọn nghề nghiệp - Mobile Engineer!
- Lựa chọn nghề nghiệp - Game Engineer!
- Lựa chọn nghề nghiệp - Product Owner!
- Tuổi trẻ cần đột phá!
- Tuổi trẻ cần sự đồng cảm!
- Tuổi trẻ - điều đáng sợ đầu tiên là gì?
- Tuổi trẻ - Điều đáng sợ thứ 2 là gì?
- Tuổi trẻ - Điều đáng sợ thứ 3 là gì?
- Tuổi trẻ - Điều đáng sợ thứ 4 là gì?
- Nếu tận dụng hết năng lực thì sẽ thế nào?
- Tuổi trẻ - Điều đáng sợ thứ 5 là gì?
- Tuổi trẻ - Điều đáng sợ thứ 6 là gì?
- Tuổi trẻ - Điều đáng sợ thứ 7 là gì?
- Tuổi trẻ - ham học hỏi là như thế nào?
- Đầu tư cho bản thân là gì?
- Học chủ động!
- Có nên quay lại công ty cũ?
- Làm cho startup (công ty nhỏ) hay làm cho công ty lớn? (Phần 1)
- Làm cho startup (công ty nhỏ) hay làm cho công ty lớn? (Phần 2)
- Làm cho startup (công ty nhỏ) hay làm cho công ty lớn? (Phần 3)
- Tự học
- Học tập tại doanh nghiệp
- Học tại trung tâm
- Cách đọc sách kỹ thuật hiệu quả
- Học trong một tổ chức mã nguồn mở.
- Câu chuyện lập trình viên - Công việc đầu tiên
- Câu chuyện lập trình viên - Mức lương đầu tiên
- Câu chuyện lập trình viên - 2018
- Định hướng là gì?
- Wordpress nguy hiểm thế nào?
- Danh sách 10 trung tâm đào tạo trình uy tín, chất lượng ở Hà Nội
Tiết kiệm cả triệu đô!
Trong quy trình phát triển phầm mềm, đã lập trình là phải test, không test bằng cách này thì cách kia, quan trọng nhất có thể kể đến:
- Unit test - test đơn vị
- Integration test - test tích hợp
- Monkey test - test theo một số kịch bản ngẫu nhiên
- QA test - test bởi đội kiểm thử
Một công ty phần mềm có thể phải tiêu tốn rất nhiều tiền để xây dựng một đội QA chuyên nghiệp, nhưng nếu biết tận dụng tốt Unit test thì cũng có thể không cần đến mội đội ngũ QA đông đảo, các dự án của mình từng làm rất ít QA và Unit Test đã giúp bọn mình cover được khoảng 80% rồi.
Unit test là gì
Unit test là kiểm thử ở mức hàm trong source code, công việc này thường do dev thực hiện, và kết quả là một bản báo cáo trực quan thế này:
Kết quả này bao gồm 2 thông số quan trọng nhất:
- Missed Instructions: là số câu lệnh chưa được test
- Missed Branches: là số nhánh logic (if else) chưa được test
Như dự án ezyfox-bean đã được test 100% nên không có dòng lệnh nào hay nhánh login nào chưa được chạy qua.
Rào cản Unit test
UnitTest (UT một khái niệm không còn xa lại với tất cả lập trình viên chúng ta. Nhưng vẫn là 1 thứ gì đó quá khó để áp dụng triệt để, theo kinh nghiệm cá nhân mình, có một số vấn đề sau:
- Các dự án outsource đòi hòi tốc độ hoàn thành dự án nên với deadline gấp gáp chúng ta chưa thể áp dụng được
- UT làm tăng chi phí cho doanh nghiệp, kéo dài thời gian phát triển dự án và có thể làm mất đi cơ hội cạnh tranh
- Do chính lập trình viên chúng ta chủ quan, ỷ lại vào đội QA
- Do quản lý dự án không có nhiều hiểu biết về kỹ thuật nên không chú trọng vào vấn đề này
- Do UT chưa được đưa vào quy trình phát triển phầm mềm
Nhưng phải áp dụng
Tất cả các lý do trên theo mình là hợp lý, tuy nhiên nó chỉ hợp lý đối với những dự án nhỏ và những dự án phát triển trong giai đoạn đầu (phiên bản đầu tiên đưa ra thị trường). Nhưng đối với những dự án lớn trên 10 nghìn dòng code và những dự án đã phát triển đến phiên bản thứ 2, UT nên là điều bắt buộc. Vì sao vậy? Lại tiếp tục theo kinh nghiệm của mình, thời gian để tạo ra 1 dòng code là 1 thì thời gian để để fix bug cho dòng code đó gấp 21 lần, và càng nhiều bug thì thời gian và chi phí của doanh nghiệp lại đội lên gấp bội, theo đúng quy trình close 1 bug thì nó phải thế này:
- QA test và phát hiện ra bug, tiến hành chụp ảnh, quay video, nói rõ các bước cho dev hiểu
- QA thông qua công cụ thông báo cho dev
- Dev test lại, nếu thấy không phải bug quay ra tranh luận với QA
- QA test lại và thấy bug, DEV không cãi được về fix
- Dev debug các kiểu, deploy, test đi test lại
- Dev chụp lại evidence đã fix rồi assign lại cho QA
- QA test lại nếu chưa ok thì reopen và báo lại cho DEV, ok rồi thì close
Trời ơi!!!, nó là cả một quy trình phức tạp, đau đầu, tranh cãi và chán nản, chi phí của doanh nghiệp cũng tăng lên từ đó. Chưa kể là chẳng may có lỗi nào lọt lên môi trường thật, nó có thể ảnh hưởng đến hàng nghìn, hàng triệu khách hàng
Vậy nên UT phải được đưa vào quy trình, phải được hợp thức hóa và thực thi cẩn thận
Các framework phổ biến
Với java thì hiện tại vẫn có 2 framework là phổ biến nhất đó là:
- JUnit: Là framework đi cùng java từ thời đầu, hiện tại đang ở phiên bản 5
- TestNG: đi sau JUnit và cố gắng tạo ra nhiều tính năng hơn JUnit, vì mình thích cái là có thể cấu hình được nhiều thứ thông qua file XML.
Một số thư viện mở rộng cho JUnit và TestNG có thể kể đến:
- Mockito: thư viện giả lập (mockup) dữ liệu và gọi hàm
- Mockk: thư viện giả lập (mockup) dữ liệu và gọi hàm cho kotlin
- Spring test: thư viện hỗ trợ quản lý bean, inject bean, giúp bạn tự động khởi tạo các đối tượng test
- test-util: hộ trợ test performance, assertion (kiểm tra kết quả), random kết quả và gọi các hàm thông qua java refleciton.
Một ví dụ đơn giản
Giờ thì thử một ví dụ xem sao nhé. Hãy tưởng tượng bạn đang cần thực hiện tính năng login, user sẽ chỉ được input username là chữ thường và từ 5 đến 8 kí tự, vậy chúng ta sẽ có tối thiểu 5 cases cần test
- username chiều dài từ 5 đến 8 kí tự: thành công
- username với chiều dài nhỏ hơn 5: thất bại
- username với chiều dài lớn hơn 8: thất bại
- username chứa cả chữ và số: thất bại
- username chứa cả chữ hoa và chữ thường: thất bại
Đây là lớp validator của chúng ta:
public class UserValidator {
private static final String USERNAME_PATTERN = "[a-z]{5,8}";
public boolean validateUsername(String username) {
return Pattern.compile(USERNAME_PATTERN)
.matcher(username)
.matches();
}
}
Còn đây là lớp test của chúng ta:
public class UserValidatorTest {
private final UserValidator sut = new UserValidator();
@Test
public void validateUsernameSuccess() {
String username = "hello";
assert sut.validateUsername(username);
}
@Test
public void validateUsernameFailsDueToMinLength() {
String username = "he";
assert !sut.validateUsername(username);
}
@Test
public void validateUsernameFailsDueToMaxLength() {
String username = "hellohellohello";
assert !sut.validateUsername(username);
}
@Test
public void validateUsernameFailsDueToContainsNumber() {
String username = "hello123";
assert !sut.validateUsername(username);
}
@Test
public void validateUsernameFailsDueToContainsUpperCase() {
String username = "helloHE";
assert !sut.validateUsername(username);
}
}
Nó cũng khá đơn giản phải không? Tuy nhỏ nhưng có võ, đó là tư tưởng của UT.
Tổng kết
Nếu dự án outsource của bạn không quá gấp gáp, hay áp dụng UT nhé, ngăn chặn được bug và tạo ấn tượng tốt với khách hàng. Nếu dự án sản phẩm của bạn đã bắt đầu có khách hàng, hãy áp dụng UT nhé, khách hàng lúc nào cũng là người khó tính và thiếu kiên nhẫn, hãy biết cách làm hài lòng họ
Mình sẽ nói về cách cài đặt cho maven và gradle, các kinh nghiệm làm việc với Unit Test sao cho hiệu quả ở các bài viết sau nhé.
Tham khảo
-
Design Pattern
- Singleton Design Pattern
- Factory Design Pattern
- Factory Method Design Pattern
- Abstract Factory Design Pattern
- Builder Design Pattern
- Prototype Design Pattern
- Object Pool Design Pattern
- Chain of Responsibility Design Pattern
- Command Design Pattern
- Interpreter Design Pattern
- Iterator Design Pattern
- Mediator Design Pattern
- Memento Design Pattern
- Observer Design Pattern
- Observer Design Pattern - Xử Lý Exception
- Strategy Design Pattern
- Template Method Design Pattern
- Visitor Design Pattern
- Null Object Design Pattern
- Adapter Design Pattern
- Bridge Design Pattern
- Composite Design Pattern
- Decorator Design Pattern
- Flyweight Design Pattern
- Proxy Design Pattern
- S.O.L.I.D
- Clean code
- Lập trình socket
- Java Core
- Multi-Thread
- Spring
- Java Web
- Memory Caching
- Message Queue
- DevOps
- Xây dựng một nền tảng
- MongoDB
- MySQL timestamp
- Properties vs yaml
- Kotlin
- Lập Trình Machine Learning với PyTorch
- Mã Nguồn Mở
- Ezy HTTP
- Free Chat
- Một số kinh nghiệm với Git
- Review cho đồng nghiệp!
- Kinh nghiệm phát triển dự án phức tạp, nhiều người - Tuân thủ
- Kinh nghiệm phát triển dự án phức tạp, nhiều người - Lựa chọn người đi cùng
- Ngành công nghiệp phần mềm tại Việt Nam - Mới chỉ là bắt đầu.
- Ngành công nghiệp phần mềm tại Việt Nam - Dây chuyền sản xuất.
- Ngành công nghiệp phần mềm tại Việt Nam - Thị trường
- Ngành công nghiệp phần mềm tại Việt Nam - Công ăn việc làm
- Setup Dev Environment
- Hello World
- Create a Server Project
- Handle Client Requests
- Using ezyfox-server-csharp-client
- Using ezyfox-es6-client
- Client React.js Interaction
- Build And Deploy In Local
- Tham gia phát triển open source!
- Buôn có bạn, bán có phường
- Đam mê đi đâu rồi?
- Giữa lửa đam mê!
- Tương lai nào cho tester? Thay đổi để dẫn đầu xu thế!
- Tương lai nào cho tester? - Khi thế sự đổi thay!
- Tương lai nào cho lập trình viên? Khi không có hệ quy chiếu!
- Tương lai nào cho lập trình viên - Làm đến bao nhiêu tuổi?
- Tương lai nào cho lập trình viên? Có làm giàu được không?
- Tương lai nào cho lập trình viên? Có cân bằng cuộc sống được không?
- Tương lai nào cho lập trình viên - Nhảy việc đến khi nào?
- Tương lai nào cho lập trình viên - Con đường sự nghiệp (Career path)!
- Tương lai nào cho lập trình viên - Tổng kết lại!
- Con đường sự nghiệp cho lập trình viên - Giai đoạn sơ cấp (Junior)!
- Con đường sự nghiệp cho lập trình viên - Giai đoạn trung cấp (Intermediate)!
- Con đường sự nghiệp cho lập trình viên - Giai đoạn lành nghề (Senior)!
- Giai đoạn lành nghề (Senior) - Giữa những hoang mang!
- Giai đoạn lành nghề (Senior) - Phân hoá trong doanh nghiệp!
- Con đường sự nghiệp cho lập trình viên - Trở thành chuyên gia (Expert)!
- Con đường sự nghiệp cho lập trình viên - Trở thành người ảnh hưởng (Influencer)!
- Các giai đoạn phát triển của lập trình viên - Tổng kết lại!
- Metaverse - Câu chuyện 10 nghìn CCU (Người tham gia đồng thời)
- Metaverse có khả thi ở Việt Nam?
- Lựa chọn nghề nghiệp - DevOps!
- Lựa chọn nghề nghiệp - Project Manager (PM)!
- Lựa chọn nghề nghiệp - Data Engineer!
- Lựa chọn nghề nghiệp - BackEnd Engineer!
- “Talk is cheap. Show me the code” ― Linus Torvalds
- Lựa chọn nghề nghiệp - Web Front-End Engineer!
- Lựa chọn nghề nghiệp - Mobile Engineer!
- Lựa chọn nghề nghiệp - Game Engineer!
- Lựa chọn nghề nghiệp - Product Owner!
- Tuổi trẻ cần đột phá!
- Tuổi trẻ cần sự đồng cảm!
- Tuổi trẻ - điều đáng sợ đầu tiên là gì?
- Tuổi trẻ - Điều đáng sợ thứ 2 là gì?
- Tuổi trẻ - Điều đáng sợ thứ 3 là gì?
- Tuổi trẻ - Điều đáng sợ thứ 4 là gì?
- Nếu tận dụng hết năng lực thì sẽ thế nào?
- Tuổi trẻ - Điều đáng sợ thứ 5 là gì?
- Tuổi trẻ - Điều đáng sợ thứ 6 là gì?
- Tuổi trẻ - Điều đáng sợ thứ 7 là gì?
- Tuổi trẻ - ham học hỏi là như thế nào?
- Đầu tư cho bản thân là gì?
- Học chủ động!
- Có nên quay lại công ty cũ?
- Làm cho startup (công ty nhỏ) hay làm cho công ty lớn? (Phần 1)
- Làm cho startup (công ty nhỏ) hay làm cho công ty lớn? (Phần 2)
- Làm cho startup (công ty nhỏ) hay làm cho công ty lớn? (Phần 3)
- Tự học
- Học tập tại doanh nghiệp
- Học tại trung tâm
- Cách đọc sách kỹ thuật hiệu quả
- Học trong một tổ chức mã nguồn mở.
- Câu chuyện lập trình viên - Công việc đầu tiên
- Câu chuyện lập trình viên - Mức lương đầu tiên
- Câu chuyện lập trình viên - 2018
- Định hướng là gì?
- Wordpress nguy hiểm thế nào?
- Danh sách 10 trung tâm đào tạo trình uy tín, chất lượng ở Hà Nội