SlideShare a Scribd company logo
1 of 49
Download to read offline
@JanMolak @Wakaleo#Devoxx #SerenityJS
@JanMolak @Wakaleo#Devoxx #SerenityJS
@JanMolak @Wakaleo#Devoxx #SerenityJS
Jan Molak, John Smart:
Next Generation
Acceptance Testing
@JanMolak @Wakaleo#Devoxx #SerenityJS
acceptance tests that help deliver

working software
that matters
@JanMolak @Wakaleo#Devoxx #SerenityJS
what’s the root cause of

most software
defects?
@JanMolak @Wakaleo#Devoxx #SerenityJS
ambiguous,
unclear
and incorrect

requirements
@JanMolak @Wakaleo#Devoxx #SerenityJS
44-80%

of all software defects
source:
- 44% - “Out of Control - Why Control Systems Go Wrong and How to Prevent Failure”
- 56% - “An Information Systems Manifesto”
- 80% - “Requirements: A quick and inexpensive way to improve testing”
@JanMolak @Wakaleo#Devoxx #SerenityJS
Behaviour-Driven Development
@JanMolak @Wakaleo#Devoxx #SerenityJS
Domain-Driven Design
Behaviour-Driven Development
@JanMolak @Wakaleo#Devoxx #SerenityJS
User-Centred Design
Domain-Driven Design
Behaviour-Driven Development
@JanMolak @Wakaleo#Devoxx #SerenityJS
reliable
scalable
actionable
acceptance tests that are:
@JanMolak @Wakaleo#Devoxx #SerenityJS
example
feature → scenario
@JanMolak @Wakaleo#Devoxx #SerenityJS
	Feature:	Filter	the	list	to	find	items	of	interest



			In	order	to	limit	the	cognitive	load

			James	would	like	to	filter	his	todo	list	

			to	only	show	items	of	interest

@JanMolak @Wakaleo#Devoxx #SerenityJS
	Scenario:	Viewing	Active	items	only



	Given	James	has	a	list	with	Walk	the	dog,	Get	a	coffee

			And	he	completes	Walk	the	dog

		When	he	filters	his	list	to	show	only	Active	tasks

		Then	his	todo	list	should	contain	Get	a	coffee
@JanMolak @Wakaleo#Devoxx #SerenityJS
automation, take #1
“a test script”
@JanMolak @Wakaleo#Devoxx #SerenityJS
		
	Given	James	has	a	list	with	Walk	the	dog,	Get	a	coffee	
	——————————————————————————————————————————————————————	
	this.Given(/^.*has	a	list	with	(.*)$/,	(items,	done)	=>	{	
			done();

	});
@JanMolak @Wakaleo#Devoxx #SerenityJS
	Given	James	has	a	list	with	Walk	the	dog,	Get	a	coffee	
	——————————————————————————————————————————————————————	
	this.Given	(/^.*has	a	list	with	(.*)$/,	(items,	done)	=>	{	
		browser.get('http://todomvc.com/examples/angularjs/');

		items.split(‘,’).forEach(item	=>	{

						element(by.id(‘new-todo’)).

										sendKeys(item);

						element(by.id(‘new-todo’)).

										sendKeys(protractor.Key.ENTER);

		});	
		done();

	});
@JanMolak @Wakaleo#Devoxx #SerenityJS
	Given	James	has	a	list	with	Walk	the	dog,	Get	a	coffee	
	——————————————————————————————————————————————————————	
	this.Given	(/^.*has	a	list	with	(.*)$/,	(items,	done)	=>	{	
		browser.get('http://todomvc.com/examples/angularjs/');

		items.split(‘,’).forEach(item	=>	{

						element(by.id(‘new-todo’)).

										sendKeys(item);

						element(by.id(‘new-todo’)).

										sendKeys(protractor.Key.ENTER);

		});	
		done();

	});
@JanMolak @Wakaleo#Devoxx #SerenityJS
automation, take #2
“a re-structured 

test script”
@JanMolak @Wakaleo#Devoxx #SerenityJS
	Given	James	has	a	list	with	Walk	the	dog,	Get	a	coffee	
	——————————————————————————————————————————————————————	
	this.Given	(/^.*has	a	list	with	(.*)$/,	(items,	done)	=>	{	
			let	todoList	=	new	TodoListPage();	
			todoList.get();

			items.split(‘,’).forEach(item	=>	{

							todoList.add(item);	
			});	
			done();

	});
