【ソフトウェア】レビューで効果的に誤りを見つけるために

ソフトウェアにおけるレビューの心構えについてまとめました。

 

結論、レビューする人が意識した誤りしか見つからないので、見つけたい誤りを事前に想定してレビューする。

 

レビューの定義

まず、ソフトウェアのレビューの定義は、Wikipediaには以下とあります。

 

ソフトウェア・レビューとは、『設計ドキュメントをはじめとした各種ドキュメントやソースコードを人が読み込んで、その問題点を見つける作業』です。ソフトウェアテストとの違いは、実際にプログラムを動作させるのではなく、人の頭の中で動かして見た結果を確認するという点です。

 

レビューの目的は、実際のプログラムを動作させる前に、誤りや改善点を見つけることで、手戻りや保守作業肥大を防ぐことによるコスト削減をすることです。他にも、教育の側面もあります。

 

レビューを実施しているのに、実際にはレビューで誤りが取れず、不具合が流出するという品質問題に直面しているプロジェクトはかなりあるはずです。

 

これは、レビューのやり方に問題があることがほとんどです。

レビューの質

プロセスで決まってるから、レビューをしている事実だけを作ったり、闇雲にレビューをしていませんでしょうか?

 

レビューの質が重要です。ただ、ドキュメントの誤記や簡単な誤りを除去(これも重要ですが)するのではなく、もっと本質的な誤りを除去することが重要です。

 

では、そのためにどのようにレビューの質を向上させればよいでしょうか?

 

先ほどのレビューの目的を振り返ると、レビューはコスト削減が目的でした。コスト削減するには、誤記や簡単な誤りより、もっと「コストのかかる誤り」を除去しておく必要があります。

 

では、「コストのかかる誤り」とは何でしょうか?

実は、これはソフトウェアの特徴によって変化するため、画一的に定義することは困難です。

 

例えば、複雑な状態遷移を持つソフトウェアでは、多くのパターンを試験せねばなりません。動作確認が容易な正常系などは、問題は見つかり易いです。しかし、準正常などの動作確認し辛いパターンは、確認されないまま不具合が残ります。よって、このあたりをレビューで潰す必要があります。

 

業務系のソフトウェアでは、状態遷移のような沢山のパターンはありませんが、同時に複数のトランザクションが実行される場合などで、よくトラブルが発生します。試験で潰せればよいですが、本当にリリース前の最後の試験で見つかるよりは、設計段階のレビューで検出して手戻りを防ぎたいものです。

 

この2つの例を見ても、レビューで見るべき観点というのが大きく違うことがわかります。

 

ということは、ソフトウェアの特徴ごとにレビューで除去すべき誤りを検討し、レビューに臨む必要があるということです。

見つけたい誤りしか見つからない

レビューの質を上げるには、それぞれのソフトウェア毎に、レビューで誤りを検出したいポイントを事前に検討し、そのポイントを重点的にレビューすることです。

 

よって、レビュー行為より前の段階で、レビューの質が決まると言っていいでしょう。

 

実際の開発現場では、計画の段階でレビュー観点(重点ポイント)を明確にしておく必要があります。

 

普段気づかなかった看板が、その看板の内容を意識してから目につくようになるということがあるように、意識しない誤りは見つけることはできず、意識することで誤りに気づくことができるものなのです。

 

目的意識を持ってレビューをすることの効果は大いにあると考えます。

 

【Android】com.google.android.gms.fitness.result.DataReadResponsのimportができない

問題

以下のimportが解決しない。

import com.google.android.gms.fitness.result.DataReadResponse;

原因

Android SDK API 23では、DataReadResponseをサポートしていない。

対策

Fitness.getHistoryClient(this, GoogleSignIn.getLastSignedInAccount(this)).readData(readRequest)ではなく、 Fitness.HistoryApi.readData()を使用する。

【Android】エラー: パッケージcom.google.android.gms.fitnessは存在しません

問題

ビルドエラー。

エラー: パッケージcom.google.android.gms.fitnessは存在しません

原因

