2012年7月16日月曜日

JSTQB認定テスト技術者資格


2012年2月に受けた資格試験について、紹介したいと思います。
私が取得したのはJapan Software Testing Qualifications Boardという組織が認定するテスト技術者の資格です。
レベルが2段階、Foundation Level(FL)とAdvanced Level(AL)とがあります。

JSTQBのサイト
http://jstqb.jp/

私が受けたのはFLの方で、ソフトウェアテストの基礎知識を問うものです。
内容は
・用語の定義
・テスト技法の名称、内容(いつどんなテストにそれを使うか)
・単体テスト、結合テストなど、テストのフェーズによってどのような観点が必要か、目的は何か
・レビュー(静的技法)
など。

受けようと思ったきっかけは、前のプロジェクトで受け入れ試験をすることになったところから始まります。
「テスト」ってどんなふうに考えたらいいんだろう?と思いながら本屋さんを覗いていて、とてもわかりやすくまとめてあったのがこのJSTQBの本でした。




目前の問題解決ができればよかったはずが、読むうちにどんどん興味がわき、資格取得に至りました。
別にテスターでなくても、テストのことを考えらるというのは大事だと思っています。
どう設計するか、どういうロジックで問題を解決するか、どんなドキュメントを残すか…
テストの観点からテスト以前のフェーズについてもアプローチを取ることができると、テストというミクロな世界から、開発効率やシステム全体の品質というマクロなところまでカバーできてしまうのではないかという淡い考察を抱いているところです。

2012年6月20日水曜日

テンションを上げるためのCording

最近はSEらしい仕事を試行錯誤しながら、リーダーに色々と指導されながらこなしている。
そうすると頭の中が日中の仕事のことでいっぱいになって、眠ろうにも眠れない。
ぼーっとしてるといつの間にか仕事のことを考えている。

これじゃいかん!
というわけで気持ちを切り替えるために仕事とは全く関係の無いCordingをすることにした。
題材はRuby。

で、早速今日からスタートし、とりあえずFizzBuzzを書いた。


# RubyでFizzBuzzをかいてみよう!
# 3の倍数でFizz 5の倍数でBuzz 15の倍数でFizzBuzzね


for num1 in 1 .. 55 do
    if num1 % 15 == 0 then
        print(num1)
        print("  ")
        puts("FizzBuzz")
    end


    if num1 % 5 == 0 then
        print(num1)
        print("  ")
        puts("Buzz")
    end
    
    if num1 % 3 == 0 then
        print(num1)
        print("  ")
        puts("Fizz")
    end
end

こんな感じ。
今までやってきた言語(といっても数少ないw)だと「else if」で条件をさらに指定できていたのだけど、そういうふうにはかけなかった。
endが足りないよ!って怒られるのだ。
まだ始めたばかりでよくわかっていないけど、条件文1つずつに対してendが必要?

・・・そんな感じで仕事のことを忘れてちょっと没頭できるので楽しい。
とりあえず、何か動くものを作るのを目標に、ちょいちょいやっていこうかなと思う。

やっぱりCordingは楽しいのだ。


2012年1月13日金曜日

作りたい、だったら作ればいい〜iPhoneアプリ製作を始めました〜


やりたいやりたいと思っていたiPhoneアプリの開発をやってみることにしました。
始めないことには何も進展しない!ということでXcodeをダウンロードし、インストール。
本屋さんで物色してほしい物リストに入れていた本をAmazonで購入し、最初の画面が出来上がりました。

実際に動かしてみると「私、iPhoneアプリデベロッパの仲間入りしようとしてる!」という単純な事実がとても嬉しくて、わくわくして、この気持ちをいつかまた思い出したいと思い、この記事を書きました。

Start
本に書いてあったようにテンプレートを使って新規プロジェクを作成し、画面にラベルを配置して文字を入力し、シミュレータで再生しました。
はい、Hello worldの出来上がり。

素晴らしい!(ここまでは開発らしいことは何もしていません 笑)
でもiPhoneアプリ開発の入り口が簡単だとわかったのは実際にやってみたからだなと思います。
10日でできるアプリ開発入門、というような見出しはよくみかけますが、実際はそんなに簡単に出来ないだろうと思っていました。
まだまだ本当に入り口に立っただけですが、こんなに簡単にアプリ開発の入り口を見せてもらえたことは次の作業への動力になりました。

きっかけ
AndroidかiPhoneか、どちらでもいいから自分でアプリを作ってみたいなという考えはしばらく前からずっとありました。
単純にアプリケーションを作りたい、という気持ちです。
もともとモノを作ることは好きで、今はソフトウェア業界で仕事をしているので、それなら作るのはソフトだなと思うわけです。
それにTwitterでみかけるデベロッパさんのつぶやきを、同じように自分もやりたいという気持ちもありました。
この仕様をどうしようかとか、ここのバグがどうしても解消できないとか、リリースしました!!というツイートが出来ることがかっこ良く見えるのです 笑
また、身近にもiPhoneやAndroidのアプリを開発している人がいらっしゃり、そういう人たちから直接話しを聞くことで大いに刺激されました。

