表示調整
閉じる
挿絵表示切替ボタン
▼配色
▼行間
▼文字サイズ
▼メニューバー
×閉じる

ブックマークに追加しました

設定
0/400
設定を保存しました
エラーが発生しました
※文字以内
ブックマークを解除しました。

エラーが発生しました。

エラーの原因がわからない場合はヘルプセンターをご確認ください。

ブックマーク機能を使うにはログインしてください。
新卒エンジニア、観察ノートを開く(上巻) 観察を、始める  作者: 音無 凪


この作品ページにはなろうチアーズプログラム参加に伴う広告が設置されています。詳細はこちら

PR
21/37

第20話「書く人と、読む人」

この物語はフィクションであり、登場する人物、団体、地名、企業名等はすべて架空のものです。実在のいかなる存在とも関係ありません。

 七月の中旬、火曜日のお昼休み。


 みなと信用金庫様の障害から、まだ十二日しか経っていなかった。


 三十分で復旧した、あの障害のこと。僕はまだ、それを引きずっていた。


 タイムゾーンの識別子が、想定していない形で来た。僕のコードは、その形を知らなかった。だから落ちた。


 白瀬さんは言ってくれた。次は最初から呼んで、と。諏訪さんも言ってくれた。障害は組織で起きて、組織で対応する、と。


 それでも、ひとつだけ、答えの出ない問いが、僕の中に残っていた。


 ……どうすれば、本番に出る前に、あの想定漏れに気づけたのだろう。


 心の中で、僕はその問いを、何度も転がしていた。コードの書き方の問題ではない気がした。もっと手前の、見方の問題のような気がした。でも、その見方が、僕にはまだ無かった。


 社員食堂の、いつもの六人席。


 今日はアユシュさんが組込みチームの人と先に食べると、社内Slackに書いていた。葉山さんと丸山くんはチームBの打ち合わせ。黒木は外。残ったのは、僕と杉本さんの二人だけだった。


 杉本さんは、和定食のトレーの横に、一冊の本を開いていた。


 表紙に、中心から枝が伸びていく図。その上に、『マインドマップからはじめるソフトウェアテスト』と題があった。本の隣には、ホチキスで留めた、分厚い印刷物の束。表紙に、Foundation Level シラバス、と読めた。


 ……マインドマップ。テスト。


 表紙の言葉を、なんとなく目で追った。


 杉本さんは食べながら、時々その本に目を落として、欄外に小さく何か書き込んでいた。古い御朱印帳に字を入れるような、丁寧な手つきだった。


「杉本さん、それ、何の本ですか」


 僕は聞いた。


 杉本さんは顔を上げて、少しだけ目尻を下げた。


「テストの本です。会社の先輩に、読みなさいって」


「テスト」


「ソフトウェアのテスト。私、QAなので」


 ……QA。


 配属の日から、杉本さんがパッケージ事業の、サポートとQAのチームにいることは知っていた。でも、QAが何をする仕事なのか、僕はちゃんと知らなかった。


「QAって、何をする仕事なのですか」


 聞いてから、自分でも素直すぎる質問だと思った。けれど杉本さんは、嫌な顔をしなかった。むしろ、聞かれて少し嬉しそうに、言葉を選んだ。


「書く人と、読む人がいて。私は読む人です」


「読む人」


「桐谷くんは、書く人。開発ドキュメントやコードを書く。私は書かれたものを読んで、どこが壊れるかを探す」


 その言い方で、ひとつ、思い出したことがあった。


 研修の、最後の週。壊れたプログラムを渡されて、欠陥を見つける、という演習があった。いちばん早く見つけたのが、杉本さんだった。文系で、IT未経験で、と本人は控えめに言っていたのに、誰よりも早く、おかしな場所を指さした。


 それから、もうひとつ。少し前に、葉山さんが言っていた。


 杉本さん、たぶん向いてるんだよね、今の仕事。研修の最後の週、欠陥を見つけるの、一番早かったし。本人がそれに気づくのは、もう少し先かもしれないけど。


 ……葉山さんは、こういうことを、見ていたのかもしれない。


