Có bao giờ ok để không kiểm tra một tính năng?


12

Có điểm nào mà bạn trở nên quen thuộc với ngôn ngữ / cơ sở dữ liệu / hệ thống của mình đến mức không cần phải kiểm tra một tính năng / cấu hình / truy vấn / vv mới. bằng cách chứa / kiểm tra mô phỏng trước khi triển khai nó trong hệ thống của bạn (đặc biệt liên quan đến một tính năng sửa đổi dữ liệu)? Hoặc luôn luôn cần thiết để kiểm tra một truy vấn mới bằng cách mô phỏng trong môi trường thử nghiệm ?

Để xác định rõ hơn, rõ ràng là luôn an toàn nhất để kiểm tra. Tuy nhiên, có cách nào để xác định khi nào rủi ro là tối thiểu đến mức việc kiểm tra không đáng để nỗ lực? Một cách khác của cụm từ đó là: khi nào hoặc bao giờ thực hành chuyên nghiệp để chấp nhận rủi ro đo lường để thực hiện một tính năng?

Ngoài ra, hãy giả sử rằng mọi thứ đều được sao lưu, vì vậy, trong trường hợp xấu nhất, dữ liệu có thể được khôi phục.

Ai đó có thể trích dẫn cụ thể, kinh nghiệm chuyên gia để giải quyết điều này? Vui lòng bao gồm các tài liệu tham khảo khi thích hợp / có thể.

Câu trả lời:


10

Tôi muốn bắt đầu bằng cách nói mọi thứ tôi làm là SQL Server, vì vậy đây là những ví dụ tôi đưa ra. Tuy nhiên, nói chung điều này áp dụng cho bất kỳ dạng mã nào bất kể hệ thống.

Hãy bắt đầu bằng cách phá vỡ điều này một chút.

Nâng cấp

Bạn có một hệ thống và sắp nâng cấp một số hoặc tất cả. Ví dụ: nâng cấp một phiên bản từ SQL Server 2012 lên 2014. Tại thời điểm này, việc kiểm tra là rất cần thiết. Thật không may, việc kiểm tra mọi phần của ngay cả một ứng dụng nhỏ có lẽ sẽ không thể thực hiện được. Tại thời điểm đó tôi sẽ làm những gì tôi sẽ gọi là một bài kiểm tra "làm việc". Là hệ thống cơ bản làm việc. Chạy qua các nhiệm vụ chung của bạn bắt đầu để kết thúc. Đừng kiểm tra mọi lựa chọn, chỉ là đường dẫn chính.

Khi thực hiện nâng cấp SQL Server cũng có một số yêu cầu đọc . Về cơ bản, bạn muốn đọc Backward Compatibilitymục nhập cho phiên bản mới ( đây là phiên bản 2014 ) và đảm bảo rằng bạn không có bất cứ điều gì trong bất kỳ danh sách nào (phá vỡ các thay đổi, thay đổi hành vi, v.v.).

Mã ứng dụng

Ở đây chúng tôi đang xem xét mã ứng dụng mới / thay đổi (vì tất nhiên mọi thứ hiện có đã được kiểm tra rồi phải không?). Trong trường hợp này mọi thứ nên được kiểm tra. Bạn nên có các trường hợp thử nghiệm được thiết lập trước thời hạn và chạy qua ít nhất là phần lớn các tính năng bị ảnh hưởng của bạn. Tốt nhất là tại thời điểm này, bạn cũng nên nhờ người khác kiểm tra tương tự. Mã này sẽ được đưa ra, có thể trong một thời gian khá dài và được sử dụng bởi một số lượng lớn người. Bạn muốn chắc chắn rằng nó hoạt động và hoạt động tốt.

Một trong những điều thực sự có thể giúp với điều này là tạo ra một tập hợp unit testsdễ lặp lại. Steve Jones khuyên bạn nên sử dụng tQueryt để kiểm tra mã TSQL của bạn (chỉ có máy chủ SQL tôi sợ). Nhưng bằng cách này, bạn có thể nhanh chóng chạy qua một bộ kiểm tra cố định và nó sẽ thực sự hỗ trợ kiểm tra hồi quy (kiểm tra mọi thứ, nói trước khi thực hiện nâng cấp).

Tính năng / Cấu hình

Thậm chí nhiều hơn thay đổi mã ứng dụng mà bạn muốn kiểm tra các tính năng mới và thay đổi cấu hình kỹ lưỡng. Ví dụ, nếu bạn quyết định bắt đầu làm việc với các chỉ mục của cộtlần đầu tiên bạn sẽ cần kiểm tra mọi đoạn mã chạm vào các bảng bị ảnh hưởng. Sử dụng các bài kiểm tra đơn vị mà bạn đã tạo để kiểm tra ứng dụng của bạn. Các tính năng này có thể là mới đối với bạn (và có thể là mới trong nền tảng) và có thể sẽ có một số vấn đề bạn không mong đợi. Đối với thay đổi cấu hình, bạn đang nói về một cái gì đó có thể ảnh hưởng đến toàn bộ hệ thống của bạn, có thể đáng kể. Nguyên tắc chung là kiểm tra, và kiểm tra cẩn thận. Có một số thay đổi mà bạn sẽ không thực sự thấy cho đến khi bạn vào một hệ thống đang hoạt động (có thể chỉ là hệ thống sản xuất của bạn) nhưng đó không phải là lý do để không thử chúng trong môi trường thử nghiệm trước.

