僕は英語難民だった(←現在完了形・継続用法)

英語と仲直りがしたい

そういう思いに至る出来事がいろいろあったのですが、かいつまんで言うと、

  • @sx_7くんと出かけたとき、彼が外国人相手に流暢な英語を話しているのを聞いたり
  • @pi_cro_sさんと出かけたとき、日常会話くらいなら不自由を感じない程度の語学力があるという話を聞いたり

……した結果、友達だと思っていた2人がなんか急に遠く感じられるようになりました

なにを隠そう、僕は英語難民です

なにこの劣等感。

f:id:tercel_s:20150510014609p:plain:w300
(『だめっこどうぶつ 2―桑田着ぐるみ劇場 (バンブー・コミックス)』p.67)

とりあえず前置きはこのくらいにして本題いきます。

今日やること

  • 英語の5文型を思い出す

5文型というのは、あの S とか V とか O とか C とかが出てくるあれです。

  1. 第一文型 (SV)
  2. 第二文型 (SVC)
  3. 第三文型 (SVO)
  4. 第四文型 (SVOO)
  5. 第五文型 (SVOC)

どんなに複雑な英文でも、だいたいどれかに当てはまりますよ、という「型」みたいなものなので、まずはこれをやってみようと考えたのです。

……しかしその浅はかな行為が、まさかあのような悲劇を招くことになろうとは、まだこのとき思いもしませんでした。

続きを読む

UIAutomationでマウスのドラッグ&ドロップの自動制御を試みるまで

本日のテーマ

昨日の続き。

  • UIテストでマウスのドラッグ&ドロップを自動化したい

方針

結局、最後はWin32APIに頼ることになりそう。

ちなみにこのWin32APIはなかなか癖者で、『ゲームプログラマになる前に覚えておきたい技術』§27.2.2ではこんなふうにdisられています。

(中略)これが絶望的に面倒くさい。win32APIで検索すると入門サイトが山と見つかるが、どこを見てもやる気が失せる。ボタンも何もないウィンドウを一つ出すだけで100行からのプログラムを書かねばならないし、何もかもがクラスでなく関数になっているので、かなり使いにくい。建て増しの歴史がそのまま透けて見えるような仕様の数々が、多少のやる気など粉砕してしまう。

今日やること

  • Windowsに標準でインストールされているペイントを自動起動する
  • ペイントを最大化する(モニタとウィンドウの左上端を合わせるため)
  • 座標(200, 300)から画面中央に向かってマウスを自動でドラッグ&ドロップする

成果物はこんな感じになる予定です。

f:id:tercel_s:20150430115009p:plain

なお、本記事の執筆にあたり使用した環境は、Surface Pro 3 (Windows 8.1 Pro 64ビット版) + Visual Studio Express 2013 for Windows Desktop です。マルチモニタ環境は想定していません。ごめんなさい。

続きを読む

UIAutomationで.Net製デスクトップアプリのGUIコンポーネントの自動制御を試みるまでのハートフルストーリー

今日のテーマ

  • .Netで開発されたデスクトップアプリケーションの結合テストを自動化したい
  • 検証対象はGUIベースのシステムなので、ビュー層(画面)の諸制御は避けて通れない
  • つまりバックエンドのUTほど話は簡単ではない

問題点

問題点はいろいろあるけどとりあえずこれ。

一文目は特にプログラムのテスト全般に対する一般論であることに注意してね。

Webアプリ界隈ではSeleniumという自動化ツールがそこそこ定着していますが、デスクトップアプリだとまだまだGUIの自動テストの決定打がない印象です*1

というわけで、同業者の知恵を借りることにしました。

はぅ君の回答

なるほど AutomationElement ……。

そんなべんりなものがあったとは……。

今日やること

とりあえず以下の検証作業を自動化してみようと思います。ほんと最低限です。

  • Windowsに標準でインストールされている電卓アプリを起動する
  • Cボタンで電卓をクリアする
  • 7ボタンを7回連打する
  • 電卓の表示結果が7777777であることを確認する
  • 電卓を終了する

なお、本記事の執筆にあたり使用した環境は、Surface Pro 3 (Windows 8.1 Pro 64ビット版) + Visual Studio Express 2013 for Windows Desktop です。

*1:ちなみに弊社にも独自開発した「キーワード駆動型GUI自動テストツール」があるのですが、大人の事情により僕は使えないことになっています。

続きを読む

