ravelll の日記

よしなに

"品質" ってなんだろう?

このエントリは pepabo Advent Calendar 2016 の23日目のエントリです。

前日のエントリは @Asuforceペパボのエンジニア研修を通しての成長体験 でした。

彼がアルバイト入社していたとき僕がメンターについていたこともあって、エントリを読んで子の成長を見る親のような気持ちになりました。

さて今日はソフトウェアの品質についての話です。ところで僕に子供はいないですし既婚者でもないです。

"品質" ってなんだ?

我々ソフトウェアエンジニアを始めシステムの提供者はみな、提供するシステムの品質を高めたいと思っていることでしょう。しかしながら、"では品質とは何なのか" と尋ねられたとき、答えに窮する人も少なくないのではと思います。品質の不理解は、提供者にとっては高い品質で提供しているシステムが利用者には低い品質とみなされる、といった不幸な認識のズレに繋がることが考えられます。

ここで、品質について何らかの分類モデルがあれば、システムの機能を分類した上でそれぞれをカバーするに適当なチームを構成したりタスクを割り当てたりすることができそうです。そこで今回は、ISO/IEC 25010:2011 で規格化されている "製品品質モデル" を紹介しようと思います。

ISO/IEC 25010:2011 の製品品質モデル

この国際規格では、システムの品質を "システムが様々な利害関係者の明示的ニーズ及び暗黙のニーズを満足している度合い" とし、8つの品質特性、更に各品質特性における副特性に分類しています。

以下の表に品質モデルの品質特性とその説明、属する副特性をまとめます。副特性の説明までまとめると長くなるので省略しています。各特性の説明についてはこちらより引用しています。

1. 機能適合性

明示された状況下で使用するとき,明示的ニーズ及び暗黙のニーズを満足させる機能を,製品又はシステムが提供する度合い。

  • 副特性: 機能完全性、機能正確性、機能適切性

2. 性能効率性

明記された状態(条件)で使用する資源の量に関係する性能の度合い。

  • 副特性: 時間効率性、資源効率性、容量満足性

3. 互換性

同じハードウェア環境又はソフトウェア環境を共有する間,製品,システム又は構成要素が他の製品,システム又は構成要素の情報を交換することができる度合い,及び/又はその要求された機能を実行することができる度合い。

  • 副特性: 共存性、相互運用性

4. 使用性

明示された利用状況において,有効性,効率性及び満足性をもって明示された目標を達成するために,明示された利用者が製品又はシステムを利用することができる度合い。

  • 副特性: 適切度認識性、習得性、運用操作性、ユーザエラー防止性、ユーザインタフェース快美性、アクセシビリティ

5. 信頼性

明示された時間帯で,明示された条件下に,システム,製品又は構成要素が明示された機能を実行する度合い。

  • 副特性: 成熟性、可用性、障害許容性(耐故障性)、回復性

6. セキュリティ

人間又は他の製品若しくはシステムが,認められた権限の種類及び水準に応じたデータアクセスの度合いをもてるように,製品又はシステムが情報及びデータを保護する度合い。

  • 副特性: 気密性、インテグリティ、否認防止性、責任追跡性、真正性

7. 保守性

意図した保守者によって,製品又はシステムが修正することができる有効性及び効率性の度合い。

  • 副特性: モジュール性、再利用性、解析性、修正性、試験性

8. 移植性

一つのハードウェア,ソフトウェア又は他の運用環境若しくは利用環境からその他の環境に,システム,製品又は構成要素を移すことができる有効性及び効率性の度合い。

  • 副特性: 適応性、設置性、置換性

特性の多様さを見ると、単一の職種でシステム全体の品質を担保することが如何に難しく、エンジニア、デザイナー、ディレクターなど複数の職種が各々の責任範囲を認識し協力しあうことが品質の向上には欠かせないと分かります。

また、セキュリティのように、チームの単位ではなく会社全体の規模で取り組む必要がある品質特性もあることが分かりますね。

まとめ

このエントリではシステムの品質とは何か、というテーマで ISO/IEC 25010:2011 の製品品質モデルを紹介しました。

明日の担当は @udzura さんです。楽しみですね!!!

ここ1〜2ヶ月で買ったり読んだりした本たち。

