
はてなキーワード:テストケースとは
----
「My Job Went ToIndia」の改題改訂版が「情熱プログラマー」なんだ!ありがとう発注したわ。(たぶん達人プログラマーと混同して読んだ気になって読んでないパターンだわ)
俺の悪文のせいで意図が伝わらなかったであろうブコメがあったので、要旨だけ書き直しておくな。
ただ忘れないで欲しいんだけど、TerraformメンテしてAWSとかGCPで立ち上げてサービス公開するまでの速度は、相見積取って稟議通して部材調達から入ってた時代に比べると爆速だけど、人間の技術屋の需要は増えてる。
俺は、「マスタリングTCP/IP 入門編」を人間が読んで理解するのは古いよね、という時代にはならないと思ってる。
Slerが自前で手元で試すようになるから~ってのも懐疑的。SIerやメーカーが内製すると必ず子会社作って分離、ぼく発注者きみ受注者にしたがるので。これは技術じゃなくて感情とか経営の問題。
(ただし、Slerが7payみたいなことやらかすのでは?って疑問なら同意。たぶんそういう生成AIで俺たちでプロダクトなんか簡単に作れるじゃんよギークいらね(仕様バグあり)は一時は増えるだろうね)
追記ここまで
----
VibeCodingでIT技術者は不要になるのか?という話題が花盛りなのは理由があります。
ギーク(現場でコードを書いていたい人)が分かる話から、スーツ(人を集めたりお金を集めたり営業をする)が分かる話になってきたからです。
具体的に言うと、OpenAI社をはじめ続々とTDD(テスト駆動開発)でやってますみたいな、具体的な開発スタイルの話が出てきたから。
そうすると、現場の座組チョットワカルという強めの経営者が理解して判断し始めるんですね。
でもね、その道はもう15年も昔に我々は通り過ぎました。前回のブームと何が違うでしょうか?
技術者なら電子も機械も強電も弱電もお世話になったことのあるオーム社が過去に出していた直球の本の話から。
「My job went toIndia :オフショア時代のソフトウェア開発者サバイバルガイド」という書籍、何と発行年は2006年です。
かいつまんで話すと、インターネットが整備され、輸送コストがほとんどかからないソフトウェア開発では、アメリカのエンジニアは給与の面でオフショアに歯が立たない、だって、1/10の給与でインドのエンジニアは働くんだぜ?という本です。
そうした、価格競争力で負けるアメリカのソフトウェアエンジニアは、如何にして今後サバイブすべきなのか、という本になっています。
(普通に面白いしAIコーディング時代に通づるものがあるので復刊を希望したいところですが、まあ直球過ぎる題名を何とかしないと再販は無理でしょうな)
そして、JTCや外資問わず、過去にオフショア開発を経験された技術屋のみなさんははてブにも多く生息されているでしょう。
では、ジュニア開発者は不要になりシニア開発者のみになって、いまのソフトウェア開発は主に安い給与で働いてくれるところに遠隔で作業してもらって、レビューだけすれば良い環境ですか?
そうはなっていません。なぜでしょうか。
さて、今普通にXと連動する中古品売買プラットフォームを開発しようと思ったら、どうやってつくるでしょうか?
この文脈に埋め込まれたいくつもの情報「今」「普通」「連動」「中古品」「売買」「プラットフォーム」「開発」を解釈し、すり合わせ、未来の運営者も含めた全員に伝えるためのコストが、コミュニケーションコストです。
そうなると、「ちょっと良い感じにラフでいいからプロトタイプ作って持ってきてよ」で話が通じるのは、受注者マインドがしっかりした日本の受託開発現場の精鋭たちになるわけです。
テストケースだけを通過するように、内部テーブルを持たせた関数を大量に持ってこられてレビュー時に頭を抱えた経験が無いひとは、とても幸運なのです。
とは言え、これは何も文化の違いに起因するだけではありません。仕様とは、環境によって定まるものだからです。
例えば、うるう年判定の関数は、1581年以前をエラーにしますか?1873年以前をエラーにしますか?(ヒント:明治六年)
テスト駆動開発、古い言い方で言えばテストファーストの考え方は、成功したすべてのプロダクトで例外なく、ただの一つの例外もなく、必ず最初から取り入れるべきだったものです。
品質は最後に振りかける粉砂糖のようなフレーバーではなく、最初から設計に組み込むべきだからです。
ありとあらゆる趣味において、最初から良いものを使えば時間を無駄にせずに済んだ、と言われるような初期投資の大切さが説かれます。
果たして本当でしょうか?
そうです、その趣味にハマって生き残りサバイブした人から見れば、過去にその時点で投資をすべきだった、というのは正しいのです。
その趣味にハマれなかった人からすれば、少ない投資で自分に合わないことが分かったという合理的な選択であることと矛盾しません。
そのため、全ての失敗したプロダクトは、テストケースを書く時間でプロダクトを作り上げて、さっさと世に問うべきだったわけです。
少し昔話をしますが、オフショア開発において重要なのはドキュメンテーションとテストケース、それにレビューでした。
他の部署で失敗しつづけていたオフショア開発のやり方は、端的に言えば"教化"でした。
具体的には書けませんが、グッとお安い単価の国に出す仕事を、日本の会社に出すのと同じようにすべく、相手の会社のメンバーを教育して仕立て上げるブートキャンプの仕組みを作り上げていました。
発注側を変えずに済むように受注側を教育して、日本の会社に出すのと同じように単価の安いところに出せたらお得ですよね?でもこれは必ず失敗します。
何故か。だって、日本の会社と同じように働けるようになったら、日本の会社に就職するじゃないですか。少なくとも価値は上がったんだから単価を上げるように交渉しますよね?
結局のところ、当初言われていたような劇的な節約にはつながらないわけです。それなら下手に転職されるよりも自前で現地工場でも立てて地元に貢献しつつ雇用を創出した方が喜ばれるし持続可能です。
小なりとも成果が上がった方法は、フィードバックを相手ではなくドキュメントにした場合でした。
例えば先ほどの例で言えば、テストケースは通るが意図したコードにならなかったとき。
「普通はこういう意図でコードを書くから、テストケースを通るにしても、関数は次からこう書いて」というのが、相手に対するフィードバック。
「関数を書く前に、関数の意図をコメントで残して、レビュー時にはそれを見ましょう」というプロセスの修正が、ドキュメントへのフィードバック。
こうすると、担当者が退職していなくなっても、次の担当者はその方法を参考にすれば良いわけです。
これ、何かに似てませんか。現在のAIコーディングのベストプラクティスと呼ばれるものに非常によく似ているんです。
つまり、オフショア開発というのも、設計と実装が分離できるという前提に立って動いていたんです。
そして、実装しながら設計しても問題ないとする場合、それは「技術的な問題」ではなく「組織構造」に起因します。
つまり、プロダクトの構造を分割して、オフショア開発側に設計と実装とを委譲して、実装しながら設計を変えてもらうことが許容できるのは、契約や責任分界点、輸出入の法規を含めた法務の領域です。
少なくとも当時、諸々をクリアにして相手側にプロダクトの一部を荒い設計と共に切り出して、コーディングしながら再設計してもらい、テストケースを完備したコードとドキュメントを共に完成までもっていってもらったことは、大きな成果であったはずです。
(当時日本側と仕事をしたという実績があると大きな実力があるとみなされたと聞いたので、今はより良いところで良い仕事をされていると思います)
(あと、コミュニケーションコストと輸出入の関連法規が複雑だから)
少なくとも、納期までに契約したこれを納品してください、という枠組みの中では、実装作業だけ切り出すことはできない、というのが教訓として残ったはずです。
少なくともあと数年、場合によっては10年スパンで、日本ではほとんど変わらないと予想しています。
これは技術の話ではなく組織構造や、もっと言えばお仕事の進め方と契約の話だからです。
そうは言ってもジュニアエンジニアの簡単な仕事が減って成長機会が失われているのは事実では?と思うかもしれませんが、そもそもの前提が誤っています。
未経験(弱経験)者を雇って戦力まで鍛え上げる必要があるなら、AIに仕事渡してないでそのジュニアエンジニアにやらせるべきなんです。
ジュニアエンジニアとAIと両方にOJTさせて、その違いをレビューの場でフィードバックしてジュニアを育てるわけです。
もし、そんな時間は無いというなら、元々ジュニアエンジニアをOJTで育てていたというのは幻想です。
(たまに、失敗が経験になるとして、会社に損害を与える方法でジュニアを"教育"しようとする人がいますが、商習慣的にも信義則違反ですし言語道断です)
シニアエンジニアだけで事足りるとしてジュニアエンジニアを雇わなかった企業は、シニアエンジニアが抜けてガタガタになります。
これは中核エンジニアがゴッソリやめた会社が傾くなんて言う話で、昔からそうです。(たいてい、もっと人雇ってくれ待遇上げてくれみたいな悲鳴を圧殺した結果だったりします)
昔から、中堅がやれば手早い仕事を新入社員にやらせて鍛える、その代わり質は悪いし時間もかかるしフォローも必要だったわけでしょう。
AI時代が到来するとしても全く同じです。AIが出力するコードレビューで悲鳴上げてる場合じゃないんですよ。
レビューできるシニアエンジニアが足りなくなると予想されるなら、当然、ジュニアエンジニア雇ってレビューできるようにする必要があるんです。
そしてそれは、技術的な問題点ではなく、組織的・経営的な決断です。
国産LLM開発の文脈でもそうなんですが、ハードウェアの進歩を無視して話をする方が多いのが気になります。
現時点のコンピューターパワーは、10年後には手の届く価格になる可能性が十分高く、もっと言えば20年後には個人が所有する可能性すらあります。
いまから20年前の2005年は、Youtubeが誕生した年です。その時に、誰もがいつも手元にビデオカメラを持ち、即座に動画を世界に公開できるようになるとは思っていなかった頃です。
今もそうだと思いますが、ある分野で必要な性能にはもう十分という期待値があり、10年経てばある程度大きな会社の部署単位で現在最先端のコーディングAIがローカルで動くようになると想像するのは容易です。
そうなったときに、果たして営利企業が、エンジニアを育成するというコストを支払うかといわれると、疑問です。その時点で今後のリアルなコストと比較対象可能になるので。
だって、筆耕担当者とか、清書担当者を雇わなくなった企業って、多いでしょう?
My job went toAI として、じゃあ残るものは何?というのはオーム社の本を読みましょう。再販しないかなあ。
今後数年は変わらないでしょと書いたら今現在進行形で変わっとるわいと突っ込みが来そうなんで防衛的な意味で書いておくんですが、あなたは過去数年間同じ仕事してたんすか?
仕事のやり方とか内容とか、言語とかライブラリとか、毎年のように変わってたでしょ。
レビューの比率が多くなったとか、コード書かなくなったとか、そういうの、たぶん管理職になった人が嘆いてたのと同じっすよね?
少なくとも、ジュニアエンジニアが低品質なバイブコーディング結果を寄越すようになってレビューが大変とか嘆くのなら、まともなコーディング規約一つ作れていない組織の脆弱さを嘆くのが先では?
手癖でバイブコーディングしてヒットしたプロダクトに、あとから品質上げるように大工事するリファクタリングと言うよりリビルディングな仕事って、別に今もありますよね?
散々テストケースを書かなくて良いプロダクトなんて無いという講演だけ聞きに行って、自分とこでテストケースが自動で走るようになって無いなら、そこが問題でしょ。
JTCで「プログラミングできます!」って言ってる人で本当にできる人見たことない
想定の範囲内だし、中にはそこそこ出来る奴もいる
問題は中堅社員ぐらいで「プログラミングできる」「ゴリゴリ書いてる」とかいう人
要するに本当にプログラミングできる人はプログラミングをするような仕事をしている
そしてJTCにはそういう仕事がないのでベンチャーか外資に行ってる
っていうJTCもあるけど、よく考えてくれれば分かるんだけどJTCの作り出すソフトウェアプロダクトでまともなものを見たことないでしょ
N〇Tとか富〇通とかN〇Cとか9割9分ぐらいでまともなソフトウェアがない(1%ぐらいはあるかもしれない)
彼らはバグがないことに命を削って開発をしていて、実際に使って貰えるかどうかなんて一切考えてない
だからとにかくテストケースを作ってそれに対処するために膨大に作業時間を増やして
結果として、そういう知識は何も要らず作業としてのプログラミングばかりやることを「ゴリゴリ書いてる」などと言ってしまう
そんなところで開発してたとしても、申し訳ないがプログラマーとしては下の下ぐらい
つまり、JTCで「プログラミングできます」って言う人はそういう部署で一時期ゴミコードを量産してたか
もしくは学生時代で知識が止まってるかのどっちかで、実際に書かせてみたらマジで全然ダメ
どれぐらいダメかっていうと
って言ってて見てみたら普通にlocalhostってハードコードされてるとか
Dockerなら動いちゃう場合もあるからこれまで何も考えず実装してたけど実はlocalhostってどういう意味か分かって無いっていうね
そんな奴らばっかりだし、なんなら生成AIのせいで良く分からずコピペしてる奴も出てきてマジでカオス
そういう奴が管理職になったりしてプロジェクト引っ張ってるからマジでゴミしか生まれてこない
研修ばっかりやってて研修会社とコンサルに良いようにむしり取られてる
アホすぎてやってられんわ
今まで通勤通学遊びで数十分かけて都心に集まっていた人々は新しい生活様式を覚えて少しずつ変容していく
家で働けるなら買い物も手近で済ませたいのが人の性、ベッドタウンにほど近いが車は使わずに行ける駅前商業施設が既存のものからリプレイスされていくだろう
具体的には大きい本屋は駅前商業施設に集約され、都心にはむしろなくなる
ハッキリ現れてくるのが本屋というだけであってハイブランドになりきれないアパレルも同じ道をたどるだろう、例えばGAPとかユナイテッドアローズとか
家電量販店も都心に集まる意義は薄れていくだろう、インバウンド需要などのニーズは不変ではない
都心に強い大手家電量販店が郊外に出店するのは売上ではなく収益のためである
こうした駅前商業施設を中心に置くサテライト都心が関東広域数か所に集約され、住民の取り合いの競争がより高まる
大宮駅前みたいなのはまあ別格として、そこからワンランク落ちるところの駅前都市平均レベルがぐーっと上がる感じだと思ってほしい
私が想定しているのは明日大型商業施設がオープンする所沢駅前で、都心には数十分かかるが買い物にはその半分もかからないようなエリアで、このあたりには新所沢駅にパルコと小手指駅には大型の西友小手指店があり意味もなく分散されていたがともに閉店し、これが交通の要衝である所沢駅に集約されたわけだ
意味のない分散は地域の発展に貢献してきたが成熟したり役割が変わった現今の環境には非効率な移動を強いられ適さない
これが買い物に行くなら一箇所に行けばいいとなるわけでみんながハッピーになれる上に秩父や川越、何なら東京都でも清瀬や東村山あたりからなら都心に行くより安くて速い
今後は鉄道各社がこうしたサテライト都心を周辺自治体と連携して強力に推進していく
コロナ渦で鉄道会社は鉄道の収益だけでは危ういことを実感しただろう、さらに人口減少が重なるために都心ですら営業係数の悪化は避けられない
省人化は人の集まる都心も例外ではない、ワンマン運転では飽き足らず、自動運転によるゼロマン運転も現実味を帯びてきている
もちろん現段階では整った状況(東北新幹線を想定している)でのみ成立するものだがこれをテストケースとして都心の鉄道全てを自動運転化するのは既定路線だろう(私が死んでるくらいには先の話として)
結局何が言いたいかというと、鉄道各社の利益追求姿勢とそれに賛同する企業の思惑により都心の利便性が関東広域に分散化されるということだ
通勤ラッシュも、都心の溢れんばかりの人の波も、その多くは東京都心に籍を置かない浮動人口の与える影響が大きいもの
サテライト都心が便利になればなるほど、都心は差別化してより高い山を築くしかない
背伸びして都心に居座ってた企業も無理してオフィスを構える必要がなくなる
よかったですね
Permalink |記事への反応(15) | 12:51
単体テストというのは、画面を手動で操作してスクリーンショットを撮る仕事だった。エクセルで仕様書を書き、レビューをしていたが、レビューアーはテストケースよりも、枠線の整え方に気を配っていた。
誰かが自動テストを導入しようと言い出した。「再現性がある」「保守性が高まる」「もっと良くなる」と口々に言われていた。
でも、テストコードを開発する工数はどうするのか、開発コードが増えればさらに大変になるのではないかと不安があった。
それでも、これが実現すれば、何かが大きく変わる予感がした。
アプリケーションフレームワークはStrutsだった。フォームをポストする瞬間にカオスが生じ、50行の無駄なコードを書き、100行の読みにくいコードを理解することが技術者の条件だった。
ある人が「レイヤリング」という概念を持ち出し、別の誰かが「DI」と言い出した。アプリケーションアーキテクチャという言葉も登場し、ファウラーという人物の名前も聞こえるようになった。
新しい構造が提案され、それに影響を受けながら、「いつかは美しいアプリケーション構造が生まれるのかもしれない」と夢を抱いていた。
当時、PerlでCGIを作っていたが、PHPやRubyが登場した時は、正直Web"サイト"を作るためのものだと侮っていた。
しかし、次々と洗練されたWebアプリケーションフレームワークが生まれ、StrutsやJavaEEよりもはるかに使いやすくなっていった。
数多くのWebフレームワークの中で、どれを選ぶべきか悩みながら、「いつか完璧なWebフレームワークが現れるかもしれない」と期待していた。
サーバーは冗長化され、ReversProxyを使い、セキュリティのために構成を変更してきた。そしてクラウドが登場し、Dockerなんて本番で使えないと言っていた時代から、
気がつけばどこに存在するのかもわからないクラスターの中で、コンテナアプリが動いている時代になった痛快だ。
かつてLinuxマシン一台を「鯖」と呼んでいた時代から、世界は目まぐるしく変化し続けるとかと思っていた。
誰かがAjaxと言い出し、別の誰かがReactと言い出した。「こんな方法でHTMLを作って良いのだろうか?」と疑問に思いつつも、「Webはアプリケーションだ」という感覚が強まっていた。Webアプリケーションがどう進化していくのか、未来を感じることができた
私たちは、ソフトウェアを開発すること自体に大変さを感じていた。新しい技術やフレームワークが次々と登場し、その都度課題が解決される一方で、新たな課題が生まれる。これほど面白いことはなかった。そしてエンジニアたちには一体感があり、誰もが自分なりの方法で課題を解決し、そのフィードバックループが世界を動かしていた。だからこそ、今は少しつまらない。変化は穏やかになり、「お金を稼ぐ」という目標だけが共通となり、課題は個々の事象に閉じ込められている。しかし、それが悪いことではない。ただ、私たちの時代が変わったのだ。
かつては、私たちの目の前には普遍的な課題があり、それぞれがそれぞれの場所で課題を解決し、そのフィードバックループが世界を動かしていた。
生成AIで例えると、それをどう使うかではなく、エンジニアが一丸となって生成AIをチューニングしていた。世界情勢で例えると、世の中の飢餓を全世界の人がアイディア出して、解決しようとしてたいた。
今でも、普遍的な課題は世界中に転がっているが、それらは高度で、私たちには手が届かないものが増えてしまった。
ITは面白かった。プログラミングが分かるだけで、世界の課題を一緒に解決できる時代だった。それぞれが自分の場所で働くだけで、世界を動かしていた。そんな時代が終わってしまったと感じる。
老害といえば昔話だろ!
そこで一回ChatGPTにやらせたらどうだろうと思ってやらせてみた。
コードが出力された。
それを走らせたらエラーが出た。
その旨をChatGPT伝えたら改善されたコードが出力された。
それを走らせたら間違った出力が出た。
その旨をChatGPT伝えたら改善されたコードが出力された。
それを走らせたらちゃんと動いた。
うわぁああああああ。
俺ほぼコード書くのに頭使ってない。
テストケース書いたくらいだ。
今からChatGPTの書いたコードレビューするけど、俺の2時間なんだったんだよ。
これは趣味のプログラミングだけど、本業もそれだからやばいわ。
こんなの俺のやる事すぐに全部置き換えられちゃうわ。
もうやばいだろ。
IEEEがコードレビューに関する論文を出していて、それを読む限りではコードレビューはバグの検出にはそれほど効果がないとのことでした。
(品質の維持/向上やレビュー者間へのシステム理解速度に対して好影響を与えているとのこと)
過去システムリリース時や変更時にテストケースが記録されていないことによる不完全なリグレッションテストが行われていることやシステムの仕様を誰も管理出来ていないことが問題なので、増田自身には問題はなかったんだがね。
失敗しちゃったからそういうところをしっかりやっていきましょうと言って組織を引っ張っていけるぐらい図太くなれればよかったんだけど…