我々は賢いので。

かんとーちほーのエンジニアの、仕事とか、趣味とか、いろいろなはなし。

先日Qiitaに投稿したRandomizeUtilityの記事

(*'▽')いいねがついてました!!

f:id:sugaryo1224:20170901101640p:plain

ありがとうございます

Qiita初回投稿の時にも書きましたが、やはり反応があると嬉しいもので、続けようと言う動機づけになって凄く有り難いですね。 ブログもできる限り毎日更新しようと思ってるので、Qiita投稿で反応を貰えるとそっちの意味でも非常に助かります。

しかも、割と(ソースコード的には)いい出来の部品になったなとは思うものの、しかしこれ需要ねーよなwwwと思ってたRandomizeUtilityにいいねが付いたのは素直に嬉しいです。

(*'▽')わーい

制作秘話

じつは最初思いっきりバグってたんです

最初はBlockクラスを作らずに、ストレートにRandomizerクラスの実装に取り掛かったんですよ。

でもそしたらバグっちゃってましてね。

その時のバグは、

  • 抽出数が半分を超えるとランダム性が皆無になる

というものでした。

あの時の実装だと、(インデックス操作を実数でやるのが嫌だったので)整数で計算を完結させようとしていたんですが、 そのせいでブロック分割レベルが上がりすぎる「全体の半数以上を抽出しようとした時」にランダム性が全くなくなると言うものでした。

(*'▽')てへぺろ

そのバグを修正しようとして泥沼に

言うても大した難しい要件じゃないんだし、簡単に直せるやろ。

と、タカを括って修正を始めたんですが。

思った以上に難航した上にロジックを弄りすぎてコードがグチャグチャになったので、一旦全部リバート掛けてやり直しするハメに。

恥ずかしいのであまり言いたくないんですが、途中経過として

  • 特定条件の場合に、指定した要素数を抽出できない

と言う、もう機能性を思いっきり損なう致命的なバグまで出しちゃいました。

(*'▽')やっちまった!!

仕方ないのできちんと設計からやる事に

作り始めた時は割と楽勝だろー、って思ってたんですが、考えを改めて。

きちんと機能的な設計から本腰入れてやる事に。 この時に初めて、疑似ランダム実装の前田二階としてブロック分割する機能を独立して作る事にして、しかもそれに対して真面目にテストコードを書こうと決めました。

(*'▽')こいつ、手ごわいぞ!!

致し方なし。 ここまで苦戦しては致し方なし。 きちんとテストを見越した機能設計から始めるという、趣味コーディングにしては本格的なプロジェクトとして再出発する事に。

そうです、実はあの公開したRandomizeUtilityは、しれっと version2.0 だったのです!!

しかしこの後、ブロック分割に関してはまだしも、ランダム性のテストをどうしようかで再び頭を悩ませる事になるとは思っていませんでした。

と言う事で

RandomizeUtilityに思っていたよりも反応を頂けたので、今度そのテスト実装や、上記のような過去出してしまったバグなんかについてQiitaに纏めて書こうかなって思います。

テストのやり方とか、テストメソッドの実装に関して思う所とか、なんかそんな話。

(*'▽')テストは大事ですぞ!!

広告を非表示にする