上 下
6 / 10

第六話『テスト項目書が雑じゃない!?』

しおりを挟む
「――よし!」
気合いを入れてテスト項目書に向き合った。

このチーム――企画者、開発者、テスト、デザインを含めたプロジェクトチーム――では仕様書が『聖典』となっていることは今までのやり取りからわかった。
もちろんそれは間違ってはいないと思う。
仕様書は『思い描いたものを正確に人に伝えるためのツール』なのだ。
仕様書でチームメンバーが共通認識を持ってコミュニケーションをとる。
ただこれは「仕様書がカッチリ書かれている」ことが前提。
さっきのような「書いたと思ったけど、実際には仕様書に反映してませんでした」があると、企画者はその機能が作られていると思い込んでいるが、他のチームメンバーは仕様書に載っていないので知らない――つまり『認識齟齬を起こすためのツール』に早変わりだ。
私がさっき気にした文字数は……。
……もちろん仕様書に載っていないのでテスト項目書にも記載はなかった。
ここがないと開発するときに困ると思うんだけど。
私は適当なニュースサイトから記事をコピーして、コメント欄に張り付けてみた。
するとニュース記事は途中までしか反映せず、コメント欄の下に赤字で
『コメントは140文字までです』
と表示された。
なるほどね。

――開発中に開発者もこのことを気にしたのだ。
『いくらでも入力できたら投稿が増えるとデータベースがパンクしてしまう。データベースの設定もできない。何文字までにしたらいいんだ?』
『文字数制限があるとしたら、それ以上入力されたときに入力できない旨を表示しなければならない。何というメッセージを出せばいいんだ?』
『メッセージを表示するなら目立つようにポップアップで出せばいいのか。それとも目立たないように入力ボックスの下に表示すればいいのか?』
これらを開発者個人で勝手に決めてしまっては、他のチームメンバーとも認識齟齬を起こしてしまう。
この決定は企画の領域になりそうだ。
そこでどこかで企画者に質問したのだろう。
すると企画者はこう言うのだ。
『某SNSは140文字ですっけ? 140文字でいきましょう。バーンとポップアップを表示するのもアレですし、入力ボックスの下に赤字で表示でいいんじゃないでしょうか。メッセージ内容? "コメントは140文字までです"でいいんじゃないですかね』
これはミーティングの場で決まったのかもしれない。
チャットで聞いてその場で決まったのかもしれない。
少なくとも小毬さんたちがいない場所で決定したはずだ。
そのことは仕様書に記載されることなく今に至る――

――こんなところだろう。
「ふぅ……」
こういう場所が他にいったいどれくらいあるんだ……。
他にも入力は無数にあるし、その他エラー時の表示まで考え始めるとキリがなさそうだ。
そう考えると全てを仕様書に書くのも土台無理な話か。
ふと顔を上げると、向かいのちいかわのぬいぐるみの間から、テスト項目に振り回されてアタフタしている小毬さんが見えた。
……せめて決めたことはみんなが見えるところに残しておいてもらえるとありがたいんだけどさ。

仕様書から意識を戻し、今度はテスト項目書に目を向けた。
こちらももちろん仕様書がもとになっている。
もとになっているというか……。
仕様書を開いてページを目で追う。
メインページの仕様部分には
『コメントが送信できる』
と書いてある。
さて……。
目を戻してテスト項目書の「操作」の欄を確認する。
『メインページでコメントが送信できることを確認する』
との記載。
つまり仕様書の文をコピーしてきて、それに『~ことを確認する』と書き足しただけだ。
期待結果を見る。
『コメントが送信されている』
こっちは完了形にしただけっていうね……。
本来の期待結果は、どういった状態になればその項目が合格といえるか、という部分だろうに。
吉村リーダーがブーブー文句をたれながら仕様書からただコピペしている様子が目に浮かぶ。

――プログラムのテストコードを書くときを想像する。
例えば、2つの数字を送ると足し算がされて、結果を返すプログラムだ。
そのときは、1と2を送ると、期待結果は3である。
これが4だった場合は問題があったと言える――

その例でこのテスト項目書の記載を考えてみると。

操作『1+2が計算できることを確認する』
期待結果『1+2が計算されている』

こういったことを書いている。
……私知ってる。これ、小泉構文ってヤツでしょ。

