Làm thế nào để bạn kiểm tra phần mềm nhạy cảm với thời gian?


9

Theo thời gian nhạy cảm, tôi có nghĩa là một tập lệnh chỉ chạy một lần một tháng hoặc một tập lệnh chạy liên tục nhưng chỉ cho một đầu ra nhất định mỗi tháng một lần. Rõ ràng bạn có thể kiểm tra đơn vị cho rất nhiều trường hợp nhưng vẫn có trường hợp ngoại lệ (theo cách hiểu của tôi).

Một ví dụ gần đây tôi gặp phải là thiết lập một công việc định kỳ để chạy vào ngày thứ hai đến ngày cuối cùng hàng tháng. Điều này yêu cầu sử dụng tập lệnh shell với tab cron để có được ngày chính xác của tháng cho cron, đại loại như:

1 0 [shell command] * * [my script]

Tôi không quen thuộc với kịch bản nói chung và không quen thuộc với các kịch bản shell nói chung và vì vậy không có cách nào tốt để kiểm tra nó ngoài việc chờ đến cuối tháng để xem liệu kịch bản có thực thi đúng không (thực ra giải pháp của tôi là tìm ra một đồng worker, người biết nhiều hơn về kịch bản cron và shell mà tôi đã làm).

Vì vậy, tôi tò mò nếu có bất kỳ công việc hữu ích xung quanh để thử nghiệm các kịch bản nhạy cảm thời gian.


3
Bạn có thể chạy cái này trên máy ảo và đặt thời gian hệ thống thành một cái thuận tiện như chỉ nửa đêm trước ngày tập lệnh sẽ chạy hoặc một cái gì đó tương tự.
Vitor Py

2
crontab thực thi các tập lệnh shell thông thường, bạn có thể chỉ cần thực thi tập lệnh bằng tay (trong hộp cát hoặc vm nếu bạn sợ những gì nó sẽ làm) mà không cần chờ crontab
crasic

2
Câu trả lời của tôi có lẽ là quá mức cần thiết cho trường hợp cụ thể của bạn: Chỉ cần chạy tập lệnh. Nhưng câu hỏi lớn hơn sẽ cần các giải pháp như ảo hóa và thiết bị.
Macneil

Câu trả lời:


7

Ngoài thử nghiệm đơn vị, có hai chiến lược khác để thiết lập thử nghiệm tự động để giải quyết vấn đề dành riêng cho hệ điều hành:

  • Ảo hóa : Bạn thiết lập một số hình ảnh HĐH (ví dụ: sử dụng VMWare ) với các cấu hình chính xác mà bạn yêu cầu, thiết lập một cách để tự động kéo nhị phân để kiểm tra (thường bằng cách gắn một thư mục đặc biệt vào không gian của VM), sau đó thực thi kiểm tra.

Hoặc là:

  • Thiết bị đo đạc : Thêm thủ công các ifđiều kiện đặc biệt vào chương trình của bạn để chương trình hoạt động khác đi. Trong Unix, điều này sẽ được thực hiện bằng cách kiểm tra nếu một biến môi trường nhất định được đặt, như thế nào FOOBAR_TEST_TIME_WITH_T=500. Các kiểm tra tự động của bạn sau đó sẽ chỉ sử dụng các cài đặt khác nhau của các biến môi trường và các biến môi trường khác nhau để thực hiện những gì bạn cần.

Bạn cũng có thể liên kết đến các thư viện khác nhau, nếu các tương tác của bạn có thể được thể hiện ở cấp thư viện mà bạn có thể nghĩ là ảo hóa (nếu "thư viện" là nhân hệ điều hành) hoặc như một kỹ thuật thiết bị. Cả hai thuật ngữ có thể được sử dụng, mặc dù thuật ngữ ảo hóa được sử dụng ngày nay hầu như luôn có nghĩa giống như VMWare. Một thư viện đặc biệt để trả về các giá trị đóng hộp hoặc chạy lại các tương tác cụ thể sẽ là một cách tiếp cận giả hoặc sơ khai .

Ngoài ra còn có các công cụ thiết bị tự động, có thể viết lại nhị phân của bạn để có được các hiệu ứng mong muốn khác, như hệ thống tệp đã đầy.

