「単体テスト」を含む日記 RSS

はてなキーワード: 単体テストとは

2024-08-22

面白かったころのITを書いてみる

単体テストというのは、画面を手動で操作してスクリーンショットを撮る仕事だった。エクセル仕様書を書き、レビューをしていたが、レビューアーはテストケースよりも、枠線の整え方に気を配っていた。

誰かが自動テストを導入しようと言い出した。「再現性がある」「保守性が高まる」「もっと良くなる」と口々に言われていた。

でも、テストコードを開発する工数はどうするのか、開発コードが増えればさらに大変になるのではないか不安があった。

それでも、これが実現すれば、何かが大きく変わる予感がした。

 

アプリケーションフレームワークStrutsだった。フォームポストする瞬間にカオスが生じ、50行の無駄コードを書き、100行の読みにくいコード理解することが技術者の条件だった。

ある人が「レイヤリング」という概念を持ち出し、別の誰かが「DI」と言い出した。アプリケーションアーキテクチャという言葉も登場し、ファウラーという人物名前も聞こえるようになった。

新しい構造提案され、それに影響を受けながら、「いつかは美しいアプリケーション構造が生まれるのかもしれない」と夢を抱いていた。

 

当時、PerlCGIを作っていたが、PHPRubyが登場した時は、正直Web"サイト"を作るためのものだと侮っていた。

しかし、次々と洗練されたWebアプリケーションフレームワークが生まれStrutsJavaEEよりもはるかに使いやすくなっていった。

数多くのWebフレームワークの中で、どれを選ぶべきか悩みながら、「いつか完璧Webフレームワークが現れるかもしれない」と期待していた。

 

サーバー冗長化され、ReversProxyを使い、セキュリティのために構成を変更してきた。そしてクラウドが登場し、Dockerなんて本番で使えないと言っていた時代から

気がつけばどこに存在するのかもわからないクラスターの中で、コンテナアプリが動いている時代になった痛快だ。

かつてLinuxマシン一台を「鯖」と呼んでいた時代から世界は目まぐるしく変化し続けるとかと思っていた。

 

誰かがAjaxと言い出し、別の誰かがReactと言い出した。「こんな方法HTMLを作って良いのだろうか?」と疑問に思いつつも、「Webアプリケーションだ」という感覚が強まっていた。Webアプリケーションがどう進化していくのか、未来を感じることができた

 

私たちは、ソフトウェアを開発すること自体に大変さを感じていた。新しい技術フレームワークが次々と登場し、その都度課題解決される一方で、新たな課題生まれる。これほど面白いことはなかった。そしてエンジニアたちには一体感があり、誰もが自分なりの方法課題解決し、そのフィードバックループ世界を動かしていた。だからこそ、今は少しつまらない。変化は穏やかになり、「お金を稼ぐ」という目標けが共通となり、課題は個々の事象に閉じ込められている。しかし、それが悪いことではない。ただ、私たち時代が変わったのだ。

 

かつては、私たちの目の前には普遍的課題があり、それぞれがそれぞれの場所課題解決し、そのフィードバックループ世界を動かしていた。

生成AIで例えると、それをどう使うかではなく、エンジニア一丸となって生成AIチューニングしていた。世界情勢で例えると、世の中の飢餓を全世界の人がアイディア出して、解決しようとしてたいた。

今でも、普遍的課題世界中に転がっているが、それらは高度で、私たちには手が届かないものが増えてしまった。

IT面白かった。プログラミングが分かるだけで、世界課題を一緒に解決できる時代だった。それぞれが自分場所で働くだけで、世界を動かしていた。そんな時代が終わってしまったと感じる。

  

老害といえば昔話だろ!

2024-05-16

偉そうなリーダー

偉っそうなリーダーがいてね。

人のミスは本人に直接伝えずに上司経由で伝えてくる。

普通はこの手法最後の手段として使用するもんでしょう。他の方法を試して、それでもダメだった時に最後の手段として上司経由で指導するもんでしょ。

それを最初手段として使用してくるのはおかしいでしょ。

リーダーとしていろいろ試行錯誤してから最後の手段として上司に報告とかすべきでしょ。

この問題相手も正しい。ミスダメことなのだから自分は強くは相手に言えない。ミスしたのは自分なのだからしかし腑に落ちない。

