システム操作インターフェイス最適化によるテスト自動化ROI向上

Similar documents
システム操作インターフェイス最適化によるテスト自動化ROI向上

2 概要 市場で不具合が発生にした時 修正箇所は正常に動作するようにしたけど将来のことを考えるとメンテナンス性を向上させたいと考えた リファクタリングを実施して改善しようと考えた レガシーコードなのでどこから手をつけて良いものかわからない メトリクスを使ってリファクタリング対象を自動抽出する仕組みを

スライド 1

Microsoft PowerPoint - A1-2_株式会社ネクスト_藤澤正通_S _005.pptx


Prog2_12th

D5-2_S _003.pptx

スライド 1

C#の基本

システムテスト自動化プログラムにおける「操作技術」と「シナリオ」の分割

JUnit 概要 2015/4/16 版今泉俊幸 2015 bbreak Systems 1

過去問セミナーTM

CodeRecorderでカバレッジ

JaSST'16 Tokai 特別講演

IBM Cloud Social Visual Guidelines

メソッドのまとめ

Prog2_15th

Using VectorCAST/C++ with Test Driven Development

Prog2_4th

XAML Do-It-Yourself 第 3 回ベントとトリガー XML Do-It-Yourself 第 3 回目は ベント処理とトリガーについて学習します Windows フォームゕプリケーションでは たとえば ボタンが押された というベントに対応する処理 ( ベントハンドラー ) を記述する

DEMO1 まずはやってみよう アクティビティをダブルクリック 作成 - プロジェクト C# => Workflow CodeActivity をぽとぺ シーケンシャルと ステートマシン それぞれのコ ンソールアプリ あとライブラリがある びっくりマークは足りていないあかし プロパティをみると判別で

C#の基本2 ~プログラムの制御構造~

スライド 1

プログラミング基礎I(再)

部品ライブラリシステム

Microsoft Visual Studio 2010 Professional Data Sheet

Visual Studio 2013 による単体テスト 2014 Microsoft Corporation. All rights reserved. 1

Microsoft PowerPoint - ●SWIM_ _INET掲載用.pptx

PowerPoint プレゼンテーション

040402.ユニットテスト

デジタル表現論・第4回

智美塾 ゆもつよメソッドのアーキテクチャ

目次 ペトリネットの概要 適用事例

TestDesign for Web

Secure iNetSuite for .NET 4.0Jの新仕様について

スライド 1

~ ユーザーインターフェイスの自動テスト ~

効率の良いテストシナリオ? テストの進め方 テストプロセス テストの設計 より少ないテストケースで より多くのバグを見つける Mercury Interactive Japan KK all rights reserved. 2

Microsoft PowerPoint - SJ2018_東芝テック_加藤裕.pptx

お客様からの依頼内容とその現状

Visual Studio Do-It-Yourself 第 9 回ユーザーコントロール 第 6 回のリソースから第 8 回のテンプレートで さまざまな方法でコントロールをカスタマズできるこ とを学びました 今回のテーマであるユーザーコントロールは 既存の一つのコントロールをカスタマ ズするのではな

D:\Documents\Visual Studio 2015\Projects\MyHomePage 用サンプル \ExcelAndWord\ExcelAndWord\MainForm.cs 1 /* */ Excel や Word とやりとりする ~9,20 仕様 Excel

<4D F736F F D208DCC91F088C48C8F955D89BF8F915F8DA196E5504A>

PowerPoint Presentation

PowerPoint Presentation

PowerPoint プレゼンテーション

(1) プログラムの開始場所はいつでも main( ) メソッドから始まる 順番に実行され add( a,b) が実行される これは メソッドを呼び出す ともいう (2)add( ) メソッドに実行が移る この際 add( ) メソッド呼び出し時の a と b の値がそれぞれ add( ) メソッド

PowerPoint プレゼンテーション

ボタンイベントアプリイベント処理を含むアプリとして, ボタンをもち, ボタンを押すと文字列を表示するアプリを作る. このアプリは,HelloWorld アプリを改造して作成するため, アプリ作成の途中からの手順を示す. 1. ボタンの設置 (1) レイアウトにボタンを追加するパレットの フォーム ウ

PowerPoint プレゼンテーション

Microsoft PowerPoint - FormsUpgrade_Tune.ppt

PowerPoint プレゼンテーション

intra-mart Accel Platform — IM-Repository拡張プログラミングガイド   初版  

ガイダンス