「それだけじゃなくて……」
問題は『コメント送信のテストがこの一項目だけ』ということだ。
この一つで『コメント送信されて反映される』という一番大事な流れは確認できそうだ。
ただメッセージが送信されてから反映されるまでには、裏側では結構色んなことが行われている。

***

まずは入力が行われてから送信しようとしたときの文字数チェック。
ここはさっき私が試した通り。
140文字以内なら送信できる。141文字から送信ができない。他に空っぽだったら送信できない、といったところか。

それが問題なければ、多くはPOSTというメソッド――送信するための仕組みでデータがサーバーに送られる。
ここで、どのペットのリストに対して、誰が、いつ、何のコメントを書いたがまとめられて送られるわけだ。
このとき入れるデータを間違えると、別のペットのリストにコメントが表示される、違う人の名前でコメントが表示される、ひとつのリストに何個もコメントがあるのにひとつしか表示されない、そんな問題が起こる。

サーバーに到着したデータはデータベースに入れる前に前処理されることが多い。
例えばデータベースに入れやすい形に整えたり、おかしなデータだったらエラーを返して登録しないようにする。
その他に、メッセージの中にデータベースで実行できる命令文が入っていると実行されてしまう可能性もある。
例えばメッセージに「' or 'a'='a」といった命令が入っていて、それがデータベースで実行されてしまうと意図しないデータ表示がされたりする。これを実行されないように無害化処理したりするわけだ。
ちなみに『SQLインジェクション』と呼ばれる攻撃ねコレ。悪用禁止。

それらを経て、データベースにデータが入れられる。
この時データベースが古いと、絵文字の区別がつかない、4バイトの文字――吉牛の土+口の字の「よし」など――が入らないといった問題が発生だ。
このサイトで言えば、犬の絵文字を使ったコメントを抜き出したいのに猫の絵文字を使ったコメントが出てきちゃう、よし田さんの名前が表示されずに全国のよし田さんが泣いちゃう、といったところだ。

続いてコメントの画面反映。

まずはWebページが、多くはGETというメソッド――データを依頼する仕組みで「このリストのコメントデータをください」とリクエストを送る。
それに応じて、データベースから該当リストのコメントが全部抽出される。
その時にコメントしたユーザー名やアイコンURLなども他の場所から読み込んで、必要なデータとして整理整頓して返される。
この時はデータベースを実行するコマンドを間違っていたり、効率が悪くて重い処理になったりする問題が発生しがちだ。

そして返ってきたデータをWeb上の適切なところに当てはめて表示を行う。
この時も適用をミスってUI崩れ、つまり画面がおかしくなってしまったりすることがよくある。
ゲームだったら名前表示部分に「8月20日」とかね……。ええ、昔やらかしましたよ。
その他に、Webページに反映する場合はhtmlタグの反映にも気をつけないといけない。
htmlタグというのは、Webページを構成するための命令みたいなものだ。
例えば<br>は改行の意味で、これが山ほど書かれたコメントが実行されると、コメント欄が死ぬほど長いというUI崩れが発生する。
その他にも画像などを貼り付ける悪さなんかも考えられる。
なので実行されないように無害化処理を行うのだ。

***

『メインページでコメントを送信できることを確認する』
このたった一つのテスト項目。
実はその裏には、汗と涙とうっかりミスポイントがたくさん詰まっているのだ。
なので書かれているテスト項目では確認が足りないように思えてならない。
私が作る乙女ゲーならもっと細かく確認をしているし、人に頼むならもう少し確認してほしい。

「…………」
テスト項目書を下にスクロールしてみる。

――ズラ~リ

『コメントを送信できることを確認する』くらいの粒度の項目が山のように並んでいる。
ってか。
仕様書に載っている全部の文章に「~を確認する」とくっつけた項目を並べてるよね、これ?
このひとつひとつを今私が考えたような粒度に分解していったら、明日のリリースなんて余裕でぶっちぎること間違いなしだ。
試すことを取捨選択しないとタイムアップになる。

……プログラムが見られれば、ユニットテストをしている部分はやらない、といった判断もできそうなものだけど……。

――いやいやいやいや。
私は頭を振った。
今は私の理想論を振りかざすタイミングではない。
なにより何かやらかしたらご飯を食べるお金が入ってこなくなってしまう。私はお腹も空いているのだ。

***

