2009/08/19こんにちは、第3バイオリンです。先週は夏休みだったので実家に帰省しておりました。久々に両親や妹、実家で飼っている犬に会い、のんびりしてきました。実家でもエンジニアライフは毎日欠かさずチェックしていましたが、森姫さんのコラムを読んでにゃん太郎さんのコラムにコメントしているうちに、改めて「プログラマがテストエンジニアに転向する」ということについて考えてみたくなりました。誤解のないよう先に伝えておきますが、森姫さんのコラムに対する反論ではありません。テストエンジニアとして働いて1年経ったいま、自分にとってプログラマの経験が何だったのか、振り返ってみたくなったのです。■評価部署への異動=左遷?過去のわたしのコラムを読んだことがある方はすでにご存じだと思いますが、わたしはもともと開発部署で働くプログラマでした。心の調子を崩して開発部署から離れました。心の調子を崩してから開発部署を離れるまでの約4カ月間、わたしは開発部署に所属したまま、当時携わっていたプロジェクトのドキュメント整備や成果物の構成管理といった補佐的な作業をしていました。開発部署に所属しながら開発に携わらないというポジジョンは、当時のわたしにとっては中途半端なものでした。「プログラミングができないわたしの存在価値って何なの?」と真剣に悩みました。それは最初の1カ月くらいで、その後は「わたしには開発よりもむしろ補佐的な役割のほうが向いているのではないか」と思うようになってきました。そんなとき、当時の部長がわたしを呼んでいいました。「来期から評価部署を一新する。今後は開発の上流工程からテストエンジニアがかかわれるようにしたいと思っている。そのためには開発経験があって、開発の事情をある程度わかっている人が必要だ。そこで、第3バイオリンさんに異動してもらいたい」その話を聞いたとき、最初は次のように思いました。「これって見ようによっては左遷だよね。プログラミングができなくなった以上、開発部署にはいられないと思っていたし、仕方ないか」しかし一方で、こんな考えも浮かびました。「でも、わたしって開発の補佐的な業務の方が向いていそうだし、評価の方が合うかもしれない。多少複雑な思いを抱えたまま、わたしは異動の話に合意しました。■元プログラマであることは有利か不利かこうして「元プログラマのテストエンジニア」として、わたしの新たなキャリアがスタートしました。実際にテストエンジニアとして働いてみて、元プログラマであることのメリットとデメリットについて考えてみました。●開発チームに歩み寄ることができるテストをしていると、開発チームに対して仕様書その他のドキュメントの書き方など、要望がいろいろ出てきます。わたしの部署はテスト業務のほかにも、開発業務の効率化を図るための活動をしており、さまざまな改善策を開発部署に提案しています。いった要望/提案はたいていの場合、開発側の作業を増やしたり、これまでのやり方を変えさせたりするものです。それが開発メンバーにとってテストエンジニアが想像する以上の負担になることもあるので、長い目で見れば、開発側のためになることでも簡単には受け入れてもらえないことがあります。いうときに開発の現場を知っていると、開発メンバーにとって何がどれだけ負担になるかがある程度は検討がつきます。「ちゃんとやってよ!」というだけでなく、開発メンバーにとって負担が少ない方法を考えて提案することができます。実際のところどれだけ歩み寄れているのかはわかりませんが、少なくとも歩み寄りたいという意思は伝わっているのではないかと思っています。●ツールのスクリプトの作成・修正が早いテストでは作業の効率化を図るためにツールを使うことがあります。その中には、自分でスクリプトを組んでツールに読み込ませて動かすタイプのものがあります。プログラミング経験がないテストエンジニアの場合、スクリプト作成に手間取ったり、作成したスクリプトがうまく動かないときに何が原因かすぐにわからないことがあったりします。プログラミング経験があるわたしはスクリプトに対する抵抗感がないのですぐに作成方法を覚えられます。ログを取ったりエラーメッセージを解析したりという作業に慣れているので、うまく動かないときもすぐに原因を特定してスクリプトを修正することができます。●開発の事情にほだされるこれは1つ目のメリットの裏返しですね。開発の事情を知っている分、「開発チームもいろいろ大変だし、無理な注文はできないな」と余計な意思が働いて、あまり強くいえないことがあります。いえバグに関しては「このタイミングでバグを見つけたなんていいづらい......」と思っても強くいうようにしています。後で困るのは開発と評価の両方なのですから。●過去の自分の嫌な部分を再認識してしまうプログラマだったころ、わたしはテストを甘くみていました。いうと「誰でもできる仕事」だと思っていました。テストエンジニアから仕様書の内容について意見されても「何でそこまで書かなくちゃいけないわけ?」と内心疎ましく思っていました。テストエンジニアになってから、立場が逆転しました。テストが誰にでもできる仕事でないことはわかりましたが、同時にテストに対して無理解な開発担当者とのバトルが始まりました。これが因果応報というやつでしょうか。普段からテストとテストエンジニアを大切に思っているプログラマであれば、こういうデメリットとは無縁ですよね。■テストを知っていれば開発に役に立つわたしはプログラマとして挫折し、半分は自らの希望でテストエンジニアになりました。開発からテストに異動して「不本意だ!」と思っている人にとっては、わたしの経験はあまり参考にならないかもしれません。開発の経験があることは必ずテストに役立ちます。開発に戻るときにはテストの経験が絶対に生きてくると思います。わたし自身、開発から評価に異動して良かったと思うことはプロジェクトの全体が見えるようになったということです。プロジェクトというものが、自分の工程だけでなくいろいろな人がかかわっていることを実感することができました。一方で、プロジェクトに直接的、間接的に携わるいろいろな人の思惑(俗にいう「大人の事情」を含む)が嫌でも目につくようになりました。これはテクニカルスキルではどうにもならない問題です。いって、立ち向かうのはキツイです。いう問題に向き合いながら、わたしは予備知識のない相手に自分の意見を伝えるためにはどういえばいいか、助けが必要なときには誰に何をいえばいいか学べたと思っています(もちろん、開発の現場でこういうことをきちんと学べる人もいると思います)。わたしは、仮に今すぐ開発に戻ることになれば、少なくとも以前よりは上手く立ち回れると思っています。今のところ戻る意思はありませんが。Comment(12)次の投稿へ前の投稿へ最新の投稿わたしの前に道はない、わたしの後に道はできる。20:30第3バイオリン様、はじめまして。元会社での詳細をお話しするとプログラマ→テストエンジニア→プログラマ→テストエンジニアといったところです。2つの部署を行ったり来たりなんですよね(汗)第3バイオリンさんがコラムにも書かれているとおり、開発よりの評価ができる人って言うのはとても重要なんですよね。メリットもデメリットもよくわかります。たしかに、あとの方で見つけたバグってすごくいいづらいし、ロジックの観点から見れるテストというのはなかなかないので・・・。いうのも体験しているので険悪になるのもわかります。いっても文章だけで対決しているのですが(笑)例:○○なバグがみつかりました。ここでバグるのはありえない!!今度開発に戻れたら。テストのことも考慮した開発VSテストのようにならないようなプログラマになりたいです。テストエンジニアとしての貴重な体験をしようと思います。いい勉強になると思います。貴重なお言葉のコラムありがとうございました。21:58森姫さんはじめまして。あずKさんよりご紹介賜りました(笑)第3バイオリンです。コメントありがとうございます。>元会社での詳細をお話しすると>プログラマ→テストエンジニア→プログラマ→テストエンジニア>といったところです。2つの部署を行ったり来たりなんですよね(汗)またそれは大変ですね。私よりも大変かも・・・わー、なんか偉そうなこと言っちゃったかも(大汗)>第3バイオリンさんがコラムにも書かれているとおり、開発よりの評価ができる人>って言うのはとても重要なんですよね。開発に言われたことをするだけでなく、開発チームにテストのやり方を提言したり、そもそもバグのないプログラムを作るために助言したりするには、ある程度開発のことを知っていないと難しいと思います。開発経験のある人のほうが、問題の背景や、解決策にまで踏み込みやすいです。いうのも体験しているので険悪になるのもわかります。険悪になってしまうんですよね。なんでだろう?>今度開発に戻れたら。テストのことも考慮した>開発VSテスト>のようにならないようなプログラマになりたいです。森姫さんのように考えてくださる人が増えれば、開発とテストの関係ももっと良くなると思います。今は思い通りにいかないことも多いと思いますが、エンジニアとして伸び盛りの時期に経験したことは絶対あとで身を助けてくれます。お互い頑張っていきましょう。23:25ビガーと申します。森姫さんのコラムにもテストについて思うところを書いたのですが、少々失礼します。エンジニアのスキルアップとしてのテストにおける最大のメリットは、リーディングしていける人材に近づいていけることだと思います。リーディングするには実装やテスト以外にもさまざまなスキルが必要(森姫さんのコラムにコメントしました)です。リーディングできる人材は、市場価値が高く、このご時世でも自分の望んだ仕事を獲得できるチャンスを呼び込めます。いった意味でもテストエンジニアをすることによる価値は、やり方次第の部分もありますが、高いと思いますね。23:42自分の名前が書かれていたので思わず投稿しました(笑)自分は残念ながらテストエンジニアの経験はありませんが、プログラマ→運用(業務が主体の)エンジニアへ転進した身として興味深く読ませて頂きました。運用業務上でもちょっとしたマクロを組むと便利なことがあるので、スクリプトの件は共感できました。開発の部署と仕事上でのやり取りがあまり無いのが残念なところです。運用者の視点から、こうすべきだと開発者に指摘してプロジェクトを進めたい(参加したい)という気持ちはあります。対立はしてしまうのかもしれませんが...。開発者には運用面からの視点って、あまり無いと思うので。#自分もプログラミング一辺倒のときは、運用の視点は無かったですから...。開発ばかりではなくて、テストや運用や他のことなど色々と経験した方がいいですよね。それぞれの立場(目線)でシステムを見られれば、その分、いいシステムが作れると思うので。07:20おはようございます第3バイオリンさん。プログラマとテストエンジニアは両方体験しておくべき事だと思います。テストをした事がないプログラマが書いたプログラムは、往々にしてバグが入り込む余地が多いです(攻撃的プログラミングとかを知らない)また、プログラマの経験が無いテストエンジニアはより深いテストが出来ず最後の砦になっていません。その点両方を経験していれば、バッファオーバーフローを検出したりも出来るかもしれません。不景気の時はエンドユーザーの目も冷え込みますので、今後より一層バグとセキュリティに厳しい目が向けられると思います。その中で必要とされているのは、両方を経験した人や両方の能力を持つ人だと私は考えております。08:18第3バイオリンさん、おはようございます。前回はコラムにコメントありがとうございました。私はシステム開発においてテスト工程は製造工程と切り離すべきだと思っていますし、コラムにもそのような事を書きました。コメント中に例えで書いたプロ野球のピッチャーと同じで今は先発完投ではなく分業が理想だと思います。SEとプログラマは再編してひとつにした方が良いとは考えていますが。人のようにめちゃくちゃやってみる事も必要です。世間で思われているイメージよりは高度なポジションだと思います。プログラマはその立ち位置からPMやSEなどからプログラムの品質が悪いと注意を受けます。身のやり場がなくなって「開発vsテスト」になってしまいがちです。本来はこういうのは会社としてきちんと教育していくべき事でしょうが、理屈で言っても・・・ですから第3バイオリンさんのようなプログラマ経験者がテストチームには不可欠になります。今は小さなシステムでも内容はかなり複雑になっています。社会情勢も相まってエンジニア自体がこれまでと同じ考えで作業をするには厳しい時代になってきました。テストエンジニアは品質保証の要となるため、作業自体は製造工程と別でもコミュニケーションは密にしてお互いが良いシステムをつくりあげるために協業して行けるようにするためにも第3バイオリンさんには頑張って欲しいと思います。00:59ビガーさんコメントありがとうございます。>エンジニアのスキルアップとしてのテストにおける最大のメリットは、>リーディングしていける人材に近づいていけることだと思います。社内外の関係者との調整力など、エンジニアとしての総合力が求められます。私自身もテストリーダーをしているので、この総合力がリーダーには必要不可欠であることがわかります。総合力を付けていきたいです。01:01あずKさん>自分の名前が書かれていたので思わず投稿しました(笑)ありがとうございます。(森姫さんのコラムのコメントを読んでない人には、何のことかわからないでしょうね)>運用業務上でもちょっとしたマクロを組むと便利なことがあるので、>スクリプトの件は共感できました。評価に移ったときは「もうプログラミングをすることはないだろう」と思っていましたが、それに近いことは意外とやりますよね。スクリプト以外にも、昔開発で関わっていたモジュールと機能が良く似たリリース物の評価を依頼されたりすると、「こんなところであの時身につけた知識が役に立つとは」と思うこともあります。>「大人の事情が見える」点も、そうですね・・・(苦笑)開発チームとその上長、自分の部署の上長、顧客etc...本当にいろいろな立場の人と関わりますからね。ここまでいろいろな人と関わるポジションはあまりないですよね。>運用者の視点から、こうすべきだと開発者に指摘して>プロジェクトを進めたい(参加したい)という気持ちはあります。今後はそういう活動が必要になると思います。表立って動いている企業は多くないでしょうし、動いているところもすぐには結果が出せないと思いますが、開発から言われたことだけ淡々とやる、というテストや運用ではもう通用しないと思います。>そう考えると、エンジニアって、>開発ばかりではなくて、テストや運用や他のことなど色々と経験した方がいいですよね。>それぞれの立場(目線)でシステムを見られれば、その分、>いいシステムが作れると思うので。私の会社では、新人研修のときにテスト演習というのをやっているみたいです。それも2~3年前からで、私のときにはありませんでした。新人さんたちからは「テストの大切さがわかった」「設計・実装の段階からテストを意識したい」という感想があるそうです。配属後もその気持ちを忘れないでほしいです。01:03インドリさんコメントありがとうございます。>テストをした事がないプログラマが書いたプログラムは、往々にしてバグが入り込む余地が多いです>(攻撃的プログラミングとかを知らない)あずKさんへのコメントにも書きましたが、私の会社で開発希望の新人さんにテスト演習をさせると「設計・実装でバグを減らし、テストしやすい仕様書やソースコードを作るように注意したい」という感想がほとんどです(配属後もそれを忘れないでほしいところです)。それまでは、テストのことなんて頭になくてただ「動けばいい」という気持ちでプログラムを作成していたといえます。これはちょっと怖いなと思いました。(かくいう私はその「怖い状態」で配属されてしまったのですが)>また、プログラマの経験が無いテストエンジニアはより深いテストが出来ず最後の砦になっていません。私は「ソースコードの内容を知らなくても事前に境界値がわかればそこを狙える。それがグレーボックス」と回答しました。プログラマの経験があれば仕様書から境界値など、バグが出そうなポイントが何となくわかります。仕様書の行間を読む力でしょうか。>不景気の時はエンドユーザーの目も冷え込みますので、今後より一層バグとセキュリティに厳しい目が向けられると思います。私も品質に関しては今後ますますユーザーの目が厳しくなっていくと思っています。バグが出ないのが当たり前の世界ですからね。01:05にゃん太郎さんこちらこそ、コメントありがとうございます。>テストエンジニアが難しいと感じるのは「素人」の目と「玄人」の目の両方が>必要なところです。書いてないことをどうテストするかが難しいところです。「書いてないこと」なので「何も知らないユーザーだったらどう使うか」を想像しなくてはなりません。その一方でテスト対象物の仕様はきちんと把握していないといけない・・・なんだか矛盾していますが両方できないといけません。本当に難しい!>プログラマはその立ち位置からPMやSEなどからプログラムの品質が悪いと注意を>受けます。その上、テストエンジニアからバグを発見され報告されるともう自分自>身のやり場がなくなって「開発vsテスト」になってしまいがちです。これは私も経験者なのでよくわかります(汗)。「頼むからそんなに責めないでくれよ」と、追い詰められたような気分になってしまいます。最近は私の会社でも新人研修でテストの演習をしています。新人たちがテストの重要性と、決して開発者を責めるためのものではないことをわかってほしいと思います。>今は小さなシステムでも内容はかなり複雑になっています。社会情勢も相まって>エンジニア自体がこれまでと同じ考えで作業をするには厳しい時代になってきました。インドリさんへのコメントにも書きましたが、品質に対するユーザーの意識はどんどん高まっていると思います。今後ますますテストエンジニアの役割は大きくなっていくと思っています。明日のために、今できることを積み重ねていきたいです。10:05はじめまして、とものぶと申します。自分は携帯電話のテストを担当していますプログラマとしての経験はありませんが、テストチームで使うスクリプトやCGIなどを大量にプログラムしているお陰で、プログラマの皆さんの苦労をちょっとばかり味わっています。開発VSテストの構図が生まれないようにするには、管理職も含めて関係者全員の意識改革が必要だと考えています。「所詮、人間が作るものに完璧なモノはない」ので、バグが発生するのは避けようがないです。(無いほうがいいのは当然なので、減らす努力は当然必要ですよ)なので、バグが混入したことをマイナス評価にしないで、逆にキチンと直したことをプラス評価にしてあげると、開発者も頑張ってバグを直してくれるんじゃないかと思っています。バグ件数が多い場合は、別の理由があるのでそれとは切り離して評価して欲しいですね。(設計ミスとか、プログラマのスキル不足とか、根本的なところのバグで結局同一問題だったとか)また、テスト側も開発者を馬鹿にしたりしないで、「見つけちゃってすみません。今日も徹夜ですね(-人-)ごめんよおぉ」くらいの気持ちでいてあげるとバランスが良いのでは。テストの経験があるとプログラムしている時にいろいろと注意するようになるので、プログラマの皆さんにも経験してもらいたいですね。第3バイオリンさんも、いいテストエンジニアを目指してがんばってください。11:06とものぶさんはじめまして、コメントありがとうございます。>開発VSテストの構図が生まれないようにするには、管理職も含めて関係者全員の>意識改革が必要だと考えています。バグを出すこと自体は悪いことではありません。肝心なのは見つかったバグをどう修正するか、次回以降で似たようなバグを出さないようにするにはどうすればいいかです。開発者を責めるためにバグを見つけているわけではなく、良いものを作り出すためにやっているということを開発とテストの両方が意識することが大切だと思います。>やはり、テストの経験があるとプログラムしている時にいろいろと注意するようになるので、>プログラマの皆さんにも経験してもらいたいですね。私も、一度はテストの作業がどういうものか(仕様書からチェックリストを起こしてテストするまで)経験してほしいと思っています。(私の会社は研修でテストをやっていますが、そういうところはまだ少ないかも・・・)>第3バイオリンさんも、いいテストエンジニアを目指してがんばってください。ありがとうございます。今は道半ばですが、必ず開発もテストも幸せにできるようなテストエンジニアになりたいです。名前を記憶しておくコメント:第3バイオリン開発と評価それぞれの立場を経験した元テストエンジニア。今は主婦として家事と育児の真っ最中です。【書評】エンジニアになりたい女の子にオススメの絵本3選わたしの前に道はない、わたしの後に道はできる。