狠狠撸

狠狠撸Share a Scribd company logo
バリデーション駆動開発(仮称)で
プロジェクトメンバー全員を幸せにした話
Laravel/オレオレ両対応
アジェンダ
話すこと
開発フェーズに特有の「厄介ななバグ」
「バリデーション」の適用範囲を考える
php/Laravel での実装例
テスト駆動開発との併用
話さないこと
Laravel のValidation
自己紹介
@KentarouTakeda
サーバサイド
php / node.js / TypeScript
Laravel / express / AWS Lambda
PostgreSQL / MySQL
インフラ
RHEL / CentOS / AmazonLinux / Chef / Ansible
フロントエンド
TypeScript
Angular / jQuery / Hexo
心がけていること
担当業務の範囲にとらわれず、
幅広い視野で全体の効率アップを図りたい。
API / ネットワーク/ インターフェース
人/ 部署/ 会社
「厄介なバグ」とは?
影響範囲が広い
再現が取れない
利用者への影響が大きい
事例「ソシャゲのガチャ機能」
開発は「サーバ」「アプリ」「デザイナー」の3名
抽選はサーバ側の「ガチャ础笔滨」が行う
ガチャAPIの返却に応じてアプリ上で入手演出
素材は随時追加?デザイナー単独でcommit
バグ報告
「回す」ボタンを押した瞬間にクラッシュ。
演出まで進まない=画面には何の情報も無い
頻度は100回に1回程度。
外部スタッフからの報告
クラッシュログ入手困難
最初に誰に相談するか?
考えられる原因
特定条件で「サーバ」が規格外のレスポンス
特定条件で「アプリ」が未定義プロパティを参照
特定の「素材」が破損している?
最初に誰に相談するか?
些細なバグの裏で、こんなことが起きている?
「誰に相談すれば良いんだろう?」
「自分ではありません!」
「相談したら怒られた…」
「例のバグ、進捗どうですか?」
「全員に相談、するしかないな…」
「また人のバグで時間取られるのか…」
「厄介なバグ」例えばこういう指針
困るのは誰か?
自分<自分以外の誰か
遭遇するのは誰か?
自分<自分以外の誰か
原因箇所を特定できるのは誰か?
自分以外の誰でも<自分のみ
「厄介なバグ」をどう対処するか?
人海戦術で原因探し!
出さないように気をつける!
あらかじめ可能性を潰しておく。
今回はどこに问题があったのか?
今回はどこに问题があったのか?
特定条件で「サーバ」が規格外のレスポンス
というバグが存在したこと。
今回はどこに问题があったのか?
特定条件で「サーバ」が規格外のレスポンス
というバグが存在したこと。
というバグの可能性が存在したこと。
可能性を溃す
IT用語辞典バイナリ
バリデーション
https://www.sophia-it.com/content/バリデーション
入力されたデータが、あるいはプログラミング言
語やマークアップ言語の記述が、規定された文法
に即して、または要求された仕様にそって、適切
に記述されているかどうかを検証することであ
る。
“
“
バリデーションが必要な値とは?
外部から入力された値
信頼できない値
信頼できない値
自分の書くプログラムに
100%の信頼を持てますか?
JSON Schema
https://json-schema.org/
JSONへの型定義
JSONが特定の型を満たしているか検証
JSON Schema is a vocabulary that allows you to
annotate and validate JSON documents.
“
“
ガチャAPI
gatcha: # ガチャAPIは
type: "object" # オブジェクトを返却する
properties:
cardIds: # cardIds プロパティは
type: "array" # 配列型を取り
items:
type: "integer" # それぞれの値は整数
minimum: 1000 # 最小値は1000
maximum: 2999 # 最大値は2999
minItems: 1 # 配列の要素数は最小で1個
minItems: 3 # 最大で3個(1~3個のカードが出てくるガチャ)
bonusId: # bonusId というプロパティは
type: "integer" # 整数を取り
minimum: 3000 # 3000以上
maximum: 4999 # 4999以下
required: # 必須プロパティは
- "cardIds" # cardIds のみ(ボーナスは無い時もある)
additionalProperties: false # 上記で定義された以外のプロパティは存在
PHP での実装
$ composer require justinrainbow/json-schema
$validator = new Validator();
$validator->validate($response, $schema, $options);
if(true !== $validator->isValid()) {
throw new Exception("サーバ側のバグ!");
}
echo json_encode($response);
status=200 であれば必ず安全
安全でない場合必ず必ずstatus=500
可能性を一つ溃した
事例「Webアプリのマイページ」
Laravel案件、2名体制。
サーバエンジニア
ルーティングやコントローラーを担当
Webデザイナー
Bladeテンプレートへhtmlをコーディング
バグ報告
プロフィールに「氏名」を登録した状態でマイページ
にアクセスすると以下のエラーが表示されます。
ErrorException (E_ERROR)
Undefined variable: firstName
(View: /var/www/resources/views/mypage/index.blade.php)
考えられる原因
テンプレート側のtypo
正しくは$ rst_name だった
コントローラー側のバグ
$ rstName の初期化漏れ
今回はどこに问题があったのか?
今回はどこに问题があったのか?
コントローラー側のバグ
$ rstName の初期化漏れ
というバグが存在したこと。
今回はどこに问题があったのか?
コントローラー側のバグ
$ rstName の初期化漏れ
というバグが存在したこと。
というバグの可能性が存在したこと。
※コーダーはプログラマーの想像以上にエラー画面に
ビビってます。
ビューに渡す値を検証
class MypageController extends Controller {
public function index(Request $request) {
/* ビューに渡す値を準備する */
/* ここでバリデーション? */
return view('mypage.index', $data);
}
}
何の保証にもならない。
(仕組み化して一括で防ぎたい)
コントローラーではオブジェクトを返
却するのみ
class MypageController extends Controller {
public function index(Request $request) {
/* ビューに渡す値を準備する */
return $data;
}
}
ビュー適用
class ApplyViewMiddleware {
public function handle($request, Closure $next) {
$response = $next($request);
/* 実際は abort() や RedirectResponse の際の処理が必要 */
$name = Route::currentRouteName(); // ビュー名 = ルート名
$response = new Response(view($name, $content));
return $response;
}
}
バリデーション
class ValidationMiddleware {
public function handle($request, Closure $next) {
$response = $next($request);
$name = Route::currentRouteName(); // バリデーション名 = ルート
$isValid = $this->valication($response,$this->getSchema($nam
if($isValid) {
abort(500, "コントローラー側のバグ!")
} else {
return $response;
}
}
ミドルウェア適用
afterミドルウェアなので定義は逆順。
namespace AppHttp;
use IlluminateFoundationHttpKernel as HttpKernel;
class Kernel extends HttpKernel {
protected $middlewareGroups = [
'web' => [
/**/
AppHttpMiddlewareApplyView::class, // ビュー適用が先
AppHttpMiddlewareValidation::class, // バリデーションが後
],
]
}
バリデーションとテスト
テスト駆動開発(TDD)
[DO03] 50 分でわかるテスト駆動開発
/decode2017/do03-50/9
TDDのサイクル
1. 次の目標を考える
2. その目標を示すテストを書く
3. そのテストを実行して失敗させる(Red)
4. 目的のコードを書く
5. 2.で書いたテストを成功させる(Green)
6. テストが通るままでリファクタリングを行う
(Refactor)
7. 1~6を繰り返す
TDDと黄金の回転
Red, Grren, Refactor
/decode2017/do03-
50/10
出力の検証=テスト
バリデーション駆動開発
1. 次の目標を考える
2. その目標を示すテストバリデーションを書く
3. そのテストバリデーションを実行して失敗させる
4. 目的のコードを書く
5. 2.で書いたテストバリデーションを成功させる
6. テストが通るままでリファクタリングを行う
7. 1~6を繰り返す
「ガチャ础笔滨」
目標「ガチャAPIが存在する」
// ApiTest.php
class ApiTest extends TestCase {
/** @test */
public function gatcha() {
$this->post('/api/gatcha', [])->assertStatus(200);
}
}
テストをパスする最小限のコード
# api.schema.yml
gatcha:
// ApiController.php
class ApiController {
public function gatcha() {
}
}
次の目標「返却はcardIdsというプロ
パティを持つ」
gatcha:
+ type: "object"
+ properties:
+ cardIds:
class ApiController {
public function gatcha() {
+ return [
+ 'cardIds' => null,
+ ];
}
}
次の目標「cardIdsは配列」
gatcha:
type: "object"
properties:
cardIds:
+ type: "array"
class ApiController {
public function gatcha() {
return [
- 'cardIds' => null,
+ 'cardIds' => [],
];
}
}
次の目標「cardIdsの各要素(略)」
gatcha:
type: "object"
properties:
cardIds:
type: "array"
+ items:
+ type: "integer"
+ minimum: 1000
+ maximum: 2999
+ minItems: 1
+ minItems: 3
class ApiController {
public function gatcha() {
return [
- 'cardIds' => [],
+ 'cardIds' => [1000, 1001, 1002],
];
}
}
開発体験
最小限のテストコード
Red -> Green -> Refactor
仕様?実装?テストが同時に出来上がっていく
共有可能な成果物
「ガチャ础笔滨」
今回はどこに问题があったのか?
今回はどこに问题があったのか?
特定条件で「アプリ」が未定義プロパティを参照
というバグが存在したこと。
今回はどこに问题があったのか?
特定条件で「アプリ」が未定義プロパティを参照
というバグが存在したこと。
というバグの可能性が存在したこと。
TypeScript
https://github.com/bcherny/json-schema-to-
typescript
{
"title": "Example Schema",
"type": "object",
"properties": {
"firstName": {
"type": "string"
},
"lastName": {
"type": "string"
},
"age": {
"description": "Age in years",
"type": "integer",
"minimum": 0
},
"hairColor": {
"enum": ["black", "brown", "blue"],
"type": "string"
}
},
"additionalProperties": false,
export interface ExampleSchema {
firstName: string;
lastName: string;
/**
* Age in years
*/
age?: number;
hairColor?: "black" | "brown" | "blue";
}
C#
https://www.newtonsoft.com/jsonschema
{
"$schema": "http://json-schema.org/draft-03/schema#",
"title": "Country",
"description": "A nation with its own government, occupying a
"type": "object",
"properties": {
"flag": {
"$ref": "flag.json"
},
"cities": {
"type": "array",
"description": "A large town",
"items": {
"$ref": "city.json"
},
"uniqueItems": true
},
"population": {
"type": "integer",
"description": "The number of people inhabiting this count
"minimum": 1000,
namespace generated
{
using System;
using com.cvent.country.entities;
using generated;
using System.Collections.Generic;
using Cvent.SchemaToPoco.Core.ValidationAttributes;
using System.ComponentModel.DataAnnotations;
// A nation with its own government, occupying a particular
public class Country
{
// Used as the symbol or emblem of a country
public Flag Flag { get; set; }
// A large town
public HashSet<City> Cities { get; set; }
// The number of people inhabiting this country
[Required()]
[MinValue(1000)]
クライアントへの適用
ビルドが通っていれば確実に安全
安全でない場合ビルドで落ちる
心がけていること
担当業務の範囲にとらわれず、
幅広い視野で全体の効率アップを図りたい。
API / ネットワーク/ インターフェース
業務/ 人/ 部署/ 会社
仕組み化で解決。
サーバサイドは仕組み化に取り組みやすい立ち位置。
Ad

Recommended

Docker friendly PHP / Laravel
Docker friendly PHP / Laravel
Kentarou Takeda
?
AWS CDKに魅入られた PHPer か?オススメする
AWS CDKに魅入られた PHPer か?オススメする
Taichi Inaba
?
Azure でサーバーレス、 Infrastructure as Code どうしてますか?
Azure でサーバーレス、 Infrastructure as Code どうしてますか?
Kazumi OHIRA
?
コード品质を保つために心がけたいこと
コード品质を保つために心がけたいこと
Kentarou Takeda
?
ドメイン駆动设计 分析しながら设计する
ドメイン駆动设计 分析しながら设计する
増田 亨
?
関数型プログラミングのデザインパターンひとめぐり
関数型プログラミングのデザインパターンひとめぐり
Kazuyuki TAKASE
?
鲍苍颈迟测でオニオンアーキテクチャ
鲍苍颈迟测でオニオンアーキテクチャ
torisoup
?
オブジェクト指向の设计と実装の学び方のコツ
オブジェクト指向の设计と実装の学び方のコツ
増田 亨
?
メルカリ?ソウゾウでは どうGoを活用しているのか?
メルカリ?ソウゾウでは どうGoを活用しているのか?
Takuya Ueda
?
マルチテナントのアプリケーション実装?実践编?
マルチテナントのアプリケーション実装?実践编?
Yoshiki Nakagawa
?
「Helix Core」導入事例紹介 『小~中規模事例 "Unreal Engine 4 × Helix Core ヒストリア運用レギュレーション紹介"』
「Helix Core」導入事例紹介 『小~中規模事例 "Unreal Engine 4 × Helix Core ヒストリア運用レギュレーション紹介"』
historia_Inc
?
今さら闻けない顿颈と蝉辫谤颈苍驳
今さら闻けない顿颈と蝉辫谤颈苍驳
土岐 孝平
?
Docker Tokyo
Docker Tokyo
cyberblack28 Ichikawa
?
DDD x CQRS 更新系と参照系で異なるORMを併用して上手くいった話
DDD x CQRS 更新系と参照系で異なるORMを併用して上手くいった話
Koichiro Matsuoka
?
PHP と SAPI と ZendEngine3 と
PHP と SAPI と ZendEngine3 と
do_aki
?
笔辞蝉迟驳谤别厂蚕尝アンチハ?ターン
笔辞蝉迟驳谤别厂蚕尝アンチハ?ターン
Soudai Sone
?
厂辞濒谤と贰濒补蝉迟颈肠蝉别补谤肠丑を比べてみよう
厂辞濒谤と贰濒补蝉迟颈肠蝉别补谤肠丑を比べてみよう
Shinsuke Sugaya
?
データモデリング入门-补蝉迟补丑*を使って、罢惭の手法を使う-
データモデリング入门-补蝉迟补丑*を使って、罢惭の手法を使う-
Koichi Inami
?
ドメイン駆動設計 失敗したことと成功したこと
ドメイン駆動設計 失敗したことと成功したこと
BIGLOBE Inc.
?
ドメイン駆動設計 基本を理解する
ドメイン駆動設計 基本を理解する
増田 亨
?
协働ロボット颁翱搁翱の开発における形式的仕様记述碍惭尝の开発と适用
协働ロボット颁翱搁翱の开発における形式的仕様记述碍惭尝の开発と适用
Life Robotics
?
「実践ドメイン駆動設計」 から理解するDDD (2018年11月)
「実践ドメイン駆動設計」 から理解するDDD (2018年11月)
A AOKI
?
イベント?ソーシングを知る
イベント?ソーシングを知る
Shuhei Fujita
?
Rest ful api設計入門
Rest ful api設計入門
Monstar Lab Inc.
?
GitLab から GitLab に移行したときの思い出
GitLab から GitLab に移行したときの思い出
富士通クラウドテクノロジーズ株式会社
?
ト?メイン駆动设计再入门
ト?メイン駆动设计再入门
Yukei Wachi
?
贵濒耻迟迟别谤移行の苦労と、乗り越えた先に得られたもの
贵濒耻迟迟别谤移行の苦労と、乗り越えた先に得られたもの
Recruit Lifestyle Co., Ltd.
?
笔测迟丑辞苍による黒魔术入门
笔测迟丑辞苍による黒魔术入门
大樹 小倉
?
超スマート社会時代のシステム&ソフトウェア品質知識体系 - SQuBOK 2020 における AI、IoT、クラウド、オープンソース、アジャイル、DevO...
超スマート社会時代のシステム&ソフトウェア品質知識体系 - SQuBOK 2020 における AI、IoT、クラウド、オープンソース、アジャイル、DevO...
Hironori Washizaki
?

More Related Content

What's hot (20)

メルカリ?ソウゾウでは どうGoを活用しているのか?
メルカリ?ソウゾウでは どうGoを活用しているのか?
Takuya Ueda
?
マルチテナントのアプリケーション実装?実践编?
マルチテナントのアプリケーション実装?実践编?
Yoshiki Nakagawa
?
「Helix Core」導入事例紹介 『小~中規模事例 "Unreal Engine 4 × Helix Core ヒストリア運用レギュレーション紹介"』
「Helix Core」導入事例紹介 『小~中規模事例 "Unreal Engine 4 × Helix Core ヒストリア運用レギュレーション紹介"』
historia_Inc
?
今さら闻けない顿颈と蝉辫谤颈苍驳
今さら闻けない顿颈と蝉辫谤颈苍驳
土岐 孝平
?
Docker Tokyo
Docker Tokyo
cyberblack28 Ichikawa
?
DDD x CQRS 更新系と参照系で異なるORMを併用して上手くいった話
DDD x CQRS 更新系と参照系で異なるORMを併用して上手くいった話
Koichiro Matsuoka
?
PHP と SAPI と ZendEngine3 と
PHP と SAPI と ZendEngine3 と
do_aki
?
笔辞蝉迟驳谤别厂蚕尝アンチハ?ターン
笔辞蝉迟驳谤别厂蚕尝アンチハ?ターン
Soudai Sone
?
厂辞濒谤と贰濒补蝉迟颈肠蝉别补谤肠丑を比べてみよう
厂辞濒谤と贰濒补蝉迟颈肠蝉别补谤肠丑を比べてみよう
Shinsuke Sugaya
?
データモデリング入门-补蝉迟补丑*を使って、罢惭の手法を使う-
データモデリング入门-补蝉迟补丑*を使って、罢惭の手法を使う-
Koichi Inami
?
ドメイン駆動設計 失敗したことと成功したこと
ドメイン駆動設計 失敗したことと成功したこと
BIGLOBE Inc.
?
ドメイン駆動設計 基本を理解する
ドメイン駆動設計 基本を理解する
増田 亨
?
协働ロボット颁翱搁翱の开発における形式的仕様记述碍惭尝の开発と适用
协働ロボット颁翱搁翱の开発における形式的仕様记述碍惭尝の开発と适用
Life Robotics
?
「実践ドメイン駆動設計」 から理解するDDD (2018年11月)
「実践ドメイン駆動設計」 から理解するDDD (2018年11月)
A AOKI
?
イベント?ソーシングを知る
イベント?ソーシングを知る
Shuhei Fujita
?
Rest ful api設計入門
Rest ful api設計入門
Monstar Lab Inc.
?
GitLab から GitLab に移行したときの思い出
GitLab から GitLab に移行したときの思い出
富士通クラウドテクノロジーズ株式会社
?
ト?メイン駆动设计再入门
ト?メイン駆动设计再入门
Yukei Wachi
?
贵濒耻迟迟别谤移行の苦労と、乗り越えた先に得られたもの
贵濒耻迟迟别谤移行の苦労と、乗り越えた先に得られたもの
Recruit Lifestyle Co., Ltd.
?
笔测迟丑辞苍による黒魔术入门
笔测迟丑辞苍による黒魔术入门
大樹 小倉
?
メルカリ?ソウゾウでは どうGoを活用しているのか?
メルカリ?ソウゾウでは どうGoを活用しているのか?
Takuya Ueda
?
マルチテナントのアプリケーション実装?実践编?
マルチテナントのアプリケーション実装?実践编?
Yoshiki Nakagawa
?
「Helix Core」導入事例紹介 『小~中規模事例 "Unreal Engine 4 × Helix Core ヒストリア運用レギュレーション紹介"』
「Helix Core」導入事例紹介 『小~中規模事例 "Unreal Engine 4 × Helix Core ヒストリア運用レギュレーション紹介"』
historia_Inc
?
今さら闻けない顿颈と蝉辫谤颈苍驳
今さら闻けない顿颈と蝉辫谤颈苍驳
土岐 孝平
?
DDD x CQRS 更新系と参照系で異なるORMを併用して上手くいった話
DDD x CQRS 更新系と参照系で異なるORMを併用して上手くいった話
Koichiro Matsuoka
?
PHP と SAPI と ZendEngine3 と
PHP と SAPI と ZendEngine3 と
do_aki
?
笔辞蝉迟驳谤别厂蚕尝アンチハ?ターン
笔辞蝉迟驳谤别厂蚕尝アンチハ?ターン
Soudai Sone
?
厂辞濒谤と贰濒补蝉迟颈肠蝉别补谤肠丑を比べてみよう
厂辞濒谤と贰濒补蝉迟颈肠蝉别补谤肠丑を比べてみよう
Shinsuke Sugaya
?
データモデリング入门-补蝉迟补丑*を使って、罢惭の手法を使う-
データモデリング入门-补蝉迟补丑*を使って、罢惭の手法を使う-
Koichi Inami
?
ドメイン駆動設計 失敗したことと成功したこと
ドメイン駆動設計 失敗したことと成功したこと
BIGLOBE Inc.
?
ドメイン駆動設計 基本を理解する
ドメイン駆動設計 基本を理解する
増田 亨
?
协働ロボット颁翱搁翱の开発における形式的仕様记述碍惭尝の开発と适用
协働ロボット颁翱搁翱の开発における形式的仕様记述碍惭尝の开発と适用
Life Robotics
?
「実践ドメイン駆動設計」 から理解するDDD (2018年11月)
「実践ドメイン駆動設計」 から理解するDDD (2018年11月)
A AOKI
?
イベント?ソーシングを知る
イベント?ソーシングを知る
Shuhei Fujita
?
ト?メイン駆动设计再入门
ト?メイン駆动设计再入门
Yukei Wachi
?
贵濒耻迟迟别谤移行の苦労と、乗り越えた先に得られたもの
贵濒耻迟迟别谤移行の苦労と、乗り越えた先に得られたもの
Recruit Lifestyle Co., Ltd.
?
笔测迟丑辞苍による黒魔术入门
笔测迟丑辞苍による黒魔术入门
大樹 小倉
?

Similar to バリデーション駆動開発(仮称)で プロジェクトメンバー全員を幸せにした話 (20)

超スマート社会時代のシステム&ソフトウェア品質知識体系 - SQuBOK 2020 における AI、IoT、クラウド、オープンソース、アジャイル、DevO...
超スマート社会時代のシステム&ソフトウェア品質知識体系 - SQuBOK 2020 における AI、IoT、クラウド、オープンソース、アジャイル、DevO...
Hironori Washizaki
?
惭补办别骋辞辞诲で快适なテスト駆动开発を
惭补办别骋辞辞诲で快适なテスト駆动开発を
Atsuhiro Kubo
?
GitLab から GitHub + CircleCI に乗り換えてチーム運用を改善しつつある話
GitLab から GitHub + CircleCI に乗り換えてチーム運用を改善しつつある話
R S
?
ワンクリックデプロイ101 #ocdeploy
ワンクリックデプロイ101 #ocdeploy
Ryutaro YOSHIBA
?
Akito.Tsukahara.PHPerKaigi2020
Akito.Tsukahara.PHPerKaigi2020
Akito Tsukahara
?
大规模ソフトウェア开発とテストの経験について
大规模ソフトウェア开発とテストの経験について
Rakuten Group, Inc.
?
地図を捨ててコンパスを頼りに进め
地図を捨ててコンパスを頼りに进め
Dai FUJIHARA
?
地図を捨ててコンパスを頼りに进め
地図を捨ててコンパスを頼りに进め
Rakuten Group, Inc.
?
第3回ソフトウェアテストセミナー
第3回ソフトウェアテストセミナー
Tomoyuki Sato
?
挑戦の道具としてのチケット駆动开発(长编版)
挑戦の道具としてのチケット駆动开発(长编版)
Makoto SAKAI
?
安全な奥别产アプリケーションの作り方2018
安全な奥别产アプリケーションの作り方2018
Hiroshi Tokumaru
?
第4回品川搁别诲尘颈苍别勉强会资料「チケット駆动开発のフレームワーク~现场の経験知からパターン言语へ(ベータ版)」
第4回品川搁别诲尘颈苍别勉强会资料「チケット駆动开発のフレームワーク~现场の経験知からパターン言语へ(ベータ版)」
akipii Oga
?
AJ2010_20100409_maegawasensei
AJ2010_20100409_maegawasensei
Akiko Kosaka
?
デブサミ2014【13-叠-尝】テスト自动化を见直そう!自动化への投资が开発チームをクリエイティブにする(安竹由起夫〔コベリティジャパン〕)
デブサミ2014【13-叠-尝】テスト自动化を见直そう!自动化への投资が开発チームをクリエイティブにする(安竹由起夫〔コベリティジャパン〕)
Developers Summit
?
テスト勉強会よしおか100311 1
テスト勉強会よしおか100311 1
Hiro Yoshioka
?
Hyper → Highspeed → Development
Hyper → Highspeed → Development
aktsk
?
超スマート社会時代のシステム&ソフトウェア品質知識体系 - SQuBOK 2020 における AI、IoT、クラウド、オープンソース、アジャイル、DevO...
超スマート社会時代のシステム&ソフトウェア品質知識体系 - SQuBOK 2020 における AI、IoT、クラウド、オープンソース、アジャイル、DevO...
Hironori Washizaki
?
惭补办别骋辞辞诲で快适なテスト駆动开発を
惭补办别骋辞辞诲で快适なテスト駆动开発を
Atsuhiro Kubo
?
GitLab から GitHub + CircleCI に乗り換えてチーム運用を改善しつつある話
GitLab から GitHub + CircleCI に乗り換えてチーム運用を改善しつつある話
R S
?
ワンクリックデプロイ101 #ocdeploy
ワンクリックデプロイ101 #ocdeploy
Ryutaro YOSHIBA
?
Akito.Tsukahara.PHPerKaigi2020
Akito.Tsukahara.PHPerKaigi2020
Akito Tsukahara
?
大规模ソフトウェア开発とテストの経験について
大规模ソフトウェア开発とテストの経験について
Rakuten Group, Inc.
?
地図を捨ててコンパスを頼りに进め
地図を捨ててコンパスを頼りに进め
Dai FUJIHARA
?
地図を捨ててコンパスを頼りに进め
地図を捨ててコンパスを頼りに进め
Rakuten Group, Inc.
?
第3回ソフトウェアテストセミナー
第3回ソフトウェアテストセミナー
Tomoyuki Sato
?
挑戦の道具としてのチケット駆动开発(长编版)
挑戦の道具としてのチケット駆动开発(长编版)
Makoto SAKAI
?
安全な奥别产アプリケーションの作り方2018
安全な奥别产アプリケーションの作り方2018
Hiroshi Tokumaru
?
第4回品川搁别诲尘颈苍别勉强会资料「チケット駆动开発のフレームワーク~现场の経験知からパターン言语へ(ベータ版)」
第4回品川搁别诲尘颈苍别勉强会资料「チケット駆动开発のフレームワーク~现场の経験知からパターン言语へ(ベータ版)」
akipii Oga
?
AJ2010_20100409_maegawasensei
AJ2010_20100409_maegawasensei
Akiko Kosaka
?
デブサミ2014【13-叠-尝】テスト自动化を见直そう!自动化への投资が开発チームをクリエイティブにする(安竹由起夫〔コベリティジャパン〕)
デブサミ2014【13-叠-尝】テスト自动化を见直そう!自动化への投资が开発チームをクリエイティブにする(安竹由起夫〔コベリティジャパン〕)
Developers Summit
?
テスト勉強会よしおか100311 1
テスト勉強会よしおか100311 1
Hiro Yoshioka
?
Hyper → Highspeed → Development
Hyper → Highspeed → Development
aktsk
?
Ad

バリデーション駆動開発(仮称)で プロジェクトメンバー全員を幸せにした話