いろいろ考えてみたが、騒音トラブルなどの近隣トラブルで例えると次のようになる。

横の家が21時頃なのに煩い

警察通報して警察から指導してもらう。

②ひとまず個人間で静かにして欲しいと頼む。

どちらも正しいだろう。

人間関係を築く必要のない赤の他人になら、①がベストだ。相手不快にはならない。

しかし、相手子ども会などで接点を持つ可能性がある相手だと、いきなり警察通報するのはカドが立つ。②がベストになる。

この事例はとても近いと思う。人間関係を築く必要あるかないか、の違いだ。つまりこれは、リーダーには人間関係を築く気がない、ということだ。リーダーを仲間と思ってるのがダメなのだリーダー第三者の人。客先の嫌な人、と思えば良いのだ。

ひとまず、作業をするとミスをする可能性が増えるので、なるべく作業することを控え、何度も確認を行うことでミスを発生させないようにした。これまでは自主的に目についた問題積極的対応してきたが、依頼があったものだけ直すようにした。

そしてこんな働き方は性に合わないので仕事を辞めることにした。

追記

ミスについて:

ミスをする人=能力の低い人、ではない。人間誰しも作業をすれば必ずミスは発生する。確認すればミスは減るが、それでも限界がある。バグのないシステムはない。

私はそこそこ仕事が早くミスもない人、と職場に思われていたはずだ。仕事を辞めると伝えた時は引き留めが入ったし、○○さんがいなくなった後が怖いです、なども言われた。

上記で挙げているミスは、その自分能力を過信しすぎて単体テストを怠り、それが2〜3回続いてしまったものだ。老化かな…。

2024-05-15

anond:20240515130736

女性テストしたいとか、単体テストしたいとか、性的解析ツールを使いたいとか、結合テストしたいとか…

あー、結合したい…😔

良くない体制はずっと治らない

組織体制を変えるのは難しいことなんだなと思った。

IT業界で、昔はSESで働いていて、大手によく客先常駐していた。どこも大手ばかりでノウハウはしっかり蓄積され、設計書なども充実していた。

SESを脱退し、そこそこ大手IT企業正社員になれた。しかし、そこはこれまでのSES客先常駐していたような企業とは違い、あまり体制的には良くはなかった。

工数管理

工数管理は基本中の基本であり、やらないIT企業はなかなかないだろう。しかし、当社は違った。

工数管理をしなかったのである

1日に何をしたのか、報告の義務はなく、ただ作業していればよかった。

工数管理とは、案件ごとに工数管理のための番号(工数番号)を振り、さらにその工数番号ごとに要件定義、基本設計、詳細設計実装/単体テスト結合テスト総合テスト、などのサブ番号に分割して、工数登録することである

さらセキュリティ教育などは個々の案件無関係なことが多いので、維持管理用の工数番号が振られていることもある。

リリース後のトラブル対応なども工数を消費するので、それ専用の工数番号などもあったりする。

さらに、日々の工数を詳細に記載する日報のようなものも導入しているところが多く、どの作業に何時間作業たかを15分単位などで記載する。

工数管理のいいところは、作業サボりにくくなることだ。作業効率客観的に見えてしまうため、現実を突きつけられ、もっと頑張らなきゃ、と思う。

工数管理のだめなところは、とにかく面倒くさいことだ。当然だが、工数管理を行うための工数、は工数管理には入力できる枠はない。が、確実に無視できないレベル工数を消費する。あとトイレなどにつける工数などもない。

当社の工数管理

工数管理はないと言ったが、実はある。

しかし、活用されておらず、形式上だけ数字さえ入っていればそれでいい、というものだ。

その形式上すら煩わしいらしく、若手の意見バリバリ言う人から

工数管理は全く意味がない。適当工数入力していても誰もチェックしていないのか、何も言ってこない。

工数管理をしっかりすれば、1日に働いた時間がわかるのだから、勤怠システム不要である工数管理システムと勤怠システムを一本化すべきだ。

などの意見が出ていた。

月末にテキトー工数入力することすら煩わしいらしい。

そりゃあ工数管理根付いてない企業工数管理を行えばそうなるでしょう。

工数管理業務に結びつくものではなく導入メリットは明確には測れない。しかし、めんどくささは圧倒的だ。

結果、工数管理システムは完全に廃れ、入力すらしなくても誰も何も言わなくなった。

