リスクベースドテスト

リスクベースドテスト

リスクの高いテストケースに絞り込むテスト

  • テストの抱える課題
    • 全部できない
    • 時間がない

リスク高のテスト項目を優先的に実施し、短期間で品質目標に到達する。

テストにおける"Risk"とは

Impact x Likelihood = Risk value
ユーザーの与える影響度(5段階) x ユーザーの遭遇率(5段階)

1~25でRisk valueをだし、
1を重点的にテストする。
25に近づくほどテストを簡単にする。

緩やかな再起動 graceful


# /usr/local/apache/bin/apachectl graceful


シグナル: USR1
apachectl -k graceful
親プロセスは USR1 あるいは graceful シグナルを受け取ると、子プロセスに現在のリクエストの処理の後に終了する (あるいは何もしていなければすぐに終了する) ように助言します。 親プロセスは設定ファイルを再読込して、ログファイルを開き直します。 子プロセスが徐々になくなるに従って、 新しい世代の設定による子プロセスに置き換えていきます。 そして、これらが新たなリクエストに即座に応答し始めます。

感情は大切という話

いきなりですが、少しイメージをしてみてください。


あなたは車を運転しています。右折車が対向車線上で渋滞の切れ目をまっている。
そこであなたは車を止めてゆずってあげようと思いました。


しかし、貴方の1つまえにいる車が譲ってしまいました。あなたはどうおもいますか。

”自分がゆずるつもりだったのに”って思うかもしれませんね。
この時考えるべきは、「目的はなんだったのか」ということです。
目的は、右折車が曲がれれば良い、そのための手段として自分がゆずる、
ということだったのに、自分がゆずれないことに対してむっとしてしまう。


こういう風に感情によって手段と目的が入れ替わることが仕事でも往々にしてあります。
はじめは、「お客様に満足してもらうこと」が目的だったはずなのに、
”自分がやるタスクを同僚にとられてしまった。”
”他人に聞くのは癪だから、クオリティが多少低くても自分だけでやりとげる”
”皆の前で発表するのは恥ずかしいから、大事なことがあっても伝えきれない”
”嫌われるのがいやだから、だれかが犯した間違いを指摘できない。だれかが言ってくれるだろう”
劣等感、虚栄心、羞恥心、etc...
色々な感情が邪魔してしまうことがあります。


ここで大切だと、いいたいのは、感情自体に左右されて行動するのではなく、
人ですから、感情の起伏は絶対に起こるということを認識し、それと向き合う必要があるということです。


イヤなとき、うれしいとき、なぜそう感じるか。利己的で間違った感情を抱いていないか。
あたまの中で考えて、文章化すればおのずと本来の目的が見えてきます。


論理的な話の上では、感情は無視されがちですが、感情も織り込んでこそ、本当の論理的な考えに発展すると思います。

gemでmysqlのライブラリインストール

gemでmysqlのライブラリがインストールできひん

[root@localhost ~]# gem install mysql
Fetching: mysql-2.9.0.gem (100%)
Building native extensions.  This could take a while...
..........
ERROR:  Error installing mysql:
	ERROR: Failed to build gem native extension.

        /usr/bin/ruby extconf.rb
checking for mysql_ssl_set()... *** extconf.rb failed ***
Could not create Makefile due to some reason, probably lack of
necessary libraries and/or headers.  Check the mkmf.log file for more
details.  You may need configuration options.

Provided configuration options:
	--with-opt-dir
	--without-opt-dir
	--with-opt-include
	--without-opt-include=${opt-dir}/include
	--with-opt-lib
	--without-opt-lib=${opt-dir}/lib
	--with-make-prog
	--without-make-prog
	--srcdir=.
	--curdir
	--ruby=/usr/bin/ruby
	--with-mysql-config
	--without-mysql-config
/usr/share/ruby/mkmf.rb:381:in `try_do': The compiler failed to generate an executable file. (RuntimeError)
You have to install development tools first.
	from /usr/share/ruby/mkmf.rb:461:in `try_link0'
	from /usr/share/ruby/mkmf.rb:476:in `try_link'
	from /usr/share/ruby/mkmf.rb:619:in `try_func'
	from /usr/share/ruby/mkmf.rb:894:in `block in have_func'
	from /usr/share/ruby/mkmf.rb:790:in `block in checking_for'
	from /usr/share/ruby/mkmf.rb:284:in `block (2 levels) in postpone'
	from /usr/share/ruby/mkmf.rb:254:in `open'
	from /usr/share/ruby/mkmf.rb:284:in `block in postpone'
	from /usr/share/ruby/mkmf.rb:254:in `open'
	from /usr/share/ruby/mkmf.rb:280:in `postpone'
	from /usr/share/ruby/mkmf.rb:789:in `checking_for'
	from /usr/share/ruby/mkmf.rb:893:in `have_func'
	from extconf.rb:45:in `<main>'