@JanMolak @Wakaleo#Devoxx #SerenityJS
class	TodoListPage	{

				get	()	{	
								browser.get('http://todomvc.com/examples/angularjs/');	
				}



				add	(item:	string)	{

								element(by.id(‘new-todo’)).sendKeys(item);

								element(by.id('new-todo')).sendKeys(protractor.Key.ENTER);

				}



				complete	(item:	string)	{	
								element(by.xpath(	
										'//*[@class="view"	and	contains(.,"'	+	item	+	'")]'	+	

										'//input[@type="checkbox"]'

								)).click();	
				}	
				//	…

}
@JanMolak @Wakaleo#Devoxx #SerenityJS
class	TodoListPage	{

				get	()	{	
								browser.get('http://todomvc.com/examples/angularjs/');	
				}



				add	(item:	string)	{

								element(by.id(‘new-todo’)).sendKeys(item);

								element(by.id('new-todo')).sendKeys(protractor.Key.ENTER);

				}



				complete	(item:	string)	{	
								element(by.xpath(	
										'//*[@class="view"	and	contains(.,"'	+	item	+	'")]'	+	

										'//input[@type="checkbox"]'

								)).click();	
				}	
				//	…

}
@JanMolak @Wakaleo#Devoxx #SerenityJS
automation, take #3
“a screenplay”
@JanMolak @Wakaleo#Devoxx #SerenityJS
hierarchical task analysis
@JanMolak @Wakaleo#Devoxx #SerenityJS
hierarchical task analysis
actor
@JanMolak @Wakaleo#Devoxx #SerenityJS
hierarchical task analysis
goal
@JanMolak @Wakaleo#Devoxx #SerenityJS
hierarchical task analysis
tasks
@JanMolak @Wakaleo#Devoxx #SerenityJS
hierarchical task analysis
interactions
@JanMolak @Wakaleo#Devoxx #SerenityJS
Feature:	Filter	the	list	to	find	items	of	interest



		In	order	to	limit	the	cognitive	load

		James	would	like	to	filter	his	todo	list	

		to	only	show	items	of	interest	
		Scenario:	Viewing	Active	items	only



		Given	James	has	a	list	with	Walk	the	dog,	Get	a	coffee

				And	he	completes	Walk	the	dog

			When	he	filters	his	list	to	show	only	Active	tasks

			Then	his	todo	list	should	contain	Get	a	coffee
@JanMolak @Wakaleo#Devoxx #SerenityJS
Feature:	Filter	the	list	to	find	items	of	interest



		In	order	to	limit	the	cognitive	load

		James	would	like	to	filter	his	todo	list	

		to	only	show	items	of	interest	
		Scenario:	Viewing	Active	items	only



		Given	James	has	a	list	with	Walk	the	dog,	Get	a	coffee

				And	he	completes	Walk	the	dog

			When	he	filters	his	list	to	show	only	Active	tasks

			Then	his	todo	list	should	contain	Get	a	coffee
actor
@JanMolak @Wakaleo#Devoxx #SerenityJS
Feature:	Filter	the	list	to	find	items	of	interest



		In	order	to	limit	the	cognitive	load

		James	would	like	to	filter	his	todo	list	

		to	only	show	items	of	interest	
		Scenario:	Viewing	Active	items	only



		Given	James	has	a	list	with	Walk	the	dog,	Get	a	coffee

				And	he	completes	Walk	the	dog

			When	he	filters	his	list	to	show	only	Active	tasks

			Then	his	todo	list	should	contain	Get	a	coffee
actor
goal
@JanMolak @Wakaleo#Devoxx #SerenityJS
Scenario:	Viewing	Active	items	only



Given	James	has	a	list	with	Walk	the	dog,	Get	a	coffee

		And	he	completes	Walk	the	dog

	When	he	filters	his	list	to	show	only	Active	tasks

	Then	his	todo	list	should	contain	Get	a	coffee
actor
goal
tasks
@JanMolak @Wakaleo#Devoxx #SerenityJS
To	view	Active	items	only,	James	attempts	to:

Start	with	a	list	containing:	Walk	the	dog,	Get	a	coffee	
Complete	a	todo	item	called:	Walk	the	dog	

Filter	list	to	show	only	Active	tasks

Expect	to	see:	Get	a	coffee
actor
goal
tasks
@JanMolak @Wakaleo#Devoxx #SerenityJS
To	view	Active	items	only,	James	attempts	to:

