メモ-ツール（プ○ンター業界で働いた時に使っていたもの）

# はじめに
プ○ンター業界で勤務して約１年、現場で使用していたツール、または開発時に得た情報（？）記載。現場撤退してしまうので後学のためのメモ。

##ツール
1. VNC Viewer(MAC OS用リモートデスクトップ）
2. Oracle VM VirtualBOX（仮想環境作ってた）
3. Wireshark（通信パケットをキャプチャ。HTTP通信のKeepAliveの設定値を見てた）
4. Jenkins（ビルドツール）
5. TortoiseSVN（バージョン管理システム）
6. CarotDAV（サーバーのフォルダにアクセスしてた）
7. TeraTerm（ログ見てた）
8. WinMerge（ソースコードの差分見てた）
9. 圧縮/解凍ソフト
    10. Lhaplus（定番。ZIPしかつかってない）
    11. 7zip （.tarファイルの解凍に使った）
12. RedMine（ガンチャートで進捗具合見れた）
13. CitrixReceiver(何に使ったか覚えてないが、「任意のデバイス上に仮想デスクトップやアプリケーションへのアクセスを提供し、場所を問わずに簡単にこれらのリソースを使用できます。」とのこと）
14. Printerdiagnostic10.diagcab(Windows10のプリンタードライバーのトラブルシューティングツール。原因不明のエラーの時、役に立った）
[知ってて得するWindows10トラブルシューティングツールまとめ](https://pcrepair.w-pickup.com/post-2171/)

##開発時の参考資料-参考サイト各種
###見積もり工数を算出する時
概算見積もりを出すのが非常に大変だった。エクセルで以下の項目別で洗い出しをしてそれぞれに予定日数を入力すれば見積もり工数の計算は出来たため、ここでは項目名だけ洗い出しする。

######機能設計
- 機能仕様書_考案作成
- レビュー
- レビュー指摘反映

######詳細設計
- 詳細設計_考案作成
- レビュー
- レビュー指摘反映

######実装
- 実装
- レビュー
- レビュー指摘反映

######結合テスト仕様書
- 結合テスト仕様書_考案作成
- レビュー
- レビュー指摘反映

######結合テスト結果報告
- 結合テスト実施
- 結果の報告書作成

###単体と結合テスト参考文献
[これでテストケースが漏れない！効率的に単体テスト仕様書を作る方法](http://kabblog.net/595/)
[テスト仕様書の作り方大公開：(第1回)テスト設計の手順とセオリー](http://elecs-softwaretest.com/column/テスト仕様書の作り方大公開%EF%BC%9Aテスト設計の手順/)
[失敗しないテストケースの作り方と、効率よくテストを進める方法](https://qangaroo.jp/info/test-case-plan-do/)

#####結合テスト項目数の算出方法
まずは、下記の項目の洗い出しを行う。
VisualStudioで自動で算出してくれる。

・スコープ（メンバー）
・プロジェクト名（プログラムのプロジェクト名）
・名前空間（プロジェクト名だた）
・型（クラス名）
・メンバ（メソッド名）
・保守容易性インデックス
・サイクロマティック複雑度
・継承の深さ
・クラス結合
・コード行

その後、テスト項目数を算出
・関数の数（上記で算出したメンバの数）
・各関数の複雑度の平均（サイクロマティック複雑度の平均値）
・係数（0.8（＝80％以上達成でテスト合格だった））
↓
**テスト項目数（関数の数*各関数の複雑度の平均*係数）**

###製品にバグが発生した時の開発者側の対応
開発者が、バグ発生したときの解析・対策を行う。その行う時に何を考えていかなければいけないのかを記載します

######解析ポイント
■バグの概要、結論
バグか仕様かの問題の切り分けをする
バグであれば、バグの原因
仕様であれば、仕様書の記載箇所の提示が必要
■上記の結論に至った根拠
上記の根拠を提示（エビデンスなど用いる）
バグの時は、ログがあれば、原因と紐づくログの抜きだし
ログに対応する操作や現象をわかりやすく記載する
■次の工程へ伝達事項
解析結果から、開発製品に問題があり、対策が必要と判断すればその旨を伝達
解析結果から、追加情報をもらう必要があればそれも伝達
何か依頼を行う場合は、一般用語で質問や依頼を行う
■バグの原因
バグの直接原因。開発者側の目線で考える
■バグの混入原因
混入原因を考える。調査とか設計でミスっている事が多いイメージ
■バグの流出原因
流出原因を考える。基本的にはテスト設計でミスっている事が多いイメージ
■類似問題の調査結果
バグの原因箇所から、不随する機能の特定。調べ方とかはクラス内のバグ原因のメソッドの呼び出し元を調べていく感じだったかな

######対策ポイント
解析が終わったら対策していきました。再発防止策です。ここが一番苦戦を強いられた気がする。基本的には原因があるから対策すれば問題なかったが、既に対策済みなのに対策されなかったときのダメージは大きい
■対策の概要、結論
対策内容を要約する。簡潔な内容が求められた
■上記の結論に至った根拠、詳細説明
上記の概要と結論への根拠、また詳細の説明を考える。
■バグの混入再発防止策
バグ混入の根本原因に対する再発防止策を考える。ぐぐぐ
■バグ流出再発防止策
バグ流出の根本原因に対する再発防止策を考える。ぐぐぐぐ

###開発の時に参考にしたサイトもろもろ
開発言語はC#で画面はWPFで作成していた。その時の改修業務等で参考にしたサイトをメモ代わりに記していきます

[Java - アサインされたプロジェクトのソースを理解するときどこから読み始めますか？(65277)｜teratail](https://teratail.com/questions/65277)
仕様確認して～って言われてピンと来なくてどうやって確認すりゃいいかわからん時に参考にしたサイト。おなじみteratail

[文書構成の考え方](http://www.yamanouchi-yri2.com/yrihp/tgb-01/tgb-01-02f.htm)
各種仕様書の構成が不明だったため、逆お越しするために調べようとしてみたが結局いい文献だけ見つけて終了した

[[情報技術者]ソフトウェア開発の進め方と各々のステップで必要とされる能力](http://www2.kanazawa-it.ac.jp/intreng/engineer/engineer/info_system_eng02.html)
プロジェクトに初めて携わる瞬間、自分の役割がどの部分か迷走していたために発見した文献。

[XML Document - C# によるプログラミング入門 ++C++; 未確認飛行 C](https://ufcpp.net/study/csharp/sp_xmldoc.html)
C#の開発初心者ならおなじみのサイト。XML（ザムルってみんな呼んでた）の作成がわからなかったが、座標系なのねふむふむという感じで学習した。

[(3) C# WPF 入門](http://cswpf.seesaa.net/index-3.html)
WPFは何ぞや、っていう具合でレガシーコードを見てもよくわからなかったため調べたら、ちょっとわかりやすかったかな？初心者向け

[WPFテキストボックスへの入力制限 - RunningCSharp](http://running-cs.hatenablog.com/entry/2015/12/27/014332)
表題の通り。制限をかけまくりたいと思って調べたら欲しい内容がヒットしたもの。キャレットの位置が移動してしまうので、それを現在の箇所から移動しないソースが記述されていた。

[【C#,WPF】最大化・最小化・閉じるボタンの非表示設定 kuwayoshi.com](https://kuwayoshi.com/cswpf217)
バックグラウンドワーカーの実装時に「お待ちください」ダイアログの画面制御をしたいと思って見つけた文献。

[WPFで「閉じるボタン」を非表示にする - 物欲センサーと戦う日々](http://haneisu.blog.fc2.com/blog-entry-164.html)
「閉じるボタン」に[Alt+F4]の制御分の記述あり。これはwindowsOSの画面制御にも役立った。どうしてもショートカットキーからも「閉じる」操作を制御したいときにお勧め。

[C#で全角を半角に変換する](https://water2litter.net/gin/?p=743)
文字制御。意地でも半角にしてやりたいとき

[C# .NET Frameworkでバックグラウンドワーカーに自由度を持たせる - Qiita](https://qiita.com/hibara/items/422fcaa0868dfef39154)
[BackgroundWorker (バックグラウンドワーカー)コントロールを使用する (C#プログラミング)](https://www.ipentec.com/document/csharp-backgroundworker-control)
[検索中など重い処理中にイベントに応答しないようにする](http://www.pine4.net/Memo/Article/Archives/10)
[C#-別プロセス起動時のFormのフリーズについて](https://teratail.com/questions/48907)
[Taskを極めろ！async/await完全攻略](https://qiita.com/acple@github/items/8f63aacb13de9954c5da)
他の方の文献。初めてバックグラウンドワーカーを実装するときに参考になりました。

[【初心者向け】Wiresharkを使ってみた(まとめ)](https://qiita.com/To_BB/items/9079de8f2dfc86a261fa)
他の方の文献。表題通りに全然使い方わからなかったから、参考になりました。

[LDAPがなんだかよくわからない](https://qiita.com/okiami123/items/757d6d0b1fe14d394e51)
他の方の文献。LDAPだかActiveDirectoryとか、サーバー系はよくわからなかった。今もわからない。

[【単体テスト設計】どのようにしてテストコードを書くのか？](https://www.deep-rain.com/programming/program/615)
C#では無い気がしたが、一応参考に。単体テスト設計の考え方の勉強。

###コーディング規約について
プロジェクト参画時に、コーディング規約が存在していなかったが急に設定された。規約作成者の参考文献は、今後の学習に役立てるようにここにメモをのこす。
特に口酸っぱく言われたのが、ボーイスカウトの規則。
また、個人的にはタイムアウト系は気を付けなければと心に刻む

「ボーイスカウトの規則」
コードをチェックアウトした時よりもきれいにすることを常に心がけるとのこと。但し、改造範囲外や不用意な設変は行わない事。


参考文献
『Clean Code アジャイルソフトウエア達人の技』★
Robert C. Martin著、花井志生訳　ASCII

『プログラミング作法』★
Brian Kernighan、Rob Pike著 福崎 俊博訳 ASCII

『実装パターン』★
Kent Beck著、永田 渉・長瀬 嘉秀監修　株式会社テクノロジックアート訳
ピアソンエデュケーション

『リファクタリング』★
Martin Fowler著、児玉 公信・平澤 章・友野 晶夫・梅沢 真史訳
ピアソンエデュケーション

『Effective C++ 第３版』★
Scott Meyers著、小林 健一郎訳　ピアソンエデュケーション

『レガシーコード改善ガイド』★
マイケル・Ｃ・フェザーズ著、平澤章他訳

##PowerShellでログのリアルタイム確認手順
手順１：メモ帳に以下の文を書く
cat "ログファイルの絶対パス" -wait -tail 100;
※最後の100は画面に表示する最大行数なのでお好みに合わせてください。

手順２：.ps1形式で保存する
PowerShellを使って実行するため、「.ps1形式」で保存します。
保存した.txt形式のメモ帳の名前を変更して、.ps1形式に保存すればOKです。

手順３：実行する
作成した.ps1形式のファイルをダブルクリック、もしくは右クリックからPoweshellで起動を選択して実行します。

###コードレビューの注意点
（詳細設計レビュー実施しているようであれば）時間はかからない。
・説明に徹する事(説明が脱線する傾向あり）
・メモは二の次（メモ、もしくは議事録作成時は周囲の方のお話を一旦ストップして頂く）

###C#で困ったこと。その１
既存のプロジェクトで、とあるdllファイル（１つ）を指定先フォルダに持っていき、VisualStudioで参照先に追加せにゃあかん事があったが、ビルドエラーがひっきりなしで起こった時のdll参照解決策。あんまりおすすめ出来ないと思うが
1.　コマンドプロンプトを管理者で起動
2.　regsvr32 <パス>\<ファイル名>.dll　と入力
で解決した事があった。詳しく調べてないので、どういう理由で解決したか不明。