まり、当社はよく言えば従業員意見が通りやすい、悪く言えば従業員わがままが通ってしま企業なのだ

従業員意見尊重し、押し付けをせず、それぞれのルールを重んじる。良いことであるが、それでは業務改善できない。

これまでもそこそこやれてるのだから、それを無視して新ルールを導入しても、組織が壊滅する可能性が出てくるだけだ。

工数管理は基本中の基本だ。どこもやっている。それすらも当社は従業員わがままが通ってしまうのだ。

(まあ当社の工数管理はテキトーからダメだったのであって、もっと厳密に管理して、日報なども義務化すれば、これまでサボってた社員もサボれなくなり、結果的業務改善していたと思うが。)

当社はPDCAを回さな

PDCAはPlan, Do, Check, Action頭文字を連ねたもので、つまり、まずは予定(Plan)ありき。予定がないと実行(Do)はしてはいけない。

実行した後は必ず振り返り(Check)を行いなさい。

それらをした上で次の作業を行いなさい(Action)。

という意味である

当社もPDCA概念はあるし、週報という形でそれを実現している。

しかしその概念根付いておらず、週報以外ではPDCA無視している。

まり当社は、まずは実行があり、計画は立てることは必須ではない。多くの人は計画を立てない。

振り返りも当然実施しない。実行のみがある。Do, Do, Doである

これは作業レベルでそうであるし、案件レベルでもそうだ。案件はたしか最後には振り返りの資料作成する必要がある。しかし、これは単に作成しなきゃいけないか作成してるだけで、綺麗事をまとめた振り返りである

本来は、まずは理想を語り、次に現実を語る。しかし当社は、過去グダグダ言っても仕方ない、と理想を一切語らず、現実のみを語る。しかし振り返り資料には上司受けするような荒唐無稽対策記載される。

当社は、作業の前には計画ありき、などの文化は全く根付いていない。優秀な人間でも根付いていない。

私はただの平社員なので、それらについて指摘はできない。指摘したところで「じゃあどうするの?」と詰められて終わりだ。指摘するなら十分な資料作成と具体的な対応策の準備、そして責任人を動かすカリスマ性が必要だ。私にはそれらを準備してまで無駄に頑張る気はない。

当社はマニュアルを作らない。

驚いたのが部の方針説明会の時だ。

業務改善必要だ。

個々のチームで業務改善に取り組んでほしい。」

と書かれていた。

本来は、業務改善は個々のチームだけの問題ではないので、上層部マニュアル化してルール化すべきではないのか?

アイデアは個々のチームから出してもらっても良いだろうが、それを取りまとめて全体で取り組ませるのは上層部の役目ではないのか?

それをなぜ、個々のチームに依頼する?

業務改善といえばマニュアル作成設計フォーマット作成だ。

マニュアルがなぜ必要か?

それは能力の低い人でもマニュアル通りに作業することで能力の高い人と同等の仕事をできるようにするためである

それすなわち業務改善である

しかし、当社はマニュアルを作る習慣はない。自分用のメモは作るが、維持管理に使えるマニュアルは誰も作らない。

また、当社には設計書のフォーマットはない。

フォーマットがあるだけで記載漏れがかなり減る。考慮漏れも減る。作業が具体化されるからタスクも細分化して記載できる。

当社には推奨するプログラミング言語はなく、推奨のフレームワークもない。

これらが共通化されていれば、開発者がいろいろなチームに参加しやすくなるし、別のチームの有識者相談やすくもなる。

こういった業務改善本来上層部が率先して枠組みを作るべきだ。しかしやらない。

上層部知識がなく、やるとしたら雑な仕事しかしないから、やられると逆に困るのだが。

まとめ

当社はとにかく従業員の声が大きい。強い。

業務改善などの施策を出しても、従業員が納得しないと続かない。

そういう組織文化なのだと思う。

そういう文化を変えるのは並大抵のことでは出来ない。

環境が変われば人は変わるだろうが、そもそも環境を変えるには人を変えないといけない。だから変わらない。

仕事が回らなくなり死にかければ変わるかと思ったが、たぶん変わらない。

仕事の仕方を変えるくらいならきっと死を選ぶだろう。それくらい変わらない。

追記

2024/05/15 10:48

工数管理の是非について:

実装者は成果物作成する側だからサボりにくいのよね。