Start	with	a	list	containing:	Walk	the	dog,	Get	a	coffee	
		Open	browser	on	‘todomvc.com/examples/angularjs/'	
		Resize	browser	window	to	maximum	
		Add	a	todo	item	called	‘Walk	the	dog’	
		Add	a	todo	item	called	‘Get	a	coffee’	
...
actor
goal
tasks
@JanMolak @Wakaleo#Devoxx #SerenityJS
To	view	Active	items	only,	James	attempts	to:

Start	with	a	list	containing:	Walk	the	dog,	Get	a	coffee	
		Open	browser	on	‘todomvc.com/examples/angularjs/'	
		Resize	browser	window	to	maximum	
		Add	a	todo	item	called	‘Walk	the	dog’	
		Add	a	todo	item	called	‘Get	a	coffee’	
				Enter	the	value	‘Get	a	coffee’	
				Hit	the	Enter	key	
...
actor
goal
tasks
inter-

actions
@JanMolak @Wakaleo#Devoxx #SerenityJS
To	view	Active	items	only,	James	attempts	to:

Start	with	a	list	containing:	Walk	the	dog,	Get	a	coffee	
		Open	browser	on	‘todomvc.com/examples/angularjs/'	
		Resize	browser	window	to	maximum	
		Add	a	todo	item	called	‘Walk	the	dog’	
		Add	a	todo	item	called	‘Get	a	coffee’	
				Enter	the	value	‘Get	a	coffee’	
				Hit	the	Enter	key	
...
@JanMolak @Wakaleo#Devoxx #SerenityJS
To	view	Active	items	only,	James	attempts	to:

Start.withATodoListContaining(‘Walk	the	dog’,	…)	
		Open.browserOn(‘todomvc.com/examples/angularjs/’)	
		ResizeBrowserWindow.toMaximum()	
		AddATodoItem.called(‘Walk	the	dog’)	
		AddATodoItem.called(‘Get	a	coffee’)	
				Enter.theValue(‘Get	a	coffee’)

									.into(TodoList.New_Todo_Field)	
									.thenHit(protractor.Key.Enter)
@JanMolak @Wakaleo#Devoxx #SerenityJS
To	view	Active	items	only,	James	attempts	to:

Start.withATodoListContaining(‘Walk	the	dog’,	…)	
		Open.browserOn(‘todomvc.com/examples/angularjs/’)	
		ResizeBrowserWindow.toMaximum()	
		AddATodoItem.called(‘Walk	the	dog’)	
		AddATodoItem.called(‘Get	a	coffee’)	
				Enter.theValue(‘Get	a	coffee’)

									.into(TodoList.New_Todo_Field)	
									.thenHit(protractor.Key.Enter)
@JanMolak @Wakaleo#Devoxx #SerenityJS
Serenity/JS
Screenplay Pattern
@JanMolak @Wakaleo#Devoxx #SerenityJS
	let	james	=	Actor.named(‘James’);	actor
@JanMolak @Wakaleo#Devoxx #SerenityJS
	let	james	=	Actor.named(‘James’).whoCan(	
				BrowseTheWeb.using(protractor.browser)	
	);	
actor
has
abilities
@JanMolak @Wakaleo#Devoxx #SerenityJS
	james.attemptsTo(

					Start.withATodoListContaining(items)

	);	
actor
performs
tasks
@JanMolak @Wakaleo#Devoxx #SerenityJS
	this.Given	(/^.*has	a	list	with	(.*)$/,	(items)	=>	{	
			return	james.attemptsTo(

					Start.withATodoListContaining(items)

			);	
	});	
actor
performs
tasks
@JanMolak @Wakaleo#Devoxx #SerenityJS
export	class	Start	implements	Task	{	


		performAs(actor:	PerformsTasks):	PromiseLike<void>	{	
				return	actor.attemptsTo(

						Open.browserOn('/examples/angularjs/'),

						ResizeBrowserWindow.toMaximum(),

						AddTodoItems.called(this.initialItems)

				);

		}	

}
tasks
consist of
tasks
@JanMolak @Wakaleo#Devoxx #SerenityJS
export	class	AddATodoItem	implements	Task	{	


