自宅開発環境のアップデート
自宅開発環境アップデートです。
前回の教訓を生かして、こまめにアップデートします。自分への覚書を残しておきます。
■Ubuntuアップデート
VirtualBox上のEclipse等を詰め込んだ、Ubuntu開発環境をアップデート。
特に問題なく終了。
■Hyper-V Serverアップデート
古くなったPCに、Hyper-V 2012 Server Consoleを入れています。
Hyper-V ServerのWindows Updateを実行。特に問題なく終了。
Hyper-V上のCentOS5.10は、yum update でアップデート。特に問題なく終了。
Hyper-V上のJenkinsとJenkinsプラグインもアップデート。特に問題なく終了。
■Windowsのアップデート
Windows8.1→Windows10にアップデート。
アップデート直後は、画面の解像度が変更できなかったり、
Google Chromeが強制終了するなどで、ちょっとビビりましたが、
Windows Updateとディスプレイドライバを更新したら治りました。
今のところ、問題なく使えています。なんとなく、OS自体が軽くなった気がする。(気分的に)
Windows10にしてしまったので、 Hyper-VServerのリモート管理ができなくなった・・・
Windows10用のリモート サーバー管理ツールと、hvremoteの配布待ちですね。
https://code.msdn.microsoft.com/windowsdesktop/Hyper-V-Remote-Management-26d127c6
Groovyでユニットテストを書いてみる(DbUnit)⑧
Groovyでユニットテストを書いてみます。
今回は、DbUnitを使用してみます。
■Groovyでユニットテスト
package sample // いろいろと方法がありますが、今回は、spockを使用します。 // spock:https://code.google.com/p/spock/ // spockのJARファイルは、下記からダウンロードしました。 // http://repo1.maven.org/maven2/org/spockframework/spock-core/1.0-groovy-2.3/ // spockのテストをEclipseで実行するには、 //「Preferences ⇒ Groovy ⇒ Use monospace font for JUnit」をチェックする。 import static org.junit.Assert.* import groovy.sql.Sql import mockit.* import org.dbunit.Assertion import org.dbunit.database.DatabaseConnection import org.dbunit.dataset.IDataSet import org.dbunit.dataset.excel.XlsDataSet import org.dbunit.operation.DatabaseOperation import org.junit.* import spock.lang.* class ユニットテスト extends Specification { @Test def "DbUnitを使ってみる(参照)"() { // DbUnitのJARファイルは、下記からダウンロードしました。 // http://sourceforge.net/projects/dbunit/files/dbunit/ // SLF4Jも必要です。 // slf4j-nop-X.X.X.jar、slf4j-api-X.X.X.jar // http://www.slf4j.org/download.html // Apache POIも必要です。 // https://poi.apache.org/download.html setup: // 前準備 // H2データベースを起動 def server = org.h2.tools.Server.createTcpServer().start() // DB接続 def sql = Sql.newInstance( 'jdbc:h2:tcp://localhost/~/test', 'sa', '', 'org.h2.Driver' ) // テーブル作成 try { sql.execute( "CREATE TABLE TEST ( NAME varchar(50), TEXT varchar(100) )" ) } catch( Throwable t ) {} // 既にテーブルがある場合のエラーは無視 // 初期データ投入 IDataSet xls = new XlsDataSet( new File( './TEST.xls' ) ) // .xlsx形式だと動かない・・・ DatabaseConnection connection = new DatabaseConnection( sql.getConnection() ) DatabaseOperation.CLEAN_INSERT.execute( connection, xls ) when: // SELECT実行 def rows = sql.rows( "select * from TEST" ) then: // 実行結果を検証 rows.size() == 1 // 取得行は1件であるか rows[ 0 ].NAME == 'test' // NAMEカラムの値が'test'であるか rows[ 0 ].TEXT == 'text' // TEXTカラムの値が'text'であるか cleanup: // 後処理 sql.close() server.stop() } @Test def "DbUnitを使ってみる(更新)"() { setup: // 前準備 // H2データベースを起動 def server = org.h2.tools.Server.createTcpServer().start() // DB接続 def sql = Sql.newInstance( 'jdbc:h2:tcp://localhost/~/test', 'sa', '', 'org.h2.Driver' ) // テーブル作成 try { sql.execute( "CREATE TABLE TEST ( NAME varchar(50), TEXT varchar(100) )" ) } catch( Throwable t ) {} // 既にテーブルがある場合のエラーは無視 // 初期化(全レコード削除) IDataSet xls = new XlsDataSet( new File( './TEST.xls' ) ) // .xlsx形式だと動かない・・・ DatabaseConnection connection = new DatabaseConnection( sql.getConnection() ) DatabaseOperation.DELETE_ALL.execute( connection, xls ) when: // INSERT実行 sql.execute( "INSERT INTO TEST( NAME, TEXT ) values ( 'test', 'text' )" ) then: // 期待値Excelと比較 IDataSet actual = connection.createDataSet() Assertion.assertEquals( xls.getTable( 'TEST' ), actual.getTable( 'TEST' ) ) // テーブルと期待値Excelが一致するか cleanup:// 後処理 sql.close() server.stop() } }
DbUnitで、データベース操作のユニットテストをしてみました。
参照系は、Excelファイルから初期データを投入しておき、SELECTの取得結果が想定どおりであるかを確認。
更新系は、INSERTを実行し、INSERT結果が期待値Excelファイルと一致するかを確認します。
初期データおよび期待値のExcelファイルは下記の形式です。
シート名がテーブル名、1行目がカラム名、2行目移行がデータです。
Groovyでユニットテストを書いてみる(Mock)⑦
Groovyでユニットテストを書いてみます。
今回は、Mockを使用してみます。
■Groovyでユニットテスト
package sample // いろいろと方法がありますが、今回は、spockを使用します。 // spock:https://code.google.com/p/spock/ // spockのJARファイルは、下記からダウンロードしました。 // http://repo1.maven.org/maven2/org/spockframework/spock-core/1.0-groovy-2.3/ // spockのテストをEclipseで実行するには、 //「Preferences ⇒ Groovy ⇒ Use monospace font for JUnit」をチェックする。 import static org.junit.Assert.* import groovy.sql.Sql import mockit.* import org.dbunit.Assertion import org.dbunit.database.DatabaseConnection import org.dbunit.dataset.IDataSet import org.dbunit.dataset.excel.XlsDataSet import org.dbunit.operation.DatabaseOperation import org.junit.* import spock.lang.* class ユニットテスト extends Specification { @Test def "Mockを使ってみる"() { // Mockを使って、既存クラスの挙動を変更する事ができる。 // 異常系の試験が簡単になります。(わざとエラーコードを返却させるなど) // JMockitを使います。 // JMockitのJARファイルは、下記からダウンロードしました。 // http://jmockit.org/ // JMockit.jarをjunit.jarより上位のクラスパスに設定します。(JMockit.jarを先に読み込む必要がある為) setup: // 前準備 // System.currentTimeMillis()にMockを設定し、現在時刻でなく、0を返却する new MockUp<java.lang.System>() { @Mock long currentTimeMillis() { return 0 } } cleanup:// 後処理 when: def x = System.currentTimeMillis() then: x == 0 // 0で返却されるのでテストOK } }
JMockitで、Mockを使ってユニットテストをしてみました。
System.currentTimeMillis()は、Javaの標準ライブラリですが、
Mockにすり替えて、戻り値を0に変更しています。
このように、Mockを使うと、
Java標準APIの挙動を自由に操作できるので、ユニットテストが簡単になります。(ラップする必要がなくなります)
Groovyでユニットテストを書いてみる⑥
Groovyでユニットテストを書いてみます。
■Groovyでユニットテスト
package sample // いろいろと方法がありますが、今回は、spockを使用します。 // spock:https://code.google.com/p/spock/ // spockのJARファイルは、下記からダウンロードしました。 // http://repo1.maven.org/maven2/org/spockframework/spock-core/1.0-groovy-2.3/ // spockのテストをEclipseで実行するには、 //「Preferences ⇒ Groovy ⇒ Use monospace font for JUnit」をチェックする。 import static org.junit.Assert.* import groovy.sql.Sql import mockit.* import org.dbunit.Assertion import org.dbunit.database.DatabaseConnection import org.dbunit.dataset.IDataSet import org.dbunit.dataset.excel.XlsDataSet import org.dbunit.operation.DatabaseOperation import org.junit.* import spock.lang.* class ユニットテスト extends Specification { @Test def "java.lang.Mathのテスト(基本)"() { setup: // 前準備 cleanup:// 後処理 // when: テストしたいことを実行 // then: 実行結果をチェック when: def x1 = Math.max( 1, 2 ) then: x1 == 2 // when 〜 then は複数記載できる when: def x2 = Math.max( 0, 2 ) then: x2 == 2 when: def x3 = Math.max( 1, 0 ) then: x3 == 1 } @Test def "java.lang.Mathのテスト(応用)"() { setup: // 前準備 cleanup:// 後処理 // expect 〜 where で、引数と戻り値の複数パターンをまとめて記載できる expect: Math.max( a, b ) == c where: a | b || c 1 | 2 || 2 0 | 2 || 2 1 | 0 || 1 } }
spockを使うと簡潔に書けます。
JUnitを使った事がある人は、なんとなくコードからイメージが掴めると思います。
特筆すべきは、パラメータと戻り値の複数パターンテストですね。
where句にマトリックスのイメージで、テストパターンが記述できます。
テストパターンが一目瞭然です。
spockをEclipseで使用するには、設定を1箇所変更する必要があります。
Eclipseメニューの「ウィンドウ」→「設定」を選択。
「Groovy」→「Use monospace font for JUnit」をチェックします。
実行してみます。実行方法はJUnitと同じです。
ソースファイルを選択して、右クリック。
コンテキストメニューから「実行」→「JUnit テスト」を選択します。
ユニットテストでエラーになると、こうなります。
Eclipse上だとインデントがズレるので、ちょっと見にくいですが、
テキストをコピーすると下記のようになります。
spockの場合、引数や期待値、実際の値を示してくれるので、わかりやすいですね。
(引数a=0、b=2、期待値は3だけど、実際の値は2で一致してないよ。といっています)
Condition not satisfied: Math.max( a, b ) == c | | | | | 2 0 2 | 3 false at sample.UnitTest.java.lang.Mathのテスト(応用)(UnitTest.groovy:59)
Groovyでデータベースに接続してみる⑤
Groovyでデータベースに接続してみます。
■Groovyでデータベースに接続
package sample import groovy.sql.Sql // GroovySQLで、データベース操作します。 // SQL文はダブルクォートで囲みます(シングルクォートだと動かなかった・・・) // H2データベースを使用します。 // http://www.h2database.com/html/main.html // H2データベースを起動 server = org.h2.tools.Server.createTcpServer().start() // DB接続 def sql = Sql.newInstance( 'jdbc:h2:tcp://localhost/~/test', 'sa', '', 'org.h2.Driver' ) // テーブル作成(既にテーブルがある場合のエラーは無視) try { sql.execute( "CREATE TABLE TEST ( NAME varchar(50), TEXT varchar(100) )" ) } catch( Throwable t ) {} // INSERT String name = 'test' String text = 'text' sql.execute( "INSERT INTO TEST( NAME, TEXT ) values ( ${name}, ${text} )" ) // UPDATE text = 'text2' sql.execute( "UPDATE TEST SET TEXT = ${text} WHERE NAME = ${name}" ) // SELECT sql.eachRow( "select * from TEST" ) { row -> println row.NAME + " : " + row.TEXT } // DELETE sql.execute( "DELETE FROM TEST WHERE NAME = ${name}" ) // 後処理 sql.close() // H2データベースを停止 server.stop()
GroovySQLを使うと簡潔に書けます。
SQLのパラメータも、変数と自動バインドしてくれるので便利ですね。
また、今回は、H2データベースを使用しました。
Javaで作られているので、JARファイル1つでDB環境が作れます。
ちょっとした動作確認に最適です。
GroovyでExcelファイルの読み込み④
GroovyでExcelファイルの読み込みをしてみます。
■GroovyでExcelファイルの読み込み
package sample // いろいろと方法がありますが、今回は、GExcelAPIを使用します。 // GExcelAPI:https://github.com/nobeans/gexcelapi // Groovyの標準的なモジュール管理ツール Grapeも使ってみます。 // @Grab( 〜 )で、利用するライブラリを定義すると勝手にダウンロードしてくれます。 // @GrabResolver( 〜 )で、ダウンロードURLを定義します。 @GrabResolver( name='kobo-maven-repo', root='https://github.com/kobo/maven-repo/raw/master/release' ) @Grab("org.jggug.kobo:gexcelapi:0.2") import org.jggug.kobo.gexcelapi.GExcel // Excelファイルの読み込み def book = GExcel.open( 'sample.xlsx' ) def sheet = book[ 'Sheet1' ] // セル値の参照 println sheet.A1.value // セル名指定 println sheet.getRow( 0 )[ 0 ] // 行列番号指定 // 全行を参照 for( row in sheet.rows ) { println row[ 2 ] // 3列目の値 }
GExcelAPIを使うと簡潔に書けます。(Javaも利用できるので、ApachePOIやJExcelAPIも利用できます)
通常は、GExcelAPIのJARファイルをダウンロードして、クラスパスを通す必要がありますが、
Grapeのアノテーションを記載しておくと、その作業を自動でやってくれます。便利ですね。
プロジェクトマネージャ試験に合格しました!
平成27年度 春期 プロジェクトマネージャ試験に合格しました!
3回目の挑戦で、やっと合格です!
今回は、今までの受験で一番手応えがありました。
でも、合格するとは思っていなかったので、
「今年も勉強しなきゃ・・・」と半分諦めていたところに、
合格だったので、ちょっと嬉しいです。
一発合格じゃないので、参考にならないと思いますが、
自分のやった事を書いておきます。
■勉強時間
・平日は勉強しない。
・毎週土曜日の午前に2〜3時間勉強した。後半は、日曜の午前中も2〜3時間勉強した。
・午前Ⅰは免除なので、午前Ⅱ、午後Ⅰ、午後Ⅱを交互に勉強した。
■午後Ⅱ
・ひたすら過去問を解く(5〜10年分)。そのうち、問題見たただけで、解答がでてくるようになります。
■午後Ⅰ
・PMの基本知識を覚える事は当然として、問題文から解答を導く方法を覚える事が重要でした。
・下記のみよちゃん本が大変、参考になりました。
- 作者: 三好康之
- 出版社/メーカー: 翔泳社
- 発売日: 2011/09/15
- メディア: 単行本(ソフトカバー)
- 購入: 6人 クリック: 44回
- この商品を含むブログ (14件) を見る
■午後Ⅱ
・設問で問われていることを理解し、問いに対して、(PMがすべき事で)打ち返す記述で論文を作る必要があります。
・設問から論文の章立てを作成するなど、論文試験特有のテクニック的なものがありました。
・下記のみよちゃん本が大変、参考になりました。
プロジェクトマネージャ 午後II 最速の論文対策 (TACの情報処理技術者試験対策シリーズ)
- 作者: 三好隆宏
- 出版社/メーカー: TAC出版
- 発売日: 2010/03/11
- メディア: 単行本(ソフトカバー)
- 購入: 39人 クリック: 1,167回
- この商品を含むブログ (4件) を見る
・自分のPM経験だけでは、論文は書けません。他人の論文から、PM経験をストックして活用する必要がありました。
・下記の論文集が大変、参考になりました。
プロジェクトマネージャ合格論文の書き方・事例集 (情報処理技術者試験対策書)
- 作者: 岡山昌二
- 出版社/メーカー: アイテック情報処理技術者教育センター
- 発売日: 2011/01
- メディア: 単行本
- 購入: 46人 クリック: 460回
- この商品を含むブログ (7件) を見る
■合格してみて思ったこと
・合格したからといって、何か特別なスキルが身についた気はしない・・・ただ、PMの基本知識は身についたので良かったと思う。
・日本語的なスキルは以前より向上した気がする。(設問(文章)から意図を読み取る、適切な文章が書けるなど)これって意外とPMに必要なスキルかもね。
・諦めずにコツコツ勉強続けて良かった・・・
・論文は、下手な字で書いても受かるんだな・・・