どうしても複数の本をその時々の気分で読み進めてしまって、相変わらず読み途中の本が複数ある。

読了

のみじょし 3 (バンブーコミックス)

のみじょし 3 (バンブーコミックス)

漫画はシュッと読める一方で財の摩耗も大変スムーズなので安易に開拓しないよう気をつけてる。

途中

The Mythical Man-Month, Anniversary Edition: Essays On Software Engineering

The Mythical Man-Month, Anniversary Edition: Essays On Software Engineering

【この1冊でよくわかる】ソフトウェアテストの教科書―品質を決定づけるテスト工程の基本と実践

【この1冊でよくわかる】ソフトウェアテストの教科書―品質を決定づけるテスト工程の基本と実践

パーフェクトPHP (PERFECT SERIES 3)

パーフェクトPHP (PERFECT SERIES 3)

JPEG・MPEG完全理解

JPEG・MPEG完全理解

パーフェクト PHP は2周目。入社1年後くらいに一度ざっと読んだとき以来で、PHP の基礎を固めたい気持ちになりじっくり読み返してる。

人月の神話は原著しか電子版がないので原著を読んでる。英語がスラスラ読めるわけではないので鈍行です。

積読

エンタープライズ Rails ―企業ユーザのためのWebアプリケーション設計術

エンタープライズ Rails ―企業ユーザのためのWebアプリケーション設計術

社の Slack でちらりと話題に挙がり、調べてみたら面白そうだったので。

今は会社では Rails アプリにほとんどコミットしてないんだけれど、数少ない馴染みあるフレームワークなので継続して触れていきたい。この本はもうしばらく前に出たんだけどね。

Let's Encrypt を利用して ravelll.org を HTTPS 化した

f:id:ravelll:20161124121117p:plain

Amazon EC2 上で動かしている自身のポータルサイトを Let's Encrypt を利用して HTTPS 化したので手順をメモ。思った以上に簡単にできてびっくりした。


まず Let's Encrypt のクライアントを入手し、証明書を取得します。 Amazon Linux は公式にサポートされていないので実行には --debug フラグが必要です。 実行してしばらくすると term of conduct に従うか聞かれるので yes を選択。

wget https://dl.eff.org/certbot-auto
chmod a+x certbot-auto
./certbot-auto certonly --standalone -d ravelll.org --debug

次に暗号鍵を交換する際に使われる DH パラメータの設定ファイルを生成します。 鍵長は 2048 bit で。

sudo mkdir /etc/nginx/ssl
cd /etc/nginx/ssl
sudo openssl dhparam 2048 -out dhparam.pem

後は生成した証明書を利用したり脆弱な暗号化スイートやプロトコルを利用しないようにしたりすべく nginx.conf を編集します。 自身では以下のようにしました。

server {
  listen 80;
  listen [::]:80;
  return 301 https://$host$request_uri;
}

server {
    server_name 'ravelll.org';

    listen 443 ssl http2;
    listen [::]:443 ssl http2;
    ssl_session_timeout 5m;

    ssl on;
    ssl_prefer_server_ciphers on;
    ssl_stapling on;
    ssl_stapling_verify on;
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;

    ssl_certificate /etc/letsencrypt/live/ravelll.org/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/ravelll.org/privkey.pem;
    ssl_dhparam /etc/nginx/ssl/dhparam.pem;
    ssl_trusted_certificate /etc/letsencrypt/live/ravelll.org/fullchain.pem;
    resolver 8.8.8.8;

    ssl_ciphers ECDHE+RSAGCM:ECDH+AESGCM:DH+AESGCM:ECDH+AES256:DH+AES256:ECDH+AES128:DH+AES:!EXPORT:!DES:!3DES:!MD5:!DSS:!aNULL:!eNULL;

    add_header Strict-Transport-Security 'max-age=31536000; includeSubDomains;';

    location / {
      root /var/www/;
      index index.html index.htm index.php;
    }
}

nginx を再起動すると、正常に https 接続ができ、http ページへのアクセスが https ページにリダイレクトされることが確認できた。

QALYS SSL LABS の SSL 脆弱性テストをやってみると無事 A+、めでたい!

https://www.ssllabs.com/ssltest/analyze.html?d=ravelll.org

References