無理なExcel管理が招くプロジェクトの停滞について

はじめに

こんにちはーこんにちはー。

たーせるです。プログラマ3年生です。

今日は、バグ管理にまつわる話を起点にした連ツイを適当にだらだらまとめました。

続きを読む

JUnitでHello World

お久しぶりですこんにちは。

最近は低調気味でなかなか体が思うように動かないたーせるです。

今日は、いつか書こうと思っていたJUnitネタです。

はじめに

ここ数年で、開発の現場には JUnit をはじめとしたテスト自動化が急速に普及しました。

とはいえ、やはりまだまだプロジェクトによってかなり温度差がある印象です。

特に保守開発をやっている人たちからは、「JUnitを導入したけれど、使い方がよく分からない」「JUnitが低機能すぎて使い物にならない*1」という声が、ときどき聞こえてきます。

かくいう僕も、会社に入って初めてJUnitに触れたときは「なんだこれ……」と思ったものです。

たしかに従来の考え方で組まれたプログラム(レガシーコード)をJUnitでテストするのは大変で、考え方の転換が必要です。

そこで今日は、Javaプログラマなら誰もが一度は書いたことのあるHello World」を題材に、テストしやすいコードに直していく過程をご紹介したいと思います。

想定環境

みんな大好きHello World

まずは肩慣らしに、すべての出発点である Hello World を書いてみました。

Main.java

package ja.tercel_tech.hello;

public class Main {
    
    public static void main(String... args) {
        System.out.println("Hello world");
    }
}

かんたんですね。

しかし、このHello, WorldをJUnitでテストするのは非常に大変です。

参考までに、「上記のmain()メソッドを実行して"Hello world"が出力されること」を検証するテストプログラムを以下にご紹介します。

*1:JUnitが低機能というわけではなく、どちらかというとテスト対象の設計に難がある場合が多いような気がします。

続きを読む

私はベイマックス。

演算子オーバーロードを利用して、(○-○)の評価結果を"私はベイマックス。あなたの心とカラダを守ります。"にしてみるテスト。

// Playground - noun: a place where people can play

import Cocoa

func - (left: String, right: String) -> String {
    return "私はベイマックス。あなたの心とカラダを守ります。"
}

// Swiftでは、識別子に黒丸記号「●」を使えない……
let= "こんにちは、たーせるさん"

(○-○)

2014年 買ってよかった本10選

2014年も残すところあとわずかです。

そんな今年1年のおさらいに、僕が実際に買って読んだ中でも特に琴線に触れた本を、独断と偏見で10冊ほどピックアップしました。すごい今更ですが適当に紹介したいと思います。

あ、アフィリンクは貼っていませんので、そういうのが気になる方も安心してクリックしてください。

レガシーコード改善ガイド

新人1年目の頃に読んでおくべきだった。
GUIビジネスロジックがべったり癒着していたり、ロジックにDBアクセスがべったり癒着していたり、とてもそのままではテストを書けない既存の「レガシーコード」をテスト可能な形にリファクタリングするための珠玉のノウハウ集。
訳も熟れていて非常に読みやすい。今年一番わくわくした技術書。もし僕が王国を作ったら、国民必読の書にする法律を制定したいくらい素晴らしかった。

レガシーコード改善ガイド(マイケル・C・フェザーズ 平澤章 越智典子 稲葉信之 田村友彦 小堀真義 ウルシステムズ株式会社) | 翔泳社の本

弱虫ペダル

冴えないオタク少年の小野田坂道が、自転車に魅せられて成長していく物語。
絶望的な局面から何度も復活劇を遂げる様子が非常に熱く描かれている。
モチベーションが下がったときに読むとなぜか小野田くんに感情移入してしまい、燃え上がる闘志を抑えきれなくなる。それくらいメンタリティに作用する楽しいマンガ。

弱虫ペダル 第1巻 | 秋田書店

C#ショートコードプログラミング 第2版

Windows開発の中核言語として不動の地位を築いたC#
LINQラムダ式を駆使すればキミのコードはもっと短くなる!
一応逆引きリファレンス形式だが、あまり厚い本でもないので通読してコード短縮テクの引き出しを増やしておきたい。

日経BP書店|商品詳細 - C#ショートコードプログラミング 第2版

ザ・ゴール コミック版

