SlideShare a Scribd company logo
1 of 60
継続的にテスト可能な設計を考える
ContinuousTestable Design
Atsushi Nakamura
About Me
Copyright 2017 @nuits_jp Slide 2
中村 充志 / Atsushi Nakamura
• リコージャパン株式会社 金融事業部所属
• Enterprise系SIerのITアーキテクト
• JavaからC#へ渡り歩く
• 趣味はXamarin?
• Blog http://www.nuits.jp
• Blog(英語) https://blog.nuits.jp
• Twitter @nuits_jp
テスト書いてますか?
Copyright 2017 @nuits_jp Slide 3
テストを維持し続けるのは難しい!
Copyright 2017 @nuits_jp Slide 4
ContinuousTestable Design
Today’s Goal
Today’s Goal
Slide 6Copyright 2017 @nuits_jp
継続的にテスト可能な設計を実現するには多くのエッセンスが必要です。
今日はそのうち、つぎの3つについてお話します。
1. 制御の流れと依存方向の分離
2. 依存方向の制御と、安定性と柔軟性の管理
3. ソフトウェア構造と組織構造を考慮したテストレベルの選択
「継続的なテストの維持」に必要な一部のエッセンスですが、非常に重要なことです。
ContinuousTestable Design
Overview
1. テスト不可のアプリからスタート
2. リファクタリングしつつ、継続的にテスト可能な設計を目指す
3. テストの対象は「今回は」クラス単位を想定
Overview
• 対象システムは次のような特徴をもちます
• プロダクト別の総売上をCSV出力するコンソール アプリを想定
• 同一のデータベースを他の機能からも利用している
Overview
Copyright 2017 @nuits_jp Slide 9
SQL Server 2017
AdventureWorks2017
Other Functions
※英語含む、対象コードへのマサカリは「そっと」
Pull Requestを投げるというソフト対応をお願いします
https://github.com/nuitsjp/Continuous-Testable-Design
1. テスト不可能なソースコードの説明
2. 「テスト可能」な状態にリファクタリング
3. 依存性の向きと、安定性と柔軟性について
4. 「制御の流れと依存方向」をコントロールするリファクタリング
5. 安定性とテストコード寿命について
6. テストの価値(効果)と難易度の相関関係
7. まとめ
Agenda
Slide 10Copyright 2017 @nuits_jp
ContinuousTestable Design
プロダクト別 総売上 出力システム
まずはコードを見てみよう
Copyright 2017 @nuits_jp Slide 12
現在の構造
構造上の問題点
クラス間が直接依存しており
上流のクラスの単体テストができない
ControllerとBusinessLogicの関係
現在、ControllerとBusinessLogicの間には二つの依存関係がある
•BusinessLogicの生成
•BusinessLogicの利用
Controllerをテスト ダブル(Mock・Stub・Fakeなど)を利用してテストできるよ
うにリファクタリングする。
Copyright 2017 @nuits_jp Slide 15
インターフェースの抽出
Copyright 2017 @nuits_jp Slide 16
インターフェースの抽出結果
Copyright 2017 @nuits_jp Slide 17
○ 利用箇所はインターフェース依存になった
× 生成箇所に実装クラス依存が残っている
No. 方式 デザインパターン
1 Controllerが能動的に取得する Service Locator パターン
2 Controllerに外部から注入する Dependency Injection パターン
インスタンス生成を取り除く二つの方式
Copyright 2017 @nuits_jp Slide 18
基本的にいずれかに類似した方式をとります。
ここではDependency Injectionパターンを利用します。
Service Locator is an Anti-Pattern by Mark Seemann
http://blog.ploeh.dk/2010/02/03/ServiceLocatorisanAnti-Pattern/
• Service Locatorはstaticなレジストリなので並行テストが困難
• ControllerからBusinessLogicへ依存がなくなる代わりに、Service Locatorへ依存が増える
Business Logicをインジェクションする
Copyright 2017 @nuits_jp Slide 19
Dependency Injectionの適用結果
Copyright 2017 @nuits_jp Slide 20
var controller =
new Controller(
new BusinessLogic());
controller.Execute("output.csv");
テスト ダブルの利用
Copyright 2017 @nuits_jp Slide 21
var controller =
new Controller(
newTestDouble());
controller.Execute("output.csv");
さあ、すべてテスタブルに修正しましょう!
Copyright 2017 @nuits_jp Slide 22
しました!
Copyright 2017 @nuits_jp Slide 23
結果、こんな感じでテストできます
Copyright 2017 @nuits_jp Slide 24
単体テスト用DB
class Testable Models
Repositoryの単体テスト
BusinessLogicの単体テスト
Controllerの単体テスト
Controller «interface»
IBusinessLogic
BusinessLogic «interface»
IRepository
Repository
ControllerFixture
BusinessLogicMock
BusinessLogicFixture
RepositoryFixture
RepositoryMock
ところで、よく見ると
Copyright 2017 @nuits_jp Slide 25
なんか嫌な臭いがするぞ?
Copyright 2017 @nuits_jp Slide 26
特にこのあたりが...
Copyright 2017 @nuits_jp Slide 27
ここの向き
良く見てみよう
ControllerがViewに、依存している
一般的にViewは最も変化が多い
⇒ ControllerはViewに引きずられ変更過多になる
⇒ 結果、Controllerのテストコードもテストダブルも変更過多になる
⇒つらい
Copyright 2017 @nuits_jp Slide 28
もうひとつ
Copyright 2017 @nuits_jp Slide 29
ここもちょっとな...
Copyright 2017 @nuits_jp Slide 30
ここの向き
• 同一のデータベースを他の機能からも利用している
• データベースは他システム起因で変更が入る
• 1テーブルをn機能から利用する場合
機能からみてDBの安定度は高いとは言えない
あらためて全体像を確認する
Copyright 2017 @nuits_jp Slide 31
SQL Server 2017
AdventureWorks2017
Other Functions
class Testable Models
Repositoryの単体テスト
BusinessLogicの単体テスト
Controllerの単体テスト
Controller «interface»
IBusinessLogic
BusinessLogic «interface»
IRepository
Repository
ControllerFixture
BusinessLogicMock
BusinessLogicFixture
RepositoryFixture
RepositoryMock
つまり参照してるテーブルが変更されると…
Copyright 2017 @nuits_jp Slide 32
単体テスト用DB
Breaking
Change!
Breaking
Change!
Breaking
Change!
Breaking
Change!
Breaking
Change!
Breaking
Change!
Breaking
Change!
Breaking
Change!
Breaking
Change!
Breaking
Change!
Breaking
Change!
最悪だ!!
Copyright 2017 @nuits_jp Slide 33
何が悪いのか?
Copyright 2017 @nuits_jp Slide 34
class BusinessLogic and Repository
BusinessLogics Repositories
BusinessLogic «interface»
IRepository
Repository
制御の流れに
引きずられて
安定させたい
モジュール
不安定な
モジュール
依存して
しまっている
解決策
Copyright 2017 @nuits_jp Slide 35
class BusinessLogic and Repository
BusinessLogics Repositories
BusinessLogic «interface»
IRepository
Repository
制御の流れから
依存方向を分離し
逆方向へ依存させる
できます!
Copyright 2017 @nuits_jp Slide 36
こうする!
重要なのは、インターフェースの移動ではなく
IRepositoryをBusinessLogicの文脈で定義すること
Copyright 2017 @nuits_jp Slide 37
class BusinessLogic and Repository
BusinessLogics Repositories
BusinessLogic «interface»
IRepository
Repository
class BusinessLogic and Repository
BusinessLogics Repositories
BusinessLogic «interface»
IRepository
Repository
Before
After
IRepositoryの詳細を見てみましょう
Copyright 2017 @nuits_jp Slide 38
IRepositoryのクラス図とER図
Copyright 2017 @nuits_jp Slide 39
class Repository Details
«interface»
IRepository
+ GetProducts(): IEnumerable<Product>
+ GetSalesOrderDetail(): IEnumerable<SalesOrderDetail>
SalesOrderDetail
«property»
+ CarrierTrackingNumber(): string
+ LineTotal(): decimal
+ ModifiedDate(): DateTime
+ OrderQty(): short
+ ProductID(): int
+ rowguid(): Guid
+ SalesOrderDetailID(): int
+ SalesOrderID(): int
+ SpecialOfferID(): int
+ UnitPrice(): decimal
+ UnitPriceDiscount(): decimal
Product
«property»
+ Class(): string
+ Color(): string
+ DaysToManufacture(): int
+ DiscontinuedDate(): DateTime?
+ FinishedGoodsFlag(): bool
+ ListPrice(): decimal
+ MakeFlag(): bool
+ ModifiedDate(): DateTime
+ Name(): string
+ ProductID(): int
+ ProductLine(): string
+ ProductModelID(): int?
+ ProductNumber(): string
+ ProductSubcategoryID(): int?
+ ReorderPoint(): short
+ rowguid(): Guid
+ SafetyStockLevel(): short
+ SellEndDate(): DateTime?
+ SellStartDate(): DateTime
+ Size(): string
+ SizeUnitMeasureCode(): string
+ StandardCost(): decimal
+ Style(): string
+ Weight(): decimal?
+ WeightUnitMeasureCode(): string
dm SalesOrderDetail and Product
Product
«column»
*PK ProductID: int
* Name: nvarchar(50)
* ProductNumber: nvarchar(25)
* MakeFlag: bit = 1
* FinishedGoodsFlag: bit = 1
Color: nvarchar(15)
* SafetyStockLevel: smallint
* ReorderPoint: smallint
* StandardCost: money
* ListPrice: money
Size: nvarchar(5)
FK SizeUnitMeasureCode: nchar(3)
FK WeightUnitMeasureCode: nchar(3)
Weight: decimal(8,2)
* DaysToManufacture: int
ProductLine: nchar(2)
Class: nchar(2)
Style: nchar(2)
FK ProductSubcategoryID: int
FK ProductModelID: int
* SellStartDate: datetime
SellEndDate: datetime
DiscontinuedDate: datetime
* rowguid: uniqueidentifier = newid()
* ModifiedDate: datetime = getdate()
SalesOrderDetail
«column»
*pfK SalesOrderID: int
*PK SalesOrderDetailID: int
CarrierTrackingNumber: nvarchar(25)
* OrderQty: smallint
*FK ProductID: int
*FK SpecialOfferID: int
* UnitPrice: money
* UnitPriceDiscount: money = 0.0
* LineTotal: numeric(38,6)
* rowguid: uniqueidentifier = newid()
* ModifiedDate: datetime = getdate()
クラス図 ER図
IRepositoryが完全にデータベースの文脈で記述されているのが見て取れる
BusinessLogicのインターフェースと比較する
Copyright 2017 @nuits_jp Slide 40
dm BusinessLogic
«interface»
IBusinessLogic
+ GetProductSalesList(): IEnumerable<ProductSales>
ProductSales
«property»
+ Name(): string
+ Sales(): decimal
プロダクト別の総売上額が欲しいだけ
class Repository Details
«interface»
IRepository
+ GetProducts(): IEnumerable<Product>
+ GetSalesOrderDetail(): IEnumerable<SalesOrderDetail>
SalesOrderDetail
«property»
+ CarrierTrackingNumber(): string
+ LineTotal(): decimal
+ ModifiedDate(): DateTime
+ OrderQty(): short
+ ProductID(): int
+ rowguid(): Guid
+ SalesOrderDetailID(): int
+ SalesOrderID(): int
+ SpecialOfferID(): int
+ UnitPrice(): decimal
+ UnitPriceDiscount(): decimal
Product
«property»
+ Class(): string
+ Color(): string
+ DaysToManufacture(): int
+ DiscontinuedDate(): DateTime?
+ FinishedGoodsFlag(): bool
+ ListPrice(): decimal
+ MakeFlag(): bool
+ ModifiedDate(): DateTime
+ Name(): string
+ ProductID(): int
+ ProductLine(): string
+ ProductModelID(): int?
+ ProductNumber(): string
+ ProductSubcategoryID(): int?
+ ReorderPoint(): short
+ rowguid(): Guid
+ SafetyStockLevel(): short
+ SellEndDate(): DateTime?
+ SellStartDate(): DateTime
+ Size(): string
+ SizeUnitMeasureCode(): string
+ StandardCost(): decimal
+ Style(): string
+ Weight(): decimal?
+ WeightUnitMeasureCode(): string
IRepositoryをBusinessLogicの文脈へリファクタリング
Copyright 2017 @nuits_jp Slide 41
リファクタリング後のIRepository
Copyright 2017 @nuits_jp Slide 42
dm Repositories
ProductName
«property»
+ Name(): string
+ ProductId(): int?
SalesLineTotal
«property»
+ LineTotal(): double
+ ProductId(): int
«interface»
IRepository
+ GetProductNames(): IEnumerable<ProductName>
+ GetSalesLineTotal(): IEnumerable<SalesLineTotal>
一旦整理しましょう
Copyright 2017 @nuits_jp Slide 43
「制御の流れ」と「依存方向」は、つぎの二つによりコントロール可能
• クラスとクラスは直接依存させず、インターフェース(抽象)に依
存させる(依存性逆転の原則)
• インターフェースを適切な文脈で定義する
「制御の流れ」と「依存方向」
Copyright 2017 @nuits_jp Slide 44
class BusinessLogics and Re...
Repositories
BusinessLogics
BusinessLogic
«interface»
IRepository
Repository
依存方向によって決まる、安定性と柔軟性
Copyright 2017 @nuits_jp Slide 45
Repository変更の影響を受けない ⇒ 安定性が高い
変更がRepositoryへ影響を与える ⇒ 柔軟性が低い
BusinessLogic変更の影響を受ける ⇒ 安定性が低い
変更がBusinessLogicへ影響を与えない ⇒ 柔軟性が高い
安定性と柔軟性は設計上トレードオフにある
あらためて全体を見てみる
Copyright 2017 @nuits_jp Slide 46
元々の安定度と柔軟性
Copyright 2017 @nuits_jp Slide 47
凡例
制御の流れ
依存関係
安定性③
柔軟性①
安定性①
柔軟性②
安定性②
柔軟性②
安定性①
柔軟性③
安定性と柔軟性 パッケージ
安定度:高 BusinessLogic
中間 Controller
柔軟性:高 View, Repository
安定性と柔軟性をコントロールする
Copyright 2017 @nuits_jp Slide 48
安定度と柔軟性をコントロールする
Copyright 2017 @nuits_jp Slide 49
凡例
制御の流れ
依存関係
安定性②
柔軟性②
安定性③
柔軟性①
安定性①
柔軟性③
安定性②
柔軟性①
継続的にテスト可能になった(はず)のクラス図
ところでクラス単体テストの価値って?
Copyright 2017 @nuits_jp Slide 51
システム
サブシステム
コンポーネント
ソフトウェアのフラクタル
Copyright 2017 @nuits_jp Slide 52
クラス
サブシステム
クラス
コンポーネント
クラス クラス
クラス・コンポーネント・サブシステム・システムのすべての要素で
ここまでの話は適用できる
• 要素間のインターフェースの文脈により、制御の流れと依存関係は制御可能
• 依存関係によって、安定性と柔軟性をコントロール可能
要素 テスト価値 テスト難易度
システム 高 高
サブシステム
コンポーネント
クラス 低 低
ソフトウェア要素のテスト価値とテスト難易度
Copyright 2017 @nuits_jp Slide 53
ただし安定度の高い(高くないと困る)コンポーネントやクラス
(つまりライブラリやフレームワーク)に対するテスト価値は高い
利害関係者
会社
チーム
人・組織のフラクタル
ソフトウェア開発は、必ずしも個人で行うわけではない。
Copyright 2017 @nuits_jp Slide 54
個人
会社
個人
チーム
個人 個人
結合対象 テスト価値 テスト難易度
会社間結合 高 高
チーム間結合
個人間結合 低 低
人・組織間の結合テストの価値と難易度
Copyright 2017 @nuits_jp Slide 55
この上「ソフトウェアの階層」と「人・組織の階層」には一貫性はない。
1. コンポーネントとサブシステムレベルは自動テストしたい
2. クラスレベルは再利用するモジュールはする
3. UIを含んだ自動テストは、まだ己の身に余る感じ
4. チームや会社といった組織間の結合の都合で、テストフェーズが増
えないようコントロールしたい
5. 必要なテストを書いて維持する
コストと期間がない仕事は受けない
ようにしたい
と思っていますが結局は
個人的には…
Copyright 2017 @nuits_jp Slide 56
ケースバイケースだよね
Copyright 2017 @nuits_jp Slide 57
ContinuousTestable Design
まとめ
まとめ
Slide 59Copyright 2017 @nuits_jp
1. 制御の流れと依存方向は、独立してコントロール可能である
2. 依存方向によって安定性と柔軟性は、ある程度制御可能
3. ソフトウェア構造と組織構造を考慮したテストレベルの選択
とくに3.が難問ですが、これらを解決できれば
「継続的に維持可能なテスト」
に3歩近づくでしょう。
ThankYou!
Any Questions?