工数管理すべきなのは成果物ではなくサービス提供する人なのかもしれない。例えばPMなど。

当社の開発チームは、開発者PM以外にも、君必要なの?何やってる人なの?打ち合わせには参加してるけど、ただの工数食い虫じゃね?みたいな人もいるのです。

あと外注さんにも何の工数管理しないのはやばいと思う。外注さんリモートワークだから案件掛け持ちされてる疑惑も出てたし。

2024-02-18

anond:20240218223333

単体テストぐらいならそうだね。

つのシステム要件定義から開発運用保守まで全部面倒見れるとなるとそうはいかないよ。

2023-12-08

Tracer Bullet Development

開発手法でしっくり来てるのがAndy HuntさんのTracer Bullet Developmentで、開発の方向性を示すのに試作を作る方法

1. 主要なシステム オブジェクト定義UIサーバーロジックビットデータベース抽象化レイヤー等。

2. システム オブジェクトを介したデータ フロー定義

3. データフローを実現するために API とその戻り値コーディング

4. 単体テスト使用して API の予想される使用法を文書化。

5. 各 API必要な量の既定のデータ (別名、ダミー データ、偽のデータハードコーディングされたデータ) を追加して、API が「実行」されるようにする。

6. あらかじめ用意されたデータを実際の機能に段階的に置き換える。

7. コードリファクタリングし、システム オブジェクトを調整し、完了するまでこれを続ける。

実用上最小限の実装というプラクティスにも似ているが、ステークホルダーに動くサンプルを素早く見せられるのがポイント

2023-12-07

[]2023年11月滅多にホットエントリを出さなドメインからホットエントリ

ここ1年で初めてはてなブックマーク日毎の総合人気エントリ入りしたドメインからホットエントリブクマ数順トップ30

