6月8日 -プログラマーとして働くために必要な知識をまとめていく②-
1.今日の目標
将来の決定に生かせるようにプログラマーの基礎的な部分を調べてまとめる。
2.結果・感想
コメントコーディングで自分も他の人も理解しやすいコードが書けるように練習したい。テストについてもっと詳しく知りたい。りょうたくさんの記事はひとつの題材に絞って記事をまとめており、調べたい記事を探しやすい。さらにそれに関する参考URLも載っているのでその知識を深めやすい。現在私は1日ごとに勉強した内容を1記事に書いている。自分が後で見返しても思い出しやすいようにどうすればいいか。
3.学んだことの書き出し
コードを書き始める前に実装方法をコメントでまとめると何をすべきか明確にできて作業効率が上がる、考慮すべきポイントの抜け漏れが防げる、他の人にコードの内容・または考えが伝わりやすいというメリットがある
「理解しやすいコード」=「可読性の高いコード」
書いた人の意図が理解しやすいコードは保守性が高い
コードの書き方は普段の会話と同等であるべき。質問の粒度と回答の粒度が同程度であれば相手が理解しやすい
粒度を揃えるトレーニングとしてコメントコーディングが有効
概念の上手い切り出し作業が粒度を綺麗に揃えることと役割分担に通じる
綺麗なコードを書くために設計時に意識すること
どういう概念(クラス、構造体、メソッド、プロパティなど)で切り出すか
誰(インスタンス)がするべきか
その人は何を知っている(プロパティ)べきなのか
どういう作業(メソッド)をさせるべきなのか
何を教えたら(引数)その作業ができるのか
その作業の結果(戻り値)は何か
概念に適切な名づけをする
プログラミングが遅い原因と解決策
①いきなりコードを書く→必要な作業を書き出す
プログラムを書く時は必要な作業工程をなるべく細分化して書き出す。それぞれの行程にかかる時間を見積もる。その後作業に入る。
②書き始めるのが遅い→前回の作業を記録する
その日のプログラムを書いた後にどこまで作業が進行したか、エラーなどの問題点を書いておく
③エラーの度に思考停止する→調べる、聞く
エラーの原因を検索する。teratailなどの質問サービスを使う。人に聞く。
④こだわりすぎる→優先順位を設定する
最低限必要な機能の実装を優先して実装する
⑤眠くて作業が捗らない→複雑な作業は朝にする
TDD(テスト駆動開発)とはユニットテストを主体として開発していく設計論のこと。TDDでのユニットテストはある関数の入力と出力はどういう形にすべきかだけを手を動かしながら考えるためにある。
TDDの基本
スパイクを打つとはタスク全行程の分からない(曖昧な)部分をなくしてから実装に取り掛かること。
スパイクを打つ流れ
①タスクのゴールを決める
チケット(タスク)作成者が何を実現しようとしているのかを理解し、最終的に実現したい事が出来るようになるにはどうするかを考えてゴールを決める。
②タスクを分割する
ゴールまでの実装を考える。その中で知らない技術や実装方法が分からない部分の技術調査、サンプルプロジェクト作成、動作確認を行う。よりタスクを分割し、実装するコードが思い描けている状態まで落としていく。
③コードのみの状態
コードのみの状態までタスクが分かれており、疑問点が1つもない状態であれば制度の高い全体の見積もりが可能。
テストケースとはソフトウェアが要件通りに動作するかチェックするために、どのような手順・観点でテストを行えばいいかをまとめたもの。効果的にテストをするためにテストケースの作成をする。「不必要なテストを省く」「異常系のテストも盛り込む」「解釈の齟齬が生じない表現で記述する」という3点を意識してテストケースを作成する。
テスト仕様書とはテスト観点とテストケースが記載されたドキュメントのこと。テスト観点とは機能が正しく動作した結果をどうテストするかという切り口のこと。
漏れなく、効率よくテストケースを洗い出す方法
①同値分割
同値分割とは入力値を有効・無効の集合に分割し、同じ部分集合に入る値は全て同じ結果とみなす方法のこと。
②境界値分析
境界値分析とはバグが多く潜む有効値と無効値の境界をテストする方法のこと。
③ディシジョンテーブル
ディシジョンテーブルとは状態や入力値と、状態や入力値の組み合わせであるルール、動作がまとめられた表のこと。ディシジョンテーブルを作成することでパターンが一覧化され、テストケースの抜けチェックに役立つ。
④ランダムテスト
上記の4手法でもバグが漏れる可能性があり、それを見つけるためにさらに追加でテストを行う方法。
ランダムテストとは手当たり次第に入力や操作を行う方法。アドリブテストやモンキーテストとも呼ばれる。セキュリティの脆弱性を発見するために予測不能なデータを入力するファズテスト、納品前に念のためシステムやソフトウェアをテストする際などの特殊な状況では有効。
4.明日の課題
5.参考URL
いきなりコードを書くより、コメントで実装方法をまとめた方が捗った話 - りょうたくのWEBエンジニア日記
脱・読みづらいコード!今日から一段上のプログラマーになる方法 5 選 - xin9le.net
プログラミングが遅い人の6つの原因と解決策 | IT初心者のトリセツ
後半ちょっと何言ってるか分からなかった
失敗しないテストケースの作り方と、効率よくテストを進める方法 | クラウド型テスト管理ツール「Qangaroo(カンガルー)」
6.今後やりたいこと・高めたいスキル・優先順位
WEBアプリケーション作成、PHP、説明図作成、30DAYSトライアル、JQuory、Wordpress、はてなブログの機能、アルゴリズム、SEO、PerfectPixel、線形代数(詳細ではなく全体の流れ)