More Related Content

What's hot

世界一わかりやすいClean Architecture alpha-1
世界一わかりやすいClean Architecture alpha-1世界一わかりやすいClean Architecture alpha-1
世界一わかりやすいClean Architecture alpha-1Atsushi Nakamura
 
Settings SyncとCodespaceで体験する新世代へのパラダイムシフト
Settings SyncとCodespaceで体験する新世代へのパラダイムシフトSettings SyncとCodespaceで体験する新世代へのパラダイムシフト
Settings SyncとCodespaceで体験する新世代へのパラダイムシフトAtsushi Nakamura
 
6万行の TypeScript 移行とその後
6万行の TypeScript 移行とその後6万行の TypeScript 移行とその後
6万行の TypeScript 移行とその後Shingo Sasaki
 
Visual Studio 2019で始める「WPF on .NET Core 3.0」開発
Visual Studio 2019で始める「WPF on .NET Core 3.0」開発Visual Studio 2019で始める「WPF on .NET Core 3.0」開発
Visual Studio 2019で始める「WPF on .NET Core 3.0」開発Atsushi Nakamura
 
Azureクラウドのネイティブアプリ、IoTとエッジAIの管理ソリューション
Azureクラウドのネイティブアプリ、IoTとエッジAIの管理ソリューションAzureクラウドのネイティブアプリ、IoTとエッジAIの管理ソリューション
Azureクラウドのネイティブアプリ、IoTとエッジAIの管理ソリューションJingun Jung
 
