読者です 読者をやめる 読者になる 読者になる

>& STDOUT

主にソフトウェアに関する日々の標準出力+標準エラー出力

RedmineのREST APIで特定プロジェクトの全チケットを取得しようとして失敗する

こんぴた的な話

出来そうで出来ない、かゆいところにいつもあと1センチ届かない、RedmineREST APIの振り回されメモ。

基本形

チケットの情報を取るときはRedmineのApplication Rootから issues.xml にパラメータ渡してGETが基本的な形(issues.jsonでも可)。API_ACCESS_KEY は個人設定のページで各自発行できます。

https://redmine.server.com/redmine/issues.xml?key=API_ACCESS_KEY&project_id=PROJECT_ID&limit=100&page=1

この時limitを指定しないと先頭から25件しか取得できないことに注意。
チケットが100件以上あるプロジェクトでも、一度に取得できるのは100件まで

で、前述のリクエストを投げるとこんなのがルート要素として返ってきます。

<issues total_count="471" offset="0" limit="100" type="array">

この total_count を limit で割った数(+1)だけ page があります。よって、この例では先頭のリクエストの page パラメータを 1〜5 までカウントアップしながら、5回リクエストを投げないと「全てのチケット」は取得出来ない、ということです。面倒ですね。

ページ数分リクエストする

