夢十夜

こんな夢を見た

続きを読む

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

英語と仲直りがしたい

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

  • @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= "こんにちは、たーせるさん"

(○-○)

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