Nhìn chung, mục tiêu của bạn là tìm lỗi. Để kiểm tra các trường hợp kỳ lạ như hệ thống tệp bị quá đầy, việc sử dụng chương trình của bạn theo cách thủ công, ảo hóa hoặc thủ công cấu hình máy thủ công là rất dễ dàng và hiệu quả.


tôi nghĩ rằng 'ảo hóa thư viện' của bạn được biết đến nhiều hơn là giả, hay đúng hơn là sử dụng thư viện giả.
Javier

10

Hiệu quả nhất - Thay đổi ngày của máy mà bạn đang kiểm tra. Đặt nó một chút trước khi nó cần chạy và xác minh khi nào nó khởi động và nó chạy đúng. Tuy nhiên, điều này không phải lúc nào cũng có thể nếu có nhiều máy tham gia hoặc nếu tài nguyên được yêu cầu thì công ty của bạn không có quyền kiểm soát. Tuy nhiên, hãy đảm bảo rằng bạn đang thực hiện nó trong nhiều tháng và đảm bảo rằng bạn thay đổi năm một vài lần để kiểm tra tháng hai.


1
nếu bạn đã cài đặt phần mềm với giấy phép (n đánh giá) trong một thời gian giới hạn, việc mày mò đồng hồ có thể kích hoạt chúng để chặn việc thực thi của chúng.
Marjan Venema

Ở một số công ty, tất cả các máy trạm đăng nhập vào mạng không được đi chệch khỏi thời gian "máy chủ" trong 5 phút, nếu không, máy trạm sẽ khóa. Nó đã xảy ra với tôi :-)
OnesimusUnbound

1

Tôi không biết về tập lệnh của bạn, nhưng tôi cố gắng sử dụng một số loại tham số mà tôi có thể đặt ngày. Trong trường hợp của bạn, nếu không có ngày nào được đưa ra, mặc định là cuối tháng. Trong mã của bạn, lấy tham số ngày và chạy nếu hôm nay là hai ngày trước. Bạn không chỉ có thể kiểm tra nó (vượt qua một ngày hai ngày kể từ bây giờ), mà còn chạy vào ngày hôm sau trong trường hợp có thứ gì đó ngăn nó chạy trong các trường hợp bình thường (mất điện, máy chủ bị hỏng, v.v.).


1

Vì bạn đã đề cập đến crontab, tôi giả sử bạn đang chạy trong môi trường nix. Trong trường hợp đó, tôi nghĩ rằng sẽ rất đáng để bạn kiểm tra libfaketime:
http://www.code-wizards.com/projects/libfaketime/

Thông qua sự kỳ diệu của LD_PRELOAD, chúng ta có thể tải các phiên bản tùy chỉnh của các chức năng thư viện miễn là chúng phù hợp với giao diện. Những gì libfaketime làm là tải các phiên bản của các cuộc gọi hệ thống thời gian cho phép bạn tùy chỉnh hành vi của chúng thông qua các biến môi trường. Bạn có thể buộc thời gian () trả về giá trị được mã hóa cứng hoặc phần bù từ thời điểm hiện tại, tất cả mà không ảnh hưởng đến bất kỳ ai khác trên hộp.


0

Không có nhiều nhu cầu kiểm tra cron, vì nó đã được thử nghiệm khá nhiều ("thử nghiệm sản xuất") trong nhiều thế hệ. Tất nhiên, nếu bạn đang làm việc với tập lệnh shell, bạn có thể đặt ngày / giờ trong máy ảo.

Cách ưa thích để giải quyết vấn đề này là "chế nhạo đồng hồ", sử dụng một mẹo lập trình hoặc cách khác để giả mạo thời gian. Trong các tập lệnh shell, bạn có thể sử dụng cú pháp $ {: -} để sử dụng ngày được đặt trong biến môi trường và quay lại thời gian thực tế nếu nó không bị ép buộc.

Trong các ngôn ngữ khác, chúng tôi sử dụng các thư viện giả hoặc xây dựng một bản tóm tắt theo thời gian.

Đồng hồ giả là tốt vì bạn có thể tự động hóa nó thay vì phải tự thiết lập thử nghiệm của mình. Đây là một lợi ích rất lớn khi sửa đổi tập lệnh / mã sau này và bạn có thể dễ dàng biết liệu nó có còn hoạt động hay không.

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.