		performAs(actor:	PerformsTasks):	PromiseLike<void>	{

				return	actor.attemptsTo(

						Enter.theValue(‘Walk	the	dog’)

										.into(TodoList.New_Todo_Field),	
						Hit.the(protractor.Key.Enter)

										.into(ToDoList.New_Todo_Field)

);
}

}
tasks
consist of
inter-
actions
@JanMolak @Wakaleo#Devoxx #SerenityJS
export	class	AddATodoItem	implements	Task	{	
		@step('{0}	adds	a	todo	item	called	"#name"')

		performAs(actor:	PerformsTasks):	PromiseLike<void>	{

				//	…	
		}	
		constructor(private	name:	string)	{

		}	
}
tasks
can be
annotated
@JanMolak @Wakaleo#Devoxx #SerenityJS
to create
powerful
reports
@JanMolak @Wakaleo#Devoxx #SerenityJS
lights, camera,

Demo!
@JanMolak @Wakaleo#Devoxx #SerenityJS
github.com/jan-molak/serenity-js

More Related Content

Similar to Serenity/JS - next generation acceptance testing for modern web applications

Screenplay - Next generation automated acceptance testing
Screenplay - Next generation automated acceptance testingScreenplay - Next generation automated acceptance testing
Screenplay - Next generation automated acceptance testingJohn Ferguson Smart Limited
 
Behaviour driven architecture
Behaviour driven architectureBehaviour driven architecture
Behaviour driven architectureJan Molak
 
DevOpsDays - Pick any Three - Devops from scratch
DevOpsDays - Pick any Three - Devops from scratchDevOpsDays - Pick any Three - Devops from scratch
DevOpsDays - Pick any Three - Devops from scratchPete Cheslock
 
The business case for devops
The business case for devopsThe business case for devops
The business case for devopsMatthew Skelton
 
Hybrid vs native mobile development – how to choose a tech stack
Hybrid vs native mobile development – how to choose a tech stackHybrid vs native mobile development – how to choose a tech stack
Hybrid vs native mobile development – how to choose a tech stackJacques De Vos
 
Firebase App Indexing - SMX Advanced
Firebase App Indexing - SMX AdvancedFirebase App Indexing - SMX Advanced
Firebase App Indexing - SMX AdvancedDavid Iwanow
 
Where are you in your mobile maturity … and where do you want to be?
Where are you in your mobile maturity … and where do you want to be?Where are you in your mobile maturity … and where do you want to be?
Where are you in your mobile maturity … and where do you want to be?Axway Appcelerator
 
Microservices the modern it stack trends of tomorrow
Microservices the modern it stack trends of tomorrowMicroservices the modern it stack trends of tomorrow
Microservices the modern it stack trends of tomorrowJonah Kowall
 
DevOps Days India Keynote
DevOps Days India KeynoteDevOps Days India Keynote
DevOps Days India KeynoteNathen Harvey
 
DevOps Beyond the Buzzwords: What it Means to Embrace the DevOps Lifestyle
DevOps Beyond the Buzzwords: What it Means to Embrace the DevOps LifestyleDevOps Beyond the Buzzwords: What it Means to Embrace the DevOps Lifestyle
DevOps Beyond the Buzzwords: What it Means to Embrace the DevOps LifestyleMark Heckler
 
Identify Development Pains and Resolve Them with Idea Flow
Identify Development Pains and Resolve Them with Idea FlowIdentify Development Pains and Resolve Them with Idea Flow
Identify Development Pains and Resolve Them with Idea FlowTechWell
 
DevSecCon Tel Aviv 2018 - Security learns to sprint by Tanya Janca
DevSecCon Tel Aviv 2018 - Security learns to sprint by Tanya JancaDevSecCon Tel Aviv 2018 - Security learns to sprint by Tanya Janca
DevSecCon Tel Aviv 2018 - Security learns to sprint by Tanya JancaDevSecCon
 
Continuous Delivery: The New Normal. London Event.
Continuous Delivery: The New Normal. London Event. Continuous Delivery: The New Normal. London Event.
Continuous Delivery: The New Normal. London Event. Perforce
 
VMWare Tech Talk: "The Road from Rugged DevOps to Security Chaos Engineering"
VMWare Tech Talk: "The Road from Rugged DevOps to Security Chaos Engineering"VMWare Tech Talk: "The Road from Rugged DevOps to Security Chaos Engineering"
VMWare Tech Talk: "The Road from Rugged DevOps to Security Chaos Engineering"Aaron Rinehart
 