Gem files will remain installed in /usr/local/share/gems/gems/mysql-2.9.0 for inspection.
Results logged to /usr/local/share/gems/gems/mysql-2.9.0/ext/mysql_api/gem_make.out

先にmysqlの開発環境を整備しないといけんかった。

# yum install mysql-devel

もちろん、mysqlmysql-serverも必要。

RubyでHTML

RubyでWebスクリプトCGI)を書きたい(not Rails
ってことで調べてみた。
考えたら、PHPみたいにHTML吐き出し前提じゃないしね。
こう考えるとPHP手軽だなって改めて思いました。

流れ

実行環境:Fedora17 64bit on VirtualBox

  1. Rubyインストール(省略)
  2. Apacheインストール(省略)
  3. http.confの設定変更
  4. ソース書いてドキュメントルート以下にソース設置
  5. ブラウザからアクセス

http.confの設定変更

前提としては、perlでやるようにCGIの設定を行う。

CGIのモジュールが有効になっていること

# コメントアウトされていないか確認
LoadModule cgi_module modules/mod_cgi.so

任意のDirectoryディレクティブの設定。下記2行追記(今回はYumでインストールしたときのデフォ)

<Directory "/var/www/html">
  :
<省略>
  AddHandler cgi-script .rb  # ←.rbの拡張子でCGIが動作するよう設定
  Options +ExecCGI           # ←CGI実行  
<省略>
  :
</Directory>

コーディング

ためしにこんな感じで。

#!/usr/bin/ruby
print "Content-type: text/html\n\n";

print <<EOF
<html>
<head>
</haed>
<body>
hello,world
</body>
</html>
EOF


トラブルシューティング

アクセスしたらInternalSefverError.ログみると以下がでてた

(13)Permission denied: exec of '/var/www/html/hoge.rb' failed

権限の問題かーとおもって実行権限やオーナー確認しても問題なし。。
Apacheの設定を見直しまくるも問題なし。。



実は、SELinuxが邪魔してた模様。。

# setenforce 0

ちゃんとアクセスできた。
罠すぎる。

PHPで扱える整数最大値を超えた場合の計算法

  • 結論

BCMath関数を使う
http://php.net/manual/ja/ref.bc.php



たまたま12ケタくらいの数値を扱っていて、
剰余算が-1とか-2、割り切れないくせに0を吐き出すことがあった。

<?php
// 適当に多い桁の数値を3で割ったときのあまりを求める。
$no = 600000000111;
echo $no % 3 ."\n";
// 実行すると -2

$no = 600851475143;
echo $no % 3 ."\n";
// 割り切れないのに 0を返す
?>


最初は自分の剰余算の認識がおかしいのかと思ってしまった。
まぁ普通に考えて・・・ケタあふれてそうだなと思い直し、仕様を調べると、

<?php
echo PHP_INT_SIZE;
?>

これでPHPで扱える整数の最大値が求まる。
僕の場合は"4"(=4byte)だったんですけど、完璧環境依存っぽい。
(64bitなら6を扱える。まぁPHPの設定かバージョンにも左右されるのかな。)


つまり僕の環境で使える最大整数値は

2147483647 // 10ケタ・・・!

全然たらん。
しかしそれ以上の数値を扱ってもエラーにはならない。


なぜなら、PHPの仕様でINTをこえちゃうと勝手にFloatにキャストされてしまうそうな。
http://d.hatena.ne.jp/hnw/20100415

<?php
// PHP_INT_MAXで扱える最大の整数値が求まる
var_dump(PHP_INT_MAX); // int(2147483647)
var_dump(PHP_INT_MAX+1); // float(2147483648)
?>


つまり下記のようにするとfloatで計算されていたのですね。

<?php
// 適当に多い桁の数値を3で割ったときのあまりを求める。
$no = 600000000111;
echo $no % 3 ."\n"; // 実行すると -2
var_dump($no); // float(600000000111)  型をみてみるとFloat
?>

まぁそれでも答えが合致しないのはよくわからないンですけど。。


BCMath関数を使えば解決。

<?php
$no = 600000000111;
echo bcmod($no, 3) ."\n"; // 0
$no = 600851475143;
echo bcmod($no, 3) ."\n"; // 2
?>

ちゃんとした答えをだしてくれました。