PowerPoint プレゼンテーション

Microsoft PowerPoint Java基本技術PrintOut.ppt [互換モード]

メソッドの外部設計とテストファースト

Prog2_6th

実行形式の作成と構成管理 2012 年 7 月 8 日 海谷治彦 1

1. 画面拡大ショートカット ショートカットキーで作業効率 UP [Ctrl]+[+]: 拡大 [Ctrl]+[-]: 縮小 [Ctrl]+ 0 : デフォルトに戻す (100%) オンライン製品ヘルプ 2

PowerPoint プレゼンテーション

Microsoft PowerPoint ppt

11 ソフトウェア工学 Software Engineering デザインパターン DESIGN PATTERNS デザインパターンとは? デザインパターン 過去のソフトウェア設計者が生み出したオブジェクト指向設計に関して, ノウハウを蓄積し 名前をつけ 再利用しやすいようにカタログ化したもの 各デ

ガイダンス

// このクラスの有効期間中の各呼び出しに使用される キャッシュされた Socket オブジェクト Socket socket = null; // 非同期処理が完了したことを通知するために信号を送るオブジェクト static ManualResetEvent clientdone = new Ma

教室案内.pptx

Java言語 第1回

アスペクトの相互作用を解消するアスペクトの提案

Oracle Un お問合せ : Oracle Data Integrator 11g: データ統合設定と管理 期間 ( 標準日数 ):5 コースの概要 Oracle Data Integratorは すべてのデータ統合要件 ( 大量の高パフォーマンス バッチ ローブンの統合プロセスおよ

基本情報STEP UP演習Java対策

Wagby Testing Framework

個人依存開発から組織的開発への移行事例 ~ 要求モデル定義と開発プロセスの形式化 による高生産性 / 高信頼性化 ~ 三菱電機メカトロニクスソフトウエア ( 株 ) 和歌山支所岩橋正実 1

GUIプログラムⅣ

第1章 ビジュアルプログラミング入門

<4D F736F F F696E74202D DD8D8782ED82B98B5A8F7082F B582BD835C F E707074>

ガイダンス

Indyを利用したメール送信機能開発

デザインパターン第一章「生成《

5th CodeGear Developer Camp [A5]

GEC-Java

CashDrawer ライブラリ API 仕様書 2014/07/09 CashDrawer ライブラリ API 仕様書 Rev / 10

Unite_Japan_2014_Technical_Session

V8.1新規機能紹介記事

Prog2_6th

グラフィックトレーニング 概要.NET のグラフィック描画は どんなことができるのでしょうか? グラフィックオブジェクトやグラフィック環境 概念を理解するためには クラスを使って馴れることが近道です 本 書に記載されているコードをカットアンドペーストして 一つ一つの機能を体験してください 前提 グラ

Microsoft PowerPoint - Session4古賀様.ppt

LogisticaTRUCKServer-Ⅱ距離計算サーバ/Active-Xコントロール/クライアント 概略   

第 8 回の内容 クライアントサイド処理 JavaScript の基礎

JBoss と Arquillian で実現する 究極のテスト環境 レッドハット株式会社 JBoss サービス事業部 コンサルタント 山 田義和

IBM Cloud Social Visual Guidelines

PowerPoint プレゼンテーション

目次 はじめに... 3 システムの必要条件... 4 ライセンス認証... 4 アクティベーション... 6 開発... 7 手順 1. アプリケーションの作成... 7 手順 2. データソースの作成と代入... 7 手順 3. テンプレートの作成 手順 4. レポートビューアの追加

Microsoft PowerPoint - 【最終提出版】 MATLAB_EXPO2014講演資料_ルネサス菅原.pptx

Seasar.NET入門

SECCON 2015 x CEDEC CHALLENGE ゲームクラッキング チートチャレンジ 調査結果 vulscryptos

(Microsoft PowerPoint - Java\221\3462\225\224\211\357\224\255\225\\\216\221\227\ ppt)

LightSwitch で申請システム Windows ストアアプリで受付システムを構築してみた 情報政策グループ技術職員金森浩治 1. はじめに総合情報基盤センターでは 仮想サーバホスティングサービスや ソフトウェアライセンス貸与といった さまざまなエンドユーザ向けサービスを行っている 上記のよう

表示の更新もそういた作業のひとつに当たる スレッドの使用アニメーション アニメーションやシミュレーションなどは画面の更新が一定のタイミングで行われていく この連続した画面の更新をスレッドを利用して行う しかし paint() メソッドを直接呼び出して表示を更新することはできない その理由

スライド 1

ジョブ管理ソフトウェア LoadStar Scheduler ご紹介資料 ~ システム運用品質の向上とコスト削減を実現 ~

Transcription:

システム操作インターフェイス最適化によるテスト自動化 ROI 向上 株式会社 Codeer 石川達也 e-mail:ishikawa-tatsuya@codeer.co.jp

ご相談を受けた企業様の悩みで多いもの システムテスト自動化やったことあるんだけど 効果が出なくて

作業と ROI 要素を分析 仕様変更等でメンテ 作成 成功 指定のケースではデグレがなかったという情報を取得できた! エラー! 実行 BugFix テストの作りが悪くて不安定結果解析が運用コストとなる

課題 1 自動実行不安定 仕様変更等でメンテ 作成 運用コストが想定以上に発生している 回帰テストなので ランニングコスト化 成功 指定のケースではデグレがなかったという情報を取得できた! エラー! 実行 モチベーション低下テストに対する不信感も BugFix テストの作りが悪くて不安定結果解析が運用コストとなる

課題 2 自動化テストケース数が少ない 仕様変更等でメンテ 成功 指定のケースではデグレがなかったという情報を取得できた! でも 実行 技術 工数の都合で作れるケースに限界がある テスト成功時の情報の価値が低いエラー! デグレ検出できないケースが多い 成功しても次のアクションに繋げづらい BugFix ( リファクタリング リリース判断等 ) テストの作りが悪くて不安定結果解析が運用コストとなる

課題 12 の共通問題対象アプリ操作インターフェイス ココ 簡単に 思い通りに 操作するためのインターフェイスがあれば 多くのテストケースを自動化できる また 安定して動作させることも可能 Friendly を導入 http://www.codeer.co.jp/autotest

Friendly 紹介 基本機能 内部メソッドを実行させる DLL インジェクション public partial class MainForm : Form { string Func(int string Func(int value){} value) { } } // テストプロセス public void Test() { // 呼び出し form.func(3); } //Dll インジェクション! WindowsAppExpander. LoadAssembly(app,GetType().Assembly); 内部メソッドを呼び出せるので 操作自由度が高い 単体テストのように プロダクトコードを変更してテスタビリティーを向上させる ( 操作性を向上させる ) ことが可能

Friendly の上位ライブラリ紹介 GUI 操作ライブラリ Win32 WinForms WPF 記述性 UP PinInterface 基本内部メソッド操作 DLL インジェクション Friendly.Windows.NativeStandardControls Friendly.FormsStandardControls Friendly.WPFStandardControls Friendly.PinInterface 安定性した操作が可能 高い拡張性がある

対策 GUI 操作を Friendly の上位ライブラリに変更 操作対象メリットデメリット技術 1OS 層 (Key,Mouse) 2GUI コントロール層 ある意味万能 ユーザー操作に最も近い 安定 高速 リッチなインターフェイス 不安定 低速 Key,Mouse との結合はカバーしない 提供されていないコントロールもある SendInput Friendly UIAutomation 一部の Win32API テストの主目的は OS と各 GUI ライブラリの結合ではない 安定性 実装容易性を重視 課題 12 へ効果

対策操作可能な GUI を増やした Friendly 上位ライブラリがサポートしていないコントロールに関して ( サードパーティー提供コントロール 自作コントロール ) 通常のプログラムに使用するインターフェイスと Friendly を使って 操作ライブラリを作成 各プロジェクトのコントロール使用状況 プロジェクトA 全て標準 プロジェクトB 表に関して サードパーティーのコントロールを使用 プロジェクトC 9 割以上の画面にサードパーティーもしくは自作のコントロールがあった B C では これにより安定した操作を簡単に実装できるようになった 課題 12 へ効果

対策自動化困難で効果の低い部分の分離 // ここの結合は不安が少ない void Event(object sender, EventArgs e) { EventCore(PointToClient(Control. MousePosition)); } // これを Friendly で呼び出す void EventCore(Point mouseposclient) { // ここから先のロジックをテストしたい } キー マウス直接参照 D&D OS 提供の GUI etc プロダクトを変更 効果の高い部分のみ呼び出せるようにした 課題 2 へ効果

対策ユーザー実装による不安定の対応 原因 タイミング依存の不具合 タイマ 非同期処理 描画イベントを利用した実装 対応不具合修正テスト時は同期にする確実に同期がとれる情報を参照する 例 ) 不安定な処理の周辺のテストを 86 ケース投入してから安定するまで 6 4 2 0 テストにも問題があり 3 日目に気づいて修正 1 2 3 4 5 6 7 8 9 1011121314 エラー数 CI 環境投入前に単体では全ケース成功することを確認している プロダクト自体タイミング依存の不具合があったので修正 テストも安定性を考慮した記述方法に変更 4 日目からはこのテストの運用コストは発生していない 1 日目にプロダクトの不具合を突き止め修正 課題 1 へ効果