Whitepaper: Ten Benefits of Integrated ALM
Whitepaper: Ten Benefits of Integrated ALMWhitepaper: Ten Benefits of Integrated ALM
Whitepaper: Ten Benefits of Integrated ALMKovair
 
DevOps?! That's not my job! - Nathen Harvey, Chef - DevOpsDays Tel Aviv 2016
DevOps?! That's not my job! - Nathen Harvey, Chef - DevOpsDays Tel Aviv 2016DevOps?! That's not my job! - Nathen Harvey, Chef - DevOpsDays Tel Aviv 2016
DevOps?! That's not my job! - Nathen Harvey, Chef - DevOpsDays Tel Aviv 2016DevOpsDays Tel Aviv
 
Pick Any Three: Good, Fast, or Safe - Devops from Scratch
Pick Any Three: Good, Fast, or Safe - Devops from ScratchPick Any Three: Good, Fast, or Safe - Devops from Scratch
Pick Any Three: Good, Fast, or Safe - Devops from ScratchPete Cheslock
 
SCS DevSecOps Seminar - State of DevSecOps
SCS DevSecOps Seminar - State of DevSecOpsSCS DevSecOps Seminar - State of DevSecOps
SCS DevSecOps Seminar - State of DevSecOpsStefan Streichsbier
 
DevOps Beyond the Buzzwords: Culture, Tools, & Straight Talk
DevOps Beyond the Buzzwords: Culture, Tools, & Straight TalkDevOps Beyond the Buzzwords: Culture, Tools, & Straight Talk
DevOps Beyond the Buzzwords: Culture, Tools, & Straight TalkMark Heckler
 

Similar to Serenity/JS - next generation acceptance testing for modern web applications (20)

Screenplay - Next generation automated acceptance testing
Screenplay - Next generation automated acceptance testingScreenplay - Next generation automated acceptance testing
Screenplay - Next generation automated acceptance testing
 
Behaviour driven architecture
Behaviour driven architectureBehaviour driven architecture
Behaviour driven architecture
 
DevOpsDays - Pick any Three - Devops from scratch
DevOpsDays - Pick any Three - Devops from scratchDevOpsDays - Pick any Three - Devops from scratch
DevOpsDays - Pick any Three - Devops from scratch
 
The business case for devops
The business case for devopsThe business case for devops
The business case for devops
 
Hybrid vs native mobile development – how to choose a tech stack
Hybrid vs native mobile development – how to choose a tech stackHybrid vs native mobile development – how to choose a tech stack
Hybrid vs native mobile development – how to choose a tech stack
 
Firebase App Indexing - SMX Advanced
Firebase App Indexing - SMX AdvancedFirebase App Indexing - SMX Advanced
Firebase App Indexing - SMX Advanced
 
Shift left-devoxx-pl
Shift left-devoxx-plShift left-devoxx-pl
Shift left-devoxx-pl
 
Where are you in your mobile maturity … and where do you want to be?
Where are you in your mobile maturity … and where do you want to be?Where are you in your mobile maturity … and where do you want to be?
Where are you in your mobile maturity … and where do you want to be?
 
Microservices the modern it stack trends of tomorrow
Microservices the modern it stack trends of tomorrowMicroservices the modern it stack trends of tomorrow
Microservices the modern it stack trends of tomorrow
 
DevOps Days India Keynote
DevOps Days India KeynoteDevOps Days India Keynote
DevOps Days India Keynote
 
DevOps Beyond the Buzzwords: What it Means to Embrace the DevOps Lifestyle
DevOps Beyond the Buzzwords: What it Means to Embrace the DevOps LifestyleDevOps Beyond the Buzzwords: What it Means to Embrace the DevOps Lifestyle
DevOps Beyond the Buzzwords: What it Means to Embrace the DevOps Lifestyle
 
Identify Development Pains and Resolve Them with Idea Flow
Identify Development Pains and Resolve Them with Idea FlowIdentify Development Pains and Resolve Them with Idea Flow
Identify Development Pains and Resolve Them with Idea Flow
 
DevSecCon Tel Aviv 2018 - Security learns to sprint by Tanya Janca
DevSecCon Tel Aviv 2018 - Security learns to sprint by Tanya JancaDevSecCon Tel Aviv 2018 - Security learns to sprint by Tanya Janca
DevSecCon Tel Aviv 2018 - Security learns to sprint by Tanya Janca
 
Continuous Delivery: The New Normal. London Event.
Continuous Delivery: The New Normal. London Event. Continuous Delivery: The New Normal. London Event.
Continuous Delivery: The New Normal. London Event.
 
