iT邦幫忙

2021 iThome 鐵人賽

DAY 6
2
Modern Web

當拉拉肉遇到單元測試,是否能夠擦出命運的火花?系列 第 7

[Day 06] 一個單元測試的題目-閏年的判斷

過了這麼多天,
我們終於進入到主題了,
這一次我們使用的題目,
是輸入一個正整數(西元年),
然後判斷這一年是不是閏年,

到底為什麼會有閏年呢?
我們計算一天的時間,
是地球自轉一圈的時間,
然後所謂的一年,
就是地球繞太陽一圈的時間,
但是其實這個時間是有誤差的,
之前的曆法所訂的一年是365天,
但是其實地球繞太陽一圈的時間是365.25天,
所以就會形成所謂的閏年,
也就是需要校正回歸。

以前以為閏年的計算很簡單,
反正就是三年平年就會有一年閏年,
不過我們來看 維基百科 的說明
其實每100年還可能會遇到一個平年,
這是因為365.25天也不是很準確,
所以需要再一次的校正回歸,
當然因為一般來說我們這輩子最多只會遇到一次剛好滿百年,
所以這個定義對我們來說其實影響很小,
日常生活只要記得四年會遇到一個閏年就好了。

所以實際上的閏年是這樣子判斷的(維基百科):

  • 公元年分非4的倍數,為平年。
  • 公元年分為4的倍數但非100的倍數,為閏年。
  • 公元年分為100的倍數但非400的倍數,為平年。
  • 公元年分為400的倍數為閏年。

這就是我們對閏年的定義,
了解了閏年的定義之後,
我們才有辦法來判斷閏年。

然後當我們有了一個需求之後,
第一件事不是先去寫程式解決它,
因為通常這個需求可能會很複雜,
(當然我們這個例子相對來說單純很多)
所以首先我們要先把需求拆開來,
把一個大需求拆成很多小需求,
然後每個小需求都完成,
理論上這個大需求也應該完成了。
(對,理論上,因為凡事總有例外)

我們這次寫的測試驅動開發(TDD)也是這樣,
我們不會一次完成所有的判斷,
而是一步一步增加功能,
直到最後完成所有的功能,
並且進行重構。

所以我們先將需求拆解成這樣,
為了要判斷閏年,
我們的程式是這樣判斷的:

  1. 如果是4的倍數,那就是閏年
  2. 如果是100的倍數,那就是平年
  3. 如果是400的倍數,那就是閏年
  4. 其他都是平年

完成了分析之後,
我們就可以開始撰寫我們的程式了。


上一篇
[Day 05] 開發之前,先把需求弄清楚
下一篇
[Day 07] 簡單的單元測試實作(一)
系列文
當拉拉肉遇到單元測試,是否能夠擦出命運的火花?31

尚未有邦友留言

立即登入留言