「この前、桐谷くんのチームで障害がありましたよね。全社に通知が出ていて」


 杉本さんが、こちらを見た。


「あれ、どんな障害だったのですか」


 その問いが、僕の中の、答えの出ない問いと、ちょうど重なった。


「いまから話すと、お昼が終わってしまいますね」


 杉本さんは、壁の時計を見て、少し考えた。


「仕事のあと、お時間ありますか」


「はい。空いてます」


「では、駅の少し先のカフェで。Bagel & Coffee、ご存じですか」


 その店の名前を、僕は知っていた。


 前に一度、アユシュさんと行った。静かな、音の柔らかい店だった。あのとき、アユシュさんは自分の中の、言葉になりにくいものを、ゆっくり言葉にしていた。別れぎわに、いつかネパール料理の店に連れていく、と約束してくれた。


「……知ってます」


「では、そこで」


 杉本さんは小さく頷いて、また和定食の続きを、丁寧に食べ始めた。


 


 退社のあと、駅の少し先のカフェに行った。


 木の床、白い壁、レコードの音。前に来たときと、同じだった。


 杉本さんは僕より先に来ていて、窓側の席で、昼に見た本と、ホチキス留めの束を、両方広げていた。本の表紙は『マインドマップからはじめるソフトウェアテスト』。束の表紙には、テスト技術者資格制度、Foundation Level シラバス、と印刷してあった。


 僕はアイスコーヒーを頼んで、向かいに座った。


 障害のことを、最初から話した。といっても、僕自身、ぜんぶをきちんと分かっているわけではなかった。タイムゾーンの識別子が、想定していた形と違う形で来たこと。Asia/Tokyo、という正しい形しか、僕のコードは知らなかったこと。Asia/Tokyo_variant、という、ほんの少しだけ違う形が来た瞬間に、落ちたこと。


 そこまで話して、僕は、自分の説明の足りなさに気づいた。


「すみません。うまく、説明できなくて」


「いえ。じゅうぶん、伝わりました」


 杉本さんは、最後まで黙って聞いてくれていた。聞きながら、紙ナプキンに、枝のような図を描いていた。


「それは、テスト設計の話ですね」


「テスト設計」


 知らない言葉だった。


「テスト設計、というのは」


「何を、どう試すかを決めることです。入力をどう分けて、どの値を選ぶか。あ、でも、私もまだ勉強中で。教わったばかりなので、間違っていたら、ごめんなさい。覚えたところまで、お話ししますね」


「はい。聞きたいです」


 杉本さんは、ペンを持ち直した。教えることに、慣れているわけではなさそうだった。でも、ひとつずつ、僕の歩幅に合わせてくれた。


「まず、同値分割法」


 杉本さんは、紙ナプキンに、四角をいくつか描いた。


「たとえば、入力できる値がたくさんあるとします。一個ずつぜんぶ試すのは、無理ですよね」


「はい。無限にありそうです」


「なので、同じように扱える値をひとかたまりにします。このかたまりを、同値パーティション、っていいます」


 同値パーティション、と言うとき、杉本さんの声が、ほんの少しだけ、弾んだ。


 ……名前を、口にするのが、好きな人だ。


 その横顔で、僕は、五月の夜を思い出した。六人で初めて飲みに行った夜。お会計の十円の余りを、次の幹事が預かる、という決まりができた。それを「制度」と名づけたのが、杉本さんだった。あのときも、名前をつける瞬間に、少しだけ、嬉しそうだった。


 杉本さんは、四角のひとつに、正しい識別子、と書いた。隣に、未知だけど来うる識別子。その隣に、空っぽ。いちばん端に、でたらめな文字列。


