以前いた会社で、つまんない仕事をぼくの好きな仕事に変えてやった時のおはなし。
注意事項
本記事に限らずの話ですが、お仕事や実際の開発案件に関わる話をする場合は、念の為にフェイク情報を含めています。 敢えて話を簡略化したり、意図的に省略している情報も勿論あります。
抽象的には事実通りだけど具体的には多少の嘘が混じっていると言うか、
インタフェースは同じだけど実装クラスを別なのに差し替えたと言うか、
まぁなんかそんなイメージで読んでくれればと思います。
とあるテスト案件のおはなし
案件概要
いわゆるマイグレーション案件ってやつですね、古いバージョンのC#で書かれたプログラムを、最新のバージョンでリビルドすると言うのが基本。
細かい話をすると、他にちょろっとした機能追加や既存改修もあったんですが、それはめちゃくちゃ簡単なアレだったので大した話ではありません、オマケみたいなものです。
ここで重要なのは、営業が取ってきた受注契約内容が「リビルド(+チョットダケ改修)したプログラムを、指定された全動作環境で全テストを行う」と言う物だったと言う事。
テストするだけの簡単なお仕事
機能改修ぶんを除いてテスト仕様書は向こうから出されています*1、その項目数は約500。
そして指定されたテスト環境は何と8環境。
- Windows7 x86
- Windows7 x64
- WindowsVista x86
- WindowsVista x64
- Windows8 x86
- Windows8 x64
- Windows8.1 x86
- Windows8.1 x64
うん、要するにそういう事*2です。
500項目、8環境、都合4000項目!!
勿論、紙文化大好き日本人ですから、全項目に関して画面キャプチャエビデンス必須。
プログラムを起動して、テスト仕様書のテスト手順に則って画面操作し、要所要所で画面ハードコピー*3撮って、Excelに張り付けて、テスト成績書にOK/NGを書き込む、、、。
誰でも出来る、簡単なお仕事です。
うん。
(*'▽') は~、めんどくせぇ~。
ぼくがやったこと
ハッキリ言って、延々とテスト項目を消化するだけとか精神的苦痛以外の何物でもないですよね。
つまんないです、めんどくさいです、もっとクリエイティブな仕事がしたいです。(キリッ)
テストを自動化する難しいお仕事
こんなつまんねー仕事をバカ真面目にやるのは、真面目ではなくバカのやる事です。
エンジニアなのだから、工夫しましょ、工夫。
と言う事で、UI操作を自動化するツールを作って、テスト自体はそのツールにやって貰いましょう。
テストするだけの案件が、テスト自動化するアプリケーションの開発案件に早変わりです。
早い話が、QTPやSeleniumみたいなのを自前で作って遊んじゃおう!!と言う事です。
我々はエンジニアなのだから、モノ作ってナンボですよ、テストするだけとかホントつまらん。
そうです、我々は賢いので。
と言う事で、当初与えられたテスト計画を全面的に書き替えて、テスト自動化ツールの開発に大部分の工数を充てて、テストの実施期間は思いっきり短くし、バッファとして納品準備作業を長めに取りました。
簡単な比率で言うと、ツール作成が5、テスト実施が2、納品準備が3、と言った感じです。
最終的にはこんな感じのものを作りました。
- UI操作自動化ツール
(ざっくり言うと、キーボードエミュレータみたいなもの。) - DBのデータダンプ取得ツール
(目的のテーブルのデータダンプを取得し、テキストで保存するツール。
テキストにした理由は後でWinMergeを使う為。) - Excelへの画像ファイル自動貼り付けマクロ
(テスト操作実施時に撮り溜めたスクショエビデンスを張り付けるやーつ。) - Excelへの自動改ページ及び印刷設定マクロ
(エビデンスが納品物指定されていたので、電子ファイルの納品準備作業のため。) - 環境構築ツール
(8環境にテスト用ツール配置したり、ディレクトリ構成作ったりするのが面倒だったので、その辺も自動化。)
また、普通にフリーで手に入る以下のツールを併用しました。
- VirtualBOX
(テストを実施する8環境を構築する仮想環境として。) - WinShot
(スクショエビデンス取得の為。) - WinMerge
(DBダンプデータの差分比較の為。)
自作ツール概要
■UIテスト自動化ツール:
独自定義したスクリプトコードを食わせると、テスト対象プログラムを操作してくれると言う物。
独自スクリプトはテキストファイルで保存しておき、ツールにドラッグアンドドロップで食わせるだけで後は勝手にやってくれると言う代物。
内部実装としてはUSER32DLLのSendKeys関数を使用した、劣化版キーボードエミュレータみたいなやつ。
■独自スクリプト:
上記ツールの内部仕様。
ぼくがぼくの作業で使い易いように、最小限の機能しか実装出来てないが、その分、自分の作業に限って言えば完全最適化されており、使い勝手は非常に良かったです。
完全な独自仕様なので、幾つかの定型操作を固めたプリセットコマンドや、ショートカット命令なんかを盛り込んでます。
例えば、 処理待ちの為に一定条件を満たすまでの待機ループに入らせるとか、 DBダンプ取得用の別なツールを呼び出すとか、 WinShotで環境設定したショートカットキーを送信してスクショ撮らせるとか。
■DBダンプ取得ツール:
シンプルなSELECT文を投げて、取得した結果セットを単純にテキスト形式で保存するツール。
画面操作の前後でのデータ状態の変化を記録する為に使用。
これで保存したテキストをWinMergeで比較し、データの変化・過不足なんかをレポートに出力させ、これをエビデンスにしてました。
■環境構築ツール:
と言うと大げさだけど、テスト実行環境に仕込んでおくべき自作ツールや、ツール用の定義ファイル・スクリプトファイルの配置。
あと、スクショエビデンスを保存するディレクトリ生成など、VirtualBOX仮想環境内で、初期設定的にやっておく必要のある作業を行う簡単なツール。
インストーラの超しょぼい版だと思ってくれれば。
■総括:
上記を読んでいただければ解る通り、一つ一つは大した事のない簡単なツールです、別にそんなに難しい事はやってません。
但し、シンプルであるがゆえに組み合わせ易く、それによる総合的な効果は大です。
そもそも、エンジニア・システム屋の本質とは、このように難しい課題を簡単なものの組み合わせに分解する事にあります。
裁量労働制とはいったい・・・
構想自体は前からあったので
実はこのテスト自動化ツール、前々から構想自体はあって、いずれ何かのタイミングで作ろうと思ってたものでした。
なのでまぁ、言ってみれば要件定義は終わってるようなもので、設計と製造の時間が確保できるタイミングを待ってた感じですね。
そんな折、テストをするだけの簡単なお仕事で、万一頓挫した場合でもいざとなればキャッチアップ可能と言う条件が揃ったので、今がチャンスと思って作った訳です。 (何より、テストするだけで4000項目ものエビデンスを取り続けるなど、苦行と言うほかありませんし、絶対やりたくなかったので)
作りの拘りよりも一旦まずは形として使えるものを目指したので、想定していたよりも早くモノの実装は完了しました。 (出来はそんなにカッコイイものではなかったですけどね^^;)
超絶時短勤務
ツールの実装を行いつつ実際に1環境用のスクリプトファイルを作りながら、ツールの機能をブラシアップして・・・って感じで進めていき、ツールが完成した時点でスクリプトも完成してて「あとは残りの7環境でツール流せば終わり」みたいな状況になりました。
トータルで工数は半分以下どころの騒ぎじゃなかったです、具体的な数字とかは伏せておきますけど。
順調すぎて暇で暇でアレだったので、午前中ゲーセン行ってから午後出社して五時を待たずに帰宅、とか言う事もやってましたねw
空いた時間でツールのリファクタリングとか、他のコード整理したりとか、時短勤務しながら好きな事ばっかりやってました。
あの当時がエンジニアとして最も良いサイクルが出来てて素晴らしい時期だったなぁと思います。
まぁでも、めっちゃ文句言われました。
そうやって単純作業を自動化して、技術力による工夫で業務効率化と高品質化、それによる高い利益率を実現しました。
エンジニアとして非常に誇らしい仕事が出来たと思います。
しかし、この働き方に対して社内ではめっちゃ文句を言われました。
曰く、「あいつは楽をしている」とか「作業をサボってズルしている」とか「勤務時間が短いから全然頑張ってない」とか、エンジニアにあるまじきゴミみたいな事を言われました。
(*'▽') HAN?
一体何を言ってるんでしょうね、こんなのサンドウィッチマンじゃなくてもちょっと何言ってるか解らない案件ですよ。
システム屋にあるまじき発言。
簡単に言うと、システム化による業務効率化・高品質化を「手抜き」だと言っている訳です、他でもないシステム屋さん自身が。
お客さんの業務をシステム化する事が仕事であるのに、肝心の自分達の作業はシステム化しようとせず、泥臭い手作業を推奨している訳です。 これは完全な自己矛盾であり、エンジニア失格と言うほかありません。
中には「そんな手抜きしてないで、自分の手できちんとしっかりテストしろよ、お客様に対して失礼だ」などと言ってくるど阿呆もいました。
こいつは一体エンジニアの仕事を何だと思ってるんでしょうか、理解に苦しみます。 ミスを起こさず信頼性の高い機械にやらせず、ミスをする可能性のある人間にやらせて品質リスクを生み、非効率なやり方で工数を無駄遣いするのが「きちんと」「しっかりした」「お客様に対して誠意のある」仕事なのでしょうか? こいつにはちゃんと脳みそが実装されてるんでしょうか、一度精密検査を受けた方が良いと思います。
システム開発の事をよく知らない一般人や、一点モノを作る伝統工芸職人が言うなら理解出来ますが、エンジニアがシステムに対して言うべき言葉ではありません。 こういう阿呆は即刻IT業界から去って頂き一滴一滴じっくり見つめるドモホルンリンクルの工場か、ひとつひとつ真心を込めて握るおにぎり屋さんにでも転職すればいいと思います。 きっとそれが天職だと思います。
極めて無能な頭チンパンジーな輩からは「裁量労働のみなし残業●●時間あるんだから、最低限そこまでは働けよ、暇なら周りを手伝え」などとも言われました。
(*'▽') 控えめに言って、こいつは技術者としてクズだな、っておもいました。
まぁ、気にせず無視して短時間勤務して、その後暫くしてこの会社は辞めました。
残業代定額制、働キホーダイ plan BLACK
裁量労働制と言いながら適切な裁量を与えてなかったり、みなし分を超えてサービス残業をしないと不当に評価を下げたり、そういうのは裁量労働制でも何でもなく、ただ時間外手当に対して不当に天井を設けているだけです。
掛け値なしブラック企業のやる事ですし、エンジニアのあるべき姿の真逆だと思います。 そして、悲しいかな日本のIT企業の多く、特に人身売買の人月ビジネスやってる所は、そう言う所が多いんじゃないかなって思います。
ちなみに余談ですが、プログラマに対して裁量労働制を適用するのはNGだったって話が最近Twitterで流れて来て、結構びっくりしたんですよね。 その辺の話はまたいずれ書こうと思います。
ぼくのブログの関連記事
お仕事関連とか、ライフハック的なやーつ。
怠惰を求めて勤勉に至れ
義務教育でプログラミング教えると聞いて
義務教育に於いて、プログラミングなんかよりもまず先に教えるべき、もっと大切な事。 - 我々は賢いので。