ブクマタイトルドメイン
1359国土交通省 ネガティブ情報検索サイトwww.mlit.go.jp
1087ゲーム趣味にしている人の割合が多いのはどのくらいの収入の人たちなのか調べてみた - nonameのノートnoname774300.hatenablog.com
854マシュマロ!|高河ゆん|pixivFANBOXkouga-yun.fanbox.cc
850トコジラミ根絶方法害虫・害鳥獣安全対策します|株式会社 オオヨドコーポレーションテックス社oyodo-pmp.com
847ラマヌジャンは本当に何も知らなかったのかmathlog.info
774裏紅白歌合戦2023jiyujoho.a.la9.jp
679水は変わった物質vitroid.github.io
671しずかなインターネットsizu.me
606日米でエンジニアの育成戦略正反対だと気付いた話 - メソッド屋のブログsimplearchitect.hatenablog.com
498ゼルダの伝説 ブレスオブザワイルド』が品質を高めてくれた。売上10万本超え、R18インディーゲーム洗脳アプリ高慢お嬢様を好き放題するシミュレーション開発者インタビュー - AZ-LINE あずらいん!az-line.jp
484ChatGPTに社内文書に基づいた回答を生成させる仕組みを構築しました - コネヒト開発者ブログtech.connehito.com
475映画批評ゴジラ-1.0』90点(100点満点中)movie.maeda-y.com
465メールアドレスキーにしてID連携を行う設計の危うさ|ritousizu.me
454「直接会って話したほうがはやい」は速いだけ|arayasizu.me
438ベンダ提供していない決済モジュール不具合による情報漏洩事故 東京地判令2.10.13(平2810775) - ITシステム判例メモitlaw.hatenablog.com
436Othello is Solvedarxiv.org
435池田大作氏の御逝去の報に接しkishida.gr.jp
424https://ip.guide/ip.guide
421ナポリタンが究極の味になる!ほんのひと手間に「やって大正解」「今度からこうする」 - macaronimacaro-ni.jp
421大麻少年の性被害、男らしさの病(松本俊彦)[第12回] 酒をやめられない文学研究者タバコがやめられない精神科医の往復書簡ohtabookstand.com
407変なドメイン取るな.netwww.henna-domain-toruna.net
401mRNAのひみつ | まんがひみつ文庫 | まんがでよくわかるシリーズ学研キッズネットkids.gakken.co.jp
377雑記セキュリティガイドライン類 約300時間 読み漁ってみた - 2LoD.secnikinusu.hatenablog.com
374弊社元幹部社員不正について/日本海テレビwww.nkt-tv.co.jp
368t_wadaさんと「単体テストの使い方/考え方」の疑問点についてディスカッションしました - DeNA Testing Blogswet.dena.com
361コラム寄稿「なぜドイツ人にできることが日本人にできないのか」www.rieti.go.jp
360令和時代個人サイトの作り方:suama workstechbookfest.org
356楽天市場】SPUの特典内容変更について|SPU(スーパーポイントアッププログラムevent.rakuten.co.jp
345国産プレミアムウイスキー 一部商品価格改定についてwww.suntory.co.jp
335Mini vMaclrusso.github.io

2023-06-22

いい加減、セックスのことを「結合テスト」って言うのやめませんか?

僕は単体テスト専門でってわかましいわ

2023-05-22

anond:20230522102533

いや、単体テストはそこそこ書かれてたし、バグ修正の際はリグレッションテストちゃんと書いてた。

から全てのテストも通ったからヨシ!的な流れでテストに含まれていなかったところに足を掬われたんよ。

でもデグレが起きないようにするのもコードレビュー目的ひとつって言ってもらえてちょい救われたわ。

ありがとう

2023-03-16

anond:20230316121809

テクニックではなくて、どれくらい成果出せたかをモノサシにすればよいのでは

単体テスト仕様書でドやったのも、テクニック披露しているわけではないと思うのだが

2023-03-03

anond:20230302235855

俺は時給(換算)1500円でサーバー構築、業務システムRPAの基本設計UI設計データベース設計セキュリティ対策からプログラミング単体テスト結合テスト運用試験、導入、データ移行作業データベースチューニング運用サポートなど一通りやってるけど、さすがにそれは、ない。

いくらExcelマクロといえども、時給1000円ぐらいは出さなきゃやってられないよ!

2023-02-26

anond:20230226162246

テスト操作方法覚えたら正直誰がやっても同じだから

わざわざ正社員やらせコスト払う必要ないもんな

ワイくんはそう思いながら、そこまで大規模でもないか自動化するまでもない

微妙プロジェクト単体テストをしています

2023-02-08

anond:20230208173438

仕様把握しないで実装とか、単体テストすら通らないというか実施出来ないだろ、そこで門前払いでよくないか

2023-01-29

単体テストの考え方・使い方っていう本を読んでいる

自分がちょうど勉強したい分野でとても勉強になるのだけど、言い回しが回りくどくて読みにくい。内

「取るに足らないコード」は「不要コード」で良いやろ。「観察可能な振る舞い」って何やねん。

こういうわかりにくいワードが多く、都度調べながら進めているので、時間がかかっている。

2022-10-05

プログラム組める”って言っていい基準

どのレベルまで出来れば普通にプログラム組める”って言っていいの?

hello worldが書ける

2000年対応コーディング単体テストができる

Excelマクロword差し込み印刷みたいのを0から作れる

賃貸情報スクレイピング収集し、好きな条件で検索できるシステムを0から構築できる

⑤500件以上のホテルの予約サイトを0から構築運用できる

2022-09-11

仕事目的が『上司との答え合わせ』になってる時の閉塞感は異常…「期待してる模範解答あるならそれ出せって言いたくなる」

最初から模範解答を出してあげるのは単体テスト

やらせてみて答え合わせをするのは結合テスト

大企業内勤デスクワーク場合仕事ベストプラクティスはたいがい正解があるので、細かい指示をしなくても部下が上司と同じように機能することが期待される(メンバーシップ正社員場合

個性wとか創造性wとかいうのはベストプラクティスができるようになってから先の段階

2022-06-19

意外にネイティブに通じなかった英語

ブラックボックステスト

ブラックボックステスト (英: black-box testing)は、内部構造動作を覗き見することなく、アプリケーション機能を調べるソフトウェアテスト手法のこと。アプリケーションを見えない箱として扱い、入力と結果の整合性確認する。このテスト方法は、ソフトウェアテストのすべてのレベル単体テスト統合テストシステムテスト、受け入れテスト)に適用できる。仕様ベーステストと呼ばれることもある[1]。

ブラックボックス飛行機に付いてるやつ?」という反応が多かった。

ドッグフーディング

ドッグフーディング (英: dogfooding) または「自社のドッグフードを食べる」「ドッグフードする」(Eating your own dog food、Drinking your own champagneとも言う)は、コンピュータ業界において、自社製品を開発して利用する組織の習慣で[1]、組織が実際の使用法で日々自分たち製品を利用しながら製品テストを行うことである日本語では単に「ドッグフード」ということもある。そのため、ドッグフーディング品質管理として機能し、開発者自身による製品の自信を表す証言広告となる[2][3]。尚、日本企業では自社実践(じしゃじっせん)という言葉が相当する意味言葉として使われている。

ドイツ人インド人の同僚がそれぞれ1人ずつ知ってた。

2022-03-05

プログラマ必要なのはググる力」"ではありません"

プログラミング必要なのはググる力だ」などとまことしやかに言われます。が、これは嘘なので、プログラミング初心者は(中級者以上も)真に受けないで下さい。そして、プログラミング教育に携わる人は、こういう有害な嘘を広めるのはやめて下さい。

なお、ここでいう「プログラマ」とはプログラミング仕事にする人、または作成したプログラムを公開する人を指しています純粋趣味プログラミングをしており、ソースコードソフトウェアも公開するつもりの無い人は、どんな方法プログラミングをしようと自由です。

プログラマ必要な力

プログラマに(プログラマに限らず)必要なのは自身の専門分野に関する基礎的かつ体系的な知識です。それらが不足していては、「ググる」ことさえままなりません。英語で喩えれば、時制や不規則動詞という概念を知らずに辞書を引いて、「I saw him yesterday. 」の「saw」をのこぎりのことだと思い込むようなものです。要するに、調べたい事項が何に関するものなのかを理解していなければ、調べようがないのです。

それでは、プログラミング初心者にとって必要な基礎知識は具体的にどのようなものでしょうか。

まず当然ですが、自分が使っているプログラミング言語フレームワーク機能は一通り知っている必要があります組み込みデータ型や制御構文はもちろん知らなければいけません。高階関数クラス、非同期処理等の発展的な機能も知る必要があります言語だけではなく、パッケージマネージャタスクランナー単体テストツール等の周辺ツール理解必要です。また、「コードコンプリート」とか「Effective ○○」のような書籍に書いてあるような設計コーディングベストプラクティスも知らなければいけません。要するに、現代プログラミングの「常識」は全て知っている必要があります

そもそも「そういう機能存在する」と認識して初めて「調べる」ことができるのです。列挙型という機能存在を知らずに「Javaで列挙型はどう書くのだろう」と調べることはできません。非同期処理の存在を知らずに、「JavaScriptで非同期処理はどう書くのだろう」と調べることはできません。

初心者は何から学ぶべきか

では、そのような一通りの知識を身に着けるためには、どのようなリソースから学ぶべきでしょうか。

結論から言えば、以下のような文献で学ぶべきでしょう。

逆に、WikipediaQiita等の個人趣味で書いた記事プログラミングスクール記事プログラミングスクール家庭教師etc主体に学ぶのはやめるべきでしょう。

もちろん、特定話題について調べる過程で、非公式情報に行き着くことはあるでしょうが、そこで使用されているライブラリ等の仕様については、必ず公式ドキュメントで裏を取るべきです。

時々、こういった正式ドキュメントを読むことが、初心者にはハードルが高いと言う人がいますしかし、冒頭で述べたようなプログラミング仕事にしようとしている人達が、こういうことができないのはおかしいです。

実際、公式ドキュメントを読むことはそれほど難しいことではありません。有名な言語ライブラリ等のドキュメントであれば、高校程度の数学英語とある程度のコンピュータ操作経験があれば、理解できるように書かれています。その程度の素養も無いのにプログラマ特に職業プログラマ)になろうとすることが、そもそもおかしいのです。運動が苦手なのにプロスポーツ選手になろうとするようなものです。