プロジェクト管理に「クリティカルチェーンマネジメント」の思想を取り入れた故エリヤフ・ゴールドラット氏。
彼の名著「ザ・ゴール」が待望のコミック化を遂げた。わー(歓声) ぱちぱち(拍手)
「なぜみんな忙しいのに結果が出ないのだろう」という素朴な問いに対して、叡智に満ちたカイゼンのプロセスが非常に分かりやすく例示されており、中身もかなり濃い。活字嫌いの僕でも楽しく読めた。そんじょそこらのビジネスハウツー本とは格が違う
余談ではあるが、岸良氏の本では「職場の理不尽―めげないヒント45 (新潮新書)」も心底お勧め。

ザ・ゴール コミック版 | エリヤフ・ゴールドラット、ジェフ・コックス・原作/岸良裕司・監修/青木健生・脚色/蒼田 山・漫画 | 書籍 | ダイヤモンド社

15時間でわかるGit集中講座

僕はSubversionで満足な人だったのだけど、なんか周りの人がGitばっかりになってしまい危機感を覚えてやむなく買った本。
GitのGUIフロントエンドであるSourceTreeを使って基本的な操作を体得する楽しい本。
実際に手を動かしてみるうちに、分散型バージョン管理の利点が少しずつ見えてきた。Gitべんり。
Git本は巷に多く溢れているが、当時はこれが一番わかりやすそうだったのでこれにした。

15時間でわかるGit集中講座:書籍案内|技術評論社

北斗の拳 イチゴ味

北斗の拳の外伝的作品。主人公はまさかの南斗の将星・聖帝サウザー
友達がいない・極端にウブ・精神年齢が異常に幼い。完全に問題児と化したサウザーが愉快な仲間達を巻き込んで暴れ回る。
ただし画風(だけ)は完全に元祖「北斗の拳」の世界観を踏襲していたり、原作ファンにしか楽しめない高度なギャグやネタバレも大量に盛り込まれているため、北斗の拳を知らない人が読んでも内容を理解しづらいと思う。

北斗の拳 イチゴ味 第1話 聖帝様、再誕の巻 - 行徒妹 - Yahoo!ブックストア

新装版 リファクタリング

これも有名な本。
プログラムの振る舞いを変えずにコードを変更するための様々なノウハウをカタログ化した名著。今年は装いも新たに再刊行された。訳書にもかかわらず非常に読みやすい。
付録では最新(ではなくJava 7)の開発環境に準拠した「再リファクタリング」が示されている。
本編の内容は前出のレガシーコード改善ガイドと重複する箇所もあるが、2冊あって困ることはない。

新装版 リファクタリング 既存のコードを安全に改善する | オーム社eStore

Nature of Code

一部(Processing界隈)で話題になった。巷に溢れる薄い入門書とは一線を画した本格的な内容を誇る良書。
物理シミュレーション、遺伝的アルゴリズムニューラルネットワークなど、アカデミックなトピックを扱っていながら、それでいて平易な説明とシンプルなコードで楽しく「シミュレーション」の作り方を学べる。
より本格的な実装を知りたくなったら「ゲーム開発者のためのAI入門」を読もう。

Nature of Code|書籍|株式会社ボーンデジタル

裏口からのC#実践入門

ふたたび川俣氏のC#本。Win32APIやMFC時代、あるいは.NET黎明期のまま時が止まってしまっているWindowsプログラマが読めば目から鱗間違いなし。
入門とあるが、プログラミングスタイルが確立したベテランこそ読むべき一冊。あるいは、ベテランの偏向した思想に毒されたくない新人も読んでおこう。
ただし、テスタビリティに関する指針がまったく無い点は気になった。川俣氏は過去にNUnitとモックを使ったテストダブルの技法に関するコラムを書いていたこともあり、その辺りの造詣も深いはずなのだが…。

裏口からのC# 実践入門 ―バッドノウハウを踏み越えて本物へ!!:書籍案内|技術評論社

開発のプロが教える Swift標準ガイドブック

つい先日買った。「詳解 Swift」もよい本だったが、僅差で「開発のプロが教える Swift標準ガイドブック」の方をプッシュ。「詳解 Swift」では解説を避けていたKVCやKVOが扱われており、また日本語の解説がまだ少ないCore DataやテスティングフレームワークQuickに関する言及もある(本当にさらっと触れているだけだが)。

開発のプロが教える Swift標準ガイドブック | マイナビブックス

以上です。

なんかマンガの比率が多いですね。

Copyright (c) 2012 @tercel_s, @iTercel, @pi_cro_s.