狠狠撸

狠狠撸Share a Scribd company logo
コード品质を保つためにやっている心がけたいこと
TL;DR
日本語を書く力を養う
日本語を読む力を養う
要するに国語力を鍛える
贵颈锄锄叠耻锄锄问题「仕様书」
要件
1から任意の値までを順に数えた数え入力し、次の通り標準出力へ出力する。
その数が3で割り切れる場合には、「Fizz」と出力する
その数が5で割り切れる場合には、「Buzz」と出力する
その数が3でも5でも割り切れる場合には、「FizzBuzz」と出力する
以上のどれにも当てはまらない場合、入力された数値をそのまま出力する。
https://atmarkit.itmedia.co.jp/ait/articles/1612/20/news026.html
FizzBuzz問題:DevBasics/Keyword-@ITを参考に一部改変
FizzBuzz問題「テスト結果報告書」
バグ内容
15 という入力に対し FizzBuzzFizzBuzz と出力されました。
正しい動作
15 と入力した際は FizzBuzz のみ出力してください。
プログラマーの回答
正しい動作です。
何が起きた?
function fizzBuzz($i) {

$hit = false;

// その数が3で割り切れる場合には、「Fizz」と出力する

if($i % 3 === 0) {

$hit = true;

echo 'Fizz';

}

// その数が5で割り切れる場合には、「Buzz」と出力する

if($i % 5 === 0) {

$hit = true;

echo 'Buzz';

}

// その数が3でも5でも割り切れる場合には、「FizzBuzz」と出力する

if($i % 3 === 0 && $i % 5 === 0) {

$hit = true;

echo 'FizzBuzz';

}

// 以上のどれにも当てはまらない場合、入力された数値をそのまま出力する。

if(!$hit) {

echo $i;

}

}
修正指示
仕様書の誤りです。テスト結果報告書の通り修正してください。
正しい動作
15 と入力した際は FizzBuzz と出力してください。
修正されたコード
// その数が3でも5でも割り切れる場合には、「FizzBuzz」と出力する

if($i % 3 === 0 && $i % 5 === 0) {

$hit = true;

+ // バグNo.42 `15` と入力した際は `FizzBuzz` のみ出力してください。

+ if(%i !== 15) {

echo 'FizzBuzz';

+ }

}
FizzBuzz問題「テスト結果報告書」
バグ内容
30 という入力に対し FizzBuzzFizzBuzz と出力されました。
正しい動作
30 と入力した際は FizzBuzz と出力してください。
他の類似の値に対しても同様の修正をしてください。
偉い人の声
「二つ目の問題は何かって?それは、サービスの開始時刻が、今から8分後であるということ
だ。よろしく頼む。」
どうすれば良いのか?
仕様書を、解釈の余地が存在しないよう正確に書く。
正確に書く
数値以外が入力された場合の動作
或いは絶対に入力されないのか?
小数が入力された場合の動作
或いは絶対に入力されないのか?
入力される値の上限と下限
範囲外の値が入力された場合の動作
シグナルを受け取った際の動作。
或いは関知しなくて良いのか?
出力の際にOSがエラーを返却した場合の動作
メモリが足りない場合の動作
FizzBuzzEnterpriseEdition
https://github.com/EnterpriseQualityCoding/FizzBuzzEnterpriseEdition
package com.seriouscompany.business.java.fizzbuzz.packagenamingpackage.impl;

import org.springframework.context.ApplicationContext;

import org.springframework.context.ConfigurableApplicationContext;

import org.springframework.context.support.ClassPathXmlApplicationContext;

import com.seriouscompany.business.java.fizzbuzz.packagenamingpackage.impl.parameters.DefaultFizzBuzzUpperLimitParameter;

import com.seriouscompany.business.java.fizzbuzz.packagenamingpackage.interfaces.FizzBuzz;

import com.seriouscompany.business.java.fizzbuzz.packagenamingpackage.interfaces.parameters.FizzBuzzUpperLimitParameter;

/**

* Main

*/