VMWare Tech Talk: "The Road from Rugged DevOps to Security Chaos Engineering"
VMWare Tech Talk: "The Road from Rugged DevOps to Security Chaos Engineering"VMWare Tech Talk: "The Road from Rugged DevOps to Security Chaos Engineering"
VMWare Tech Talk: "The Road from Rugged DevOps to Security Chaos Engineering"
 
Whitepaper: Ten Benefits of Integrated ALM
Whitepaper: Ten Benefits of Integrated ALMWhitepaper: Ten Benefits of Integrated ALM
Whitepaper: Ten Benefits of Integrated ALM
 
DevOps?! That's not my job! - Nathen Harvey, Chef - DevOpsDays Tel Aviv 2016
DevOps?! That's not my job! - Nathen Harvey, Chef - DevOpsDays Tel Aviv 2016DevOps?! That's not my job! - Nathen Harvey, Chef - DevOpsDays Tel Aviv 2016
DevOps?! That's not my job! - Nathen Harvey, Chef - DevOpsDays Tel Aviv 2016
 
Pick Any Three: Good, Fast, or Safe - Devops from Scratch
Pick Any Three: Good, Fast, or Safe - Devops from ScratchPick Any Three: Good, Fast, or Safe - Devops from Scratch
Pick Any Three: Good, Fast, or Safe - Devops from Scratch
 
SCS DevSecOps Seminar - State of DevSecOps
SCS DevSecOps Seminar - State of DevSecOpsSCS DevSecOps Seminar - State of DevSecOps
SCS DevSecOps Seminar - State of DevSecOps
 
DevOps Beyond the Buzzwords: Culture, Tools, & Straight Talk
DevOps Beyond the Buzzwords: Culture, Tools, & Straight TalkDevOps Beyond the Buzzwords: Culture, Tools, & Straight Talk
DevOps Beyond the Buzzwords: Culture, Tools, & Straight Talk
 

Recently uploaded

Cyber security and its impact on E commerce
Cyber security and its impact on E commerceCyber security and its impact on E commerce
Cyber security and its impact on E commercemanigoyal112
 
Introduction Computer Science - Software Design.pdf
Introduction Computer Science - Software Design.pdfIntroduction Computer Science - Software Design.pdf
Introduction Computer Science - Software Design.pdfFerryKemperman
 
How to Track Employee Performance A Comprehensive Guide.pdf
How to Track Employee Performance A Comprehensive Guide.pdfHow to Track Employee Performance A Comprehensive Guide.pdf
How to Track Employee Performance A Comprehensive Guide.pdfLivetecs LLC
 
Global Identity Enrolment and Verification Pro Solution - Cizo Technology Ser...
Global Identity Enrolment and Verification Pro Solution - Cizo Technology Ser...Global Identity Enrolment and Verification Pro Solution - Cizo Technology Ser...
Global Identity Enrolment and Verification Pro Solution - Cizo Technology Ser...Cizo Technology Services
 
A healthy diet for your Java application Devoxx France.pdf
A healthy diet for your Java application Devoxx France.pdfA healthy diet for your Java application Devoxx France.pdf
A healthy diet for your Java application Devoxx France.pdfMarharyta Nedzelska
 
React Server Component in Next.js by Hanief Utama
React Server Component in Next.js by Hanief UtamaReact Server Component in Next.js by Hanief Utama
React Server Component in Next.js by Hanief UtamaHanief Utama
 
BATTLEFIELD ORM: TIPS, TACTICS AND STRATEGIES FOR CONQUERING YOUR DATABASE
BATTLEFIELD ORM: TIPS, TACTICS AND STRATEGIES FOR CONQUERING YOUR DATABASEBATTLEFIELD ORM: TIPS, TACTICS AND STRATEGIES FOR CONQUERING YOUR DATABASE
BATTLEFIELD ORM: TIPS, TACTICS AND STRATEGIES FOR CONQUERING YOUR DATABASEOrtus Solutions, Corp
 
Balasore Best It Company|| Top 10 IT Company || Balasore Software company Odisha
Balasore Best It Company|| Top 10 IT Company || Balasore Software company OdishaBalasore Best It Company|| Top 10 IT Company || Balasore Software company Odisha
Balasore Best It Company|| Top 10 IT Company || Balasore Software company Odishasmiwainfosol
 
