日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

关于闰年的测试

發布時間:2024/5/15 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 关于闰年的测试 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

? ? ?很多軟件都實現了日期這一功能,日歷系統算是人類的一個legacy system。在此系統逐步進化中,也衍生出一些問題,例如“千年蟲”、”閏年蟲”。其中閏年蟲是人們對于一些電腦在設計時未考慮閏年因素,將所有年份的2月都默認為有29天或者28天而出現運算錯誤的一種形象叫法,因為在英文里Bug兼有臭蟲、缺陷等含義,所以這一缺陷被稱為“閏年蟲”。

? ? ?在2012年2月底,廣州“閏年蟲”爆發,上千的士因計價器出問題而停運,如圖所示:

? ? ? 就連著名的微軟也會出現”閏年蟲”的失誤,微軟Windows Azure云平臺若干子區域受“閏年蟲”影響致許多客戶12至24個小時無法使用服務。根據Windows Azure服務儀表板顯示,從UTC時間2012年2月29日凌晨到3月1日早上,大量的子區域服務和全球性服務發生了超過24小時的中斷。

? ? ? 因此如何正確判斷閏年是一個十分重要的問題,下面是C# 的代碼片段:

1 public static bool IsLeapYear(int year) 2 { 3 System.Diagnostics.Debug.Assert(year >= 1900); 4 if (year % 400 == 0) 5 return true; 6 if (year % 100 == 0) 7 return false; 8 if (year % 4 == 0) 9 return true; 10 return false; 11 }

? ? ?如果你要寫這個程序的單元測試, 你會列出多少個測試用例? ?一個”笨”方法就是進行窮舉,可又會面臨以下問題:

  • 窮舉不完
  • 即使窮舉了很多例子, 但是它們未必能幫助發現獨特的問題,并不具有代表性
  • ? ? ?因而我們要引入 “等價類 (Equivalence)” 這一概念。所謂等價類是指輸入域的某個互不相交的子集合,所有等價類的并集便是整個輸入域,目的在于測試用例的無冗余性。?一個粗淺的做法是:

    如果一個函數可以返回 true | false, 你至少得有兩類測試集合, 讓它分別返回 true | false

    ? ? ?如果你知道這個函數工作的原理, 或者了解程序要反映的現實世界, 你可以舉出更詳細的等價類, 例如針對 IsLeapYear()的測試用例如下:

    被 400 整除的年份

    被 100 整除, 但是不被400 整除的年份

    被 100 整除, 同時被400 整除的年份

    被 4 整除, 但是不被100 整除的年份

    被 4 整除, 同時被100 整除的年份

    偶數, 不被4 整除的年份

    奇數年份

    其它非法輸入的年份

    ? ? ? 另外程序員都知道程序經常在邊界條件附近出錯, 針對IsLeapYear(), 你可以得出下面兩個測試用例:

    設計允許的最小的年份

    設計允許的最大的年份

    ? ? ?總而言之,選取正確而又合適的測試用例是測試程序有無bug的必備條件。除此之外,判斷是否為閏年的代碼也可以簡化如下:

    1 bool isLeapYear( int year ) 2 { 3 return year % 400 == 0 || (year % 4 == 0 && year % 100 != 0); 4 } 

    ?

    轉載于:https://www.cnblogs.com/xlwm/p/4337150.html

    總結

    以上是生活随笔為你收集整理的关于闰年的测试的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。