IoT業界で必須サービスになってきたAzure Web PubSubとAzure IoT EdgeのEFLOWについてご紹介
IoT業界で必須サービスになってきたAzure Web PubSubとAzure IoT EdgeのEFLOWについてご紹介IoT業界で必須サービスになってきたAzure Web PubSubとAzure IoT EdgeのEFLOWについてご紹介
IoT業界で必須サービスになってきたAzure Web PubSubとAzure IoT EdgeのEFLOWについてご紹介Jingun Jung
 
Vision AI on Azure IoT Edge
Vision AI on Azure IoT EdgeVision AI on Azure IoT Edge
Vision AI on Azure IoT EdgeJingun Jung
 
WeDX Flow Hands-on
WeDX Flow Hands-onWeDX Flow Hands-on
WeDX Flow Hands-onJingun Jung
 
Another Visual Studio - Visual Studio for Mac
Another Visual Studio - Visual Studio for MacAnother Visual Studio - Visual Studio for Mac
Another Visual Studio - Visual Studio for MacTomohiro Suzuki
 
DDD Alliance レガシーなコードにドメイン駆動設計で立ち向かった5年間の軌跡
DDD Alliance レガシーなコードにドメイン駆動設計で立ち向かった5年間の軌跡DDD Alliance レガシーなコードにドメイン駆動設計で立ち向かった5年間の軌跡
DDD Alliance レガシーなコードにドメイン駆動設計で立ち向かった5年間の軌跡BIGLOBE Inc.
 