ライブラリの設定が不足している。

対策

ライブラリを設定する。

'com.google.android.gms:play-services-fitness:*.*.*'
※’*’は、必要なバージョンを指定する。

手順

1.Android StudioのFile -> Project Structure。
2.Dependenciesタブから'+'を押下してライブラリを追加する。

お金に代わるこれからの人間の生きる価値とは

NHK マネー・ワールド ~資本主義の未来~ 第3集  借金に潰される!?』を視聴して、お金に代わるこれからの人間の生きる価値についての考えてみました。

人間活動とお金の関係

世界中のGDPの何倍も借金があるのでまずいというお話でした。

GDPは、人間活動を数値化したものだと考えることができると思います。

なぜなら、現代の人間活動のほぼすべてが、何かしらお金の動きに繋がっているからです。

産業革命以降、世界のGDPはそれまでに比べて大きく増えているそうです。また、先の大戦前と比較しても、何倍にも増えています。

その中で起きたことは、人間活動により生み出される価値が大幅に増えたということです。

産業革命によって起こったことは、様々な人間活動が機械化されるなかで、人力の時より多くの人間活動が可能となりました。

また、戦後については、機械化が世界中に広がっただけでなく、人口増加も寄与し、人間活動がより効率よくできるようになりました。

その結果、GDPが増えたと、考えることができます。

借金がGDPを超えるということはどういうことか?

借金というのは、未来の人間活動で生み出すであろう価値を、前もって渡すものと考えられます。

借金がGDPを超えているということは、これから人間が生み出す価値は増え続けるということでしょうか?

もっと機械化が進み、人間活動が効率化し、人口も増加するということでしょうか?

未来は誰にも分かりません。

人間活動の拡大に対する、過度な期待となっている可能性は否定できません。

未来というのは誰にも分らないものなので、借金というのは不確実なものだと思います。

これからの経済の価値について

現在の経済は、人が「もの」を作り「もの」を売ることで成立しているとものだと考えます。

しかし、その「もの」が世界に行き渡り、飽和状態に達しつつある中で、 「もの」中心だけの経済は、そのうち成立しなくなるのだと思います。

何か別の形で経済を成立させるとすれば、それは人間活動で生み出す価値の内容や、 人が欲する価値を変化させることが必要です。

それは、今までの「もの」ではなく、他の何かに。

最後に、爆笑問題の太田さんが「人間の価値観を変化させる必要がある」と仰って いたことが、今後の資本主義を考えるにあたり、とても重要だと感じました。

行動力やモチベーションを上げるために考えること

行動力やモチベーションを上げるためには、どのようなことを考えればよいのでしょうか。 

 行動力やモチベーションはどこから来るのか?

人間の脳は、「脳幹」「大脳辺縁系」「大脳新皮質」からなっています。

  • 「脳幹」は、いのちの座と呼ばれ、生命を維持する機能をつかさどっています。
  • 大脳辺縁系」は、本能と情動の座と言われ、「感性」をつかさどっています。
  • 大脳新皮質」は、理性の座と言われ、「理性」をつかさどるところです。

 

人が生きていくには、これらの機能がバランスよく働くことが大切です。しかし、現代の生活では、これらのバランスを欠いています。

 

現代の生活では、1日のほとんどの時間を、学校の勉強や仕事に費やしています。これらは、主に理性を使う人間の活動です。

 

1日のほとんどの時間が、理性を使う活動で占めており、理性優位とならざるおえません。この状態は、脳がアンバランスな状態であり、常にストレスがかかっていると言えます。

 

実は「脳幹」「大脳辺縁系」が、我々の生命力やモチベーションの源なのです。しかし、その生命力やモチベーションの源に、ストレスがかかり、抑圧されていると、行動力の低下ややる気の低下につながります。 

感性が大切

では、生命力やモチベーションを上げるためにはどうすればよいでしょうか。

 

それは、感性を大切にすることです。

 

感性とは、

印象を受け入れる能力。感受性。また、感覚に伴う感情・衝動や欲望。 

