SlideShare a Scribd company logo
JUnit PowerUP
Practical Testing Tips
James McGivern
About James
Likes cats

Talks fast
Technical Evangelist
Hates Marmite

Mathematician turned
Computer Scientist

Lives in London
JUnit
vs
TestNG
One Busy Day On
Concurrent Island...

Intro
JUnit PowerUp
Concurrency?
concurrent - adjective
1. occurring or existing simultaneously or side by
side: concurrent attacks by land, sea, and air.
2. acting in conjunction; co-operating.
3. having equal authority or jurisdiction.
4. accordant or agreeing.
5. tending to or intersecting at the same point: four
concurrent lines.
The behaviour of a single threaded application is
deterministic
A multithreaded application may appear
stochastic
Concurrency introduces new problems:
deadlocks
resource starvation (e.g livelocks)
race conditions
contention

•
•
•
•
But Why?
Consider the old singleton pattern
getInstance() method:
public Singleton getInstance() {
if(INSTANCE == null) {
INSTANCE = new Singleton();
}
return INSTANCE;
}

and two threads: Thread A, Thread B
But Why?
Consider the old singleton pattern
getInstance() method:
public Singleton getInstance() {
if(INSTANCE == null) {
INSTANCE = new Singleton();
}
return INSTANCE;
}

and two threads: Thread A, Thread B
But Why?
Consider the old singleton pattern
getInstance() method:
public Singleton getInstance() {
if(INSTANCE == null) {
INSTANCE = new Singleton();
}
return INSTANCE;
}

and two threads: Thread A, Thread B
But Why?
Consider the old singleton pattern
getInstance() method:
public Singleton getInstance() {
if(INSTANCE == null) {
INSTANCE = new Singleton();
}
return INSTANCE;
}

and two threads: Thread A, Thread B
But Why?
Consider the old singleton pattern
getInstance() method:
public Singleton getInstance() {
if(INSTANCE == null) {
INSTANCE = new Singleton();
}
return INSTANCE;
}

and two threads: Thread A, Thread B
But Why?
Consider the old singleton pattern
getInstance() method:
public Singleton getInstance() {
if(INSTANCE == null) {
INSTANCE = new Singleton();
}
return INSTANCE;
}

and two threads: Thread A, Thread B
But Why?
Consider the old singleton pattern
getInstance() method:
public Singleton getInstance() {
if(INSTANCE == null) {
INSTANCE = new Singleton();
}
return INSTANCE;
}

and two threads: Thread A, Thread B
But Why?
Consider the old singleton pattern
getInstance() method:
public Singleton getInstance() {
if(INSTANCE == null) {
INSTANCE = new Singleton();
}
return INSTANCE;
}

and two threads: Thread A, Thread B
But Why?
Consider the old singleton pattern
getInstance() method:
public Singleton getInstance() {
if(INSTANCE == null) {
INSTANCE = new Singleton();
}
return INSTANCE;
}

and two threads: Thread A, Thread B
But Why?
Consider the old singleton pattern
getInstance() method:
public Singleton getInstance() {
if(INSTANCE == null) {
INSTANCE = new Singleton();
}
return INSTANCE;
}

and two threads: Thread A, Thread B
Each statement is an atomic block
Each thread executes a non-negative number of
atomic blocks
Threads take turns but order is not guaranteed
Given a number of threads t, and a group of
statements s, the number of execution order
permutations is given by:

interleavings(t, s) =

(ts)!
t
(s!)
The JUnit Cup
Challenge

