SlideShare a Scribd company logo
Time-Saving Tips and Tricks for Building Quality
Java Applications
[CON5929]
Yusuke Yamamoto @yusuke
CON5929#
Yusuke Yamamoto
• Author of Samurai & Twitter4J
• 16 years in Java industry
@yusuke
@yusuke
JavaOne2016 #CON5929 Time-Saving Tips and Tricks for Building Quality Java Applications
http://junit.org/junit4/junit-lambda-contributors.html
JavaOne2016 #CON5929 Time-Saving Tips and Tricks for Building Quality Java Applications
.equals( )
Time-Saving Tips and Tricks for Building Quality
Java Applications
Quality Aplication
#CON5929
Quality Application
• Stable
• Performant
• Easy to understand
• Easy to fix
#CON5929
fewer bugs = !
can handle more requests = !
Code Review Test Deploy Fail Fix
Code Review Test Deploy Fail Fix
"
"
Code quickly
Code Review Test Deploy
Code Review Test Deploy
Code quickly
Use appropriate tool / IDE
Code
#CON5929
completion
generation
inspection
demo
Using Twitter4J
- retrieve my home timeline
- print status text with @username only if the
user is not @yusuke
#CON5929
Help > Productivity Guide
JavaOne2016 #CON5929 Time-Saving Tips and Tricks for Building Quality Java Applications
Review quickly
Code Review Test Deploy
Code Review Test Deploy
Review on IDE
Do Code reviews on IDE, NOT on browser
you cannot trace references / definitions
#CON5929
Review on IDE
#CON5929
,or use Upsource
Test quickly
Code Review Test Deploy
Code Review Test Deploy
Test UI as well as business logic
• UI tend to break easier
• More automated UI tests
• Less manual UI tests
Selenium
• automated UI testing tool
http://www.seleniumhq.org
WebDriver driver = new FirefoxDriver();

driver.get("https://www.google.com/");

WebElement element =
driver.findElement(By.className("gsfi"));

element.click();

element.sendKeys("JavaOne 2016");

driver.findElement(By.name("btnK")).click();

Thread.sleep(100000);
Selenide
http://selenide.org
WebDriver driver = new FirefoxDriver();

driver.get("https://www.google.com/");

WebElement element =
driver.findElement(By.className("gsfi"));

element.click();

element.sendKeys("JavaOne 2016");

driver.findElement(By.name("btnK")).click();

Thread.sleep(100000);
Navigator navigator = new Navigator();

navigator.open("https://www.google.com/");

$(".gsfi").click();

$(".gsfi").sendKeys("JavaOne 2016");

$("[name='btnK']").click();
http://phantomjs.org
How to use
1. Download, and Unpack zip
2. Set system properties properly
System.setProperty("phantomjs.binary.path", "path/to/phantomjs");
System.setProperty("browser", "phantomjs");

How to use
3. Add dependency to your project
<dependency>
<groupId>com.codeborne</groupId>
<artifactId>phantomjsdriver</artifactId>
<version>1.2.1</version>
</dependency>
How to use
4. You're good to go
WebDriver driver = new PhantomJSDriver();

driver.get("https://www.google.com/");

WebElement element = driver.findElement(By.className("gsfi"));

element.click();

element.sendKeys("JavaOne 2016");

driver.findElement(By.name("btnK")).click();
PhantomJSInstaller
Check PhantomJS Installation
Download, unpack, install automatically
#CON5929
yusuke/javaone2016demo
Do not boot container every time.
Use existing container process if available.
Test quickly
Do not boot container every time.
Use existing container process if available.
#CON5929
Test quickly
#CON5929
TestCase Container Test Target
boot
instantiate
GET / HTTP/1.0 … method()
Skip booting the container
1. Check the container availability.
2. Boot one only when necessary.
3. Test
Test quickly
#CON5929
TestCase Container Test Target
GET / HTTP/1.0 … method()
check availability
Deploy quickly
Code Review Test Deploy
Code Review Test Deploy
Start & Redeploy quickly
-Xverify:none
Disables byte code verification.
-XX:TieredStopAtLevel=1
Time to startup with/witout options
seconds
2.0
3.0
4.0
5.0
6.0
7.0
8.0
default
-Xverify:none
-XX:TieredStopAtLevel=1
-XX:TieredStopAtLevel=1 -Xverify:none
default: 7.13 secs
-Xverify:none: 6.17 secs
-XX:TieredStopAtLevel=1: 4.55 secs
combined: 4.00 secs
53% faster
HotSwap
#CON5929
HotSwap
• JVM built-in feature
• Reloads class changes on the fly
• Available only in debug session
HotSwap
HotSwap limitation
• applicable only for method body changes
Unlimited dynamic swap
http://zeroturnaround.com/software/jrebel/
yusuke/javaone2016demo
#CON5929
JavaOne2016 #CON5929 Time-Saving Tips and Tricks for Building Quality Java Applications