考え方としてはざっくり↓こんな感じ。(リクエスト1回多いですが、やってることわかり易く。

request_url = "https://redmine.server.com/redmine/issues.xml?key=API_ACCESS_KEY&project_id=PROJECT_ID&limit=100&page=1"
response = http.request(request_url) #https対応のclient作っておく
xml = Nokogiri::HTML.parse(response.body, nil, "UTF-8")
total_count = xml.css("issues").attribute("total_count").value
limit = xml.css("issues").attribute("limit").value
pages = total_count.to_i / limit.to_i + 1 #何ページ(=何回)リクエストするのか計算

pages.times do |page_number|
  request_url = "https://redmine.server.com/redmine/issues.xml??status_id=*&key=API_ACCESS_KEY&project_id=PROJECT_ID&limit=100&page=#{page_number + 1}"
  response = http.request(request_url) 
  full_xml << response.body
end

ところがどっこい

とりあえずこれで full_xml に「そのプロジェクトのチケット全部」が入る、、、ハズだったのが、なんと status_id=*(OpenとClosedを両方とる) が効かずにOpenしか取ってこれていないことが判明(Redmine 2.3.1.stable)。燃え尽きたよとっつぁん。

落ち込んだりもしたけれど

いまは CSV Export で元気です。たぶん。

追記

status_id=* はURLエンコードしてあげないとダメっぽいです。status_id=%2a。で、これで全部取れたとしても5個のxmlなりjsonなりを結合してからFull Parseという手数が待ってますので、CSV Export から二次元配列をゴニョゴニョしたほうが早く感じるのはトシなんですかね…。

「北の国から」の初期、なぜ純と五郎さんは敬語で会話しているのか?

雑感

スペシャル版の断片だけ観ていていつも疑問に思っていたのですが、テレビドラマ版(全24話)を初めて通して観ていたところ第8話で、純と蛍が通う中ノ沢分校の教師、涼子先生(原田美枝子)からズバリ訊かれていました。

f:id:shinsuku:20140202204418p:plain

涼子先生「ひとつだけ伺っていいですか?」
五郎さん「なんすか?」
涼子先生「黒板さん、どうして純君に対して丁寧な言葉でしゃべるんですか?」

桃井かおりを彷彿とさせる気だるい雰囲気でテレビドラマ当時の登場人物の中でも異彩を放つこの涼子先生、事実上の最終回となる 2002・遺言 で再登場し、純と結が出会うきっかけを作ります。

涼子先生「蛍ちゃんには普通のしゃべり方するでしょ。 …前から不思議に思ってたんですね。あれ、何か理由があるんですか?」

はい。視聴者も本当に気になってました。これをうけて

f:id:shinsuku:20140202205100p:plain

五郎さん「…。 …いえ」
涼子先生「…」
涼子先生「…余計なこと言ってごめんなさい」
五郎さん「…。 とんでもないす」
涼子先生「…」
五郎さん「…」
涼子先生「じゃ、良いお年を」
五郎さん「良いお年を」

…ええええええ。「理由があるんですか?」との問いに対してそのまま「いえ、特に」ということと思いますが、視聴者生殺しです。

お話は続き、この第8話のラストシーン、正吉の家に紅白を観に行ったはずの純と蛍が、笠松家の家族団らんに入りきれず、自宅に戻ってきたところで五郎さんが「富良野の街の灯を観に行こう」と誘い出します。富良野の夜景を見下ろしながら今年一年の子供たちの労をねぎらい、五郎さんは純に語りかけます。

f:id:shinsuku:20140202210357p:plain

五郎さん「純」
純「はい」
五郎さん「父さん、これまで君に丁寧な言葉を使ってきた。…そういうつもりは無かったが… いつからか、そういう習慣ができちまってた。でも、もうやめる。今からやめる。…だから、おまえもやめろ」
純「…はい」

五郎さんは言葉少なではあるものの、自らの言動を改める旨を純に伝えます。結論として、作中で理由が明確に述べられることは無いようです。

富良野に引き取るまでの間、子育てをほとんど奥さんに任せっきりにしていた引け目と、長男である純を一個の男性としてきちんと扱いたいという相克が不器用な五郎さんの性格と相まってこのような接し方として現れていたところで、先ずもって親子の信頼関係を築く必要がある、ということに五郎さんは直感的に気付いたのではないかと想像しました。

北の国から」タイトルからは想像も付かないぐらい、どろどろの人間ドラマ(しかも20年越し!)ですので、大自然と純朴な住民たち、みたいな先入観で敬遠されていましたら、是非観てみてください。途方に暮れると思います。回想シーンが多いため、意外とスペシャル版のどこから観てもすんなり入れます。

これまでテスト設計をしてこなかった組織がテスト設計をはじめると、なぜ一時的にバグが出せなくなるのか?

ソフトウェアテスト

f:id:shinsuku:20140106102402p:plain

 わかります。これまったく同じ体験を7年ぐらい前にしました。もちろん「テスト設計」と自信を持っていえるような大層なものでは無かったのですが、それでも一応考えて、こうかな?こうかな?と仕上げたものでいざテストを実行!するとまあこれが出ない。びっくりするほどバグが出なくなり、自分の方針は間違っていたのかと懊悩したことがあります。もしかしたら同じ境遇にいるかもしれない新米テストマネージャのみなさまへ、そのカラクリをお届けいたします。

 端的には

1.テストを作る、行為自体が既にテストになっている
2.人間が書かれていることしかやらなくなった

からです。ほぼショートアンサーの裏返しですが、この現象が起こる現場はおそらく下記のような前提にあるはずです。

1.これまでテストケースが事前に準備されたことが無い
2.歩く製品知識かつ、ものすごく頭のいい、または観察力のあるテスターがいる

詳しく見て行きましょう。

1.これまでテストケースが事前に準備されたことが無い

 特別なテスト技法を活用しなくても、例えCPM (コピー・アンド・ペースト・アンド・モディファイ:要するに仕様書から仕様をコピーして、語尾を「〜すること」に変更するだけ) 法オンリーであったとしても、仕様書を別の文書で表す課程で「この仕様はあの仕様と衝突しないだろうか?」「この仕様記述は明らかにxxという標準や規約に違反している」という気付きが生まれます。この気付きを開発チームに確認するとその時点で誤りに気づき、ソフトウェアが正しく実装されます。このとき、テスト仕様書を変更せずにそのままテストを実行すると件のテストケースの結果は概ねPASSEDとなるはずです。バグ、出ませんね

 ただ、これでさえ課題管理システムが整備されていない組織であれば、うっかり修正するのを忘れていたというどうしようもないミステイクを検出することができますが、ともあれ仕様書のレベルが低ければ低いほど、テストを準備するだけで多数のバグが発見されるはずです。これは、品質コストの概念からすると凄まじいコスト対効果となります。なりますが、どう考えてもレベルが低すぎるところで活躍している、いうなればレベル10の勇者がスライムの群れを相手に無双している状態に過ぎません。このような状況にあるテストチームはテストを作るより仕様書の質の改善を手伝ったほうが大局的にはそのグループのためになると思われます。

仕様書 というとどうしても大仰なドキュメントを想像しがちですが、チラシの裏に書かれたログインフロー、ホワイトボードに殴り書かれた権限仕様、プロジェクトマネージャがよく覚えている機能仕様 すべて含みます。

 開発チームの成熟度が向上してくると、やはりまた検出率は落ちてくることでしょう。その時こそ、さまざまな網羅の方式を提供してくれるテスト技法や、ターンアラウンドタイムの速度を上げるテスト自動化、はたまたテスト分析の方式自体を変えてみる、など自分たちの方の技術を向上、拡大させることで、また検出率を向上させる。それに応じて開発チームがまた技術力を上げてくる、という正のスパイラルが起こるようになると、あとは放っておいても素晴らしいチームが出来上がると思います。楽しいですね。

2.歩く製品知識かつ、ものすごく頭のいい、または観察力のあるテスターがいる

 ソフトウェアテストの数ある(ありすぎ)分類方法の中に「スクリプトテスト」と「探索的テスト」という分け方があります。前者は(スクリプト:台本を)予め用意してからコトにあたる方針で、後者はテスターが頭の中でテスト設計を随時行う前提でいきなりテストを実行する方針をさします。どちらの方針もテスト分析だけは予め行なっておく事が多いようです。

 「探索的テスト」はテスト対象のリアクションを見ながら次にどんなデータを、あるいはどんな観点をあてて見ようかと考えながらテストを実行していくため、膨大な製品知識はもちろんのこと、そもそもそのソフトウェアがどのような前提で動作しているのか、という下回りの知識、ともすればセキュリティやユーザビリティなどといった非機能要件に列挙される分野の知識も要求される、非常に高度なスキルです。準備するコストがゼロに見えるので一見夢の様なテストと思われがちですが、テストマネジメントの観点から見ると「最初のひとつめのバグを見つける速度は最速だが、どこまで網羅したのか分からない」というレポートを書くときに困る性質を持っています。これをマネジメントする方法もいくつかあるのですがそれはまた別の話。

 閑話休題。なぜ掲題のような性質をもつテスターがいる状態ではじめてテスト設計をすると検出率が落ちるのでしょう。おそらく、テストを準備するという施策を打ち出す前は、製品をポンと渡して「少し見てくれない?」といったオーダーに対し、そのテスターは無意識に前述のような「探索的テスト」を行なっていたはずです。製品がポンと渡される、状況であればテスト分析など夢のまた夢、ということは探索する範囲も「基本的に無限」であったはずで、それこそ縦横無尽に製品を駆け回り、バグの匂いを天性の勘で嗅ぎつけ、それを検出していたことでしょう。こういうテスターに”順番に実行していく”タイプのテストを行わせると、これまで無制限に発揮されていた想像力がまさしく「台本」によって制限され、どうしても課された定量的なタスクをこなす方向に意識が行ってしまいます。

 ではどうすれば良いのでしょう。実はこのようなテスターはたとえどれだけスクリプトテストの技術が発達しても得がたい特性を持っていますので、そのまま「少し見てくれない?」型のテストを実行してもらったほうがテストチームにとっても幸せな結果となります。とはいえひたすら「少し見る」では飽きるはずですので、ついでに「なぜここを見ようと思ったか」「なぜそのようなデータを入れようと思ったか」という思考のリバースエンジニアリングとも呼べる課程を文書に起こしてもらい、それをスクリプトテストを開発する際の重要な資料として利用すると良いでしょう。また、その瞬発力を最大限活用できるよう、複数の製品を担当してもらう、のも有益かもしれません。

以上「なぜテスト設計をすると一時的にバグが出せなくなるのか?」の種明かしでした。後者の天然探索的テスターはどうしようもありませんが、前者は明らかに組織のレベルの低さに起因しており、気に入ったのでもう一度言いますが、レベル10の勇者がスライムの群れを相手に無双している状態です。まずは相手を育てて、心からゲームを楽しめるようにしたいところです。

本記事が、新たにテストマネージャになった方への何かのヒントになれば幸いです。


本記事は Software Testing ManiaX Vol.8 への寄稿記事を若干加筆修正したものです。

ソフトウェアの品質ってなんだろう

ソフトウェアテスト

f:id:shinsuku:20131212195127p:plain

 

  このブログの主な読者層は「品質保証部」やそれに類する組織に属しておられることと思います。「品質保証部」です。「品質」を「保証」する「部門」です。「品質」を…  クドいですね。しかし、みなさんご自身は「品質」、特にソフトウェアにおけるそれを適切に説明することができるでしょうか。そこで今回は、僕自身もソフトウェアテストという仕事にはじめて触れた時に抱いたギモンである「ソフトウェアの品質って何?」について現時点での解を示してみたいと思います。

歴史にあたろう

 このような大きな概念を知るときは歴史にあたるのが王道です。きっと僕が疑問に思うよりはるか昔から、比べ物にならないぐらいの膨大な時間を掛けて、賢人たちが議論して辿り着いた解が既に存在すると考えるべきです。ただし、広くそれを伝えるために抽象化されているので、明日から現場で使えるほどの具体性を期待するのは筋違いでしょう。ラストワンマイル、現場への適用は常に自らの手で試行錯誤する必要があります。

 

 閑話休題、それでは賢人たちにおける「ソフトウェア品質の定義」について歴史を振り返ってみましょう。ほぼ時系列に並べましたが、いくつか年代不明であったため掲載していないものがあります。

 

  • ソフトウェアを完全に停止させたり、容認できないような結果を出す欠陥が全くないこと(Capers Jones:恐らく70年代)
  • 要件に対する適合(Philip B Crosby:1980)
  • 「狭義の品質」と「広義の品質」(石川馨:1981)  
     狭義の品質:製品の品質
     広義の品質:仕事、サービス、情報、工程、部門、人、
     システム、会社の全てを含めた質
  • 魅力的品質と当たり前品質/狩野モデル (狩野紀昭:1984)
  • 製品またはサービスが、明示してあるか、あるいは暗黙の要望を満たす能力として持っている特性の総称(ISO 8402: 1986)
  • システムが本稼働するとき、どこまで真のビジネス(ユーザ)ニーズにあっているかということ(James Martin:1994)
  • 品質は誰かにとっての価値である(G.M.Weinberg:1994)
  • プロダクトの特性が顧客のニーズに応えることで満足を提供する &不備(障害や誤り)から免れる(Joseph M. Juran:1998)
  • 指定された特定の条件で利用する場合の、明示的または暗示的なニーズを満たすソフトウェア製品の能力(ISO 25000:2005)
  • 機能及び性能に関する明示的な要求事項、明確に文書化された開発標準、および職業的に開発が行われた全てのソフトウェアに期待される暗黙の特性に対する適合(Roger S. Pressman:200

バグが無いこと?

 1970年代では「バグが無いこと」と定義されていました。海外での変遷は大雑把には「バグが無いこと→要求を満たしていること→暗黙の要求もあるよ→ビジネスニーズもあるよ→もう、何だかわからない(ワインバーグ) →悟りの世界(プレスマン)」という流れです。ワインバーグの言はわかったようなわからないような印象を受けますが、実は品質の相対性という重要なポイントを初めて示しています。筆者の俗な想像ですが、「品質って何ですか?」と訊かれまくった賢人たち、ワインバーグはキレてぶっきらぼうに言い放ち、プレスマンはムキになって説明した、のではないでしょうか。特にプレスマンの言は「それでわかるなら定義なんか調べないよ!」と言いたくなるようなヒステリックさです。

 

 これだけ品質の定義について幅自体がブレてきたのは、ソフトウェアシステムの社会における存在感、価値の占めるその割合の増加と密接な関係があるのではないでしょうか。掲載した限り最も古い言及であるCapers Jonesの時代にはB2Cなどというドメインすら無かったはずで、社会におけるソフトウェアの役割も小さく「最悪動かなくても手でやるよ!」という牧歌的な頃であったかと思います。時代を経るにつれ、ソフトウェアの利用は効果的、もはや無くては立ち行かないもの、水道や電気と同じぐらい、あるいはそれ以上に重要かつクリティカルなインフラ、とその重要さを増すたびに、人間がシステムに持つ期待がどんどん膨らんでいき、今現在においてもその膨張はとどまることを知らないように見えます。 

 

Column:

 

 80年代における日本とアメリカの品質認識の違いはとても興味深いものがあります。「品質」の定義を異様に広くとっている日本に対し、アメリカのそれは「先立つ何かがあり、十全にそれに従えていること」とされています。これは、アメリカのソフトウェア産業が主に軍からの厳密な発注と契約に基づいて発展してきたのに対し、日本はお客様の望む以上のものを提供する、という工業製品における思想に範を置いてきたためと考えられます。「プロセス保証」と「テスト」という軸を並列に置いた時日本では前者が、海外では後者に重きが置かれているように感じるのもこの歴史的経緯とは無関係ではないはずです。  

 

 日本の定義はさすがお客様第一主義らしく、最初から幅が広く、著名な狩野モデルでは製品自体の品質とユーザの満足度を相対的に表すモデルが84年の時点で既に提唱されています。魅力的品質なんて今でも定量化が難しいのに30年以上前からその端緒をつけるあたり、品質大国ニッポンは伊達ではないです。日本の定義はシステムに限った話ではないのですが、伝統的に工業製品の製造過程を見習ってきたため、ソフトウェア産業においても同様の定義が使われてきたと考えて良さそうです。海外からすると「ニホンすげえよ、奥が深いよ!(でも具体的に何したらいいのかわからないよ)」で、日本からすると「海外の方法論はスゴいけど、お客様が語らないんだよねえ」という印象をお互いに持っていたのではないでしょうか。

"ソフトウェア"品質モデル

 一方、品質を一意に定義する、ことはどうやら難しいと悟った別の賢人達はソフトウェアに限ってその抽象度を一段下げ「ソフトウェア品質モデル」を提唱しはじめます。こちらも時系列に沿っていくつかの例を挙げます。

 

  • Boehm’s Quality Model (Boehm: 1976)
  • McCall’s Quality Model (McCall: 1977)
  • FURPS (Hewlett-Packard:70年代後半) *のちに+
  • ISO/IEC 9126 (1991)
  • ISO/IEC 25000 シリーズ SQuaRE (2005) 

 

 このどれもが今でも使えるものばかりなのは驚愕です。余談ですが、最初に触るものとしてはFURPS+が特性の数が少ないのでオススメです。特徴的なのはFURPS(+)を除きそのどれもがツリー構造を採用している点です。BoehmとMcCalのそれは親特性と子特性が交差しあうN:Nの関係を持っていたのに対し、ISO9126以降では1:Nの構造が遵守されているのは、恐らく普及のためにある程度の単純化が図られたからではないかと予想されます。

 

 特に有名なISO/IEC 9126は、前述のお互いへのリスペクトが、海外の具体的な計測法と日本の品質の幅を広くとる思想の両方をソフトウェアという分野に限って標準化できた幸福な例と言えると思います。さきほど、人間が持つシステムへの期待は今も膨張していると述べましたが、それはISO/IEC9126から25010への改訂時に主特性が6個から8個に。利用時の品質も主特性が1つ増加し、副特性が正式に定められたことからも伺えます。9126だけでも大変だったのに、更に増えてこの先どうしたらいいのだろうとこの記事を書いている今も頭を抱えています。人間がある程度諦めてくれれば特性も減るのでしょうが、それを言ったら負けな気もするので頑張りたいと思います。

いまいまの解

 気を取り直して。ここまで「品質」自体の定義の例とソフトウェアに限って「品質」を一段具体化した「品質モデル」の例を見てきました。冒頭の質問に立ち返ってみましょう。「ソフトウェア品質って何ですか」。これらの考察を踏まえて解答するなら、現時点では

 

 「定義自体は以上のような変遷を経て未だに定まり切れていないが、ソフトウェアに限定してモデル化されたものがいくつかある。その中でも網羅性を求めるならISO/IEC9126(→25010)を、使用性を求めるならFURPS+が良さそう。9126は品質モデルの定義と内部/外部品質と利用時品質に分かれており、モデルは6つの主特性と27の副特性から構成され…」

 

 といった形になり、このあと対象の製品にまでスコープが及べば数時間は話せますが、相手が寝てしまうと思うので、少なくともソフトウェア企業の品質保証部という実戦部隊としての短い答えは、

 

「既存の品質モデルを製品にテーラリングして良し悪しを語れるようにした概念」

 

 となります。そこから、その良し悪しを良い方向に導いたり計測したりするための、今現在最も効果的な、パズルのような、”知る”技術として、ソフトウェアテストがあるのだなと理解しています。もちろんみなさんがいまおかれているコンテクストにおいて異論は多々あるでしょうし、僕自身、もっと良い解答を得られる事もこの先あると思いますが、先ず議論自体が行えるように、自分なりの解を用意しておくことも大事かなと思います。

BOKがあるよ。

 なお、本記事の定義はほぼ下記書籍を参考にしています。「ソフトウェア品質保証ってどうやって勉強したらいいですか?」と訊かれた時に脊髄反射で「はいどうぞー!」と渡せる本で、必読です。
 

ソフトウェア品質知識体系ガイド―SQuBOK Guide

ソフトウェア品質知識体系ガイド―SQuBOK Guide

 

 

 


本記事は WACATE MAGAZINE Vol.46 への寄稿記事を若干加筆修正したものです。

「通り過ぎ症候群」について

雑感

f:id:shinsuku:20131128190723p:plain

造語です。僕自身かつて経験した状態で「え、こんなことが人様の気付きになるのか!?」とびっくりしました。今でもたまにあります。定義は、

「いま自分が学んでいる地点を世間の平均的な知見と捉え、かつて自分がいた時点に今いる人に対して、価値ある情報など持っていないと思い込んでしまう状態」

とし。出力して価値を届けられる状態をスルーしてしまうので「通り過ぎ」と表現しています。学べば学ぶほど謙虚になるため、真面目な人ほど陥りやすいように思えます。学んで、少しでも自分の血肉になっているならそれはものすごい価値のあることなので、あとはマトメ方、構造化や伝えたいことのミニファイだけ気をつけてバシバシ発信してほしいなと思います。

これは

「情報発信者は価値を決めることができない」- 情報論1999 *1  

という原理を学びの課程に置き換えたものでもあります。例えば、今日何を食べた〜 という一見どうでもいい情報でも100万人、1000万人規模、あるいをそれが断続的でも数年に亘って続いた場合、前者はトレンドを作り出し、後者はその人の因果関係を想像できる(例えば健康状態)貴重な情報になります。情報に対して価値を創造するのは常に受け手側ですので、こうかな?と思ったことは躊躇せず発信してみていただきたいなと思います。

 

 

この先数年でQAのやり方はどのようにガラっと変わるのか?

軽量品質保証の部品

SQiPシンポジウムにスピーカー参加してきました。

http://www.juse.or.jp/sqip-sympo/2013/program/

アジャイル開発と品質保証」というパネルの中でにしさん(@YasuharuNishi)が

「この先数年でQAのやり方がガラッとかわる。我々はその分水嶺にいる。ついていけないソフト会社は振り落とされる」

というコメントをされていましたので、この先数年で具体的にどう変わるのか、予想してみようと思います。ここをご覧の品質系の方も是非このテーマで一本書いてみて欲しいです。読みたい。

技術のメインストリームがガラッと変わる

テストの実行、メトリクス収集及び分析はほぼ8割がた自動化されており、残り2割をどう省力化するかが新たなテーマになっている。また、アーキテクチャの段階からモデルベースドテストを狙えるような仕組みを織り込んでおくなど、テスト可用性、テスト容易性を保証するのが上流でのQAの役割となる。

スピードがガラッと変わる

開発の最後にしゃしゃり出てきて「出荷NG」とかなにそれ白亜期?な感じで、少なくともQAを得意とするメンバーはターンアラウンドタイムが重要な能力指標となる。1にスピード、2にスピード、3に正確さ、4に網羅性、5に何か。

一緒に仕事する人がガラッと変わる

エンドユーザといままで以上に簡単にコミュニケーションを取ることができ、より直接的なフィードバックに基づくスプリントプランニングが可能になる。QAはエンドユーザと開発を交えた良好なコミュニティの形成も仕事のひとつになる、かも知れない。

つかそんな役割分担自体がなくなる

上記が実現した先にあり得そうな未来。まるっと「ソフトウェアエンジニア(得意なのQA)」という形になる。今現在「QAだから」で仕事してる人は危ない。

ざっと。DevQUTも合わせてみてね。

 

詳解 コピー&ペースト&モディファイ法

ソフトウェアテスト

※推奨してません

 

「コピー&ペースト&モディファイ法」は2012年現在、日本国内において最も普及しているテスト開発手法である。手法の名前で全てのアクティビティを表してしまっている、あるいは、バカバカしすぎて解説する気にもなれない、等の理由から、その普及度合いに反してなかなか陽の目をみなかったこの手法について、"せっかくだから" この場を借りて正面から取り組んでみたい。

「コピー&ペースト&モディファイ法」はテスト開発手法であるから、当然テストプロセスのいずれかのフェーズを担うことになるのだが、この手法の最も画期的な点は、テストベースからテスト設計を無配慮にすっとばし、機械的にテスト実装できるところにある。その意味においては、「考えていない」というささいな点以外は近未来テスト技術の寵児たるモデルベースドテストと思想を同じくする。では、その実際の様子を順を追って解説していこう。

1.テストベースを準備する 

テスト開発における設計工程はテストベースを準備するところから。これはこの天衣無縫なテスト手法においても変わりはないが、他のテスト設計技法においては無上の入力となる図表やテーブルが、本手法においてはゴミ同然であることに注意されたい。我々が求めているのは母国語でベタ書きされた仕様書である。もしそれが構造化されておらず、ただひたすら「〜しなければならない」調であるなら言うことなしである。そういう意味では、原則テキストベースで提供されるRFC文書等は要求強度が明示されている点からも非常に有力なテストベースとなる。実際筆者もやったが10年前なので時効であろう。たぶん時効である。時効なんじゃないかな。ま、ちっとは後略。

2.テストベースから要求っぽいところをみつけてコピーする

賢明な読者ならとうにお気づきのことと思うが「コピー&ペースト&モディファイ法」の第一ステップは、「コピー」である。ここで肝要なのはその操作ではなく、テストベースとなる文書から「要求っぽいところ」を見つける点にある。この手法のクオリティを保つためにも、ぜひ「っぽい」にこだわって欲しい。決して、開発チームに「これって要求ですかね?だとしたらどういう条件で発火してどういう振る舞いを…」などと確認してはいけない。ここでも、本手法のポリシーたる「考えていない」を遵守するためのテクニックが存在する。すなわち、「生成する」「変更する」「削除する」「xxしないこと」「xxすること」など、「ソフトウェアのふるいまい」+「サ変活用」に注目しながら仕様書を追っていき、発見次第無心でコピーしていく。考えるな、捉えるんだ。

3.テスト仕様書にペーストする

賢明な読者ならとうにお気づきのことと思うが「コピー&ペースト&モディファイ法」の第二ステップは、「ペースト」である。本ステップにおいても肝要なのは操作ではなく、ペースト先である。本手法を適切に運用した結果生まれる出力は「最高にいけてないテスト仕様書」であるから、テスト仕様書そのものにペーストすることが望ましい。この時、決して機能の構造に対応させたテスト仕様書の構造化などを考えてはならない。断じて、機能の親子関係やそこに与えられるパラメータの種別、などをスプレッドシートに、大、中、小項目と振り分けていく過程で網羅性に不安をもちはじめた挙句、「もう少し列挙した項目に合理的な理由をつける方法を考えよう」などと思ってはいけない。繰り返すが、本手法を駆使して我々が目指すのは「最高にいけてないテスト仕様書」である。

4.語尾を書き換える

賢明な読者ならそろそろこの枕にも辟易していることと思うが「コピー&ペースト&モディファイ法」の最後のステップは「書き換え」=「モディファイ」である。ステップ2を適切に行えていればここでも「考える」ことなく機械的な作業に徹することが可能となる。具体例を見てみよう。

 

コピー&ペーストされた仕様記述の例:

 1.入力された年齢が18歳未満の場合は入場不可のメッセージを表示したあとYahooに遷移する

 2.プルダウンメニューからジャンルを選択すると、そのジャンルのタグがついた作品のみを表示する

 3.新着、高評価、視聴履歴で並べ替えができる 

モディファイしたテストケースの例:

 1.入力された年齢が18歳未満の場合は入場不可のメッセージを表示したあとYahooに遷移することを確認する

 2.プルダウンメニューからジャンルを選択すると、そのジャンルのタグがついた作品のみを表示することを確認する

 3.新着、高評価、視聴履歴で並べ替えができることを確認する

 

いかがであろうか。筆者がこの間違い探しのようなテスト仕様を開発するのに掛かった時間は約4秒である。驚異的な速さではなかろうか。入力する年齢も、そもそも受け付けている文字種すらも、メッセージの文言も、Yahooがどこなのかも、ジャンルには何があるのかも、並べ替えはジャンルと併存できるのかも一切問わない、実行するテストオペレータの腕に100%依存する、ある意味人間賛歌なテスト仕様であるとも言えよう。だったら仕様記述だけで良くないですか、などと考えたそこの君は、まだ信心が足りないようだ。

 

以上が、国内の底辺ソフトウェア企業を中心に最も普及している「コピー&ペースト&モディファイ法」の全貌である。紙面の関係上、まったく省略することなくつまびらかにしたつもりではあるが、この座興の粋を尽くしたテスト手法のいけてなさの一端でも感じて頂ければ、これに勝る幸せはない。

 

…え。これでもけっこうバグが見つかる?それはたぶん、作り方の方を先に考えなおしたほうがよい。