• 検索結果がありません。

WindowsâAâvâèâeâXâgÄ⌐ô«ë╗

N/A
N/A
Protected

Academic year: 2018

シェア "WindowsâAâvâèâeâXâgÄ⌐ô«ë╗"

Copied!
57
0
0

読み込み中.... (全文を見る)

全文

(1)
(2)

自己紹介

名前

    石川達也 所属

    株式会社 Codeer 代表取締役(兼平社員)     ( http://www.codeer.co.jp/)

技術

     C 、 C++ 、 C++/CLI 、 C# 、少し Java     組み込みとか、 Windows アプリとか。     

趣味

(3)
(4)

ところで、

Windows

アプリ開発者の皆さん

(5)

やってません!

(6)

大きくは二種類に分かれる

部品をテスト

(7)

部品をテスト

いわゆる単体テスト、コンポーネントテスト。 クラス、メソッド、コンポーネントなど

プログラムの一部を切り出してテストを実施する。

(8)

部品をテスト

いわゆる単体テスト、コンポーネントテスト。 クラス、メソッド、コンポーネントなど

プログラムの一部を切り出してテストを実施する。

テスタビリティーが高い設計でないと、実施不可能。

ウチのレガシーコードに

(9)

部品をテスト

対応策  →

TDDBC

GO

コード品質の改善への近道。

(10)

今日はこっちの話

部品をテスト

(11)

アプリをテスト

統合テスト、システムテスト、受け入れテスト等。

おなじみの普通にアプリ起動して、テスト項目をこなすテスト。 外部仕様を元に作れる。

これを自動化するということは、手動テストの置き換えにつながる !

(12)

アプリをテスト

じゃあ、なんでやらないの?

・どうやっていいかわからない。 ・ツール高そうだしね。

・キャプチャリプレイツールって良い噂きかないし・・・。 ・一回やったけど、作成、メンテコストかかりすぎ。

(13)
(14)

なんで難しいの?

(15)

このタイプのテスト自動化

・他プロセスを操作する

・プログラム

の作成である。

(16)

プロダクトプロセス テストプロセス

この二つは別プロセス、

つまり別スレッドで動作する。

つまり、マルチスレッドプログラム。 これを忘れてはならない!

ここに、不安定さを生じさせる隙がある! 命令

終わったかな?次の命令

あっと、まだやった。 タイミング依存で失敗。

作成が難しい

同期制御が難しい。

(17)

作成が難しい

メモリの壁がある!

(18)

作成が難しい

インターフェイスが限られている

マウス、キーは、

プログラムから操作するには相性が悪い。

タイミング依存はどうしても避けられないし。

UI オートメーション

WindowsApi

選択肢として十分あり。  ただ、ちょっと難しい。

(19)

・他プロセスを操作している

作成が難しい

そもそも、GUI アプリって、基本は人が使うもの。 プログラムから操作するには相性が悪い。

ユニットテストの場合のテスト対象は、プログラム。 あくまで上位のプログラムから使わるために存在する。 そのため、テスト自動化と相性が良い。

同期

メモリ

(20)

対応・・・

(21)

Friendly

を使う

http://www.codeer.co.jp/

(22)

Friendly は

「アプリをテスト」する テストプログラム実装用の

ライブラリ

(23)

です。

でも、なめたらダメです。

(24)

まるで、

自分のプロセスのプログラムを書くように

操作できます。

(25)

.Net 系の言語

VisualStuido の MSTest

を使ってテストシナリオを作成します。

→ それなら、既に知ってますよね?

(26)

実は Friendly を使っての操作は、

憶えることが少ないんです。

なぜなら、

使い方はみなさん既に知っているんです。

(27)

に使ってみよう!

(28)

・プロセス

の同期制御

・メモリの取

・操作用インターフェイス

  大

既知

のインターフェイス。

  しかも

拡張

可能。

(29)
(30)

膨大なインターフェイスが使えるようになったのは分かった。

でも、多すぎて、どれ使っていいか分からんのよね。

インテリセンス効かないしさ。

(31)
(32)

インストーラとインストールされる

Codeer.Friendly      Codeer.Friendly.dll      Codeer.Friendly.Windows.dll      Codeer.Friendly.Windows.Grasp.dll Codeer.Friendly.Dynamic      Codeer.Friendly.Dynamic.dll Codeer.Friendly.Windows.NativeStandardControls.dll      Codeer.Friendly.Windows.NativeStandardControls.dll Ong.Friendly.FormsStandardControls      Ong.Friendly.FormsStandardControls.dll TestAssistant

(33)

Friendly

能を使って実装されてた

GUI

操作に

化したライブ

ラリ

     Codeer.Friendly.Windows.Grasp.dll

    

Codeer.Friendly.Windows.NativeStandardControls.dll

     Ong.Friendly.FormsStandardControls.dll

Window の取得。

ネイティブウィンドウラッパー

(34)

Friendly

能を使って実装されてた

GUI

操作に

化したライブ

ラリ

Codeer.Friendly.Windows.Grasp.dll

   WindowControl → Window の取得と汎用操作。

Codeer.Friendly.Windows.NativeStandardControls.dll

   NativeXXX (NativeButton, NativeEdit, etc)     

Ong.Friendly.FormsStandardControls.dll

(35)

に使ってみよう!

(36)

オマ

テスト作成

補助

ツール

・画面解析

・クラス解析

・変数動的参照

・メッセージ参照

(37)

に使ってみよう!

(38)
(39)

そのためには、アプリ操作に

化した設計が

必要

(40)

アプリの操作方法はできるようになったものの・・・。

(41)

・テストシナリオも可読性を保つ必要がある。

・プロダクトプロセスの変更に追従する必要がある。

・プログラムなのでメンテが

必要

(42)

性、メンテ

ンス性を上

必要

がある!

でなけれ

用対

効果

が悪くて、作った

味がない!

(43)

アプリ

ーションドライ

← 参照元。

(44)

アプリ

ーションドライ

プロダクトプロ

セス テストシナリオ

アプリケーションドライバはプロダクトプロセスを

(45)

アプリ

ーションドライ

先ほど作ったコードの中には、

内部仕様に基づく情報がテストシナリオの中に存在する。

これは、メンテ性が非常に悪い。

例えば、この画面を使うテストシナリオが複数あると、 コントロール取得コードが散らばってしまう。

そもそも、内部仕様なので、開発者でなければわからない。

それに、開発側が勝手に変えてしまう場合がある。

(46)

アプリ

ーションドライ

部仕様に

する

情報

隠蔽

・外部仕様を元に

理解

でき、

 

単に使えるインターフェイスの

(47)

外部仕様を元に

理解

できるインターフェイスってなに?

アプリ

ーションドライ

GUI

マップ

・ドメインの

言葉

にしたメソッド、プロパティー

(48)

アプリ

ーションドライ

GUI

マップ

public class MainFormDriver {

public WindowControl MainForm { get; private set; } public FormsTextBox TextBoxName { get; private set; } public FormsTextBox TextBoxAge { get; private set; } public FormsTextBox TextBoxPosition { get; private set; } public FormsButton ButtonAdd { get; private set; }

public FormsButton ButtonFind { get; private set; }

public MainFormDriver(WindowControl form) {

dynamic = form.App.Dynamic();

TextBoxName = new FormsTextBox(form.App, MainForm.textBoxName);

TextBoxAge = new FormsTextBox(form.App, MainForm.textBoxAge);

TextBoxPosition = new FormsTextBox(form.App, MainForm.textBoxPosition);

ButtonAdd = new FormsButton(form.App, MainForm.buttonAdd); ButtonFind = new FormsButton(form.App, MainForm.buttonFind); }

}

GUI を外部仕様としてとらえる。

GUI を特定する変数名称は内部仕様なので、ここで隠蔽する。

これを公開

(49)

アプリ

ーションドライ

ドメインの

言葉

にしたメソッド、プロパティー

public class MainFormDriver {

WindowControl MainForm { get; set; } FormsTextBox TextBoxName { get; set; } FormsTextBox TextBoxAge { get; set; } FormsTextBox TextBoxPosition { get; set; } FormsButton ButtonAdd { get; set; } FormsButton ButtonFind { get; set; }

public MainFormDriver(WindowControl form) {

dynamic = form.App.Dynamic();

TextBoxName = new FormsTextBox(form.App, MainForm.textBoxName);

TextBoxAge = new FormsTextBox(form.App, MainForm.textBoxAge);

TextBoxPosition = new FormsTextBox(form.App, MainForm.textBoxPosition);

ButtonAdd = new FormsButton(form.App, MainForm.buttonAdd); ButtonFind = new FormsButton(form.App, MainForm.buttonFind); }

public void Entry(string name, string age, string position)

{ TextBoxName.EmulateChangeText(name); TextBoxAge.EmulateChangeText(age); TextBoxPosition.EmulateChangeText(position); ButtonAdd.EmulateClick(); } }

隠蔽

公開

GUI操作ではなく、

登録というフィーチャをテストしたい。

メリット

 ・シナリオはさらにシンプルに。

 ・GUIが変わっても、メンテはここだけ

。  

デメリット

(50)

アプリ

ーションドライ

ショート

ット

目的の状態(画面)まで移動する。

目的の画面の操作は詳細に書きたいとして、

そこにたどり着くまでの画面の操作は、その関心の対象外。 そのため、できたら関数一発で、そこにたどり着きたい。

public static MainFormDriver MoveFromInitialState(WindowsAppFriend app) {

//...遷移コード

}

注)継続的デリバーには、このようなアドバイスはありません。