英国UN学位证,北安普顿大学毕业证书1:1制作
英国UN学位证,北安普顿大学毕业证书1:1制作英国UN学位证,北安普顿大学毕业证书1:1制作
英国UN学位证,北安普顿大学毕业证书1:1制作qr0udbr0
 
Taming Distributed Systems: Key Insights from Wix's Large-Scale Experience - ...
Taming Distributed Systems: Key Insights from Wix's Large-Scale Experience - ...Taming Distributed Systems: Key Insights from Wix's Large-Scale Experience - ...
Taming Distributed Systems: Key Insights from Wix's Large-Scale Experience - ...Natan Silnitsky
 
Xen Safety Embedded OSS Summit April 2024 v4.pdf
Xen Safety Embedded OSS Summit April 2024 v4.pdfXen Safety Embedded OSS Summit April 2024 v4.pdf
Xen Safety Embedded OSS Summit April 2024 v4.pdfStefano Stabellini
 
What are the key points to focus on before starting to learn ETL Development....
What are the key points to focus on before starting to learn ETL Development....What are the key points to focus on before starting to learn ETL Development....
What are the key points to focus on before starting to learn ETL Development....kzayra69
 
GOING AOT WITH GRAALVM – DEVOXX GREECE.pdf
GOING AOT WITH GRAALVM – DEVOXX GREECE.pdfGOING AOT WITH GRAALVM – DEVOXX GREECE.pdf
GOING AOT WITH GRAALVM – DEVOXX GREECE.pdfAlina Yurenko
 
Folding Cheat Sheet #4 - fourth in a series
Folding Cheat Sheet #4 - fourth in a seriesFolding Cheat Sheet #4 - fourth in a series
Folding Cheat Sheet #4 - fourth in a seriesPhilip Schwarz
 
Intelligent Home Wi-Fi Solutions | ThinkPalm
Intelligent Home Wi-Fi Solutions | ThinkPalmIntelligent Home Wi-Fi Solutions | ThinkPalm
Intelligent Home Wi-Fi Solutions | ThinkPalmSujith Sukumaran
 
Odoo 14 - eLearning Module In Odoo 14 Enterprise
Odoo 14 - eLearning Module In Odoo 14 EnterpriseOdoo 14 - eLearning Module In Odoo 14 Enterprise
Odoo 14 - eLearning Module In Odoo 14 Enterprisepreethippts
 
Building a General PDE Solving Framework with Symbolic-Numeric Scientific Mac...
Building a General PDE Solving Framework with Symbolic-Numeric Scientific Mac...Building a General PDE Solving Framework with Symbolic-Numeric Scientific Mac...
Building a General PDE Solving Framework with Symbolic-Numeric Scientific Mac...stazi3110
 
Software Project Health Check: Best Practices and Techniques for Your Product...
Software Project Health Check: Best Practices and Techniques for Your Product...Software Project Health Check: Best Practices and Techniques for Your Product...
Software Project Health Check: Best Practices and Techniques for Your Product...Velvetech LLC
 
SpotFlow: Tracking Method Calls and States at Runtime
SpotFlow: Tracking Method Calls and States at RuntimeSpotFlow: Tracking Method Calls and States at Runtime
SpotFlow: Tracking Method Calls and States at Runtimeandrehoraa
 

Recently uploaded (20)

Cyber security and its impact on E commerce
Cyber security and its impact on E commerceCyber security and its impact on E commerce
Cyber security and its impact on E commerce
 
Introduction Computer Science - Software Design.pdf
Introduction Computer Science - Software Design.pdfIntroduction Computer Science - Software Design.pdf
Introduction Computer Science - Software Design.pdf
 
How to Track Employee Performance A Comprehensive Guide.pdf
How to Track Employee Performance A Comprehensive Guide.pdfHow to Track Employee Performance A Comprehensive Guide.pdf
How to Track Employee Performance A Comprehensive Guide.pdf
 
Global Identity Enrolment and Verification Pro Solution - Cizo Technology Ser...
Global Identity Enrolment and Verification Pro Solution - Cizo Technology Ser...Global Identity Enrolment and Verification Pro Solution - Cizo Technology Ser...
Global Identity Enrolment and Verification Pro Solution - Cizo Technology Ser...
 
A healthy diet for your Java application Devoxx France.pdf
A healthy diet for your Java application Devoxx France.pdfA healthy diet for your Java application Devoxx France.pdf
A healthy diet for your Java application Devoxx France.pdf
 