『アプリケーション アーキテクチャ ガイド2.0』のガイド
『アプリケーション アーキテクチャ ガイド2.0』のガイド『アプリケーション アーキテクチャ ガイド2.0』のガイド
『アプリケーション アーキテクチャ ガイド2.0』のガイドKentaro Inomata
 
言語系サービスの統合ポータル Language Studio で Microsoft AI を再確認
言語系サービスの統合ポータル Language Studio で Microsoft AI を再確認言語系サービスの統合ポータル Language Studio で Microsoft AI を再確認
言語系サービスの統合ポータル Language Studio で Microsoft AI を再確認Yoshitaka Seo
 
DDD sample code explained in Java
DDD sample code explained in JavaDDD sample code explained in Java
DDD sample code explained in Java増田 亨
 
SIerで幸せな技術キャリアを築くために
SIerで幸せな技術キャリアを築くためにSIerで幸せな技術キャリアを築くために
SIerで幸せな技術キャリアを築くためにTakanari Konishi
 
【de:code 2020】 Build 2020 最新情報 〜 Azure & Visual Studio & .NET 〜
【de:code 2020】 Build 2020 最新情報 〜 Azure & Visual Studio & .NET 〜【de:code 2020】 Build 2020 最新情報 〜 Azure & Visual Studio & .NET 〜
【de:code 2020】 Build 2020 最新情報 〜 Azure & Visual Studio & .NET 〜日本マイクロソフト株式会社
 