2022-01-16

[]社畜プログラマ気分を味わえた2Dアクションパズルゲーム

Steamで買った『Recursed』というゲーム全ステージクリアしたので、記念に感想を書く。

Steam:Recursed

https://store.steampowered.com/app/497780/Recursed/?l=japanese

操作方法/目的

一見すると『Recursed』は2Dレトロ雰囲気アクションゲームである操作シンプルで、方向キーで左右に移動し、アクションジャンプと物をつかむ/投げるだけだからだ。部屋の中を移動してブロックをつかんで足場を作ったり、鍵をつかんで扉を開錠したりしてゴールへと到着(crystalを獲得)すればステージクリアだ。

概要/パズル

ステージの始めはチュートリアルの様に簡単だが、ステージを経るごとに難しくなり、そのうち何度も試行錯誤したり難しさのあまり何十分も頭を抱えたりもした。

この複雑さを生み出す要因は箱(ゲーム表記ではChest)である。このゲームでは箱の中へジャンプすることで部屋の内に入れるが、一度箱の外にでると箱の内部状態リセットされてしまうのだ。よって箱の中にブロックや鍵などのオブジェクトを持ち込んでも保存することはできないし、ブロック位置リセットされるし、開錠した扉もまた施錠されてしまうことになる。

さらに大きな特徴として、箱を持ち歩いて移動することができるのだ。それにより、箱を持ったまま別の箱に入ったり箱を持って箱の外にでることもできる。