More Related Content

What's hot (20)

PDF
ApppiumDoc_version2015
Amit DEWAN
 
PDF
Frontend SPOF
Patrick Meenan
 
PPTX
Build 2017 - B8093 - Nextgen UWP app distribution: Building extensible, strea...
Windows Developer
 
PPTX
Progressive Web App Testing With Cypress.io
Knoldus Inc.
 
PPTX
Spring boot
Shatrughna Singh
 
PPT
Rails Plugins 1 Plugin
oscon2007
 
PPTX
Grails Spring Boot
TO THE NEW | Technology
 
PDF
JS Fest 2018. Тимофей Лавренюк. Делаем веб приложение лучше с помощью совреме...
JSFestUA
 
PPTX
Protractor
kapilsethi9
 
PPTX
Presentation_Protractor
Umesh Randhe
 
PDF
Building a PWA with Ionic, Angular, and Spring Boot - GeeCON 2017
Matt Raible
 
PPTX
Introduction to cypress in Angular (Chinese)
Hong Tat Yew
 
PDF
No more waiting for API - Android Stub Server
Sylwester Madej
 
PPTX
Genymotion with Jenkins
Vishal Nayak
 
PDF
"Building a Production-Grade Serverless Deployment" - Eoin Shanaghy, CTO, fo...
LCloud
 
PPTX
Guide To Effective Cross Browser Testing
Daniel Herken
 
PPTX
Cache is King
Steve Souders
 
PPTX
Whys and Hows of Automation
vodQA
 
PDF
Spring Boot
Diego Pacheco
 
PPTX
Protractor Testing Automation Tool Framework / Jasmine Reporters
Haitham Refaat
 
ApppiumDoc_version2015
Amit DEWAN
 
Frontend SPOF
Patrick Meenan
 
Build 2017 - B8093 - Nextgen UWP app distribution: Building extensible, strea...
Windows Developer
 
Progressive Web App Testing With Cypress.io
Knoldus Inc.
 
Spring boot
Shatrughna Singh
 
Rails Plugins 1 Plugin
oscon2007
 
Grails Spring Boot
TO THE NEW | Technology
 
JS Fest 2018. Тимофей Лавренюк. Делаем веб приложение лучше с помощью совреме...
JSFestUA
 
Protractor
kapilsethi9
 
Presentation_Protractor
Umesh Randhe
 
Building a PWA with Ionic, Angular, and Spring Boot - GeeCON 2017
Matt Raible
 
Introduction to cypress in Angular (Chinese)
Hong Tat Yew
 
No more waiting for API - Android Stub Server
Sylwester Madej
 
Genymotion with Jenkins
Vishal Nayak
 
"Building a Production-Grade Serverless Deployment" - Eoin Shanaghy, CTO, fo...
LCloud
 
Guide To Effective Cross Browser Testing
Daniel Herken
 
Cache is King
Steve Souders
 
Whys and Hows of Automation
vodQA
 
Spring Boot
Diego Pacheco
 
Protractor Testing Automation Tool Framework / Jasmine Reporters
Haitham Refaat
 

Viewers also liked (9)

PPTX
Automating Canvas: difficult but possible
COMAQA.BY
 
PDF
Automating Canvas Applications Using Selenium
davehunt82
 
PPTX
Automation using Scripting and the Canvas API
David Lippman
 
PPTX
Wso2 con raspberry-pi-cluster
Afkham Azeez
 
PPTX
Out of box page object design pattern, java
COMAQA.BY
 
PDF
Selenium and Open Source Advanced Testing
Austin Marie Gay
 