対策実装工数が大きいものは GUI 操作を省略 コアなロジック サーバーと通信 分析の結果 この範囲のテストを自動化できたら十分効果アリと判断 例 ) システムテスト自動化を実施したいが GUI 操作で 実行するには困難で諦めていた しかし 分析の結果 品質を確認したい部分は GUI ではなかったので 内部メソッドを利用 約 5 千ケースが自動化された 課題 2 へ効果

対策実行時間がかかりすぎるものは GUI 操作を省略 例 ) 文字列のパースをする処理があり それはアプリの様々な設定によりパース結果が変わる しかも レガシーコード ( 単体化が困難 ) 求められるテストケースは 15 万ケース 設定 A 設定 B 設定 C 入力 種類 実行平均時間 合計 手動 30 秒 1250 時間 自動 GUI 操作 2 秒 83 時間 自動内部メソッド 10ミリ秒 24 分 Dailyで回帰化可能な時間に! 時間がかかりすぎると Daily の回帰環境に組み込めない 分散させることも可能 実際そうしたケースもある ただ 分散には大がかりな仕組みが必要になる シンプルに速くなれば開発者のローカル PC でも実行可能 課題 2 へ効果

課題 3 テスト作成に内部仕様の知識が必要 いくつかテストケースを実装した段階で気づきがあった class InputWindow : Window { TextBox _name; DatePicker _founding; DataGrid _member; Button _ok; public void Func() { } } // テストコード // 変数名を知っている必要がある var _name = new WPFTextBox(window._name); var _founding = new WPFDatePicker(window._founding); var _member = new WPFDataGrid(window._ member); var _ok = new WPFButtonBase(window._ok); // 内部メソッドを知っている必要がある Window.Func();