そして、ステージを経ると箱の中の部屋は箱の外と同じ部屋という場面に出くわす。Recursedは『再帰呼び出し』という意味らしいが、まさにこのゲームタイトル通りの現象が起こるのだ。そして、以降のステージでは再帰を交えることでパズルの複雑さはより深まっていく。

再帰プログラミングとRecursed

再帰数学的帰納法アルゴリズムでは定番概念だが、それがパズルとなってプレイヤー思考回路を奪ってくる。私はかつて社畜プログラマとしてJavaプログラミング経験していたので、箱に入ることはメソッドを呼び出すことの様に感じた。オブジェクトを持って箱に入ることは引数を使ってメソッドを実行することであり、オブジェクトを持って箱の外に出ることはreturn文でメソッドを終わらせることであった。

「ゴール前の段差が大きくブロック必要からブロック生成メソッドを呼び出してブロックオブジェクトを返り値として渡さなくてはいけないけど、そうすると鍵オブジェクトをゴールメソッド引数として渡すことができなくて……、いっそのこと、ブロックメソッドからゴールメソッドを呼び出すべきか……、メソッドの返り値は一つだけだが何度も呼び出せばいけるか? この緑色オーラはなんだ? Staticを意味するのか? Staticなオブジェクト位置情報をあらかじめ変更しておけば、ゴールメソッド引数渡しをする必要がなくなるのか?」

こんなことを一つのステージクリアするだけのために何十分も考えていたのだ。念のために書いておくが、ゲーム内には数学用語プログラミング用語は一切出てこない。ただ単に、私にJavaプログラミング経験があるからその用語パズルを考えていただけだ。ゲーム内で箱から出入りしたりオブジェクトを箱の中から出し入れするとどうなるかを、Eclipseステップ実行するように想起していた。ちなみに、ゲーム内で存在しない部屋や壁の中に移動しようとするとparadoxが発生して強制的特殊な部屋へ移動されるが、私はその度にステップ実行でExceptionに遷移されたことの様に感じた。他の言語精通するプログラマだったり数学畑の人ならば、私とは異なる概念パズル思考をするのだろうか。

プログラマを辞めて何年もプログラミング思考をしてこなかった私でも全ステージクリアすることができたのだから学校プログラムを学んでいたり現役でプログラミングをしてきた人ならばこのゲーム『Recursed』をクリアすることは可能だろう。いっそのこと、『Recursed』のクリアすらできない人にプログラミングができるのか? と煽ってみたいくらいだ。

ちなみに、もし私が社畜プログラマ時代にこのゲームをやったらブチ切れていただろう。なんで仕事プログラミングで脳を酷使した上に自宅のゲームでも同じようなプログラム的な思考をしなければならないんだよと。プログラミングから何年も離れていた今の私にとって『Recursed』は、プログラミング単体テストが無事成功した時の快楽を思い出させるものだった。

感想

『Recursed』はパズルとしての難易度は非常に高いが、理不尽な解法を求められることはない。理不尽な解法のクイズパズルには怒りが湧いてくる。ひと昔前のクイズ番組を見たことのある人なら『モヤッとボール』を投げつけたくなる、と言えばその感情が伝わるだろう。『Recursed』はどんなに難しいステージでも、ただただ開発者パズル作成能力に感嘆するだけで怒りは湧いてこない。