Level 0
JUnit PowerUp
public class FibonacciSequenceTest {
FibonacciSequence fib = new FibonacciSequence();
@Test public void shouldOutputZeroWhenInputIsZero() {
assertThat(fib.get(0), is(0))
}
@Test public void shouldOutputOneWhenInputIsOne() {
assertThat(fib.get(1), is(1));
}
@Test public void shouldCalculateNthNumber(){
for(int i = 2; i <= 10; i++) {
int x = fib.get(i-1);
int y = fib.get(i-2);
int sum = x + y;
assertThat(fib.calculate(i), is(sum);
}
}
}
Cost/Benefit Ratio
(TDD) Unit tests are executable specifications of
the code
Unit (+ integration tests) will never find all the bugs
Writing tests takes time
Time is limited
Which tests should I write and which should I
forgo?
JUnit Runners
Bundled
Suite, Parameterized

•
• Theories, Categories, Enclosed

Popular 3rd party runners
Mockito, PowerMock(ito)

•

Custom
JBehave, Spock

•
• dynamic tests?
Custom Runner
public abstract class Runner
implements Describable {
public Runner(Class<?> testClass){...}
public abstract Description getDescription();
public abstract void run(RunNotifier n);
public int testCount() {
return getDescription().testCount();
}
}
Description
Description.createSuiteDescription(...)
Description.createTestDescription(...)
Description#addChild(Description d)
RunNotifier
fireTestStarted(Description d)
fireTestFinished(Description d)
fireTestFailure(Failure f)
fireTestIgnored(Description d)
fireTestAssumptionFailed(Failure f)
Warning
• A very coarse way of modifying test execution
• Even when extending from BlockJUnit4ClassRunner
there is a degree of complex code

• Runners can not be composed e.g.
@RunWith(MockitoJUnitRunner.class}
@RunWith(SpringJUnit4ClassRunner.class)
public class SomeTest {...}
@RunWith({MockitoRunner.class,
SpringJUnit4ClassRunner.class})
public class SomeTest {...}
JUnit Rules

PowerUP
Rules can:
Read/Write test metadata
Modify the test before execution
Modify the result after execution
Suite vs Class == @ClassRule vs @MethodRule
public interface TestRule {
Statement apply(Statement base,
Description description);
}
public class MockRule implements TestRule {
private final Object target;
public MockRule(Object target) {
this.target = target;
}
public Statement apply(final Statement base,
Description description) {
return new Statement() {
public void evaluate() throws Throwable {
MockitoAnnotations.initMocks(target);
base.evaluate();
}
};
}
}
The Thread
Challenge

Level 1
JUnit PowerUp
static class VolatileInt { volatile int num = 0; }
public void shouldIncrementCounter() {
final int count = 32 * 1000;
final int nThreads = 64;
ExecutorService es = Executors.newFixedThreadPool(nThreads);
final VolatileInt vi = new VolatileInt();
for (int i = 0; i < nThreads; i++) {
es.submit(new Runnable() {
public void run() {
for (int j = 0; j < count; j += nThreads)
vi.num++;
}
});
es.shutdown();
es.awaitTermination(10, TimeUnit.SECONDS);
assertEquals(count, vi.num);

}

http://vanillajava.blogspot.co.uk/2011/08/why-testing-code-for-thread-safety-is.html
Weapons Guide
• Java Concurrency in Practice - Brian Goetz
• Java Performance - Charlie Hunt
• Effective Unit Testing: A guide for Java developers Lasse Koskela

• Programming Concurrency on the JVM -Venkat
Subramaniam
Choreographer’s
Workshop

Level 2
JUnit PowerUp
http://www.recessframework.org/page/map-reduce-anonymous-functions-lambdas-php

Text
Awaitility

PowerUP
A Simple DSL
No more Thread.sleep(), or while loops
await().until(
new Callable<Boolean>() {
public Boolean call() throws Exception {
return userRepository.size() == 1;
}
};
)
The previous example was not particularly re-usable.
Let’s fix that!
await().until(sizeOf(repository), equalTo(1));

where
private Callable<Integer> sizeOf(Collection c){
return new Callable<Integer>() {
public Boolean call() throws Exception {
return c.size();
}
};
}
Advanced Waiting
• Callable is still a lot of boiler plate...
await().untilCall(to(repository).size(), equalTo(3));

• Using reflection
await().until(
fieldIn(repository).ofType(int.class)
.andWithName(“size”), equalTo(3)
);

• Polling

with()
.pollInterval(ONE_HUNDERED_MILLISECONDS)
.and().with().pollDelay(20, MILLISECONDS)
.await("user registration").until(
userStatus(), equalTo(REGISTERED));
The Shared
Resource Contest

Level 3
JUnit PowerUp
Race Conditions
A race condition is a situation in which two or more
threads or processes are reading or writing some
shared data, and the final result depends on the timing
of how the threads are scheduled.
public class Counter {
protected long count = 0;
public void add(long value){
this.count = this.count + value;
}
}
ThreadWeaver

PowerUP
public class ConcurrentHashMapTest {
ConcurrentMap<String, Integer> map;
@ThreadedBefore
public void before() {
map = new ConcurrentHashMap();
}
@ThreadedMain
public void mainThread() {
map.putIfAbsent("A", 1);
}
@ThreadedSecondary
public void secondThread() {
map.putIfAbsent("A", 2);
}

}

@ThreadedAfter
public void after() {
assertEquals(map.get(“A”), 1);
}
Works by instrumenting bytecode at runtime
Does not integrate with JUnit but can be embedded
@Test
public void testThreading() {
new AnnotatedTestRunner()
.runTests(
this.getClass(),
ConcurrentHashMapTest.class
);
}

Has fine-grained control over breakpoints/code position
Documentation is ok but not a lot on in-depth material
PROJECT STATUS UNKNOWN, MAYBE INACTIVE
Princess
Protection HQ

Level 4
JUnit PowerUp
A recurrent
producer-consumer
information
processing network
for anomaly
detection
JUnit PowerUp
Java Path Finder
http://babelfish.arc.nasa.gov/trac/jpf
JPF created by NASA
Open-sourced in 2005
Is a JVM written in Java that runs on the JVM
Primarily used as a model checker for concurrent
programs, e.g deadlocks, race conditions, NPEs
Very powerful
Not very usable (e.g. limited CI support)
Byteman

PowerUP
Java Bytecode Manipulating Agent - Byteman
Uses java.lang.intrument as an agent
Can be used for:
fault injection testing, tracing during test and in
production, an alternative AOP (e.g. cross-cutting
logging)
Using instrumentation in tests means:
fewer mocks
less boilerplate to generate abnormal senarios
Why Byteman?
AOP is powerful but complex:

• code is targeted indirectly rather than at the class/
method declaration site

• AOP definition languages can be a bit odd/hard to
work with

• Impact at runtime is sometimes significant to

application performance due to pointcut definitions

• not always trivial to turn-off, alter, or remove advice
EBCA Rules
A Byteman rule consists of:

• Event - the class/interface/method target
• Binding - initialise rule values
• Condition - a boolean expression (optional)
• Action - some Java code that may return or
throw (can not break contracts)

Rules may have state, i.e 1st invocation do A, 2nd
invocation do B, etc.
Fault Injection
RULE simulate exception from Executor
INTERFACE ^java.util.Executor
METHOD execute
AT ENTRY
IF callerEquals("ServiceInstanceImpl.execute", true)
DO traceln(“Throwing exception in execute”);
THROW new java.util.concurrent.RejectedExecutionException();
ENDRULE
In-built Rules
Tracing
traceOpen, traceClose, traceln, traceStack
Shared Rule State
flag, clear, flagged, countDown, incrementCounter
Synchronization
waitFor, signalWake, rendezvous, delay
Timing
createTimer, getElapsedTime, resetTimer
Call Stack Checking
callerEquals, callerMatches
Recursive Triggering
disable/enableTriggering
BMUnit
@RunWith(BMUnitRunner.class)
@BMScript(value="traceRules", dir="scripts")
class DBTests1 {
@Test
@BMRule(
className="UserRepository”,
methodName="findByName",
condition=
"$1.getName().contains("James")",
action="THROW new UserNotFoundException")
public void shouldErrorIfNoUserFound()
{
...
}
}
Machine Lab

Bouns LeveL
JUnit PowerUp
ConcurrentUnit
Website: https://github.com/jhalterman/concurrentunit
JUnit addon library
Comprised of:

• A thread co-ordinator Waiter
• Allows assertions to be made in worker threads
• Waiter collects and returns outcomes of
assertions
FindBugs
Website: http://findbugs.sourceforge.net
Integrates with Maven, Gradle, Sonar, etc
Multithreaded correctness group:

• Inconsistent synchronization
• Field not guarded against concurrent access
• Method calls Thread.sleep() with a lock held
• Creation of ScheduledThreadPoolExecutor with
zero core threads
Freud
Website: https://github.com/LMAX-Exchange/freud
A framework for writing static analysis tests
Lacks good documentation except code examples
Has rules for:
✦
✦

✦
✦

Java sources
Java class objects. (i.e analysing the java.lang.Class
object)
Java class files (i.e analysing the ".class" file)
Spring framework XML configuration files
Summary

Scores
JUnit PowerUp
Lv.0 - Testing Tutorial

• TDD is your friend
• Prefer rules over runners
• Don’t be afraid to write custom rules and
runners

• Ensure you spend your time on the
important tests
Lv.1 - The Thread
Challenge

• Modelling real world behaviour of your application
is hard

• Don’t assume your tests are exhaustively testing
the scenarios

• Behaviour depends heavily on the system (e.g. load)
• Know your stuff - read read read
Lv2. Choreographer’s
Workshop

• It is essential to test the co-ordinated
behaviour of threads

• If threads are not sharing resources we

don’t need to care about synchronisation
between thread

• Awaitility allows us to check that some end
state if finally reached (within the given
time)
Lv.3 - The Shared
Resource Contest

• When a resource is shared between

threads new problem cases can arise, e.g.
races

• Often the problem can be simplified to the
case of 2 threads

• To test the orders of execution of 2
threads we can use ThreadWeaver
Lv.4 - Princess
Protection HQ

• Many problems can’t be reduced to a 2 thread
model

• JPF can provide some automated analysis of
concurrency issues

• Byteman allows us to take control of the whole
application

• Both are very heavy weight and should not be
JUnit PowerUp
JUnit PowerUP

GAME OVER
Credits
JUnit
http://www.junit.org
Awaitility
http://code.google.com/p/awaitility
ByteMan
http://www.jboss.org/byteman

ThreadWeaver
http://code.google.com/p/thread-weaver
ConcurrentUnit
https://github.com/jhalterman/concurrentunit

FindBugs
http://findbugs.sourceforge.net
Freud
https://github.com/LMAX-Exchange/freud

Java PathFinder
http://babelfish.arc.nasa.gov/trac/jpf
JUnit PowerUP
Practical Testing Tips
James McGivern

More Related Content

PPT
Object - Based Programming
Andy Juan Sarango Veliz
 
PDF
Lecture01a correctness
Sonia Djebali
 
PDF
Reactive Programming for a demanding world: building event-driven and respons...
Mario Fusco
 
PDF
Parallel streams in java 8
David Gómez García
 
PDF
Java_practical_handbook
Manusha Dilan
 
ODP
Java 5 6 Generics, Concurrency, Garbage Collection, Tuning
Carol McDonald
 
DOCX
Java practical
shweta-sharma99
 
ODP
Java Generics
Carol McDonald
 
Object - Based Programming
Andy Juan Sarango Veliz
 
Lecture01a correctness
Sonia Djebali
 
Reactive Programming for a demanding world: building event-driven and respons...
Mario Fusco
 
Parallel streams in java 8
David Gómez García
 
Java_practical_handbook
Manusha Dilan
 
Java 5 6 Generics, Concurrency, Garbage Collection, Tuning
Carol McDonald
 
Java practical
shweta-sharma99
 
Java Generics
Carol McDonald
 

What's hot (20)

PPT
Thread
phanleson
 
DOC
Final JAVA Practical of BCA SEM-5.
Nishan Barot
 
PDF
JVM Mechanics
Doug Hawkins
 
PDF
Harnessing the Power of Java 8 Streams
IndicThreads
 
PPT
Functional Programming Past Present Future
IndicThreads
 
DOC
Java programming lab assignments
rajni kaushal
 
PDF
JVM Mechanics: Understanding the JIT's Tricks
Doug Hawkins
 
PPT
Lecture k-sorting
Vijayaraj Raj
 
PDF
LogicObjects
Sergio Castro
 
PDF
Java programming lab manual
sameer farooq
 
DOC
Matlab file
Soumya Behera
 
PPT
Clojure concurrency
Alex Navis
 
PPT
Simple Java Programs
AravindSankaran
 
PDF
SchNet: A continuous-filter convolutional neural network for modeling quantum...
Kazuki Fujikawa
 
PDF
Exercise 1a transfer functions - solutions
wondimu wolde
 
PDF
Java programs
Mukund Gandrakota
 
PPTX
Java Language fundamental
Infoviaan Technologies
 
PPTX
Systems Analysis & Control: Steady State Errors
JARossiter
 
Thread
phanleson
 
Final JAVA Practical of BCA SEM-5.
Nishan Barot
 
JVM Mechanics
Doug Hawkins
 
Harnessing the Power of Java 8 Streams
IndicThreads
 
Functional Programming Past Present Future
IndicThreads
 
Java programming lab assignments
rajni kaushal
 
JVM Mechanics: Understanding the JIT's Tricks
Doug Hawkins
 
Lecture k-sorting
Vijayaraj Raj
 
LogicObjects
Sergio Castro
 
Java programming lab manual
sameer farooq
 
Matlab file
Soumya Behera
 
Clojure concurrency
Alex Navis
 
Simple Java Programs
AravindSankaran
 
SchNet: A continuous-filter convolutional neural network for modeling quantum...
Kazuki Fujikawa
 
Exercise 1a transfer functions - solutions
wondimu wolde
 
Java programs
Mukund Gandrakota
 
Java Language fundamental
Infoviaan Technologies
 
Systems Analysis & Control: Steady State Errors
JARossiter
 
Ad

Viewers also liked (13)

PPTX
JUnit Sample
Guilherme Alberto de Moraes
 
PPT
Junit
Vivek Kulkarni
 
PDF
Test driven development - JUnit basics and best practices
Narendra Pathai
 
PPT
Test Driven Development and JUnit
Somenath Mukhopadhyay
 
PDF
Unit testing with Junit
Valerio Maggio
 
PPSX
Junit
FAROOK Samath
 
PDF
JUnit & Mockito, first steps
Renato Primavera
 
PPTX
Junit 4.0
pallavikhandekar212
 
PPTX
JUnit- A Unit Testing Framework
Onkar Deshpande
 
PPS
JUnit Presentation
priya_trivedi
 
PDF
Introduction To UnitTesting & JUnit
Mindfire Solutions
 
PDF
Unit testing with JUnit
Thomas Zimmermann
 
PDF
Android Unit Tesing at I/O rewind 2015
Somkiat Puisungnoen
 
Test driven development - JUnit basics and best practices
Narendra Pathai
 
Test Driven Development and JUnit
Somenath Mukhopadhyay
 
Unit testing with Junit
Valerio Maggio
 
JUnit & Mockito, first steps
Renato Primavera
 
JUnit- A Unit Testing Framework
Onkar Deshpande
 
JUnit Presentation
priya_trivedi
 
Introduction To UnitTesting & JUnit
Mindfire Solutions
 
Unit testing with JUnit
Thomas Zimmermann
 
Android Unit Tesing at I/O rewind 2015
Somkiat Puisungnoen
 
Ad

Similar to JUnit PowerUp (20)

KEY
Modern Java Concurrency
Ben Evans
 
KEY
Modern Java Concurrency (OSCON 2012)
Martijn Verburg
 
KEY
Modern Java Concurrency (Devoxx Nov/2011)
Martijn Verburg
 
PPT
Java Core | Modern Java Concurrency | Martijn Verburg & Ben Evans
JAX London
 
ODP
Concurrent Programming in Java
Ruben Inoto Soto
 
PDF
An End to Order (many cores with java, session two)
Robert Burrell Donkin
 
PPT
Testing multithreaded java applications for synchronization problems
Vassil Popovski
 
PDF
An End to Order
Robert Burrell Donkin
 
PDF
Java Concurrency, A(nother) Peek Under the Hood [Code One 2019]
David Buck
 
PDF
Java Concurrency and Performance | Multi Threading | Concurrency | Java Conc...
Anand Narayanan
 
PPTX
Unit testing patterns for concurrent code
Dror Helper
 
PDF
Beyond Mere Actors
Boston Area Scala Enthusiasts
 
PDF
Programming with Threads in Java
koji lin
 
PDF
1. learning programming with JavaThreads.pdf
ahmadkeder8
 
PDF
JUnit 4 Can it still teach us something? - Andrzej Jóźwiak - Kariera IT Łodź ...
Andrzej Jóźwiak
 
PPTX
Does Java Have a Future After Version 8? (Belfast JUG April 2014)
Garth Gilmour
 
PPTX
Effective .NET Core Unit Testing with SQLite and Dapper
Mike Melusky
 
PPT
ProspectusPresentationPrinterFriendly
martijnetje
 
PPTX
JUnit Test Case With Processminer modules.pptx
pateljeel24
 
PPTX
Effective .NET Core Unit Testing with SQLite and Dapper
Mike Melusky
 
Modern Java Concurrency
Ben Evans
 
Modern Java Concurrency (OSCON 2012)
Martijn Verburg
 
Modern Java Concurrency (Devoxx Nov/2011)
Martijn Verburg
 
Java Core | Modern Java Concurrency | Martijn Verburg & Ben Evans
JAX London
 
Concurrent Programming in Java
Ruben Inoto Soto
 
An End to Order (many cores with java, session two)
Robert Burrell Donkin
 
Testing multithreaded java applications for synchronization problems
Vassil Popovski
 
An End to Order
Robert Burrell Donkin
 
Java Concurrency, A(nother) Peek Under the Hood [Code One 2019]
David Buck
 
Java Concurrency and Performance | Multi Threading | Concurrency | Java Conc...
Anand Narayanan
 
Unit testing patterns for concurrent code
Dror Helper
 
Beyond Mere Actors
Boston Area Scala Enthusiasts
 
Programming with Threads in Java
koji lin
 
1. learning programming with JavaThreads.pdf
ahmadkeder8
 
JUnit 4 Can it still teach us something? - Andrzej Jóźwiak - Kariera IT Łodź ...
Andrzej Jóźwiak
 
Does Java Have a Future After Version 8? (Belfast JUG April 2014)
Garth Gilmour
 
Effective .NET Core Unit Testing with SQLite and Dapper
Mike Melusky
 
ProspectusPresentationPrinterFriendly
martijnetje
 
JUnit Test Case With Processminer modules.pptx
pateljeel24
 
Effective .NET Core Unit Testing with SQLite and Dapper
Mike Melusky
 

Recently uploaded (20)

PDF
Structs to JSON: How Go Powers REST APIs
Emily Achieng
 
PDF
Presentation about Hardware and Software in Computer
snehamodhawadiya
 
PDF
A Strategic Analysis of the MVNO Wave in Emerging Markets.pdf
IPLOOK Networks
 
PPTX
Agile Chennai 18-19 July 2025 Ideathon | AI Powered Microfinance Literacy Gui...
AgileNetwork
 
PDF
Peak of Data & AI Encore - Real-Time Insights & Scalable Editing with ArcGIS
Safe Software
 
PPTX
Introduction to Flutter by Ayush Desai.pptx
ayushdesai204
 
PDF
Accelerating Oracle Database 23ai Troubleshooting with Oracle AHF Fleet Insig...
Sandesh Rao
 
PDF
The Future of Artificial Intelligence (AI)
Mukul
 
PDF
Make GenAI investments go further with the Dell AI Factory
Principled Technologies
 
PDF
How ETL Control Logic Keeps Your Pipelines Safe and Reliable.pdf
Stryv Solutions Pvt. Ltd.
 
PPTX
cloud computing vai.pptx for the project
vaibhavdobariyal79
 
PDF
Brief History of Internet - Early Days of Internet
sutharharshit158
 
PDF
Get More from Fiori Automation - What’s New, What Works, and What’s Next.pdf
Precisely
 
PDF
Security features in Dell, HP, and Lenovo PC systems: A research-based compar...
Principled Technologies
 
PDF
NewMind AI Weekly Chronicles - July'25 - Week IV
NewMind AI
 
PPTX
New ThousandEyes Product Innovations: Cisco Live June 2025
ThousandEyes
 
PPTX
Simple and concise overview about Quantum computing..pptx
mughal641
 
PPTX
Dev Dives: Automate, test, and deploy in one place—with Unified Developer Exp...
AndreeaTom
 
PPTX
IT Runs Better with ThousandEyes AI-driven Assurance
ThousandEyes
 
PDF
SparkLabs Primer on Artificial Intelligence 2025
SparkLabs Group
 
Structs to JSON: How Go Powers REST APIs
Emily Achieng
 
Presentation about Hardware and Software in Computer
snehamodhawadiya
 
A Strategic Analysis of the MVNO Wave in Emerging Markets.pdf
IPLOOK Networks
 
Agile Chennai 18-19 July 2025 Ideathon | AI Powered Microfinance Literacy Gui...
AgileNetwork
 
Peak of Data & AI Encore - Real-Time Insights & Scalable Editing with ArcGIS
Safe Software
 
Introduction to Flutter by Ayush Desai.pptx
ayushdesai204
 
Accelerating Oracle Database 23ai Troubleshooting with Oracle AHF Fleet Insig...
Sandesh Rao
 
The Future of Artificial Intelligence (AI)
Mukul
 
Make GenAI investments go further with the Dell AI Factory
Principled Technologies
 
How ETL Control Logic Keeps Your Pipelines Safe and Reliable.pdf
Stryv Solutions Pvt. Ltd.
 
cloud computing vai.pptx for the project
vaibhavdobariyal79
 
Brief History of Internet - Early Days of Internet
sutharharshit158
 
Get More from Fiori Automation - What’s New, What Works, and What’s Next.pdf
Precisely
 
Security features in Dell, HP, and Lenovo PC systems: A research-based compar...
Principled Technologies
 
NewMind AI Weekly Chronicles - July'25 - Week IV
NewMind AI
 
New ThousandEyes Product Innovations: Cisco Live June 2025
ThousandEyes
 
Simple and concise overview about Quantum computing..pptx
mughal641
 
Dev Dives: Automate, test, and deploy in one place—with Unified Developer Exp...
AndreeaTom
 
IT Runs Better with ThousandEyes AI-driven Assurance
ThousandEyes
 
SparkLabs Primer on Artificial Intelligence 2025
SparkLabs Group
 

JUnit PowerUp