Phương pháp "viết thử + tái cấu trúc cho đến khi vượt qua" trông cực kỳ phản kỹ thuật.
Bạn dường như có một quan niệm sai lầm về cả tái cấu trúc và TDD.
Tái cấu trúc mã là quá trình thay đổi mã nguồn của chương trình máy tính mà không sửa đổi hành vi chức năng bên ngoài của nó để cải thiện một số thuộc tính không chức năng của phần mềm.
Vì vậy, bạn không thể cấu trúc lại mã cho đến khi nó đi qua.
Và TDD, cụ thể là thử nghiệm đơn vị (mà tôi xem là cải tiến cốt lõi, vì thử nghiệm khác có vẻ khá hợp lý đối với tôi), không phải là về thiết kế lại một thành phần cho đến khi nó hoạt động. Đó là về thiết kế một thành phần và thực hiện triển khai cho đến khi thành phần đó hoạt động như thiết kế.
Ngoài ra, điều quan trọng là phải thực sự nắm bắt, thử nghiệm đơn vị đó là về các đơn vị thử nghiệm . Do xu hướng luôn luôn viết rất nhiều thứ từ đầu, điều quan trọng là phải kiểm tra các đơn vị như vậy. Một kỹ sư dân sự đã biết thông số kỹ thuật của các đơn vị anh ta sử dụng (các vật liệu khác nhau) và có thể mong đợi chúng hoạt động. Đây là hai điều thường không áp dụng cho các kỹ sư phần mềm và rất kỹ thuật để kiểm tra các đơn vị trước khi sử dụng chúng, bởi vì điều đó có nghĩa là sử dụng các thành phần chất lượng cao đã được kiểm tra.
Nếu một kỹ sư dân sự có ý tưởng sử dụng một số mô sợi mới để làm mái che sân vận động, bạn sẽ mong đợi anh ta thử nghiệm nó như một đơn vị, tức là xác định các thông số kỹ thuật cần thiết (ví dụ: trọng lượng, tính thấm, độ ổn định, v.v.) và Sau đó kiểm tra và tinh chỉnh nó cho đến khi nó gặp họ.
Đó là lý do tại sao TDD hoạt động. Bởi vì nếu bạn xây dựng phần mềm của các đơn vị được thử nghiệm, rất có thể nó hoạt động tốt hơn, khi bạn cắm chúng lại với nhau và nếu không, bạn có thể mong đợi vấn đề nằm trong mã keo của mình, giả sử các thử nghiệm của bạn có độ bao phủ tốt.
chỉnh sửa:
Tái cấu trúc có nghĩa là: không thay đổi chức năng. Một điểm của bài kiểm tra đơn vị là đảm bảo rằng việc tái cấu trúc không phá vỡ mã. Vì vậy, TDD có nghĩa là để đảm bảo rằng tái cấu trúc không có tác dụng phụ.
Độ chi tiết không phải là một chủ đề của phối cảnh, vì như tôi đã nói, đơn vị kiểm tra các đơn vị kiểm tra và không phải hệ thống, theo đó độ chi tiết được xác định chính xác.
TDD khuyến khích kiến trúc tốt. Nó đòi hỏi bạn phải xác định và triển khai các thông số kỹ thuật cho tất cả các đơn vị của mình, buộc bạn phải thiết kế chúng trước khi thực hiện, điều này hoàn toàn trái ngược với những gì bạn nghĩ. TDD ra lệnh tạo ra các đơn vị, có thể được kiểm tra riêng lẻ và do đó hoàn toàn tách rời.
TDD không có nghĩa là tôi ném một bài kiểm tra phần mềm vào mã spaghetti và khuấy mì cho đến khi nó qua.
Trái ngược với kỹ thuật dân dụng, trong công nghệ phần mềm, một dự án thường không ngừng phát triển. Trong kỹ thuật dân dụng, bạn có yêu cầu xây dựng một cây cầu ở vị trí A, có thể mang x tấn và đủ rộng cho n phương tiện mỗi giờ.
Trong công nghệ phần mềm, khách hàng về cơ bản có thể quyết định tại bất kỳ thời điểm nào (có thể sau khi hoàn thành), anh ta muốn một cây cầu đôi, và anh ta muốn nó được kết nối với đường cao tốc gần nhất, và anh ta muốn nó là một cây cầu nâng, bởi vì công ty của anh ta gần đây bắt đầu sử dụng tàu thuyền.
Kỹ sư phần mềm được giao nhiệm vụ thay đổi thiết kế. Không phải vì thiết kế của họ là thiếu sót, mà bởi vì đó là modus operandi. Nếu phần mềm được thiết kế tốt, nó có thể được thiết kế lại ở mức cao, mà không phải viết lại tất cả các thành phần cấp thấp.
TDD là về xây dựng phần mềm với các thành phần được phân tách riêng, được thử nghiệm cao. Được thực hiện tốt, nó sẽ giúp bạn đáp ứng các thay đổi trong yêu cầu một cách nhanh chóng và an toàn hơn là không có.
TDD bổ sung các yêu cầu cho quy trình phát triển, nhưng nó không cấm bất kỳ phương pháp đảm bảo chất lượng nào khác. Cấp, TDD không cung cấp bảo mật giống như xác minh chính thức, nhưng một lần nữa, xác minh chính thức cực kỳ tốn kém và không thể sử dụng ở cấp độ hệ thống. Tuy nhiên, nếu bạn muốn, bạn có thể kết hợp cả hai.
TDD cũng bao gồm các bài kiểm tra khác với bài kiểm tra đơn vị, được thực hiện ở cấp hệ thống. Tôi thấy những điều này dễ giải thích nhưng khó thực hiện và khó đo lường. Ngoài ra, chúng khá hợp lý. Mặc dù tôi hoàn toàn thấy sự cần thiết của chúng, tôi không thực sự coi chúng là ý tưởng.
Cuối cùng, không có công cụ nào thực sự giải quyết được vấn đề. Công cụ chỉ làm cho việc giải quyết một vấn đề dễ dàng hơn. Bạn có thể hỏi: Làm thế nào một cái đục sẽ giúp tôi với kiến trúc tuyệt vời? Vâng, nếu bạn có kế hoạch làm tường thẳng, gạch thẳng là giúp đỡ. Và đúng vậy, nếu bạn đưa công cụ đó cho một thằng ngốc, cuối cùng anh ta có thể sẽ đập nó qua chân anh ta, nhưng đó không phải là lỗi của đục, vì nó không phải là một lỗ hổng của TDD mà nó mang lại sự bảo mật sai cho người mới, người không viết bài kiểm tra tốt
Vì vậy, ở điểm mấu chốt, người ta có thể nói TDD hoạt động tốt hơn nhiều so với không có TDD.