Archive for the ‘プログラミング’ Category

どんなテストで失敗したのか分からないと改善しづらい

水曜日, 4月 15th, 2015

もともと教育を想定したサイトではないので仕方ないかもしれないですが、paizaさんのお話。paizaさんは「paizaは、コードを書いて書類選考なしで面接に進める、まったく新しいカタチの転職サービスです。」なので、あくまでも求人を想定したコーディング力評価が趣旨とのこと。触ってみて感じた面白い点は、事前に明確に確認できる単体テストは2件程度、事前ににサイト上で単体テストできるのは1件程度という点。それ以外のテストは明確な入出力が用意されませんが、提出されたコードに対して10個程度のテストが自動で評価され、採点されます。これらの明示的に出て来ないテストについては「文章で書かれてる仕様から読み解く」形で対応する必要があります。

それはそれで良いし、用意されてるお題について複数のテストをやって点数付けするのも良いのですが、失敗した後で良いからどういうテストで失敗したのか教えて欲しいな、と。求人目的であっても「その人のスキル上がることが期待できる(よね?)」なら、失敗したテストを採点後に通知することには意味があると思うのだけど、何故やらないのだろう。

この間書いた盤面ゲームに昨晩トライしてみた所、中身は「リバーシ作れ」。う、めんどくさい。あれこれ試行錯誤しながらやった結果、


<平均>
問題集計 受験者数: 1,193人
正解率: 78.1% 平均回答時間: 101分33秒 平均スコア: 73.04点

<當間スコア>
受験結果 受験言語: Python 回答時間: 155分29秒 獲得ランク: Cランク スコア: 28点

という悲しい結果に。テスト10件中通ったのは4件のみ。しくしく。どんなテストで失敗したんだろう。という思いと、制限時間付きでリバーシ作らせるなよという思いで半々です。しくしく。綺麗に書くとかあまり考えず、取りあえず動けば良いかの方針で書いた結果、Pythonで約140行程度で書けました。例外処理はあちこちにでてきますが、ルール自体はシンプルなゲームだし。

盤面を「黒をB、白をW、開いてるマスをN」で表現してるとすると、「裏返すかどうかを判定したい方向の盤面データを取得して、置いた石がBなら「BW+B*」で裏返すかどうかを判定」とかしてみたんだけど、微妙にスマートじゃない気もするし、何か想定外の誤判定してしまいそうな気もする。けど、明示的に用意されてたデータでは正しく処理できたんだよな。

ということで気持ち悪いので失敗したテスト教えてください〜。というリクエストは送ってみました。多分教えてくれないだろうなとは思いつつ。

tnalさんと同じ40歳のエンジニア14人が正解している問題です。

月曜日, 4月 13th, 2015

初心者でもほぼ無料でPythonを勉強できるコンテンツ10選で見かけたpaizaって、コードのテストまでしてくれる問題集サービスだったのね。前に名前だけ聞いたことあって放置してましたが知りませんでした。

あまりPython歴長くないですが、ググりながらぽちぽち試してたらランクBに。それは良いとして

A003:盤面ゲーム
(想定回答時間 120 分、制限時間 6 時間)
受験者数: 1,185人 正解率: 78.1% 平均回答時間: 101分40秒 平均スコア: 73.02点

は時間的にちょっとめげる。CodeIQとは違って問題チラ見もできず。いや、点数気にしないなら(覗く=問題確認含めた回答時間開始になって時間カウントされる)覗けば良いんですが。あと Python 2.x 系なのもちょっと残念か。

ということで、(問題さえ準備できるなら)Jenkins + Python 3.xなテスト環境作れば良いんですかね。いくつかググった感じでは「nose (単体テストツール), unittest-xml-reporting (Jenkinsとの連携用), coverage (カバレッジ計測?)」あたりが鉄板らしい。

と、調べるだけの簡単なお仕事。学生にwebサービス構築の勉強兼ねて準備させよっかなー。