public final class Main {

/**

* @param args

*/

public static void main(final String[] args) {

final ApplicationContext context = new ClassPathXmlApplicationContext(Constants.SPRING_XML);

final FizzBuzz myFizzBuzz = (FizzBuzz) context.getBean(Constants.STANDARD_FIZZ_BUZZ);

final FizzBuzzUpperLimitParameter fizzBuzzUpperLimit = new DefaultFizzBuzzUpperLimitParameter();

myFizzBuzz.fizzBuzz(fizzBuzzUpperLimit.obtainUpperLimitValue());

((ConfigurableApplicationContext) context).close();

}

}
正確な仕様書を最低限の分量で書く。
その数が3で割り切れる場合には、その数の代わりに「Fizz」を出力する
その数が5で割り切れる場合には、その数の代わりに「Buzz」を出力する
その数が3でも5でも割り切れる場合には、その数の代わりに「FizzBuzz」を出力する
https://atmarkit.itmedia.co.jp/ait/articles/1612/20/news026.html
FizzBuzz問題:DevBasics/Keyword-@IT原文
日本語を書く力を養う
背景を書く
入社試験の一次試験として実装の正確さを評価します。
配属先の参考としますが実装の良し悪しは評価の対象としません。
医療機器のシステムの一部として利用されます。
金融機関のシステムの一部として利用されます。
「主人公の心境に最も近いものを答えよ」と同じ解き方
日本語を読む力を養う
シンプルに捉える
言語化できない仕様を実装することは普通の人はできない。
言葉を綺麗に保てば実装や設計も自然と綺麗になる。
参考
ドキュメントに固執せよ
https://gfngfn.github.io/ja/posts/2022-06-18-be-a-documentation-geek/
【翻訳】Googleのエンジニアがソフトウェア開発する時に必ず書くドキュメント
「DesignDocsatGoogle」
https://tkybpp.hatenablog.com/entry/2020/08/03/090000
Ad

More Related Content

What's hot (20)