「受け取れる値が、有効なパーティション。はじく値が、無効なパーティション。Asia/Tokyo は有効です。Asia/Tokyo_variant は、ほんとうは未知だけれど来うる、もうひとつの有効でした。桐谷くんのコードは、最初の有効パーティションしか見ていなかったのかもしれません」


「……ひとつの、有効しか」


「ええ。でも、有効はひとつとは限らなくて」


 杉本さんは、四角と四角の境目に、線を引いた。


「次が、境界値分析。かたまりの真ん中ではなくて、端っこを試します。境目でいちばんよく壊れるので」


「境目」


「正しいと、正しくないの、ちょうど境。Asia/Tokyo のすぐ隣。そこがいちばん試しておきたい場所でした」


 ……いちばん、試しておきたい場所。


 僕は、正しい形のことばかり、考えていた。正しい形の、すぐ隣に、落とし穴があるとは、思っていなかった。


「でも、ぜんぶの形を試すのは無理ですよね。識別子なんて、いくらでも作れて」


 僕が言うと、杉本さんは頷いた。


「ええ。それも、原則のひとつです」


 杉本さんは、Foundation Level シラバスのページを、繰った。


「テストには、七つの原則があって。そのひとつが、全数テストは不可能、というあきらめです。ぜんぶは試せない。だから、さっきの同値パーティションに分けて賢く絞ります。少ない回数で、いちばん壊れそうなところを突く」


「あきらめ、が原則なのですか」


「ええ。できないことを認めるところから、設計が始まります」


 杉本さんは、シラバスのページに指を置いたまま、少し笑った。


「もうひとつ、私の好きな原則があって。テストの弱化、っていいます」


「弱化」


「同じテストを何度も繰り返すと。だんだん、新しい欠陥が捕れなくなります。古い本では、殺虫剤のパラドックス、と呼んでいて。同じ殺虫剤を撒き続けると、虫が慣れて効かなくなる。それと同じです」


 殺虫剤のパラドックス、と言うときの杉本さんは、やっぱり、少し楽しそうだった。古い言葉を、慈しむみたいに。


「だから、観点を変え続けないといけません」


「観点、というのは」


「何を試すか、の切り口です。そこで、これを」


 杉本さんは、最初に描いた、枝の図を指した。


「マインドマップで観点を広げます。中心から枝を伸ばして。機能。データ。状態。それから、環境とタイミング」


 杉本さんは、環境、と書いた枝の先を、ペンで丸く囲った。


「桐谷くんの障害は、ここでした。サーバーのタイムゾーン設定が夜のうちに変わった。これは環境の観点です。コードそのものではなくて、コードが動く、まわりの世界」


「……環境の枝が、抜けてた」


「たぶん、機能の枝はちゃんと試していたと思います。でも、環境が変わる、という枝が図に無かった。観点が無いと、テストケースも生まれません」


 観点が無いと、テストケースも、生まれない。


 その一言が、静かに刺さった。


「私、こういうのが好きで」


 杉本さんは、枝の図を、少し愛おしそうに見た。


「大学で、史学科でした。写本を読んでて。あ」


 杉本さんは、口元に手を当てて、言い直した。


「写本を読んでいました。同じ物語の、書き写した本が何種類もあって。どこが、どう違うか。系統を枝でたどります。系統樹、っていう読み方で」


「写本の、系統樹」


「違いを枝で広げて、見落としを消していく。テストの観点図と、よく似ています。学生のとき、テストなんてひとつも習わなかったのに。やっていること、たぶん同じでした」


「桐谷くんのチームの、白瀬さん」


 杉本さんが、別の枝を描いた。


「障害のあと、修正版を出すとき。新しいパターンも前のパターンも、ぜんぶテストに足した、と言っていましたよね」


「……はい。言ってました」


「直したあと、前に動いていたものが壊れていないか、もう一度ぜんぶ試す。あれにも名前があります。リグレッションテスト」


「名前が、あったのですか」


