この投稿は、SC(非公式) Advent Calendar 2017の18日目の投稿です。
内容は技術的なというよりポエムですので興味がある方のみ読んでみてください。
#きっかけ
なんだかよくわからないけど、上司からコードの品質を向上させるもしくは品質を低下させない方法を考えてくれと言われました。
#高品質のためのアプローチのしかたを考えてみる
##個人のスキルの向上
###本やネットの情報を元に独学
まずは自分の能力向上に勤めましょう。テクニックは人に教えてもらうのではなく自分で学ぶんですよ。
###自分より能力や経験が上の人に指導してもらう
自分で学んだテクニックをさらに他人に指導してもらい昇華させましょう。
自分の能力に自惚れていないでしっかりとコードレビューを受けよう!
工数が、、、って怒られちゃうかもしれないけど、ペアプログラミング、さらには最近だとモブプログラミングという手法もあります。ぜひ挑戦してみましょう。上位者の人のスキルアップにもつながるかもしれません。
###さらなる向上
インプットしたものをアウトプットしよう。社外でインプットしたものは社内へアウトプット、社内でインプットしたものは社外へアウトプットすることでそれについての議論がなされもとに戻すことで双方に新たな発展を産み、そしてそれが自分のスキルとなって先に向かっていくでしょう。
##チーム開発
###テストコード書いていますか?!
工数が足りないとか時間が足りないとかいうのはやめましょう。それも含めて開発期間だと思おう!
仕様変更時にテストが置いてかれていませんか?!せっかく書いたテストをムダにしないように
そもそもテストコードが書きづらいプログラム設計になっていないですかね。複雑なコードだからテストコードも複雑になってしまうのかもしれないですよ。
###バージョン管理システム
TFSやGitをただのプログラムのバージョン管理システムにしていませんか?!もったいないですよ。
便利な機能がたくさんあるのでどんどん使いこなしましょう。
例えば、
####・継続的インテグレーション導入していますか?!
自動ビルド機能です。
「誰だよ、ビルドできないやつチェックインしたのは!!!!」って経験ありませんかね。私はあります。
そろそろチェックイン時にビルドが走るようにしてみませんか?!Git系でもTFS系でも意外と簡単に導入できますよ。
####・テストコード書いたら自動実行しちゃおう!
せっかくテストコードを書いたんだから、テストも自動化してしまいましょう。継続的インテグレーションに混ぜて自動ビルド自動テストで品質担保しましょう。
####・継続的デリバリーで常に最新のテスト環境を!
自動デプロイです。
テスト環境へのデプロイで身をすり減らしていませんか?!かつてはあみだくじで選んでいたこともあります。
テスト環境へのリリースが担保されているということはそのまま接続先を変えれば本番へも安定したリリース作業が行えるはずです。
####・他にも
#####タスク管理していますか?!
開発、テスト、バグの進捗度もわかりやすくしておきましょう。
それによって、どれだけ余力があるのかとか、この人負荷が高いなとかまで判断できるようになります。
###さらに高度に
####静的解析ツールの導入
ものによっては有償ですが、バグになりやすいコードを書いていないかとかが検出できます。
####UIテストもコード化
UIも自動でテストできる時代です。WebAPIならもっと簡単ですね。
####開発プロセス
断然アジャイル推しです。エンジニア主導で現場改善していきませんか?!
参考:http://agilemanifesto.org/iso/ja/manifesto.html
#まとめ
と、つらつらと思いつく言葉をどんどん上げていったのでうまくまとまっていませんがご了承ください。
そもそもすべてのプロジェクトですべて取り込めるとは思っていません。今期はせっかく変えるチャンスを見いだせるチームに所属することができたので、少しづつ自分の関わるプロジェクトから浸透させるべく今期は頑張ろうと思っていますが、今のところチャンスが回ってきません。