PPTX
Make the Shift from Manual to Automation with Open Source
Perfecto by Perforce
 
PDF
WSO2Con USA 2017: Iterative Architecture: A Pragmatic Approach to Digital Tra...
WSO2
 
PPTX
Roman iovlev battle - JDI vs Selenide - Selenium Camp
Роман Иовлев
 
Automating Canvas: difficult but possible
COMAQA.BY
 
Automating Canvas Applications Using Selenium
davehunt82
 
Automation using Scripting and the Canvas API
David Lippman
 
Wso2 con raspberry-pi-cluster
Afkham Azeez
 
Out of box page object design pattern, java
COMAQA.BY
 
Selenium and Open Source Advanced Testing
Austin Marie Gay
 
Make the Shift from Manual to Automation with Open Source
Perfecto by Perforce
 
WSO2Con USA 2017: Iterative Architecture: A Pragmatic Approach to Digital Tra...
WSO2
 
Roman iovlev battle - JDI vs Selenide - Selenium Camp
Роман Иовлев
 
Ad

Similar to JavaOne2016 #CON5929 Time-Saving Tips and Tricks for Building Quality Java Applications (20)

PDF
Acceptance Testing of Web UI
Vladimir Tsukur
 
PPTX
Functional UI Testing
Skillwise Group
 
PDF
Let's make this test suite run faster
David Gageot
 
PPTX
Google Cloud Platform
Francesco Marchitelli
 
PDF
Selenium webdriver practical_guide
Chandini Kiran
 
PPTX
The wild wild west of Selenium Capabilities
Adi Ofri
 
PDF
Web Test Automation Framework - IndicThreads Conference
IndicThreads
 
PDF
Devfest09 Cschalk Gwt
Chris Schalk
 
PDF
How the JDeveloper team test JDeveloper at UKOUG'08
kingsfleet
 
KEY
Kanjava20110302
Go Tanaka
 
PPT
Stepin evening presented
Vijayan Reddy
 
PPTX
Web driver training
Dipesh Bhatewara
 
PDF
Testing your application on Google App Engine
Inphina Technologies
 
PDF
Testing Your Application On Google App Engine
IndicThreads
 
PDF
How to build a Java Web App in the Cloud
WSO2
 
PPT
SF JUG - GWT Can Help You Create Amazing Apps - 2009-10-13
Fred Sauer
 
PPTX
Automation solution using jbehave, selenium and hudson
Pankaj Nakhat
 
PDF
Selenium Online Training.pdf
SpiritsoftsTraining
 
KEY
Embedding Web UIs in your Eclipse application
Boris Bokowski
 
PDF
The Green Lab - [04 B] [PWA] Experiment setup
Ivano Malavolta
 
Acceptance Testing of Web UI
Vladimir Tsukur
 
Functional UI Testing
Skillwise Group
 
Let's make this test suite run faster
David Gageot
 
Google Cloud Platform
Francesco Marchitelli
 
Selenium webdriver practical_guide
Chandini Kiran
 
The wild wild west of Selenium Capabilities
Adi Ofri
 
Web Test Automation Framework - IndicThreads Conference
IndicThreads
 
Devfest09 Cschalk Gwt
Chris Schalk
 
How the JDeveloper team test JDeveloper at UKOUG'08
kingsfleet
 
Kanjava20110302
Go Tanaka
 
Stepin evening presented
Vijayan Reddy
 
Web driver training
Dipesh Bhatewara
 
Testing your application on Google App Engine
Inphina Technologies
 
Testing Your Application On Google App Engine
IndicThreads
 
How to build a Java Web App in the Cloud
WSO2
 
SF JUG - GWT Can Help You Create Amazing Apps - 2009-10-13
Fred Sauer
 
Automation solution using jbehave, selenium and hudson
Pankaj Nakhat
 
Selenium Online Training.pdf
SpiritsoftsTraining
 
Embedding Web UIs in your Eclipse application
Boris Bokowski
 
The Green Lab - [04 B] [PWA] Experiment setup
Ivano Malavolta
 
Ad

More from Yusuke Yamamoto (20)

PDF
株式会社サムライズム 新製品発表会 物理イカリングのご紹介 #gbdaitokai
Yusuke Yamamoto
 