「ええ。直して、別のところを壊す、というのがいちばん多い事故なので。それと、直した本人が、その修正がほんとうに効いたか確かめるのは、確認テスト。白瀬さんは両方、自然にやっていました」


「それと、白瀬さんのレビュー」


「二十二件、指摘をくれた先輩です」


「あのレビューも、テストです」


「レビューが、テスト」


「コードを動かさずに読んで、欠陥を見つける。静的テスト、っていいます。動かして試すのが、動的テスト。白瀬さんは、動かす前の段階でもう読んでいます。いちばん早い場所で、欠陥を捕まえている」


 LGTM、という四文字を、僕は思い出した。あの四文字の重さも、二十二件の指摘も、ぜんぶ、静的テスト、という名前の下にあった。名前を知ると、前に見た景色が、少しだけ、形を変えて見えた。


 杉本さんは、シラバスの別のページを開いた。


「早く、小さく試すほど、直すのが安いです。本番で落ちると、いちばん高い。だから、できるだけ上流で見つける。早期テスト、っていう原則です」


 ……早く、小さく、試すほど、安い。


 あの障害は、いちばん高い場所で、落ちた。本番で。顧客の業務時間に。


「テストには、段もあって」


 杉本さんは、紙ナプキンに、横線を四本引いて、五つの段を作った。


「部品ひとつを試す、コンポーネントテスト。部品をつないで試す、コンポーネント統合テスト。ぜんぶつないで試す、システムテスト。外のシステムとつないで試す、システム統合テスト。お客さんが受け取る前に試す、受け入れテスト。下の段で捕れた欠陥は、下の段で捕るのがいちばん安いです」


「僕の障害は、いちばん下の段で捕れたはずだった」


「ええ。識別子の判定っていう、小さな部品の段で。境界値をひとつ足すだけで」


 杉本さんは、それを、責める口調では言わなかった。ただ、こうすれば捕れた、という地図を、静かに描いてくれていた。


「テストは」


 杉本さんは、紙ナプキンの枝を、まとめて手で囲った。


「作ったあとの確認だと思われがちで。でも、ほんとうは作る前の仕事です。どう壊れるかを先に読む。読んでから、作る」


 作る前に、どう壊れるかを、読む。


 その一行が、僕の中の、答えの出なかった問いに、ようやく、底のほうで触れた。見方が無かったのだ。コードの書き方ではなくて、その手前の、見方が。


「杉本さん、すごいですね。ぜんぶすっと出てきて」


「いえ。受け売りです」


 杉本さんは、少し、首を横に振った。


「五月に、シラバスを渡されて。まだ二ヶ月です。言葉を覚えただけで。ほんとうの現場でぱっと観点を出すのは、まだぜんぜんで。教科書だと、きれいに分けられます。でも、ほんとうのコードは、もっと入り組んでいて」


「……でも、僕の障害は、読めてました」


「終わった障害は、答えを知ってから読むので読みやすくて。起きている最中に、その場で気づけるかは、また別です。私も、たぶん見落とします」


「……」


「それに、技法もまだ入口だけで。今日お話しできたのは、同値分割と、境界値と、そのあたりだけ。シラバスには、デシジョンテーブルとか、状態遷移とか、まだ知らないことがたくさんあって。もっと勉強しないと、です」


 その正直さが、かえって、信用できる気がした。杉本さんは、知っている言葉を、自分の実力みたいには、言わなかった。教わったばかりのものを、教わったばかりだと、言える人だった。たった二ヶ月で、僕と、そんなに変わらない。ただ、渡された地図を、人より丁寧に、読んでいるだけだった。


「その、真鍋さんって」


「QAチームの主任です。二十年、テストの人。私の指導役です」


 杉本さんは、薄い本の表紙を、指でそっとなでた。


「JSTQB、っていうテストの資格があって。そのいちばん下の、Foundation Level、っていう級を、一年目か二年目で取りなさいって。この Foundation Level シラバスが、試験の範囲です。テスト設計の技法とか、さっきの七つの原則とか、テストの段とか、静的テストとか。ぜんぶ、ここに載っています」