対策アプリケーションドライバを導入 テストプロセス 1 アプリケーションドライバ.dll 2 テストシナリオ.dll 1 のインターフェイスは 技術的要素がどうしても入る また 内部仕様も現れる そういったものは テストシナリオからは使いたくない アプリケーションドライバ テストシナリオ 記述すること 内部仕様に依存する処理 複雑な処理 テストケース ( できるだけシンプルに ) 実装に必要な知識内部仕様 C# 基本的なプログラム設計能力外部仕様基本的なC# の知識 書籍 継続的デリバリー 参照

対策アプリケーションドライバを導入 テストケース作成プロダクト開発者以外に負荷を分散できるようになった 結果 テストケース開発効率が上がった また ケース追加時に安定化された操作を容易に使いまわせるようになった テストケースメンテ仕様変更 内部実装変更時の対応箇所が最小化された コード量が減った 行数で約 35% 減 テストシナリオの可読性 Up 課題 123 へ効果

A 社改善の成果 15 10 5 0 テスト不安定によるエラー発生数 ( 異なる期間で 3 カ月 ) Before After 課題 1 に対して改善前は ほぼ毎日結果を解析して プロダクトに問題がないことを確認する必要があった ( 半自動 ) 改善後は 不安定なテストが混入することはあるが即座に対応して安定化させることができた 200000 150000 100000 50000 0 自動化ケース数 課題 2 に対してテストケース数を増やすことに成功 部分的にリリース リファクタリング実行の判断に使うことができるようになった 最終に実施する手動テスト数も減らすことに成功 Before After

まとめ 対象アプリ操作インターフェイス 目的に応じて最適な操作方法を選ぶことにより 運用コストを下げることができた また 操作の幅が広がりテストケース数も増やすことができた アプリケーションドラバ 自動化はテストプログラムの作成である そのため 設計 実装の品質により作成 メンテコストは変わる アプリケーションドライバを利用することにより テストプログラムの品質を上げ テストケース追加 メンテコストを抑えることができた また 作成可能なメンバーが増えたので結果としてテストケース数増加にもつながった