PDF
これからはじめるGit、GitHub #stapy
Yusuke Yamamoto
 
PDF
誰も知らない IntelliJ IDEA凄技100選 #kotlin_sansan
Yusuke Yamamoto
 
PDF
JetBrains IDEハンズオン
Yusuke Yamamoto
 
PDF
Java Küche 2016 LT 在室状況自動通知ボット #JavaKueche
Yusuke Yamamoto
 
PDF
Java Küche 2016 #JavaKueche
Yusuke Yamamoto
 
PDF
WebStormから始まる快適Web開発ワークフロー #html5jk
Yusuke Yamamoto
 
PDF
データクラスから始めるKotlin / JetBrainsに行ってきました #kotlin_kansai #jkug
Yusuke Yamamoto
 
PDF
Troubleshooting Slowdowns, Freezes, Deadlocks : Introduction to Thread Dump #...
Yusuke Yamamoto
 
PDF
カジュアルにスレッドダンプ - @yusuke #javacasual
Yusuke Yamamoto
 
PDF
Excel方眼紙アプリケーションサーバと侍の新機能 #jjug
Yusuke Yamamoto
 
PDF
Twitter4jハンズオン 5/1 #twtr_hack
Yusuke Yamamoto
 
PDF
株式会社サムライズム@samuraismがcoincheck for ECを使ってビットコイン決済に対応した話 #gbdaitokai
Yusuke Yamamoto
 
PDF
Botを使った業務効率化 / Java8を使ったBot実装効率化 @yusuke #jjug
Yusuke Yamamoto
 
PDF
Twitter API最新事情 - API Meetup Tokyo #1 #apijp
Yusuke Yamamoto
 
PDF
Java デバッガ活用術 ~勘デバッグ・print デバッグから抜けだそう~ #jjug_ccc #ccc_h4
Yusuke Yamamoto
 
PDF
貧乏人のHeroku活用術 #herokujp
Yusuke Yamamoto
 
PDF
リーンスタートアップ x Java #jjug #jjug_ccc #ccc_h4
Yusuke Yamamoto
 
PDF
JavaScript時代のJava #kansumiB7 #kansumi
Yusuke Yamamoto
 
PDF
テンプレートエンジンの話 #jjug
Yusuke Yamamoto
 
株式会社サムライズム 新製品発表会 物理イカリングのご紹介 #gbdaitokai
Yusuke Yamamoto
 
これからはじめるGit、GitHub #stapy
Yusuke Yamamoto
 
誰も知らない IntelliJ IDEA凄技100選 #kotlin_sansan
Yusuke Yamamoto
 
JetBrains IDEハンズオン
Yusuke Yamamoto
 
Java Küche 2016 LT 在室状況自動通知ボット #JavaKueche
Yusuke Yamamoto
 
Java Küche 2016 #JavaKueche
Yusuke Yamamoto
 
WebStormから始まる快適Web開発ワークフロー #html5jk
Yusuke Yamamoto
 
データクラスから始めるKotlin / JetBrainsに行ってきました #kotlin_kansai #jkug
Yusuke Yamamoto
 
Troubleshooting Slowdowns, Freezes, Deadlocks : Introduction to Thread Dump #...
Yusuke Yamamoto
 
カジュアルにスレッドダンプ - @yusuke #javacasual
Yusuke Yamamoto
 
Excel方眼紙アプリケーションサーバと侍の新機能 #jjug
Yusuke Yamamoto
 
Twitter4jハンズオン 5/1 #twtr_hack
Yusuke Yamamoto
 
株式会社サムライズム@samuraismがcoincheck for ECを使ってビットコイン決済に対応した話 #gbdaitokai
Yusuke Yamamoto
 
Botを使った業務効率化 / Java8を使ったBot実装効率化 @yusuke #jjug
Yusuke Yamamoto
 
Twitter API最新事情 - API Meetup Tokyo #1 #apijp
Yusuke Yamamoto
 
Java デバッガ活用術 ~勘デバッグ・print デバッグから抜けだそう~ #jjug_ccc #ccc_h4
Yusuke Yamamoto
 
貧乏人のHeroku活用術 #herokujp
Yusuke Yamamoto
 
リーンスタートアップ x Java #jjug #jjug_ccc #ccc_h4
Yusuke Yamamoto
 