「資格の、勉強」


「ええ。でも、真鍋さんはこう言っていて。資格は、通り道。観点が、財産。紙の合格より、壊れ方を読む目が残るって」


 杉本さんは、少し笑った。


「もう一冊、渡されそうで」


 杉本さんは、鞄に軽く触れた。


「いちばん古い教科書。『ソフトウェアテストの技法』っていう、四十年以上前の本。マイヤーズ、っていう人の。夏休みに、お盆に腰を据えて読みなさいって。テストの考え方のおおもとが、そこにあるって」


「四十年以上前」


「私が生まれるずっと前です。でも、古い文書は好きなので。たぶん、私に合っています」


 杉本さんは、ほんとうに、嬉しそうだった。


「あと、一年目の終わりに、東京でテストの大きな集まりがあって。JaSST、っていいます。それも行ってきなさいって。外にテストの人がたくさんいるから、会ってきなさいって」


 外を見てきなさい、という言い方は、どこかで聞いた気がした。間宮さんも、たしか、似たことを言う。


 話しながら、杉本さんの目は、少しずつ、明るくなっていた。


 最初に会ったころの杉本さんは、文系で、未経験で、と、自分を小さく言う人だった。でも、いまの杉本さんは、テストの言葉を、ひとつずつ、楽しそうに並べている。古い言葉に、新しい名前に、ちゃんと触っている。


 葉山さんが、前に言っていた。本人がそれに気づくのは、もう少し先かもしれない、と。


 ……たぶん、いま、なのかもしれない。


 杉本さんは、自分が「読む人」であることに、気づきはじめている。


「杉本さん、QAの仕事、好きですか」


 聞いてみた。


 杉本さんは、少し黙ってから、答えた。


「最初は、地味かな、と思っていました。書く人が主役で。読む人は後ろにいる、みたいな。バグを見つけても、ありがとう、ではなくて、嫌な顔をされる日もあって」


「……」


「でも、真鍋さんが言ってくれて。QAは、書く人が見ない景色を見る人だって。書く人は、動くことを願って書く。読む人は、壊れることを思って読む。両方ないと、品質は立たないって」


 書く人が見ない景色を見る人。


 その言葉を、僕は、ノートに書きたくなった。けれど、いまは手元にノートがなかったので、頭の中に、そっと置いた。


「杉本さん」


「はい」


「障害のあと、諏訪さんが川島部長に言ってくれて。当社側のコードの問題でもあります、って。僕一人の責任にしないで、組織で引き受けるって」

「あれ、すごいと思って。マネジメントって、こういうことかって」


 杉本さんは、頷いた。


「それは、品質を守る文化の話ですね」


「文化」


「テストは、技術です。技法も原則も、覚えれば身につきます。でも、品質は、文化です。一人が頑張っても、守れない。組織で守る。桐谷くんのチーム、それがあります」


 ……品質は、文化。


 いつか、遠野CTOが、勉強会で言っていた。エンジニアとは何か。半径三メートルの人を、半段だけ、楽にする人。あのとき僕は、技術の話だと思って聞いていた。でも、いま杉本さんの言う、品質は文化、という言葉は、たぶん、あの半径三メートルと、同じ場所から来ている。


 白瀬さんが、三年分の障害の振り返りを、書き続けていたこと。江口さんのチームの障害報告が、二行だったこと。あの温度の差は、技法の差ではなくて、文化の差だった。


 窓の外、夕方の街が、ゆっくり夜に変わっていった。レコードが、別の曲に変わった。たぶん、ジャズのピアノだった。


「桐谷くんは、書く人」


 杉本さんが、言った。


「私は、読む人。いつか」


 杉本さんは、薄い本の表紙を、もう一度なでた。


「読むだけじゃなくて。何を作るか、決める側にも行ってみたいです。お客さんの声を読んで。次に何を作るかを決める。まだ、遠いですけど」