Kinectプログラミング Step by Step
Kinectプログラミング Step by StepKinectプログラミング Step by Step
Kinectプログラミング Step by StepAkira Hatsune
 

What's hot (20)

世界一わかりやすいClean Architecture alpha-1
世界一わかりやすいClean Architecture alpha-1世界一わかりやすいClean Architecture alpha-1
世界一わかりやすいClean Architecture alpha-1
 
デスクトップ向けUIコンポーネントの対応状況と今後の予定
デスクトップ向けUIコンポーネントの対応状況と今後の予定デスクトップ向けUIコンポーネントの対応状況と今後の予定
デスクトップ向けUIコンポーネントの対応状況と今後の予定
 
Settings SyncとCodespaceで体験する新世代へのパラダイムシフト
Settings SyncとCodespaceで体験する新世代へのパラダイムシフトSettings SyncとCodespaceで体験する新世代へのパラダイムシフト
Settings SyncとCodespaceで体験する新世代へのパラダイムシフト
 
6万行の TypeScript 移行とその後
6万行の TypeScript 移行とその後6万行の TypeScript 移行とその後
6万行の TypeScript 移行とその後
 
Visual Studio 2019で始める「WPF on .NET Core 3.0」開発
Visual Studio 2019で始める「WPF on .NET Core 3.0」開発Visual Studio 2019で始める「WPF on .NET Core 3.0」開発
Visual Studio 2019で始める「WPF on .NET Core 3.0」開発
 
Azureクラウドのネイティブアプリ、IoTとエッジAIの管理ソリューション
Azureクラウドのネイティブアプリ、IoTとエッジAIの管理ソリューションAzureクラウドのネイティブアプリ、IoTとエッジAIの管理ソリューション
Azureクラウドのネイティブアプリ、IoTとエッジAIの管理ソリューション
 
IoT業界で必須サービスになってきたAzure Web PubSubとAzure IoT EdgeのEFLOWについてご紹介
IoT業界で必須サービスになってきたAzure Web PubSubとAzure IoT EdgeのEFLOWについてご紹介IoT業界で必須サービスになってきたAzure Web PubSubとAzure IoT EdgeのEFLOWについてご紹介
IoT業界で必須サービスになってきたAzure Web PubSubとAzure IoT EdgeのEFLOWについてご紹介
 
Vision AI on Azure IoT Edge
Vision AI on Azure IoT EdgeVision AI on Azure IoT Edge
Vision AI on Azure IoT Edge
 
Hacktoberfest 概要、Node-REDプロジェクト貢献手順
Hacktoberfest 概要、Node-REDプロジェクト貢献手順Hacktoberfest 概要、Node-REDプロジェクト貢献手順
Hacktoberfest 概要、Node-REDプロジェクト貢献手順
 
WeDX Flow Hands-on
WeDX Flow Hands-onWeDX Flow Hands-on
WeDX Flow Hands-on
 
最近のQ#について
最近のQ#について最近のQ#について
最近のQ#について
 
Another Visual Studio - Visual Studio for Mac
Another Visual Studio - Visual Studio for MacAnother Visual Studio - Visual Studio for Mac
Another Visual Studio - Visual Studio for Mac
 
DDD Alliance レガシーなコードにドメイン駆動設計で立ち向かった5年間の軌跡
DDD Alliance レガシーなコードにドメイン駆動設計で立ち向かった5年間の軌跡DDD Alliance レガシーなコードにドメイン駆動設計で立ち向かった5年間の軌跡
DDD Alliance レガシーなコードにドメイン駆動設計で立ち向かった5年間の軌跡
 
『アプリケーション アーキテクチャ ガイド2.0』のガイド
『アプリケーション アーキテクチャ ガイド2.0』のガイド『アプリケーション アーキテクチャ ガイド2.0』のガイド
『アプリケーション アーキテクチャ ガイド2.0』のガイド
 
言語系サービスの統合ポータル Language Studio で Microsoft AI を再確認
言語系サービスの統合ポータル Language Studio で Microsoft AI を再確認言語系サービスの統合ポータル Language Studio で Microsoft AI を再確認
言語系サービスの統合ポータル Language Studio で Microsoft AI を再確認
 
DDD sample code explained in Java
DDD sample code explained in JavaDDD sample code explained in Java
DDD sample code explained in Java
 
SIerで幸せな技術キャリアを築くために
SIerで幸せな技術キャリアを築くためにSIerで幸せな技術キャリアを築くために
SIerで幸せな技術キャリアを築くために
 
Decode報告(提供版)
Decode報告(提供版)Decode報告(提供版)
Decode報告(提供版)
 
【de:code 2020】 Build 2020 最新情報 〜 Azure & Visual Studio & .NET 〜
【de:code 2020】 Build 2020 最新情報 〜 Azure & Visual Studio & .NET 〜【de:code 2020】 Build 2020 最新情報 〜 Azure & Visual Studio & .NET 〜
【de:code 2020】 Build 2020 最新情報 〜 Azure & Visual Studio & .NET 〜
 