「さて……」
メモ帳に簡単に気になることを書き出した。
もし発生したとしたらダメージが大きい問題にフォーカス、といったところか。
そうなると……。
『SQLインジェクション』
これだ。

最近はフレームワークレベル――使っているツールで抑えられていることも多いので通る確率は低い。
だがもし出来てしまったときのダメージは特大だ。
もし発生するとしたら完全に悪意あるユーザーに目をつけられた時のみだ。
そうなると保存されているユーザー情報を抜かれるか、データベースを壊しに来るだろう。

というわけで、攻撃になりそうなクエリ――命令文を打ち込んでみる。
期待する結果は『書いたままの文章で表示されること』だ
もし本当に実行されてしまったら困るし、データベースが壊れるようなものはやめておこう。
壊したら私のご飯を食べるお金が以下略。

――ドキドキ。

実行されませんように、という気持ちは強い。
なんだけど……。
だけどなんだろう、このワクワクするような気持ちは。
実行できるのでは……できたら……。
妙な昂り、高揚感を感じている自分も顔をのぞかせていた。
……いやいやいやいや。
私にシステムをいじめて悦ぶようなサディスティック属性はないはずだ。
たぶん。

緊張しながら実行。

すると、打ち込んだクエリがそのまま文章として画面に反映された。
これはつまり、ちゃんと無害化されて実行されなかったということだ。
念のため変な場所に情報が出たりしていないかをサイトを周って確認する。
「――ふぅ」
……よかった、大丈夫そうだ。

そしてもう一つ、さっきと同じような理由のもの。
私は――
<table border="1"><tr><td>1段目</td></tr><tr><td>2段目</td></tr></table>
ちょっと長めのhtmlタグを書いた。
これも『書いたままの文章で表示されること』を期待している。
そうであれば無害化ができているということだ。

ポチっとな。
すると。

コメント欄に『2段に分かれた表』が現れた。

それを目にした瞬間
「あ」
――トクン。
胸が、跳ねた。

「ん?」
その声に反応して、向かいの小毬さんが「どうしたの?」と言いたげに首をかしげた。
「な、なんでもないです」
……今は。

って!
htmlタグが実行されちゃったじゃん!
腕組をして黙考モードに入る。

――タグの反映。
これだけならそこまで大きな問題じゃない。
せいぜい変な画像を貼られるイタズラをされるくらいだ。
まぁ、それも画像によってはダメージは大きいけど。
問題は
『JavaScriptが実行できる可能性が出てきた』
これだ――

JavaScriptはWebページを操作するためのプログラミング言語だ。
Webページの画面制御やデータ取得はJavaScriptで実行していることが多い。
このJavaScriptは<script>というタグの中にプログラム――JavaScriptではスクリプトという――を書くことでで実行可能なのだ。
タグが反映されるということはつまり、『ユーザーがWebページに任意のスクリプトを埋め込んで実行させることができる』可能性があるということだ。
これもSQLインジェクションと同じで、悪意あるユーザーに目をつけられた時に問題になる。
例えば自動的にページを移動するスクリプトを書いて、本物と区別がつきにくい詐欺サイトにユーザーを送ったりできる。
他にも個人データを抜いて人に送るようなことだってありうる。
これは『XSS(クロスサイトスクリプティング)』という攻撃手法だ。

「…………」
タグ実行は許容してスクリプト実行だけは塞いでる可能性……。
……。
たぶんそんな面倒なことはしないな。

<script>alert("こんにちは");</script>

簡単なスクリプトを書いた。
もし実行されたら「こんにちは」というポップアップが画面に表示されるスクリプトだ。
で、これを……。

送信。

次の瞬間。
「わぁっ!?」
向かいの小毬さんが飛び上がった。
どうした、とみんなの不思議そうな顔が小毬さんに向けられた。

「スマホに……スマホに……」
目をまん丸にした小毬さんがスマホの画面をバッと前に向けた。


「スマホに「こんにちは」って挨拶されました!?」

しおりを挟む
感想 2

あなたにおすすめの小説

友達の母親が俺の目の前で下着姿に…

じゅ〜ん
エッセイ・ノンフィクション
とあるオッサンの青春実話です

ママと中学生の僕