「……いいですね、それ」


 僕は、本気でそう思った。


 読む人が、作るものを決める。その順番には、たぶん、いまの杉本さんの仕事が、ぜんぶ効いてくる。壊れ方を読む目で、人の声も読むのだ。


「桐谷くんは、どうですか」


「僕は」


 少し考えた。


「この前の障害で、僕は聞くばかりでした。白瀬さんに、諏訪さんに守ってもらった。次は、聞くだけじゃなくて。作る前に、壊れ方を自分でも読めるようになりたい」


 杉本さんは、目尻を下げて笑った。


「それ、QAの入り口です。書く人が読む目を持つと、強いですよ。いちばん壊れないものを作るのは、たぶんその人なので」


 


 店を出たのは、八時頃だった。


 駅の方に、二人で歩いた。


 別れぎわ、杉本さんが言った。


「桐谷くん。あのお店、前にどなたかと来ましたか」


「……アユシュさんと」


「そうですか」


 杉本さんは、それ以上は聞かなかった。


 寮に戻る道で、僕は、アユシュさんのことを、少しだけ思った。


 あの同じ店で、アユシュさんは、自分の中の、言葉になりにくいものを、ゆっくり言葉にしていた。今日は、杉本さんが、自分の仕事の芯を、たくさんの名前で、僕に渡してくれた。


 二人とも、僕に話してくれた。観察していると、人は、思っていたより、たくさんのことを、話してくれる。


 


 寮に戻った。


 部屋に上がって、ノートを机に置いた。


 今日のページに、こう書いた。


 杉本さんと、初めてちゃんと話した。


 杉本さんは、QA。読む人。


 テストは、作ったあとの確認じゃない。作る前に、どう壊れるかを読む仕事。


 書きながら、ペンを止めた。


 今日、初めて知った言葉を、忘れないように、並べて書いた。


 同値分割法。入力を、同じ扱いのかたまり、同値パーティションに分ける。


 境界値分析。かたまりの端を、試す。正しい形の、すぐ隣を。


 全数テストは、不可能。だから、賢く絞る。


 テストの弱化。同じテストは、だんだん欠陥を捕らなくなる。観点を、変え続ける。昔の名前は、殺虫剤のパラドックス。


 早期テスト。早く、小さく、試すほど、安い。本番で落ちると、いちばん高い。


 静的テスト。白瀬さんのレビューも、テストだった。動かす前に、読む。


 書いてから、自分の字を、しばらく見ていた。


 名前を知ると、前に見た景色が、少しだけ、形を変えて見えた。


 最後に、こう書いた。


 テストは、技術。品質は、文化。


 杉本さんは、書く人が見ない景色を見る人。


 葉山さんは、もう気づいていた。杉本さんが、それに向いていることに。


 僕は、書く人だ。これからも、開発ドキュメントを書いて、コードを書く。


 でも、書く人のままで、読む目も、少しだけ持ちたい。


 壊れ方を、先に読む目を。正しい形の、すぐ隣を、見にいく目を。


 ノートを閉じた。


 窓の外、七月の夜風が、開けた窓から、すっと入ってきた。


 梅雨は、もう明けていた。空気の中に、夏の重さと、夏の軽さが、両方、混じっていた。


 明日、杉本さんは、また二十年前のコードを、写本のように読む。僕は、また自分のコードを書く。


 書く人と、読む人。


 明日からは、僕も、ほんの少しだけ、読む人の目を、借りられる気がした。


 そう思った。


評価をするにはログインしてください。
ブックマークに追加
ブックマーク機能を使うにはログインしてください。
+注意+

特に記載なき場合、掲載されている作品はすべてフィクションであり実在の人物・団体等とは一切関係ありません。
特に記載なき場合、掲載されている作品の著作権は作者にあります(一部作品除く)。
作者以外の方による作品の引用を超える無断転載は禁止しており、行った場合、著作権法の違反となります。

↑ページトップへ