(51)

テストシナリオ

アプリを簡単に操作する

手段を提供するよ。

私の仕事はアプリ操作。

内部仕様も知ってるよ。

でも、それは秘密だけどね。

ていうか、アプリのことは気にしないで

私のことをアプリだと思って話して。

外部仕様に沿って、

テストシナリオを簡潔に記述するよ。

私の仕事は品質保証。

難しい内部仕様なんて知りたくもないし。

(52)

あれ?

(53)

てことは、アプリケーションドライバって 開発者が作ればいいんじゃない?

内部仕様知ってるし。

アプリケーションドライバが使っている内部仕様は

規約として守りやすいしね。

(54)

テストシナリオ

てことは、テストシナリオは

検証チームが書いたらいいじゃないかな? 外部仕様だけで、使えるインターフェイスを

提供してくれるんでしょ?

(55)

そういう仕事分担もありです。

(56)

まあ、しかし検証チームの本業は検証だし、トラブルが発生したら 開発側がサポートしたり、プログラムの分からないところを教えた り、

それは当然必要。

チームとして自動化を成功させるという認識が重要。

(57)

日からでも

入しよう!

Friendly

とテスト自動化!

参照

関連したドキュメント

●お使いのパソコンに「Windows XP Service Pack 2」をインストールされているお客様へ‥‥. 「Windows XP Service

・M.2 Flash モジュール専用RAID設定サービス[PYBAS1SM2]とWindows Server 2022 Standard(16コア/Hyper-V)[PYBWPS5H]インストール/Windows Server 2019

口腔の持つ,種々の働き ( 機能)が障害された場 合,これらの働きがより健全に機能するよう手当

題が検出されると、トラブルシューティングを開始するために必要なシステム状態の情報が Dell に送 信されます。SupportAssist は、 Windows

Windows Hell は、指紋または顔認証を使って Windows 10 デバイスにアクセスできる、よ

“ Increase the Eco-friendly of Solid Waste Management System from waste collection, transfer waste, disposal waste to land. fills, compositing, and/or incinerations along with

評価 ○当該機器の機能が求められる際の区画の浸水深は,同じ区 画内に設置されているホウ酸水注入系設備の最も低い機能

At TEPCO, we are pursuing the production of power with low CO 2 emission levels by means such as nuclear power generation, which emits no CO 2 ; improving increase in the thermal