という意味です。

 

「感動する」という言葉がありますが、これを意味するところは、 「感性で動く」です。人は理性で動くのではなく、感性で動くということを示しています。

 

人の活動に、感性が大きく関わっていることを示す言葉です。 

 感性を大切にする基本の流れ

感性を大切にするには、幾つか段階があります。

  1. まずは自分の感性への気づきです。

    理性優位の状態だと感性を感じる感度が、弱くなっています。理性優位とするためにも、自分の感性に気づいていくことが、第一歩です。感性を言語化することが、良い方法の一つでしょう。

  2. 次に感性を受容します。

    特に悲しい、不安などのあまり感じたくない感性に対して、じっくりと感じることです。感性を否定することなく、抑えることなく自分の感性を認めることが重要です。ただし、強烈な感性を無理して感じる必要はありません。ゆっくり自分が感じれると思った範囲で、感じるようにして下さい。

  3. 自分の感性を優先して行動する。

 

感性に向き合い、 社会生活の中で抑圧されている感性を解放することで、行動力の向上やモチベーションの向上に繋がります。

 

繰り返しになりますが、「感動」という言葉は「人は感性で動く」ことを示した言葉です。人は理性では動くのではなく、感性で動くということです。

  

これまで説明してきた通り、感情が生命力やモチベーションの源となるため、自分の中で感性を大切にするようにしてみてはどうでしょうか。

 

お読み頂き、ありがとうございました。

【PowerShell】 スクリプト実行時のセキュリティエラーを回避する

前提

以下の開発環境が前提です。

対応

スクリプトを実行すると、以下のスクリプト実行時のセキュリティエラーが出るときの対処方法です。

PS C:\djangoWork\test> .\Scripts\activate
.\Scripts\activate : ファイル C:\djangoWork\test\Scripts\Activate.ps1 を読み込めません。ファイル C:\djangoWork\test\Scripts\Activate.ps1 はデジタル署名されていません。このスクリプトは現在のシステムでは実行で
きません。スクリプトの実行および実行ポリシーの設定の詳細については、「about_Execution_Policies」(https://go.microsoft.com/fwlink/?LinkID=135170) を参照してください。
発生場所 行:1 文字:1
+ .\Scripts\activate
+ ~~~~~~~~~~~~~~~~~~
+ CategoryInfo : セキュリティ エラー: (: ) []、PSSecurityException
+ FullyQualifiedErrorId : UnauthorizedAccess

以下のコマンドを入力して下さい。

powershell -ExecutionPolicy RemoteSigned

以上です。

Android StudioでUMLを書く

Android Studio上でUMLを書く方法としてGraphvizを使用する。

メリット

  • テキスト形式の為、バージョン管理がし易い
  • 既存のUMLに対する更新による手間がかからない(整形に時間を要さない)
  • 無償*1

デメリット

  • 文法に慣れるのに時間がかかる

Graphvizをインストールする

  1. GraphvizDownloadします。
  2. Windowsの「Stable x.xx Windows install packages」*2を使う。 

PlantUML integrationプラグインをインストールする

  1. Android Studioの[ファイル]→「設定」から設定を開く。
  2. [プラグイン]を選択する。
  3. 検索バーに"PlantUML integration"と入力する。
  4. 検索結果に出てきた"PlantUML integration"の[install]ボタンを押下する。
  5. Android Studioを再起動する。

PlantUMLを記述する。

  1. 記述するファイルを作成する。

f:id:harumarion:20180212202945p:plain

もしくは、Javeファイルに直接記述してもよい。

クラス図は以下。

f:id:harumarion:20180212203317p:plain

シーケンス図は以下。f:id:harumarion:20180212203406p:plain

詳細な文法は以下を参照してください。

plantuml.com

*1:Astah無償版は、機能制限が多すぎてテンションが下がる。

*2:環境変数の指定が必要であるため、インストーラを使用する方が楽です。Android Studioはデフォルトの環境変数を見に行くため、後述するプラグインインストール後、Android Studioに対する設定は不要である。