見出し画像

閏 ~浪漫と奇跡と障害の話~

この記事は、弥生 Advent Calendar 2020 5日目の記事です。

これは、業務で使用している Bug Tracking System へ起票した事象と、絵本「うるうのもり」をもとにしたフィクションです。
私はソフトウェア開発の現場でテストエンジニアをしています。


はじめに

閏年。それは宇宙の神秘と人類の英知。 
和暦。それは歴史の重みと人々の歩み。

閏年。それはFizzBuzzと並びよく取り上げられるプログラミング練習問題。
和暦。それは西暦変換や年齢表示のプログラミングを練習する題材。

閏年。それは決して忘れてはならないテスト観点であり、テストケース。
和暦。それは決して忘れてはならないテスト前提条件であり、テスト観点。

そして今日も、うるうのもりには、4年に1歳ずつ年を重ねる「うるう」が静かに暮らしている。きっと。

時は、遡ること2014年

入力した年が閏年の場合は「うるうどし」と表示して、入力した年が閏年ではない場合は「うるうどしではない」と表示する

こんな要求を見たとき、何を気にするだろうか。
「紀元前はマイナスかな?」「紀元ゼロ年はないから紀元前の場合は4で割って~のルールに当てはまらないな」「っていうか、閏年の算出方法っていつから適用?未来もこの仕組み?」
いろんな疑問が出てくる。閏年の仕組みは、何度考えても浪漫だ。

確認すると、「(かくかくしかじかで)入力する年はシステム日付を中心に過去10年、未来10年が判定できればよい」とのこと。ただし、次のような要求もあった。

和暦で入力した場合も判定する
例えば「平成26」「平26」「26」は、いずれも平成26年=2014年として扱う

…なるほど。

判定できる場合、判定できない場合にわけて、テストする内容を検討。

テスト内容

「判定できる」では、以下テストケースをあげた。

画像5

「判定できない」についてもテストケース作成。
テスト実施では、事前に作成した期待する結果と、実際の動作結果が一致した。問題なしと判断。
感動の物語もなく、無事にサービス開始する運びとなった。

そして、2019年

平成の次の元号が、令和に決まった。
新しい元号でも閏年判定が正しいかテストをすることになった。

一番気になる、平成31年・令和1年・令和2年のテストケースはこちら。
西暦4桁は、元号が変わることに影響しないはずだが、念のため確認。

画像6

テストを実施していく。

画像6

(*^_^*)いいね!
ここまで、順調。無事に令和になることができそう。残すは2020年の確認。

画像7

( ゚Д゚)ん?? 「うるう」がいなくなってしまった…?
令和の「2」年が「うるうどしではない」ことになってしまった。うまく判定できていない。
(´・ω・`)どうしよう…

ここで、閏年の判定をおさらい。

条件1:西暦年が、4で割り切れる年は閏年
条件2:ただし、西暦年が100で割り切れる年は閏年ではない
条件3:ただし、西暦年が400で割り切れる年は閏年

この条件から、2020年(令和2年)は、条件1を満たし、条件2を満たさず、条件3も満たさない。よって、閏年になる。

私たちは、突如いなくなってしまった「うるう」を探し始めた。
「2020」の判定はPassしている。「令和2」と「令2」の判定もPassしている。だから、西暦の判定は正しくできているはずだし、和暦から西暦の変換(令和2年 → 西暦2020年)も正しくできているはず。
あと考えられるのは…?

「もしや、元号なしの場合、平成になっている?」
うるうのもりを探した。令和の2年は平成の中に紛れてはいなかった。

令和の2年は、西暦の中に紛れてしまっていた。

「元号が平成から令和に変わる対応」による誤りではなかった。
平成の時から、元号なしの表記の場合は、和暦ではなく西暦として判定していた。

「なぜ、ずっと見つからなかったのだろう?」

書き出してみた結果、平成は、西暦の値と和暦の値で「年が4で割り切れる」かどうかが一致していた。
条件2や条件3に当てはまる西暦は、有効としている期間になっていなかったので、確認していなかった。

こういうことだ。

画像7

どのようなロジックで判定しているかを確認しないブラックボックステストをしていた。
平成の場合は、和暦の年数を西暦のように扱ってしまっても、判定の結果が一致してしまう。このため、平成の間、検出することができなかった。

平成は、奇跡の期間だった。

令和の開始が2017年や2021年だったら、ブラックボックステストでは今でも見つかっていなかっただろう。2019年に令和になったからこそ、長年潜んでいた欠陥を故障として見つけ出すことができた。

原因がわかって、ひと安心。
あやうく、令和の2年2月29日を存在しない日にしてしまうところだった。

私たちは「うるう」がいなくなってしまった原因を修正し、丁寧に確認して、元号改正の対応を無事に完了した。

うるうへ

令和2年2月29日は「いないこと」になんて、ならなかった。
2月29日、うるうは、もりで誕生日を祝っていただろうか?
あの日、私は激しすぎる状況のうつりかわりに少しおびえ、なんとかついていこうとしていた。そしてその激動は、今も続いている。

あなたは余りの1なんかじゃない、世界のバランスをとる大切な1日だ。
平成は奇跡の期間だった。私は令和にも何か奇跡を起こせると信じている。
『カノン』に合わせて、あなたに報告をしにいこう。


参考

絵と文 小林賢太郎, うるうのもり, 講談社, 2016年2月29日(第1刷発行)