笔测迟丑辞苍による黒魔术入门
笔测迟丑辞苍による黒魔术入门笔测迟丑辞苍による黒魔术入门
笔测迟丑辞苍による黒魔术入门
大樹 小倉
?
世界一わかりやすいClean Architecture
世界一わかりやすいClean Architecture世界一わかりやすいClean Architecture
世界一わかりやすいClean Architecture
Atsushi Nakamura
?
大规模ソーシャルゲームを支える技术~笔贬笔+惭测厂蚕尝を使った高负荷対策~
大规模ソーシャルゲームを支える技术~笔贬笔+惭测厂蚕尝を使った高负荷対策~大规模ソーシャルゲームを支える技术~笔贬笔+惭测厂蚕尝を使った高负荷対策~
大规模ソーシャルゲームを支える技术~笔贬笔+惭测厂蚕尝を使った高负荷対策~
infinite_loop
?
オブジェクト指向の设计と実装の学び方のコツ
オブジェクト指向の设计と実装の学び方のコツオブジェクト指向の设计と実装の学び方のコツ
オブジェクト指向の设计と実装の学び方のコツ
増田 亨
?
ネットストーカー御用达翱厂滨狈罢ツール叠濒补肠办叠颈谤诲を触ってみた.辫辫迟虫
ネットストーカー御用达翱厂滨狈罢ツール叠濒补肠办叠颈谤诲を触ってみた.辫辫迟虫ネットストーカー御用达翱厂滨狈罢ツール叠濒补肠办叠颈谤诲を触ってみた.辫辫迟虫
ネットストーカー御用达翱厂滨狈罢ツール叠濒补肠办叠颈谤诲を触ってみた.辫辫迟虫
Shota Shinogi
?
SPAセキュリティ入門~PHP Conference Japan 2021
SPAセキュリティ入門~PHP Conference Japan 2021SPAセキュリティ入門~PHP Conference Japan 2021
SPAセキュリティ入門~PHP Conference Japan 2021
Hiroshi Tokumaru
?
TDD のこころ @ OSH2014
TDD のこころ @ OSH2014TDD のこころ @ OSH2014
TDD のこころ @ OSH2014
Takuto Wada
?
笔辞蝉迟驳谤别厂蚕尝アンチハ?ターン
笔辞蝉迟驳谤别厂蚕尝アンチハ?ターン笔辞蝉迟驳谤别厂蚕尝アンチハ?ターン
笔辞蝉迟驳谤别厂蚕尝アンチハ?ターン
Soudai Sone
?
C# における Redis 徹底活用
C# における Redis 徹底活用C# における Redis 徹底活用
C# における Redis 徹底活用
Takaaki Suzuki
?
PHP AST 徹底解説
PHP AST 徹底解説PHP AST 徹底解説
PHP AST 徹底解説
do_aki
?
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
Takuto Wada
?
【BS4】時は来たれり。今こそ .NET 6 へ移行する時。
【BS4】時は来たれり。今こそ .NET 6 へ移行する時。 【BS4】時は来たれり。今こそ .NET 6 へ移行する時。
【BS4】時は来たれり。今こそ .NET 6 へ移行する時。
日本マイクロソフト株式会社
?
ソーシャルゲーム案件における顿叠分割の笔贬笔実装
ソーシャルゲーム案件における顿叠分割の笔贬笔実装ソーシャルゲーム案件における顿叠分割の笔贬笔実装
ソーシャルゲーム案件における顿叠分割の笔贬笔実装
infinite_loop
?
実装して理解するLINE LoginとOpenID Connect入門
実装して理解するLINE LoginとOpenID Connect入門実装して理解するLINE LoginとOpenID Connect入門
実装して理解するLINE LoginとOpenID Connect入門
Naohiro Fujie
?
FINAL FANTASY XVにおけるPhoton利用事例 - Photon運営事務局 GTMF 2018 OSAKA / TOKYO
FINAL FANTASY XVにおけるPhoton利用事例 - Photon運営事務局 GTMF 2018 OSAKA / TOKYOFINAL FANTASY XVにおけるPhoton利用事例 - Photon運営事務局 GTMF 2018 OSAKA / TOKYO
FINAL FANTASY XVにおけるPhoton利用事例 - Photon運営事務局 GTMF 2018 OSAKA / TOKYO
Game Tools & Middleware Forum
?
トランザクションスクリプトのすすめ
トランザクションスクリプトのすすめトランザクションスクリプトのすすめ
トランザクションスクリプトのすすめ
pospome
?
イミュータブルデータモデルの极意
イミュータブルデータモデルの极意イミュータブルデータモデルの极意
イミュータブルデータモデルの极意
Yoshitaka Kawashima
?
なかったら滨狈厂贰搁罢したいし、あるならロック取りたいやん?
なかったら滨狈厂贰搁罢したいし、あるならロック取りたいやん?なかったら滨狈厂贰搁罢したいし、あるならロック取りたいやん?
なかったら滨狈厂贰搁罢したいし、あるならロック取りたいやん?
ichirin2501
?
CEDEC 2018 最速のC#の書き方 - C#大統一理論へ向けて性能的課題を払拭する
CEDEC 2018 最速のC#の書き方 - C#大統一理論へ向けて性能的課題を払拭するCEDEC 2018 最速のC#の書き方 - C#大統一理論へ向けて性能的課題を払拭する
CEDEC 2018 最速のC#の書き方 - C#大統一理論へ向けて性能的課題を払拭する
Yoshifumi Kawai
?
オニギリペイのセキュリティ事故に学ぶ安全なサービスの構築法 (PHPカンファレンス2019)
オニギリペイのセキュリティ事故に学ぶ安全なサービスの構築法 (PHPカンファレンス2019)オニギリペイのセキュリティ事故に学ぶ安全なサービスの構築法 (PHPカンファレンス2019)
オニギリペイのセキュリティ事故に学ぶ安全なサービスの構築法 (PHPカンファレンス2019)
Hiroshi Tokumaru
?
笔测迟丑辞苍による黒魔术入门
笔测迟丑辞苍による黒魔术入门笔测迟丑辞苍による黒魔术入门
笔测迟丑辞苍による黒魔术入门
大樹 小倉
?
世界一わかりやすいClean Architecture
世界一わかりやすいClean Architecture世界一わかりやすいClean Architecture
世界一わかりやすいClean Architecture
Atsushi Nakamura
?
大规模ソーシャルゲームを支える技术~笔贬笔+惭测厂蚕尝を使った高负荷対策~
大规模ソーシャルゲームを支える技术~笔贬笔+惭测厂蚕尝を使った高负荷対策~大规模ソーシャルゲームを支える技术~笔贬笔+惭测厂蚕尝を使った高负荷対策~
大规模ソーシャルゲームを支える技术~笔贬笔+惭测厂蚕尝を使った高负荷対策~
infinite_loop
?
オブジェクト指向の设计と実装の学び方のコツ
オブジェクト指向の设计と実装の学び方のコツオブジェクト指向の设计と実装の学び方のコツ
オブジェクト指向の设计と実装の学び方のコツ
増田 亨
?
ネットストーカー御用达翱厂滨狈罢ツール叠濒补肠办叠颈谤诲を触ってみた.辫辫迟虫
ネットストーカー御用达翱厂滨狈罢ツール叠濒补肠办叠颈谤诲を触ってみた.辫辫迟虫ネットストーカー御用达翱厂滨狈罢ツール叠濒补肠办叠颈谤诲を触ってみた.辫辫迟虫
ネットストーカー御用达翱厂滨狈罢ツール叠濒补肠办叠颈谤诲を触ってみた.辫辫迟虫
Shota Shinogi
?
SPAセキュリティ入門~PHP Conference Japan 2021
SPAセキュリティ入門~PHP Conference Japan 2021SPAセキュリティ入門~PHP Conference Japan 2021
SPAセキュリティ入門~PHP Conference Japan 2021
Hiroshi Tokumaru
?
TDD のこころ @ OSH2014
TDD のこころ @ OSH2014TDD のこころ @ OSH2014
TDD のこころ @ OSH2014
Takuto Wada
?
笔辞蝉迟驳谤别厂蚕尝アンチハ?ターン
笔辞蝉迟驳谤别厂蚕尝アンチハ?ターン笔辞蝉迟驳谤别厂蚕尝アンチハ?ターン
笔辞蝉迟驳谤别厂蚕尝アンチハ?ターン
Soudai Sone
?
C# における Redis 徹底活用
C# における Redis 徹底活用C# における Redis 徹底活用
C# における Redis 徹底活用
Takaaki Suzuki
?
PHP AST 徹底解説
PHP AST 徹底解説PHP AST 徹底解説
PHP AST 徹底解説
do_aki
?
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
Takuto Wada
?
ソーシャルゲーム案件における顿叠分割の笔贬笔実装
ソーシャルゲーム案件における顿叠分割の笔贬笔実装ソーシャルゲーム案件における顿叠分割の笔贬笔実装
ソーシャルゲーム案件における顿叠分割の笔贬笔実装
infinite_loop
?
実装して理解するLINE LoginとOpenID Connect入門
実装して理解するLINE LoginとOpenID Connect入門実装して理解するLINE LoginとOpenID Connect入門
実装して理解するLINE LoginとOpenID Connect入門
Naohiro Fujie
?
FINAL FANTASY XVにおけるPhoton利用事例 - Photon運営事務局 GTMF 2018 OSAKA / TOKYO
FINAL FANTASY XVにおけるPhoton利用事例 - Photon運営事務局 GTMF 2018 OSAKA / TOKYOFINAL FANTASY XVにおけるPhoton利用事例 - Photon運営事務局 GTMF 2018 OSAKA / TOKYO
FINAL FANTASY XVにおけるPhoton利用事例 - Photon運営事務局 GTMF 2018 OSAKA / TOKYO
Game Tools & Middleware Forum
?
トランザクションスクリプトのすすめ
トランザクションスクリプトのすすめトランザクションスクリプトのすすめ
トランザクションスクリプトのすすめ
pospome
?
イミュータブルデータモデルの极意
イミュータブルデータモデルの极意イミュータブルデータモデルの极意
イミュータブルデータモデルの极意
Yoshitaka Kawashima
?
なかったら滨狈厂贰搁罢したいし、あるならロック取りたいやん?
なかったら滨狈厂贰搁罢したいし、あるならロック取りたいやん?なかったら滨狈厂贰搁罢したいし、あるならロック取りたいやん?
なかったら滨狈厂贰搁罢したいし、あるならロック取りたいやん?
ichirin2501
?
CEDEC 2018 最速のC#の書き方 - C#大統一理論へ向けて性能的課題を払拭する
CEDEC 2018 最速のC#の書き方 - C#大統一理論へ向けて性能的課題を払拭するCEDEC 2018 最速のC#の書き方 - C#大統一理論へ向けて性能的課題を払拭する
CEDEC 2018 最速のC#の書き方 - C#大統一理論へ向けて性能的課題を払拭する
Yoshifumi Kawai
?
オニギリペイのセキュリティ事故に学ぶ安全なサービスの構築法 (PHPカンファレンス2019)
オニギリペイのセキュリティ事故に学ぶ安全なサービスの構築法 (PHPカンファレンス2019)オニギリペイのセキュリティ事故に学ぶ安全なサービスの構築法 (PHPカンファレンス2019)
オニギリペイのセキュリティ事故に学ぶ安全なサービスの構築法 (PHPカンファレンス2019)
Hiroshi Tokumaru
?

コード品质を保つために心がけたいこと