Kinectプログラミング Step by Step
Kinectプログラミング Step by StepKinectプログラミング Step by Step
Kinectプログラミング Step by Step
 

Similar to α版 継続的にテスト可能な設計を考える

RxDataSourceをNSDiffableDataSourceへ置き換える際のTips集紹介
RxDataSourceをNSDiffableDataSourceへ置き換える際のTips集紹介RxDataSourceをNSDiffableDataSourceへ置き換える際のTips集紹介
RxDataSourceをNSDiffableDataSourceへ置き換える際のTips集紹介Fumiya Sakai
 
Do you wanna be a V-ROCK star?
Do you wanna be a V-ROCK star?Do you wanna be a V-ROCK star?
Do you wanna be a V-ROCK star?Yugo Shimizu
 
B13_株式会社資生堂 プロフェッショナル事業の日本とタイの基幹系業務を「 Microsoft Dynamics 365 」で統合管理 [Microsof...
B13_株式会社資生堂 プロフェッショナル事業の日本とタイの基幹系業務を「 Microsoft Dynamics 365 」で統合管理 [Microsof...B13_株式会社資生堂 プロフェッショナル事業の日本とタイの基幹系業務を「 Microsoft Dynamics 365 」で統合管理 [Microsof...
B13_株式会社資生堂 プロフェッショナル事業の日本とタイの基幹系業務を「 Microsoft Dynamics 365 」で統合管理 [Microsof...日本マイクロソフト株式会社
 
繋ぐだけじゃ終わらない! IoTを手軽にビジネスプロセスへ統合する Azure IoT + Dynamics 365 の紹介
繋ぐだけじゃ終わらない! IoTを手軽にビジネスプロセスへ統合する Azure IoT + Dynamics 365 の紹介繋ぐだけじゃ終わらない! IoTを手軽にビジネスプロセスへ統合する Azure IoT + Dynamics 365 の紹介
繋ぐだけじゃ終わらない! IoTを手軽にビジネスプロセスへ統合する Azure IoT + Dynamics 365 の紹介Kazuya Sugimoto
 
LightSwitch 結局何ができるの
LightSwitch 結局何ができるのLightSwitch 結局何ができるの
LightSwitch 結局何ができるのYoshitaka Seo
 
Evangelist training program at fixer
Evangelist training program at fixerEvangelist training program at fixer
Evangelist training program at fixerShotaro Suzuki
 
DeNA のデータ活用を支える BigQuery データの民主化とガバナンス強化の軌跡 | Google Cloud INSIDE Games & App...
DeNA のデータ活用を支える BigQuery データの民主化とガバナンス強化の軌跡 | Google Cloud INSIDE Games & App...DeNA のデータ活用を支える BigQuery データの民主化とガバナンス強化の軌跡 | Google Cloud INSIDE Games & App...
DeNA のデータ活用を支える BigQuery データの民主化とガバナンス強化の軌跡 | Google Cloud INSIDE Games & App...Google Cloud Platform - Japan
 
AIOpsで実現する効率化 OSC 2022 Online Spring TIS
AIOpsで実現する効率化 OSC 2022 Online Spring TISAIOpsで実現する効率化 OSC 2022 Online Spring TIS
AIOpsで実現する効率化 OSC 2022 Online Spring TISDaisuke Ikeda
 
そのデータ、活かせていますか?
そのデータ、活かせていますか?そのデータ、活かせていますか?
そのデータ、活かせていますか?Miho Yamamoto
 
決済金融から始めるデータドリブンカンパニー
決済金融から始めるデータドリブンカンパニー決済金融から始めるデータドリブンカンパニー
決済金融から始めるデータドリブンカンパニーTokuhiro Eto
 
アイデアを形にする ③3時間でアプリ公開!ゼロからのプログラミング講座
アイデアを形にする  ③3時間でアプリ公開!ゼロからのプログラミング講座アイデアを形にする  ③3時間でアプリ公開!ゼロからのプログラミング講座
アイデアを形にする ③3時間でアプリ公開!ゼロからのプログラミング講座DIVE INTO CODE Corp.
 
JaSST2017_大規模業務システムにおける再利用可能なテスト自動化の取り組み
JaSST2017_大規模業務システムにおける再利用可能なテスト自動化の取り組みJaSST2017_大規模業務システムにおける再利用可能なテスト自動化の取り組み
JaSST2017_大規模業務システムにおける再利用可能なテスト自動化の取り組みHideki Sugimoto
 

Similar to α版 継続的にテスト可能な設計を考える (20)

Ms retail update ra 20191030
Ms retail update ra 20191030Ms retail update ra 20191030
Ms retail update ra 20191030
 
お客様が望んでいるモダンデスクトップアプリとは?/傾向と対策 Part1
お客様が望んでいるモダンデスクトップアプリとは?/傾向と対策 Part1お客様が望んでいるモダンデスクトップアプリとは?/傾向と対策 Part1
お客様が望んでいるモダンデスクトップアプリとは?/傾向と対策 Part1
 
[Japan Tech summit 2017] DAL 006
[Japan Tech summit 2017] DAL 006[Japan Tech summit 2017] DAL 006
[Japan Tech summit 2017] DAL 006
 
db tech showcase Osaka 2013 GuideBook
db tech showcase Osaka 2013 GuideBookdb tech showcase Osaka 2013 GuideBook
db tech showcase Osaka 2013 GuideBook
 
RxDataSourceをNSDiffableDataSourceへ置き換える際のTips集紹介
RxDataSourceをNSDiffableDataSourceへ置き換える際のTips集紹介RxDataSourceをNSDiffableDataSourceへ置き換える際のTips集紹介
RxDataSourceをNSDiffableDataSourceへ置き換える際のTips集紹介
 
Do you wanna be a V-ROCK star?
Do you wanna be a V-ROCK star?Do you wanna be a V-ROCK star?
Do you wanna be a V-ROCK star?
 
B13_株式会社資生堂 プロフェッショナル事業の日本とタイの基幹系業務を「 Microsoft Dynamics 365 」で統合管理 [Microsof...
B13_株式会社資生堂 プロフェッショナル事業の日本とタイの基幹系業務を「 Microsoft Dynamics 365 」で統合管理 [Microsof...B13_株式会社資生堂 プロフェッショナル事業の日本とタイの基幹系業務を「 Microsoft Dynamics 365 」で統合管理 [Microsof...
B13_株式会社資生堂 プロフェッショナル事業の日本とタイの基幹系業務を「 Microsoft Dynamics 365 」で統合管理 [Microsof...
 
JavaOne2017参加報告 Microservices topic & approach #jjug
JavaOne2017参加報告 Microservices topic & approach #jjugJavaOne2017参加報告 Microservices topic & approach #jjug
JavaOne2017参加報告 Microservices topic & approach #jjug
 
Agile meets BABOK
Agile meets BABOKAgile meets BABOK
Agile meets BABOK
 
繋ぐだけじゃ終わらない! IoTを手軽にビジネスプロセスへ統合する Azure IoT + Dynamics 365 の紹介
繋ぐだけじゃ終わらない! IoTを手軽にビジネスプロセスへ統合する Azure IoT + Dynamics 365 の紹介繋ぐだけじゃ終わらない! IoTを手軽にビジネスプロセスへ統合する Azure IoT + Dynamics 365 の紹介
繋ぐだけじゃ終わらない! IoTを手軽にビジネスプロセスへ統合する Azure IoT + Dynamics 365 の紹介
 
LightSwitch 結局何ができるの
LightSwitch 結局何ができるのLightSwitch 結局何ができるの
LightSwitch 結局何ができるの
 
Evangelist training program at fixer
Evangelist training program at fixerEvangelist training program at fixer
Evangelist training program at fixer
 
DeNA のデータ活用を支える BigQuery データの民主化とガバナンス強化の軌跡 | Google Cloud INSIDE Games & App...
DeNA のデータ活用を支える BigQuery データの民主化とガバナンス強化の軌跡 | Google Cloud INSIDE Games & App...DeNA のデータ活用を支える BigQuery データの民主化とガバナンス強化の軌跡 | Google Cloud INSIDE Games & App...
DeNA のデータ活用を支える BigQuery データの民主化とガバナンス強化の軌跡 | Google Cloud INSIDE Games & App...
 
AIOpsで実現する効率化 OSC 2022 Online Spring TIS
AIOpsで実現する効率化 OSC 2022 Online Spring TISAIOpsで実現する効率化 OSC 2022 Online Spring TIS
AIOpsで実現する効率化 OSC 2022 Online Spring TIS
 
ファーストアカウンティング会社説明資料 for engineer 2022年7月版
ファーストアカウンティング会社説明資料 for engineer 2022年7月版ファーストアカウンティング会社説明資料 for engineer 2022年7月版
ファーストアカウンティング会社説明資料 for engineer 2022年7月版
 
そのデータ、活かせていますか?
そのデータ、活かせていますか?そのデータ、活かせていますか?
そのデータ、活かせていますか?
 
決済金融から始めるデータドリブンカンパニー #yjmu
決済金融から始めるデータドリブンカンパニー #yjmu決済金融から始めるデータドリブンカンパニー #yjmu
決済金融から始めるデータドリブンカンパニー #yjmu
 
決済金融から始めるデータドリブンカンパニー
決済金融から始めるデータドリブンカンパニー決済金融から始めるデータドリブンカンパニー
決済金融から始めるデータドリブンカンパニー
 
アイデアを形にする ③3時間でアプリ公開!ゼロからのプログラミング講座
アイデアを形にする  ③3時間でアプリ公開!ゼロからのプログラミング講座アイデアを形にする  ③3時間でアプリ公開!ゼロからのプログラミング講座
アイデアを形にする ③3時間でアプリ公開!ゼロからのプログラミング講座
 
JaSST2017_大規模業務システムにおける再利用可能なテスト自動化の取り組み
JaSST2017_大規模業務システムにおける再利用可能なテスト自動化の取り組みJaSST2017_大規模業務システムにおける再利用可能なテスト自動化の取り組み
JaSST2017_大規模業務システムにおける再利用可能なテスト自動化の取り組み
 

More from Atsushi Nakamura

Unicodeで半角全角を扱うAmbiguous(曖昧さ)とUncertainty(不確実性)の恐怖
Unicodeで半角全角を扱うAmbiguous(曖昧さ)とUncertainty(不確実性)の恐怖Unicodeで半角全角を扱うAmbiguous(曖昧さ)とUncertainty(不確実性)の恐怖
Unicodeで半角全角を扱うAmbiguous(曖昧さ)とUncertainty(不確実性)の恐怖Atsushi Nakamura
 
世界一わかりやすいClean Architecture release-preview
世界一わかりやすいClean Architecture release-preview世界一わかりやすいClean Architecture release-preview
世界一わかりやすいClean Architecture release-previewAtsushi Nakamura
 
App center analyticsを使い倒そう
App center analyticsを使い倒そうApp center analyticsを使い倒そう
App center analyticsを使い倒そうAtsushi Nakamura
 
Old:App center analyticsを使い倒そう
Old:App center analyticsを使い倒そうOld:App center analyticsを使い倒そう
Old:App center analyticsを使い倒そうAtsushi Nakamura
 
Xamarin.forms navigation overview
Xamarin.forms navigation overviewXamarin.forms navigation overview
Xamarin.forms navigation overviewAtsushi Nakamura
 
App center analyticsを使い倒そう
App center analyticsを使い倒そうApp center analyticsを使い倒そう
App center analyticsを使い倒そうAtsushi Nakamura
 
Blue monkey architecture overview
Blue monkey architecture overviewBlue monkey architecture overview
Blue monkey architecture overviewAtsushi Nakamura
 
Xamarin Dev days 2 xamarin.forms ja
Xamarin Dev days 2   xamarin.forms jaXamarin Dev days 2   xamarin.forms ja
Xamarin Dev days 2 xamarin.forms jaAtsushi Nakamura
 
Why prism for xamarin.forms
Why prism for xamarin.formsWhy prism for xamarin.forms
Why prism for xamarin.formsAtsushi Nakamura
 
Enterpriseから見たXamarinの可能性
Enterpriseから見たXamarinの可能性Enterpriseから見たXamarinの可能性
Enterpriseから見たXamarinの可能性Atsushi Nakamura
 

More from Atsushi Nakamura (10)

Unicodeで半角全角を扱うAmbiguous(曖昧さ)とUncertainty(不確実性)の恐怖
Unicodeで半角全角を扱うAmbiguous(曖昧さ)とUncertainty(不確実性)の恐怖Unicodeで半角全角を扱うAmbiguous(曖昧さ)とUncertainty(不確実性)の恐怖
Unicodeで半角全角を扱うAmbiguous(曖昧さ)とUncertainty(不確実性)の恐怖
 
世界一わかりやすいClean Architecture release-preview
世界一わかりやすいClean Architecture release-preview世界一わかりやすいClean Architecture release-preview
世界一わかりやすいClean Architecture release-preview
 
App center analyticsを使い倒そう
App center analyticsを使い倒そうApp center analyticsを使い倒そう
App center analyticsを使い倒そう
 
Old:App center analyticsを使い倒そう
Old:App center analyticsを使い倒そうOld:App center analyticsを使い倒そう
Old:App center analyticsを使い倒そう
 
Xamarin.forms navigation overview
Xamarin.forms navigation overviewXamarin.forms navigation overview
Xamarin.forms navigation overview
 
App center analyticsを使い倒そう
App center analyticsを使い倒そうApp center analyticsを使い倒そう
App center analyticsを使い倒そう
 
Blue monkey architecture overview
Blue monkey architecture overviewBlue monkey architecture overview
Blue monkey architecture overview
 
Xamarin Dev days 2 xamarin.forms ja
Xamarin Dev days 2   xamarin.forms jaXamarin Dev days 2   xamarin.forms ja
Xamarin Dev days 2 xamarin.forms ja
 
Why prism for xamarin.forms
Why prism for xamarin.formsWhy prism for xamarin.forms
Why prism for xamarin.forms
 
Enterpriseから見たXamarinの可能性
Enterpriseから見たXamarinの可能性Enterpriseから見たXamarinの可能性
Enterpriseから見たXamarinの可能性
 

α版 継続的にテスト可能な設計を考える

Editor's Notes

  1. みなさんこんにちは。 ご紹介いただきました。ニュイこと中村です。 今日は 継続的にテスト可能な設計を考える というTitleでお話しさせていただこうと思います。 よろしくお願いいたします。
  2. まずは自己紹介から 中村充志と申します。 リコージャパン株式会社の金融ソリューション開発部 というところに所属しています。 Enterprise系SIerでITアーキテクトをやらせてもらっています。
  3. ところで皆さん、日常的に自動テスト書いてますか? 自動テストというとCI/CDとかTDDとかDevOpsとかにつながるイメージがあるように、個人的には感じています。 逆に、SIerのテストというと、Excel!スクショ!エビデンス!的なイメージを持ってる方が多いんじゃないでしょうか? ただ、SIerにはSIerの自動テストの欲求というのが実はあります。 というのは… もっとも統計とったりした訳じゃないですし、弊社というより私個人の欲求かもしれませんが。
  4. ところで、私の自己紹介の中で、普段はITアーキテクトをしていると お伝えしました。 皆さん、ITアーキテクトと聞いてどんな職業かお分かりになりますか?
  5. ところで、私の自己紹介の中で、普段はITアーキテクトをしていると お伝えしました。 皆さん、ITアーキテクトと聞いてどんな職業かお分かりになりますか?