さて、何をつくるか
では何をつくろうかという話になるわけですが、そこはやはり自分が使って便利だと思えるものを作りたいです。
とにかく作りたいから、簡単で動かせるものにしようかとか、お世話になっている人のお仕事をお手伝いできるようなものにしようかとか色々考えましたが、自分の為に開発するという答えに落ち着きました。
要件を詰めるのも、アイディアを出すのも、折り合いをつけるのも、自分が欲しいものだったら自分と相談すればいいだけですしね。

ちなみにこのアイディアを出すにあたっては前回の記事に書いた3回3ラウンドのフレームワークを使いました。
アイディア創造のフレームワーク
作りたいな、こんなのどうかな?というネタをとにかく吐き出して、整理して練りあげてはまた吐き出すという作業の繰り返し。
でもそれをすることで作りたいアプリの要件が具体的に想像できるようになりました。

目標
自分が使いたいアプリの構想は結構具体的になってきました。
とりあえずはその構想の30%くらいを実現させるつもりで作ります。
起動して、ワークスペースとなる1画面が表示されて、終了!っていう一連の処理ができること、それが第一段階の目標です。
そこから第二段階、第三段階…というように成長させていけたらいいなと思います。
ここまでくると夢のようです。
でもやればできる、夢が現実になる、そう思って頑張ります。

2011年12月13日火曜日

アイディア創造のフレームワーク

どうやったらいいアイディアを生み出せるか。
そんなことを考える機会があり、レポートを書くことになりました。
レポートの材料として自分で本を選び、A41枚程度にまとめるというのが課題。

実はそういうレポートを書いたことのない私ですが、あえてここにそのレポートを載せようと思います。


目的を果たすためのアイディアをどう生み出すか



小沢正光氏の著書、「プロフェッショナルアイディア。」についてレポーティングする。
著書で筆者は思いつきではなく、必要なときにニーズを満たすアイディアを生み出すには、3回3ラウンドのプロセスが有効であるとしている。
3回3ラウンドとは「書きだす」「整理する」「チョイスする」という3つのステップを順にこなすことでアイディアを練りあげていき、さらにこれらを3回繰り返すことでアイディアを完成させる、という手法である。

「3回3ラウンド」ではまず最初に「書きだす」作業を行う。この作業で頭の中にあるすべてのことを目に見える形にする。
頭の中で考えているだけでは曖昧だったことも、書き出すことで具体化していくのだ。
この作業では、次の点に気をつける。
・優劣はつけず、思いついた考えをすべて書き出す(中途半端なままにすると心残りになり、アイディアを見極める阻害要因となるため)
・書き出す作業は手書きで行う(手で書くことで脳が活性化するため)
・人目を気にしなくてよい場所で行う(考えることに集中するため)
・書き出す作業は最長でも2時間を限度にする(集中して作業に取り組むため)

次に、書き出したことを「整理する」。
書き出したアイディアを第三者にも理解できるように別の紙に清書する。このことによって、書き出されたアイディアを鮮明にすることができるのだ。
この作業では、次の点に気をつける。
・重複している内容はひとつにまとめる(思いつくままに書き出したものには重複するものが存在するため)
・意味不明なものは書き改めるか削除する(考えながら書き出したものの中には自分でも理解できないものもあるため)
・アイディアの良し悪しを吟味しない(整理することだけに集中するため)
・誤字脱字をなくし、わからない語句を調べて表現を練る(上司やクライアントに提出できるレベルにするため)
・骨子や要点に的を絞り、一目見て理解できる内容にする(シンプルな表現にするため)
・字は丁寧に書く(丁寧に書くことで自分の考えのあらが見えてくるため)
・清書する紙はひとつのアイディアにつき1枚使用する(次の作業で使用するため)

最後に、「チョイスする」。
清書した紙を壁に貼り、少し離れた位置から紙を眺め、良いと思ったものは残し、そうでないものは剥がしていく。
こうすることで客観的な視点に立つことができ、思い入れを排除して正しくアイディアの良し悪しを判断できるようになる。
この作業では、次の点に気をつける。
・以下の3つの視点に立って3つすべての視点を満たすアイディアを選ぶ
・個人の視点:自分の価値観に照らし合わせてそのアイディアが好きか嫌いかを判断する(自分が好きなアイディアでないと第三者を説得することが難しいため)
・相手の視点:クライアントの視点に立って、そのアイディアが受け入れられるかどうか、利益になるかどうかを考える(クライアントに満足してもらうため)
・全体の視点:社会的な視点に立って、業界での評価や社会的影響の観点からアイディアを選ぶ(役割や評価、モラルについて検証するため)

これらの3つの作業を1ラウンドとし、3回繰り返す。
3回繰り返すのには次のような理由がある。
・最初に出たアイディアには自分のおごりや思い込みが強く出ていることが多く、公には通用しない可能性がある
・頭の中にあることをすべて書き出していても、まだアイディアは頭の中に眠っている
・繰り返すことで考えの甘さをなくしていく
また、3ラウンドは必ず締切りを決めて計画を立てて実行する。時間的な制限の中で力を振り絞ることで良いアイディアを生み出すことができるからだ。