JavaScript時代のJava #kansumiB7 #kansumi
Yusuke Yamamoto
 
テンプレートエンジンの話 #jjug
Yusuke Yamamoto
 

Recently uploaded (20)

PPTX
WooCommerce Workshop: Bring Your Laptop
Laura Hartwig
 
PPTX
From Sci-Fi to Reality: Exploring AI Evolution
Svetlana Meissner
 
PDF
Staying Human in a Machine- Accelerated World
Catalin Jora
 
PDF
Smart Trailers 2025 Update with History and Overview
Paul Menig
 
PDF
CIFDAQ Market Wrap for the week of 4th July 2025
CIFDAQ
 
PDF
Advancing WebDriver BiDi support in WebKit
Igalia
 
PDF
Building Real-Time Digital Twins with IBM Maximo & ArcGIS Indoors
Safe Software
 
PDF
[Newgen] NewgenONE Marvin Brochure 1.pdf
darshakparmar
 
PDF
Biography of Daniel Podor.pdf
Daniel Podor
 
PDF
IoT-Powered Industrial Transformation – Smart Manufacturing to Connected Heal...
Rejig Digital
 
PPTX
COMPARISON OF RASTER ANALYSIS TOOLS OF QGIS AND ARCGIS
Sharanya Sarkar
 
PDF
Agentic AI lifecycle for Enterprise Hyper-Automation
Debmalya Biswas
 
PDF
Empower Inclusion Through Accessible Java Applications
Ana-Maria Mihalceanu
 
PDF
Go Concurrency Real-World Patterns, Pitfalls, and Playground Battles.pdf
Emily Achieng
 
PPTX
The Project Compass - GDG on Campus MSIT
dscmsitkol
 
PDF
Bitcoin for Millennials podcast with Bram, Power Laws of Bitcoin
Stephen Perrenod
 
PDF
“NPU IP Hardware Shaped Through Software and Use-case Analysis,” a Presentati...
Edge AI and Vision Alliance
 
PDF
LOOPS in C Programming Language - Technology
RishabhDwivedi43
 
PDF
Newgen Beyond Frankenstein_Build vs Buy_Digital_version.pdf
darshakparmar
 
PPTX
Q2 FY26 Tableau User Group Leader Quarterly Call
lward7
 
WooCommerce Workshop: Bring Your Laptop
Laura Hartwig
 
From Sci-Fi to Reality: Exploring AI Evolution
Svetlana Meissner
 
Staying Human in a Machine- Accelerated World
Catalin Jora
 
Smart Trailers 2025 Update with History and Overview
Paul Menig
 
CIFDAQ Market Wrap for the week of 4th July 2025
CIFDAQ
 
Advancing WebDriver BiDi support in WebKit
Igalia
 
Building Real-Time Digital Twins with IBM Maximo & ArcGIS Indoors
Safe Software
 
[Newgen] NewgenONE Marvin Brochure 1.pdf
darshakparmar
 
Biography of Daniel Podor.pdf
Daniel Podor
 
IoT-Powered Industrial Transformation – Smart Manufacturing to Connected Heal...
Rejig Digital
 
COMPARISON OF RASTER ANALYSIS TOOLS OF QGIS AND ARCGIS
Sharanya Sarkar
 
Agentic AI lifecycle for Enterprise Hyper-Automation
Debmalya Biswas
 
Empower Inclusion Through Accessible Java Applications
Ana-Maria Mihalceanu
 
Go Concurrency Real-World Patterns, Pitfalls, and Playground Battles.pdf
Emily Achieng
 
The Project Compass - GDG on Campus MSIT
dscmsitkol
 
Bitcoin for Millennials podcast with Bram, Power Laws of Bitcoin
Stephen Perrenod
 
“NPU IP Hardware Shaped Through Software and Use-case Analysis,” a Presentati...
Edge AI and Vision Alliance
 
LOOPS in C Programming Language - Technology
RishabhDwivedi43
 
Newgen Beyond Frankenstein_Build vs Buy_Digital_version.pdf
darshakparmar
 
Q2 FY26 Tableau User Group Leader Quarterly Call
lward7
 

JavaOne2016 #CON5929 Time-Saving Tips and Tricks for Building Quality Java Applications