Các truy vấn đặc biệt tham chiếu / ảnh hưởng đến dữ liệu người dùng

Khi bạn có mã ảnh hưởng đến dữ liệu người dùng của bạn, bạn thường cần phải kiểm tra nó, thậm chí, và có lẽ đặc biệt, bởi vì nó Ad Hoc. Bây giờ được nói rằng nếu bạn đang chạy cùng một đoạn mã, lặp đi lặp lại, chỉ với các tham số khác nhau, thì có lẽ bạn không cần phải lo lắng về việc kiểm tra mỗi lần.

Ví dụ: bạn cần xóa một hoặc nhiều Quảng cáo khỏi bảng AdList mỗi quý.

DELETE FROM AdList WHERE AdName IN ('January 2015 Ads','February 2015 Ads','March 2015 Ads')

Tại thời điểm đó, bạn đã kiểm tra mã (bạn chỉ thay đổi chuỗi cố định) và có thể khá an toàn khi chỉ chạy mã (giả sử bạn có bản sao lưu tốt chỉ trong trường hợp).

Một cách dễ dàng để kiểm tra một DELETE, UPDATEhoặc INSERTlà thay đổi chúng vào một SELECT và chạy chúng, xác nhận sau đó rằng số lượng và loại hàng bạn mong đợi được trả về.

Bạn có thể nghĩ rằng bạn không cần phải kiểm tra SELECTvì họ không thực sự thay đổi bất kỳ dữ liệu nào. Tuy nhiên bạn đang chạy mã vì một lý do phải không? Giả sử bạn đang thực hiện nghiên cứu cho người quản lý của mình, người sẽ lần lượt trao dữ liệu này cho người quản lý của họ, v.v. Bạn kiểm tra để đảm bảo rằng bạn không nhận được dữ liệu sai (hoặc chặn người khác thu thập dữ liệu của họ).

Các truy vấn đặc biệt tham chiếu / ảnh hưởng đến dữ liệu hệ thống

Đây có thể là một ngoại lệ cho quy tắc "kiểm tra mọi thứ". Bạn đang chạy truy vấn thông tin trên dữ liệu hệ thống. Điều quan trọng ở đây là lấy lại dữ liệu bạn mong đợi. Nếu truy vấn là một cái gì đó đơn giản (truy vấn chế độ xem hệ thống) thì có lẽ bạn vẫn ổn miễn là bạn đã kiểm tra xem chế độ xem / cột thực sự có ý nghĩa gì. Nếu truy vấn phức tạp (giả sử nhấn 3 hoặc 4 lượt xem hệ thống với các tính toán trên các cột được trả về) thì bạn có thể muốn chạy một vài thử nghiệm chỉ để đảm bảo rằng bạn sẽ lấy lại dữ liệu bạn mong đợi.

Tóm lược

Tóm lại, có, bạn muốn kiểm tra tất cả mọi thứ. Nếu nó đủ quan trọng để bạn viết và chạy nó thì nó đủ quan trọng để bạn kiểm tra. Điều đó không có nghĩa là bạn phải dành một lượng lớn thời gian để kiểm tra từng nhánh của mỗi dòng mã. Nhưng một số mức độ thử nghiệm cần phải được thực hiện.

Kiểm tra đơn vị tự động là bạn của bạn ở đây. Với sự ra đời của DevOpsContinuous Integrationbạn sẽ thấy ngày càng nhiều ứng dụng và phương pháp kiểm tra mã của bạn một cách nhanh chóng và dễ dàng. Tất nhiên điều đó đòi hỏi phải có một môi trường kiểm tra và dữ liệu tốt để đi cùng với nó, nhưng đó là một cuộc thảo luận hoàn toàn khác.


4

Tôi biết những gì bạn cảm thấy, tôi có 3 năm làm việc với MySQL và trong trường hợp của tôi, tôi luôn kiểm tra các truy vấn DML có thể sửa đổi hoặc phá vỡ bất kỳ thông tin nào trên mỗi bảng / cơ sở dữ liệu / sao chép Slave.

Đây luôn là cách an toàn nhất để kiểm tra truy vấn của bạn trước khi bạn chạy nó.

Không có cách nào để biết liệu truy vấn của bạn có thể gây nguy hiểm cho thông tin dữ liệu của bạn hay không. Cách duy nhất là biết cấu trúc và cấu hình cơ sở dữ liệu của bạn, vì vậy bạn có thể dễ dàng xác định khi nào một truy vấn có thể khiến dữ liệu nhạy cảm của bạn gặp rủi ro hay không.

On DELETE, UPDATE, INSERT, bạn nên luôn luôn cố gắng sử dụng SELECTđầu tiên nếu bạn không chắc chắn những thông tin nào mà bạn đang đi để thay đổi. Trong các lựa chọn, luôn cố gắng sử dụng cùng loại dữ liệu cho các điều kiện như kiểu dữ liệu cột, trong một số trường hợp sử dụng EXPLAINđể tối ưu hóa.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.