このように3つの局面それぞれでその作業に集中し、それらを繰り返していくことで練り上げる。これが筆者の言う3回3ラウンドであり、そこで生み出されたアイディアは、目的を達成するためのソリューションとなるのである。

参考




レポートなのに書いていると主観的になってきてしまい、視点を遠ざけるのに苦労しました。
自分ではあまり満足していませんが今回はこれで…

理解したことを人に伝えようとすると自分の足りない部分がよく見えてきます。
このアイディアのフレームワークと同じように、とにかく書きだしてみること、これはアイディアを創りだすこと以外にも有効なのかもしれないです。


2011年7月12日火曜日

VBAでHTMLのTableタグ内データを取得する

HTMLファイルからデータを取得するプログラムをVBAで作りました。

具体的にはhtml、body、table、tdタグをキーにしてTableタグ内のデータを取得する仕組みです。
tdタグ内に記述されたデータ(innertext)が取得対象となります。
実行環境はExcel VBA、IE6です。
VBA側の参照設定はデフォルトのままで実行できます。


TDタグ内のデータを取得するプロシージャ



Sub getTDinnertext()

    Dim intIndex As Integer
    Dim objTag As Object
    Dim objTagTable As Object
    Dim varTDinner(371) As Variant
  
    intIndex = 0
  
    For Each objTag In objIE.document.body.all
      
        If objTag.tagname = "TABLE" Then
      
            For Each objTagTable In objTag.all
              
                If objTagTable.tagname = "TD" Then
              
                    varTDinner(intIndex) = objTagTable.innertext
                  
                    '取得したデータに対する処理
                    'Debug.Print intIndex &  "::" & varTDinner(intIndex)
                    'Cells(intIndex + 1, 1).Value = intIndex
                    'Cells(intIndex + 1, 2).Value = varTDinner(intIndex)
          
                    intIndex = intIndex + 1
                  
                End If
              
            Next objTagTable
          
        End If
      
    Next objTag
  
End Sub


取得した値は配列型の変数に格納しています。
このプログラムではTD要素が371個存在したので371個の要素を持つ配列を宣言しています。
(動的配列を使った方がスマートに書けるのかな)
なのでTD要素の個数が372以上の場合、上記プログラムでは「インデックスが有効範囲にありません」というエラーが発生します。

また、このプログラムは先にIEオブジェクトを生成して取得対象のWebページを開いておく必要があります。
実際には以下のようなプログラムの中で上記プロシージャを呼び出して使っています。


アクセスしたサイトからデータを取得するプロシージャ

Sub test110712()

    'IEオブジェクトを作るサブルーチン
    Call CreateIE
    
    objIE.navigate "http://www.shimatetsu.co.jp/bus/busjikoku/bust01.htm"
    
    'ページの読み込みを待機するサブルーチン
    Call WaitIE
    
    objIE.Visible = True
    
    Call getTDinnertext

    Set objTag = Nothing
    Set objTagTable = Nothing
    Set objIE = Nothing
    
End Sub


※CreateIEプロシージャとWaitIEプロシージャについてはお手数ですがVBAでJavaScriptが埋め込まれたリンクをクリックするエントリーを参照してください。


例えば長崎空港線(島原港⇔長崎空港)のデータを取得すると次のような結果が返ってきます。

仕事場の環境的な制約でVBAを使ってこんなものを作っていますが、これが意外に役に立っていたりします。

イミディエイトウィンドウの限界

VBE(Visual Basic Editor)を使ったVBAプログラミングのお話です。

テストコードの動作確認のためにDebug.printを使ってイミディエイトウィンドウに取得した値を出力していました。
一度に371行のデータを出力するプログラムなのですが、お?
全てのデータが出力されていません。
※テキストは一部マスキングしています。

プログラムが悪いのかと思ってステップ実行をしてみたところ、ちゃんと1行目から順に出力されていました。
つまり、イミディエイトウィンドウで一度に出力できるデータ数は
371 - 172 = 199 行?

イミディエイトウィンドウの最終行は常にプログラムが1行入力できる状態にしてあります。
従ってイミディエイトウィンドウで使用できる行数は199 + 1 = 200 行ということです。

199を超えるデータを出力してテストする場合は出力のロジックか出力先を考えてあげないといけないですね。

2011年7月11日月曜日

WARファイルのデプロイ

勉強が進まなすぎて悲しくなってくるので、もうちょっとしたことでもいいからアウトプット。
WARファイルのデプロイについてメモっておく。

サンプルプログラムをインポートして参照するためにはWARファイルをデプロイしてEclipseで使えるようにする必要がありますよ、ということで以下デプロイ手順。

1.[ファイル]→[インポート]
ファイルをインポートする、っていうところが入り口。

2.インポート対象を選択
[Web]フォルダの中にある[WARファイル]を選択して次へ進む。

3.インポートするWARファイルを選択する

4.選択したファイルが表示されたら完了!

…これでデプロイは完了。
ここからインポートしたソースを見ながら勉強していくことになります。