似たようなアクションパズルゲームとして有名なのは『The Witness』であろう。『The Witness』も私が好きなパズルゲームであり、ゲームとして高い評価を得ていることに間違いはないのだが、しばしば理不尽な解法を求められるパズルがありその度に私は怒りが湧いてきたものだ。そう考えると、『Recursed』はパズルとしての洗練さだけなら『The Witness』を超えるものだと私は思う。

好きなステージ

具体的にパズル解説するととただのネタバレになってしまうので(もっとも、文字だけでパズルの解法を説明できないのだが)、『Recursed』で私が好きなステージを述べる。順番は攻略順に並べた。

Woodland/Loop

再帰概念が利用される最初ステージ

チュートリアルの様に簡単だったこれまでのステージから突如再帰概念を見せつけられることで、このゲームタイトル名の意味理解することになった。

Ruins/Interlock

鍵を手に入れたら扉に到達できず、先に扉に到達したら鍵が手に入らずで、まさにインターロック名前に相応しいステージだった。

Temple/Blister

一画面だけのオブジェクトが少ないシンプルステージだが、氷の壁に阻まれてゴールできず苦戦した。試行錯誤の繰り返しの末クリアできたが、何故クリアできたのかがわからない。

The Void/Sojourn

The Voidステージはどれもこれまでの集大成という感じでやりごたえあったが、中でも頭をひねらせたのがこれ。ゴールの部屋を水没させたり水の無い状態で入ったりして鍵を運搬するのに苦労した。

The Void/Escalate

箱を左右へ投げて移動を繰り返して、高い位置にあるゴールを目指すのがまさにEscalateというステージ名そのものだった。paradoxを発生した後のパターンが複雑だったのが印象に残っている。paradoxを発生させたらcrystal獲得(通常のクリア)できないのかよ……という落胆は大きかった。しかし、それだけにcrystal獲得とdiamond獲得(paradox発生によるクリア)のどちらも大きな達成感を得られた。

The Oobleck Conundrum/Transfer

簡単そうに見えて難しく、唯一ステージ飛ばして次のステージへと進んだので印象に残っている。後に複数日に及ぶ数時間試行錯誤で改めてこのステージクリアができて、クリアにかかった時間が最も長くなったステージでもある。しかしながら、おそらく開発者想定外方法でのクリアであり。初期画面から右の方へ一切行かずにOobleckさえ使用しないというクリア方法スッキリしなかった。といっても、開発者の想定を無視するゴリ押し的なクリアを見つけたのはこのステージだけだった。

The Last Tapestry/Flight

The Void/Escalateと似たコンセプトのステージだが、釜(JavaにおけるThread?)のギミックを利用したより複雑な構成となっている。高い位置にあるゴールを目指すのは、やはりFlightというステージ名そのものだった。

最後

この記事投稿する前にエンディングを見れていないことに気づいた。

全ステージクリア(全てのCrystal取得)したからと、この記事執筆するためにネタバレを気にせず攻略情報を調べていたけど、エンディングなんてわかる訳ねえよ。The Void/Trilemmaの最後にCrystal取得とは関係ない意味深なオブジェクトがあることには気づいていたけど……。ちなみに、私のSteam実績によるとdiamondとrubieの全取得はできてないけれども、もう取得する気力はない。パズルゲームガチ勢にとっては、実績全解除を目指さない私は軟弱者に映るのだろうか? 攻略を調べずに実績全解除できる人は、高い論理的思考能力を有しているに違いない。

2022-01-11

anond:20220111114453

単体テストOKだけど結合テストで出るタイプバグっぽい

民主主義自体財務省とか特定組織意思決定コントロールする機能はあるのだが

高齢化社会による老人の既得権益日本人の隣人への冷淡さなどなど

様々な条件が揃って発生するバグなので、モジュール保守担当者は誰も直したがらない感じ

2021-12-25

最近遭遇した怖いお話

ある大規模SIプロジェクト増田発注者側。

某日のベンダー報告:「現在プログラミング単体テスト中です。プログラムは静的チェックツール活用したコードレビューを必ず経るようにしています。」

1か月後のベンダー報告:「進捗はおおむね順調です。コードレビューも滞りなく行っています

2か月後のベンダー報告:「ごめんなさい、コードレビューの件ですが、静的チェックツールの設定が誤っていてフリーパス状態であることが分かりました。レビューからやり直すのでプロジェクト延期でお願いします」

お前ら死ねよと・・・

ログイン ユーザー登録
ようこそ ゲスト さん