キムラエス
大衆娯楽
「ママと僕」は、中学生編、高校生編、大学生編の3部作で、本編は中学生編になります。ママは子供の時に両親を事故で亡くしており、結婚後に夫を病気で失い、身内として残された僕に精神的に依存をするようになる。幼少期の「僕」はそのママの依存が嬉しく、素敵なママに甘える閉鎖的な生活を当たり前のことと考える。成長し、性に目覚め始めた中学生の「僕」は自分の性もママとの日常の中で処理すべきものと疑わず、ママも戸惑いながらもママに甘える「僕」に満足する。ママも僕もそうした行為が少なからず社会規範に反していることは理解しているが、ママとの甘美な繋がりは解消できずに戸惑いながらも続く「ママと中学生の僕」の営みを描いてみました。

BL団地妻-恥じらい新妻、絶頂淫具の罠-

おととななな
BL
タイトル通りです。 楽しんでいただけたら幸いです。

淫らに、咲き乱れる

あるまん
恋愛
軽蔑してた、筈なのに。

父親が再婚したことで地獄の日々が始まってしまいましたが……ある日その状況は一変しました。

四季
恋愛
父親が再婚したことで地獄の日々が始まってしまいましたが……ある日その状況は一変しました。

イケメン彼氏は年上消防士!鍛え上げられた体は、夜の体力まで別物!?

すずなり。
恋愛
私が働く食堂にやってくる消防士さんたち。 翔馬「俺、チャーハン。」 宏斗「俺もー。」 航平「俺、から揚げつけてー。」 優弥「俺はスープ付き。」 みんなガタイがよく、男前。 ひなた「はーいっ。ちょっと待ってくださいねーっ。」 慌ただしい昼時を過ぎると、私の仕事は終わる。 終わった後、私は行かなきゃいけないところがある。 ひなた「すみませーん、子供のお迎えにきましたー。」 保育園に迎えに行かなきゃいけない子、『太陽』。 私は子供と一緒に・・・暮らしてる。 ーーーーーーーーーーーーーーーー 翔馬「おいおい嘘だろ?」 宏斗「子供・・・いたんだ・・。」 航平「いくつん時の子だよ・・・・。」 優弥「マジか・・・。」 消防署で開かれたお祭りに連れて行った太陽。 太陽の存在を知った一人の消防士さんが・・・私に言った。 「俺は太陽がいてもいい。・・・太陽の『パパ』になる。」 「俺はひなたが好きだ。・・・絶対振り向かせるから覚悟しとけよ?」 ※お話に出てくる内容は、全て想像の世界です。現実世界とは何ら関係ありません。 ※感想やコメントは受け付けることができません。 メンタルが薄氷なもので・・・すみません。 言葉も足りませんが読んでいただけたら幸いです。 楽しんでいただけたら嬉しく思います。

イケメン社長と私が結婚!?初めての『気持ちイイ』を体に教え込まれる!?

すずなり。
恋愛
ある日、彼氏が自分の住んでるアパートを引き払い、勝手に『同棲』を求めてきた。 「お前が働いてるんだから俺は家にいる。」 家事をするわけでもなく、食費をくれるわけでもなく・・・デートもしない。 「私は母親じゃない・・・!」 そう言って家を飛び出した。 夜遅く、何も持たず、靴も履かず・・・一人で泣きながら歩いてるとこを保護してくれた一人の人。 「何があった?送ってく。」 それはいつも仕事場のカフェに来てくれる常連さんだった。 「俺と・・・結婚してほしい。」 「!?」 突然の結婚の申し込み。彼のことは何も知らなかったけど・・・惹かれるのに時間はかからない。 かっこよくて・・優しくて・・・紳士な彼は私を心から愛してくれる。 そんな彼に、私は想いを返したい。 「俺に・・・全てを見せて。」 苦手意識の強かった『営み』。 彼の手によって私の感じ方が変わっていく・・・。 「いあぁぁぁっ・・!!」 「感じやすいんだな・・・。」 ※お話は全て想像の世界のものです。現実世界とはなんら関係ありません。 ※お話の中に出てくる病気、治療法などは想像のものとしてご覧ください。 ※誤字脱字、表現不足は重々承知しております。日々精進してまいりますので温かく見ていただけると嬉しいです。 ※コメントや感想は受け付けることができません。メンタルが薄氷なもので・・すみません。 それではお楽しみください。すずなり。

令和の俺と昭和の私

廣瀬純一
ファンタジー
令和の男子と昭和の女子の体が入れ替わる話

処理中です...