React Server Component in Next.js by Hanief Utama
React Server Component in Next.js by Hanief UtamaReact Server Component in Next.js by Hanief Utama
React Server Component in Next.js by Hanief Utama
 
BATTLEFIELD ORM: TIPS, TACTICS AND STRATEGIES FOR CONQUERING YOUR DATABASE
BATTLEFIELD ORM: TIPS, TACTICS AND STRATEGIES FOR CONQUERING YOUR DATABASEBATTLEFIELD ORM: TIPS, TACTICS AND STRATEGIES FOR CONQUERING YOUR DATABASE
BATTLEFIELD ORM: TIPS, TACTICS AND STRATEGIES FOR CONQUERING YOUR DATABASE
 
Balasore Best It Company|| Top 10 IT Company || Balasore Software company Odisha
Balasore Best It Company|| Top 10 IT Company || Balasore Software company OdishaBalasore Best It Company|| Top 10 IT Company || Balasore Software company Odisha
Balasore Best It Company|| Top 10 IT Company || Balasore Software company Odisha
 
英国UN学位证,北安普顿大学毕业证书1:1制作
英国UN学位证,北安普顿大学毕业证书1:1制作英国UN学位证,北安普顿大学毕业证书1:1制作
英国UN学位证,北安普顿大学毕业证书1:1制作
 
Taming Distributed Systems: Key Insights from Wix's Large-Scale Experience - ...
Taming Distributed Systems: Key Insights from Wix's Large-Scale Experience - ...Taming Distributed Systems: Key Insights from Wix's Large-Scale Experience - ...
Taming Distributed Systems: Key Insights from Wix's Large-Scale Experience - ...
 
Xen Safety Embedded OSS Summit April 2024 v4.pdf
Xen Safety Embedded OSS Summit April 2024 v4.pdfXen Safety Embedded OSS Summit April 2024 v4.pdf
Xen Safety Embedded OSS Summit April 2024 v4.pdf
 
What are the key points to focus on before starting to learn ETL Development....
What are the key points to focus on before starting to learn ETL Development....What are the key points to focus on before starting to learn ETL Development....
What are the key points to focus on before starting to learn ETL Development....
 
GOING AOT WITH GRAALVM – DEVOXX GREECE.pdf
GOING AOT WITH GRAALVM – DEVOXX GREECE.pdfGOING AOT WITH GRAALVM – DEVOXX GREECE.pdf
GOING AOT WITH GRAALVM – DEVOXX GREECE.pdf
 
Folding Cheat Sheet #4 - fourth in a series
Folding Cheat Sheet #4 - fourth in a seriesFolding Cheat Sheet #4 - fourth in a series
Folding Cheat Sheet #4 - fourth in a series
 
Intelligent Home Wi-Fi Solutions | ThinkPalm
Intelligent Home Wi-Fi Solutions | ThinkPalmIntelligent Home Wi-Fi Solutions | ThinkPalm
Intelligent Home Wi-Fi Solutions | ThinkPalm
 
Odoo 14 - eLearning Module In Odoo 14 Enterprise
Odoo 14 - eLearning Module In Odoo 14 EnterpriseOdoo 14 - eLearning Module In Odoo 14 Enterprise
Odoo 14 - eLearning Module In Odoo 14 Enterprise
 
Building a General PDE Solving Framework with Symbolic-Numeric Scientific Mac...
Building a General PDE Solving Framework with Symbolic-Numeric Scientific Mac...Building a General PDE Solving Framework with Symbolic-Numeric Scientific Mac...
Building a General PDE Solving Framework with Symbolic-Numeric Scientific Mac...
 
Software Project Health Check: Best Practices and Techniques for Your Product...
Software Project Health Check: Best Practices and Techniques for Your Product...Software Project Health Check: Best Practices and Techniques for Your Product...
Software Project Health Check: Best Practices and Techniques for Your Product...
 
2.pdf Ejercicios de programación competitiva
2.pdf Ejercicios de programación competitiva2.pdf Ejercicios de programación competitiva
2.pdf Ejercicios de programación competitiva
 
SpotFlow: Tracking Method Calls and States at Runtime
SpotFlow: Tracking Method Calls and States at RuntimeSpotFlow: Tracking Method Calls and States at Runtime
SpotFlow: Tracking Method Calls and States at Runtime
 

Serenity/JS - next generation acceptance testing for modern web applications