The document discusses mutation testing as a way to write better unit tests. Mutation testing involves making small changes or "mutations" to the production code and then running the test suite to see if the tests can detect the changes, or "kill" the mutations. It is recommended to generate mutants, run the unit tests, check the reports, and write more or improved tests until reaching a quality target where most or all mutants are killed. Different types of common code mutations are discussed such as replacing operators, variables, or removing conditionals. The goal of mutation testing is to help write a test suite that can detect as many small defects as possible in the code.
The document discusses several techniques for using symbolic execution for software debugging, including regression debugging, cause clue clauses, error invariants, and angelic debugging. Regression debugging involves comparing execution paths of a failing test case in a new buggy program version to paths in an older stable version to find differences that may indicate the root cause. Other techniques use symbolic execution to extract specifications from passing tests, internal program properties, or previous versions to infer the intended behavior and identify inconsistencies in a failing run.
The document summarizes information about program repair and semantic repair. It discusses how most software has bugs that are often not fixed for months after being reported. It then describes reasons for program repair including generating patches as better bug reports and automating simple one-line fixes. It notes challenges with repair like weak test cases and large search spaces. It proposes using specifications, dynamic invariants, or test-driven repair as correctness criteria. It characterizes general purpose repair using generate-and-test or specification inference and discusses associated technical challenges. Finally, it discusses interactive and semantics-based repair.
SEMFIX is a program repair technique that uses semantic analysis via symbolic execution. It takes a failing test suite as input, ranks suspicious statements using statistical fault localization, symbolically executes tests to extract specifications of suspicious statements, and uses program synthesis to generate fixes by solving constraints from symbolic execution. The technique aims to infer the intended meaning of code and automatically generate fixes without human guidance.
How a migration to MicroServices could change the team, architecture and coding culture.
What you could you do and how you could transform a "Jurassic Park" into a lightweight environment.
In this talk we will explore the strategy, techniques, pattern and tools I used to
transform a team and the architecture that was grown over 15yrs.
This will be a mix of pattern, tools and techniques that was able to migrate
old systems, used inside insurance and banks.
From Mess To Masterpiece - JFokus 2017Sven Ruppert
How a migration to MicroServices could change the team, architecture and coding culture. What you could you do and how you could transform a "Jurassic Park" into a lightweight environment. In this talk we will explore the strategy, techniques, pattern and tools I used to transform a team and the architecture that was grown over 15yrs. This will be a mix of pattern, tools and techniques that was able to migrate old systems, used inside insurance and banks. We had to migrate fat systems with a few million lines of code...
Dependency Injection is now part of nearly every Java project. But what is the difference between DI and CDI. How to decide what I could use better, what frameworks are available and what are the differences for me as a programmer? What could be an option for the IoT-, Desktop- or Webproject?
In this talk we will get an overview over different frameworks and how they are working. We are not checking the well known big one only, but we are looking at some small sometimes specialized implementations.
The document discusses several techniques for using symbolic execution for software debugging, including regression debugging, cause clue clauses, error invariants, and angelic debugging. Regression debugging involves comparing execution paths of a failing test case in a new buggy program version to paths in an older stable version to find differences that may indicate the root cause. Other techniques use symbolic execution to extract specifications from passing tests, internal program properties, or previous versions to infer the intended behavior and identify inconsistencies in a failing run.
The document summarizes information about program repair and semantic repair. It discusses how most software has bugs that are often not fixed for months after being reported. It then describes reasons for program repair including generating patches as better bug reports and automating simple one-line fixes. It notes challenges with repair like weak test cases and large search spaces. It proposes using specifications, dynamic invariants, or test-driven repair as correctness criteria. It characterizes general purpose repair using generate-and-test or specification inference and discusses associated technical challenges. Finally, it discusses interactive and semantics-based repair.
SEMFIX is a program repair technique that uses semantic analysis via symbolic execution. It takes a failing test suite as input, ranks suspicious statements using statistical fault localization, symbolically executes tests to extract specifications of suspicious statements, and uses program synthesis to generate fixes by solving constraints from symbolic execution. The technique aims to infer the intended meaning of code and automatically generate fixes without human guidance.
How a migration to MicroServices could change the team, architecture and coding culture.
What you could you do and how you could transform a "Jurassic Park" into a lightweight environment.
In this talk we will explore the strategy, techniques, pattern and tools I used to
transform a team and the architecture that was grown over 15yrs.
This will be a mix of pattern, tools and techniques that was able to migrate
old systems, used inside insurance and banks.
From Mess To Masterpiece - JFokus 2017Sven Ruppert
How a migration to MicroServices could change the team, architecture and coding culture. What you could you do and how you could transform a "Jurassic Park" into a lightweight environment. In this talk we will explore the strategy, techniques, pattern and tools I used to transform a team and the architecture that was grown over 15yrs. This will be a mix of pattern, tools and techniques that was able to migrate old systems, used inside insurance and banks. We had to migrate fat systems with a few million lines of code...
Dependency Injection is now part of nearly every Java project. But what is the difference between DI and CDI. How to decide what I could use better, what frameworks are available and what are the differences for me as a programmer? What could be an option for the IoT-, Desktop- or Webproject?
In this talk we will get an overview over different frameworks and how they are working. We are not checking the well known big one only, but we are looking at some small sometimes specialized implementations.
Predictive Analytics for Everyone! Building CART Models using R - Chantal D....Chantal Larose
I had the pleasure to lead a wonderfully successful workshop March 8 2017, which focused on helping fellow faculty
across the disciplines learn how to utilize R programming and CART models in their research
"Apache Spark™ is a fast and general engine for large-scale data processing."" Above statement is taken from Apache Spark welcome page. It's one of those definitions that, while describing the product in one sentence and being 100 % true, tell still little to the wondering noob.
Why take interest in Apache Spark? Apache Spark promise being up to 100x faster than Hadoop MapReduce in certain scenarios. It provide comprehensible programming model (familiar to everyone who is used to functional programming) and vast ecosystem of tools.
In my talk I will try to reveal secrets of Apache Spark for the very beginners.
We will do first quick introduction to the set of problems commonly known as BigData: what they try to solve, what are their obstacles and challenges and how those can be addressed. We will quickly take a pick on MapReduce: theory and implementation. We will then move to Apache Spark. We will see what was the main factor that drove its creators to introduce yet another large-scala processing engine. We will see how it works, what are its main advantages. Presentation will be mix of slides and code examples.
Causal inference-for-profit | Dan McKinley | DN18DataconomyGmbH
This document discusses causal inference and experimentation. It notes that doing causal inference and experiments correctly is tricky. It also notes that vendors who provide experimentation services may have their own motives that are not always aligned with customers. The document provides several theories for why running a large number of experiments may be an effective approach, despite small chances of any individual experiment finding an effect, and suggests starting with building expertise in a single cross-disciplinary team.
DN18 | A/B Testing: Lessons Learned | Dan McKinley | MailchimpDataconomy Media
Abstract about the Presemtation:
Introducing A/B testing to a large team that has never done it before is a weird and bewildering thing that Dan McKinley has somehow done twice. This has burdened him with many opinions about how to achieve this with minimal wailing and gnashing of teeth.
About the Author:
Dan McKinley is a Co-Founder of Skyliner in Los Angeles. Previously he worked at Stripe and spent nearly 7 years building Etsy, during which he worked on “pretty much every feature and backend facility on the site”. He resides in LA with his wife and son.
Mutation Testing: Start Hunting The BugsAri Waller
By Sven Ruppert: JUnit is a well-known tool for java developers in the area of TDD. Here it has become accepted, that CodeCoverage can be measured. In this case we distinguish between coverage on the level of classes, methods and rows. The goal is to get the CodeCoverage as high as possible on the row level, but not higher than necessary.
What exactly does it mean? A CodeCoverage of appr. 75% on the row level is very good and can already provide a basis. But what does this figure say?
The document outlines an Apache Spark workshop presented by Paweł Szulc. It begins with installation instructions and then covers what Apache Spark is, why it was created, and how it works. Key points include that Apache Spark was created to address performance issues with MapReduce like its difficult programming model, writing outputs to disk between steps, and lack of support for iterative algorithms and real-time processing. The document uses a word count example to demonstrate how MapReduce works and how Spark improves on this pattern.
Functional Reactive with Core Java - Workshop - SlidesSven Ruppert
The theme of this workshop is to learn the latest Java features, with an emphasis on picking up a couple of paradigms along the way - namely Functional Reactive Programming and how this fits in with the latest Java releases.
This document discusses using symbolic reasoning and dynamic symbolic execution to help with program debugging, repair, and regression testing. It presents an approach where inputs are grouped based on producing the same symbolic output to more efficiently test programs and debug issues. Relevant slice conditions are computed to precisely capture input-output relationships and group related paths. This technique aims to find a notion of "similarity" between inputs and executions that is coarser than just considering program paths. The approach is demonstrated on example programs and shown to reduce debugging time compared to only considering program paths.
utPLSQL offers a unit testing API for PL/SQL that is modeled on the xUnit approach. This is an old slide deck on utPLSQL so my apologies for any inconsistencies with the current utility. Note: while I created the original utPLSQL code base, I am not actively working on utPLSQL at this time. Check out github.com/utplsql for the code and project details.
Here are my slides for my preparation class for possible Master students in Electrical Engineering and Computer Science (Specialization in Computer Science)... for the entrance examination here at Cinvestav GDL
What is "Domain Driven Design" and what can you expect from it?Tom Janssens
The document discusses Domain-Driven Design (DDD). It begins with an example of modeling a work schedule and then discusses some key aspects of DDD including ubiquitous language, bounded contexts, tactical patterns for designing domains, keeping domain logic separate from other code, and evolving models over time. It also covers common mistakes like overusing DDD or ignoring strategic design. The document emphasizes learning DDD through experience rather than advice and provides resources for getting started including books, communities, and upcoming events.
This document discusses using Keptn to automate service level indicator (SLI) evaluation and performance validation with service level objectives (SLOs). It describes two use cases: 1) automating SLI evaluation over a timeframe, and 2) integrating performance validation as a self-service capability. The document outlines how Keptn works underneath, including defining SLIs and SLOs in YAML and scoring SLIs against SLO criteria. It demonstrates integrating Keptn with existing pipelines and monitoring tools. Finally, it discusses options for installing only the Keptn quality gate functionality or the full Keptn platform.
Sat4j: from the lab to desktop computers. OW2con'15, November 17, Paris. OW2
The aim of the Sat4j library is to solve Boolean satisfaction and optimization problems. Those problems have received considerable attention in the last two decades, mainly due to its use in hardware verification.Sat4j started as a research project to experiment ideas about while providing an efficient Boolean reasoning engine to the Java community.
Puppet Camp Düsseldorf 2014: Continuously Deliver Your Puppet Code with Jenki...Puppet
Continuously Deliver Your Puppet Code with Jenkins, r10k and Git (Intermediate) - Toni Schmidbauer, IT Solutions at Spardat GmbH given at Puppet Camp Düsseldorf 2014
Puppet Camp Duesseldorf 2014: Toni Schmidbauer - Continuously deliver your pu...NETWAYS
At s-IT solutions we manage a diverse environment of about 1000 linux (redhat), solaris 10/11 and AIX hosts with the help of puppet open source.
In this talk we give a brief introduction of continuous delivery and explain how we manage our current puppet infrastructure with a focus on the deployment process. We introduce jenkins, a continuous integration server and how we use it to continuously deliver our puppet code base. We also explain how we use git and r10k to manage internal and external (github/forge) puppet modules.
Furthermore, we discuss current shortcomings of our setup and how we plan to improve.
In this deck, Torsten Hoefler from ETH Zurich presents: Scientific Benchmarking of Parallel Computing Systems.
"Measuring and reporting performance of parallel computers constitutes the basis for scientific advancement of high-performance computing. Most scientific reports show performance improvements of new techniques and are thus obliged to ensure reproducibility or at least interpretability. Our investigation of a stratified sample of 120 papers across three top conferences in the field shows that the state of the practice is not sufficient. For example, it is often unclear if reported improvements are in the noise or observed by chance. In addition to distilling best practices from existing work, we propose statistically sound analysis and reporting techniques and simple guidelines for experimental design in parallel computing. We aim to improve the standards of reporting research results and initiate a discussion in the HPC field. A wide adoption of this minimal set of rules will lead to better reproducibility and interpretability of performance results and improve the scientific culture around HPC."
Learn more: https://htor.inf.ethz.ch/
Sign up for our insideHPC Newsletter: http://insidehpc.com/newsletter
The document discusses methods for training language models to follow instructions with human feedback. It proposes a method called SFT that uses human annotators to provide feedback on model responses to prompts. An initial model is fine-tuned on this demonstration data to create an SFT Model. The SFT Model responses are then ranked by users. A reward model is trained on the rankings to provide rewards. The reward model is then used to update the SFT Model via policy gradients, creating a PPO Model. A KL penalty is added to prevent the PPO Model from deviating too much from the SFT Model.
JUnit5 Custom TestEngines intro - version 2020-06Sven Ruppert
JUnit5 has been out for some time now, but what are the hidden pearls you can find inside the new Junit Platform? This session explores the possibilities, from @Test over custom extensions up to your own TestEngine. The presentation shows you how to manage a full-stack test in different flavours, based on the JUnit5 possibilities. The main focus is on the development of a custom TestEngine to support project-specific needs. After this, you’ll have all the bits and bytes you need for starting your journey with JUnit5.
Hidden pearls for High-Performance-PersistenceSven Ruppert
Small UseCases with a significant amount of data for internal company usage, most developers had this in their career, already. However, no Ops Team, no Kubernetes, no Cluster is available as part of the solution.
In this talk, I will show a few tech stacks that are helping to deal with persistent data without dealing with the classic horizontal scaling tech monsters like Kubernetes, Hadoop and many more.
Sit down, relax and enjoy the journey through a bunch of lightning-fast persistence alternatives for pure java devs.
Predictive Analytics for Everyone! Building CART Models using R - Chantal D....Chantal Larose
I had the pleasure to lead a wonderfully successful workshop March 8 2017, which focused on helping fellow faculty
across the disciplines learn how to utilize R programming and CART models in their research
"Apache Spark™ is a fast and general engine for large-scale data processing."" Above statement is taken from Apache Spark welcome page. It's one of those definitions that, while describing the product in one sentence and being 100 % true, tell still little to the wondering noob.
Why take interest in Apache Spark? Apache Spark promise being up to 100x faster than Hadoop MapReduce in certain scenarios. It provide comprehensible programming model (familiar to everyone who is used to functional programming) and vast ecosystem of tools.
In my talk I will try to reveal secrets of Apache Spark for the very beginners.
We will do first quick introduction to the set of problems commonly known as BigData: what they try to solve, what are their obstacles and challenges and how those can be addressed. We will quickly take a pick on MapReduce: theory and implementation. We will then move to Apache Spark. We will see what was the main factor that drove its creators to introduce yet another large-scala processing engine. We will see how it works, what are its main advantages. Presentation will be mix of slides and code examples.
Causal inference-for-profit | Dan McKinley | DN18DataconomyGmbH
This document discusses causal inference and experimentation. It notes that doing causal inference and experiments correctly is tricky. It also notes that vendors who provide experimentation services may have their own motives that are not always aligned with customers. The document provides several theories for why running a large number of experiments may be an effective approach, despite small chances of any individual experiment finding an effect, and suggests starting with building expertise in a single cross-disciplinary team.
DN18 | A/B Testing: Lessons Learned | Dan McKinley | MailchimpDataconomy Media
Abstract about the Presemtation:
Introducing A/B testing to a large team that has never done it before is a weird and bewildering thing that Dan McKinley has somehow done twice. This has burdened him with many opinions about how to achieve this with minimal wailing and gnashing of teeth.
About the Author:
Dan McKinley is a Co-Founder of Skyliner in Los Angeles. Previously he worked at Stripe and spent nearly 7 years building Etsy, during which he worked on “pretty much every feature and backend facility on the site”. He resides in LA with his wife and son.
Mutation Testing: Start Hunting The BugsAri Waller
By Sven Ruppert: JUnit is a well-known tool for java developers in the area of TDD. Here it has become accepted, that CodeCoverage can be measured. In this case we distinguish between coverage on the level of classes, methods and rows. The goal is to get the CodeCoverage as high as possible on the row level, but not higher than necessary.
What exactly does it mean? A CodeCoverage of appr. 75% on the row level is very good and can already provide a basis. But what does this figure say?
The document outlines an Apache Spark workshop presented by Paweł Szulc. It begins with installation instructions and then covers what Apache Spark is, why it was created, and how it works. Key points include that Apache Spark was created to address performance issues with MapReduce like its difficult programming model, writing outputs to disk between steps, and lack of support for iterative algorithms and real-time processing. The document uses a word count example to demonstrate how MapReduce works and how Spark improves on this pattern.
Functional Reactive with Core Java - Workshop - SlidesSven Ruppert
The theme of this workshop is to learn the latest Java features, with an emphasis on picking up a couple of paradigms along the way - namely Functional Reactive Programming and how this fits in with the latest Java releases.
This document discusses using symbolic reasoning and dynamic symbolic execution to help with program debugging, repair, and regression testing. It presents an approach where inputs are grouped based on producing the same symbolic output to more efficiently test programs and debug issues. Relevant slice conditions are computed to precisely capture input-output relationships and group related paths. This technique aims to find a notion of "similarity" between inputs and executions that is coarser than just considering program paths. The approach is demonstrated on example programs and shown to reduce debugging time compared to only considering program paths.
utPLSQL offers a unit testing API for PL/SQL that is modeled on the xUnit approach. This is an old slide deck on utPLSQL so my apologies for any inconsistencies with the current utility. Note: while I created the original utPLSQL code base, I am not actively working on utPLSQL at this time. Check out github.com/utplsql for the code and project details.
Here are my slides for my preparation class for possible Master students in Electrical Engineering and Computer Science (Specialization in Computer Science)... for the entrance examination here at Cinvestav GDL
What is "Domain Driven Design" and what can you expect from it?Tom Janssens
The document discusses Domain-Driven Design (DDD). It begins with an example of modeling a work schedule and then discusses some key aspects of DDD including ubiquitous language, bounded contexts, tactical patterns for designing domains, keeping domain logic separate from other code, and evolving models over time. It also covers common mistakes like overusing DDD or ignoring strategic design. The document emphasizes learning DDD through experience rather than advice and provides resources for getting started including books, communities, and upcoming events.
This document discusses using Keptn to automate service level indicator (SLI) evaluation and performance validation with service level objectives (SLOs). It describes two use cases: 1) automating SLI evaluation over a timeframe, and 2) integrating performance validation as a self-service capability. The document outlines how Keptn works underneath, including defining SLIs and SLOs in YAML and scoring SLIs against SLO criteria. It demonstrates integrating Keptn with existing pipelines and monitoring tools. Finally, it discusses options for installing only the Keptn quality gate functionality or the full Keptn platform.
Sat4j: from the lab to desktop computers. OW2con'15, November 17, Paris. OW2
The aim of the Sat4j library is to solve Boolean satisfaction and optimization problems. Those problems have received considerable attention in the last two decades, mainly due to its use in hardware verification.Sat4j started as a research project to experiment ideas about while providing an efficient Boolean reasoning engine to the Java community.
Puppet Camp Düsseldorf 2014: Continuously Deliver Your Puppet Code with Jenki...Puppet
Continuously Deliver Your Puppet Code with Jenkins, r10k and Git (Intermediate) - Toni Schmidbauer, IT Solutions at Spardat GmbH given at Puppet Camp Düsseldorf 2014
Puppet Camp Duesseldorf 2014: Toni Schmidbauer - Continuously deliver your pu...NETWAYS
At s-IT solutions we manage a diverse environment of about 1000 linux (redhat), solaris 10/11 and AIX hosts with the help of puppet open source.
In this talk we give a brief introduction of continuous delivery and explain how we manage our current puppet infrastructure with a focus on the deployment process. We introduce jenkins, a continuous integration server and how we use it to continuously deliver our puppet code base. We also explain how we use git and r10k to manage internal and external (github/forge) puppet modules.
Furthermore, we discuss current shortcomings of our setup and how we plan to improve.
In this deck, Torsten Hoefler from ETH Zurich presents: Scientific Benchmarking of Parallel Computing Systems.
"Measuring and reporting performance of parallel computers constitutes the basis for scientific advancement of high-performance computing. Most scientific reports show performance improvements of new techniques and are thus obliged to ensure reproducibility or at least interpretability. Our investigation of a stratified sample of 120 papers across three top conferences in the field shows that the state of the practice is not sufficient. For example, it is often unclear if reported improvements are in the noise or observed by chance. In addition to distilling best practices from existing work, we propose statistically sound analysis and reporting techniques and simple guidelines for experimental design in parallel computing. We aim to improve the standards of reporting research results and initiate a discussion in the HPC field. A wide adoption of this minimal set of rules will lead to better reproducibility and interpretability of performance results and improve the scientific culture around HPC."
Learn more: https://htor.inf.ethz.ch/
Sign up for our insideHPC Newsletter: http://insidehpc.com/newsletter
The document discusses methods for training language models to follow instructions with human feedback. It proposes a method called SFT that uses human annotators to provide feedback on model responses to prompts. An initial model is fine-tuned on this demonstration data to create an SFT Model. The SFT Model responses are then ranked by users. A reward model is trained on the rankings to provide rewards. The reward model is then used to update the SFT Model via policy gradients, creating a PPO Model. A KL penalty is added to prevent the PPO Model from deviating too much from the SFT Model.
JUnit5 Custom TestEngines intro - version 2020-06Sven Ruppert
JUnit5 has been out for some time now, but what are the hidden pearls you can find inside the new Junit Platform? This session explores the possibilities, from @Test over custom extensions up to your own TestEngine. The presentation shows you how to manage a full-stack test in different flavours, based on the JUnit5 possibilities. The main focus is on the development of a custom TestEngine to support project-specific needs. After this, you’ll have all the bits and bytes you need for starting your journey with JUnit5.
Hidden pearls for High-Performance-PersistenceSven Ruppert
Small UseCases with a significant amount of data for internal company usage, most developers had this in their career, already. However, no Ops Team, no Kubernetes, no Cluster is available as part of the solution.
In this talk, I will show a few tech stacks that are helping to deal with persistent data without dealing with the classic horizontal scaling tech monsters like Kubernetes, Hadoop and many more.
Sit down, relax and enjoy the journey through a bunch of lightning-fast persistence alternatives for pure java devs.
Vaadin Flow - How to start - a short intro for Java DevsSven Ruppert
Do you want to write a web application with Core Java? Then you are exactly right here. With Core Java and Vaadin Flow, we will develop a web application from the ground up in this session. We will only use Java, HTML and CSS will not be used during programming. The result, however, will be a web-based application based on web-components that meets the latest standards.
Functional Reactive With Core Java - Voxxed MelbourneSven Ruppert
There are a lot of reactive frameworks in the field, some with functional languages for the JVM. But Java9 give you both. But how you could combine this and use this without adding the next big framework to your project? We will have a Core Java journey to explore a lot of nice possibilities based on the the JDK.
There are a lot of reactive frameworks in the field, some with functional languages for the JVM. But Java9 give you both. But how you could combine this and use this without adding the next big framework to your project? We will have a Core Java journey to explore a lot of nice possibilities based on the the JDK.
CDI (Context Dependency Injection) ermöglicht es dem Entwickler skalierbare und flexible Architekturen aufzubauen die auf einem Java(EE) Server als auch auf dem Desktop laufen. Wie aber sollten DesignPattern aufgebaut werden unter Verwendung von CDI? Was für einen Einfluss hat Java 8 auf die DesignPattern, wie wird es mit der neuen Streams API kombiniert?
Höhepunkt ist die Kombination von klassischen Reflection-Einsatzgebieten wie z.B. dynamic Proxies mit CDI und Cross-Language Injections.
Everybody knows the pattern proxy, but how can you use it effectively?
What kind of proxy patterns are available, and how can you
build patterns more effectively with it? Why is reflection needed for this?
Importantly, we need only the core JDK in most cases.
This tutorial starts from the basics and continues on to
DynamicProxies, DynamicObjectAdapter and DynamicStaticProxies at runtime, StaticObjectAdapters, and more.
The session, based on the German book Dynamic Proxies,
by Heinz Kabutz and the session’s presenter, takes a deep dive into this pattern group.
The document discusses testing JavaFX applications using TestFX and JUnit. It provides a simple "Hello World" JavaFX application example and extracts the application logic into separate classes that can be tested independently. This allows testing the logic with JUnit unit tests while avoiding the need to launch the full JavaFX application. The document also recommends using JMH microbenchmarks to test the performance of application services as part of a Test Driven Development approach.
http://www.jug.ch/html/events/2014/javafx_jumpstart.html
JavaFX - nun endlich ist es soweit. Swing ist offiziell seit Java8 im reinen Wartungsmodus, JavaFX ist der Nachfolger und nun endlich Teil des JDK. Also alles deutet auf neue Zeiten in der Desktopentwicklung hin.. ABER..
Wie kann ich mit JavaFX beginnen?
Wie kann ich es mit Swing Projekten kombinieren?
Gibt es Test-Tools?
Wie beginne ich mit der Migration von Swing auf JavaFX?
Diese oder ähnliche Fragen stellen sich zu Beginn der Arbeit mit JavaFX
Wir werden uns den Start mit JavaFX, Werkzeuge wie TestFX und Kombinationen mit CDI und Swing ansehen.
Proxy Deep Dive JUG Saxony Day 2015-10-02Sven Ruppert
Ein wenig über Proxy´s. Wer mehr Hintergrundinfos dazu haben möchte, empfehle ich das Buch von Dr. Kabutz und mir :
http://www.amazon.de/Dynamic-Proxies-Dr-Heinz-Kabutz/dp/3868021531/ref=asap_bc?ie=UTF8
At this talk we will start from the basics and come shortly to DynamicProxies, generated type-save DynamicObjectAdapterBuilder and more. We will have a deep dive to this pattern group , and I am sure you will like it ;-)
This talk is based on the german book "Dynamic Proxies" written from Dr. Heinz Kabutz and me.
Unveiling the Advantages of Agile Software Development.pdfbrainerhub1
Learn about Agile Software Development's advantages. Simplify your workflow to spur quicker innovation. Jump right in! We have also discussed the advantages.
Most important New features of Oracle 23c for DBAs and Developers. You can get more idea from my youtube channel video from https://youtu.be/XvL5WtaC20A
Neo4j - Product Vision and Knowledge Graphs - GraphSummit ParisNeo4j
Dr. Jesús Barrasa, Head of Solutions Architecture for EMEA, Neo4j
Découvrez les dernières innovations de Neo4j, et notamment les dernières intégrations cloud et les améliorations produits qui font de Neo4j un choix essentiel pour les développeurs qui créent des applications avec des données interconnectées et de l’IA générative.
Odoo ERP software
Odoo ERP software, a leading open-source software for Enterprise Resource Planning (ERP) and business management, has recently launched its latest version, Odoo 17 Community Edition. This update introduces a range of new features and enhancements designed to streamline business operations and support growth.
The Odoo Community serves as a cost-free edition within the Odoo suite of ERP systems. Tailored to accommodate the standard needs of business operations, it provides a robust platform suitable for organisations of different sizes and business sectors. Within the Odoo Community Edition, users can access a variety of essential features and services essential for managing day-to-day tasks efficiently.
This blog presents a detailed overview of the features available within the Odoo 17 Community edition, and the differences between Odoo 17 community and enterprise editions, aiming to equip you with the necessary information to make an informed decision about its suitability for your business.
E-commerce Development Services- Hornet DynamicsHornet Dynamics
For any business hoping to succeed in the digital age, having a strong online presence is crucial. We offer Ecommerce Development Services that are customized according to your business requirements and client preferences, enabling you to create a dynamic, safe, and user-friendly online store.
UI5con 2024 - Keynote: Latest News about UI5 and it’s EcosystemPeter Muessig
Learn about the latest innovations in and around OpenUI5/SAPUI5: UI5 Tooling, UI5 linter, UI5 Web Components, Web Components Integration, UI5 2.x, UI5 GenAI.
Recording:
https://www.youtube.com/live/MSdGLG2zLy8?si=INxBHTqkwHhxV5Ta&t=0
OpenMetadata Community Meeting - 5th June 2024OpenMetadata
The OpenMetadata Community Meeting was held on June 5th, 2024. In this meeting, we discussed about the data quality capabilities that are integrated with the Incident Manager, providing a complete solution to handle your data observability needs. Watch the end-to-end demo of the data quality features.
* How to run your own data quality framework
* What is the performance impact of running data quality frameworks
* How to run the test cases in your own ETL pipelines
* How the Incident Manager is integrated
* Get notified with alerts when test cases fail
Watch the meeting recording here - https://www.youtube.com/watch?v=UbNOje0kf6E
AI Fusion Buddy Review: Brand New, Groundbreaking Gemini-Powered AI AppGoogle
AI Fusion Buddy Review: Brand New, Groundbreaking Gemini-Powered AI App
👉👉 Click Here To Get More Info 👇👇
https://sumonreview.com/ai-fusion-buddy-review
AI Fusion Buddy Review: Key Features
✅Create Stunning AI App Suite Fully Powered By Google's Latest AI technology, Gemini
✅Use Gemini to Build high-converting Converting Sales Video Scripts, ad copies, Trending Articles, blogs, etc.100% unique!
✅Create Ultra-HD graphics with a single keyword or phrase that commands 10x eyeballs!
✅Fully automated AI articles bulk generation!
✅Auto-post or schedule stunning AI content across all your accounts at once—WordPress, Facebook, LinkedIn, Blogger, and more.
✅With one keyword or URL, generate complete websites, landing pages, and more…
✅Automatically create & sell AI content, graphics, websites, landing pages, & all that gets you paid non-stop 24*7.
✅Pre-built High-Converting 100+ website Templates and 2000+ graphic templates logos, banners, and thumbnail images in Trending Niches.
✅Say goodbye to wasting time logging into multiple Chat GPT & AI Apps once & for all!
✅Save over $5000 per year and kick out dependency on third parties completely!
✅Brand New App: Not available anywhere else!
✅ Beginner-friendly!
✅ZERO upfront cost or any extra expenses
✅Risk-Free: 30-Day Money-Back Guarantee!
✅Commercial License included!
See My Other Reviews Article:
(1) AI Genie Review: https://sumonreview.com/ai-genie-review
(2) SocioWave Review: https://sumonreview.com/sociowave-review
(3) AI Partner & Profit Review: https://sumonreview.com/ai-partner-profit-review
(4) AI Ebook Suite Review: https://sumonreview.com/ai-ebook-suite-review
#AIFusionBuddyReview,
#AIFusionBuddyFeatures,
#AIFusionBuddyPricing,
#AIFusionBuddyProsandCons,
#AIFusionBuddyTutorial,
#AIFusionBuddyUserExperience
#AIFusionBuddyforBeginners,
#AIFusionBuddyBenefits,
#AIFusionBuddyComparison,
#AIFusionBuddyInstallation,
#AIFusionBuddyRefundPolicy,
#AIFusionBuddyDemo,
#AIFusionBuddyMaintenanceFees,
#AIFusionBuddyNewbieFriendly,
#WhatIsAIFusionBuddy?,
#HowDoesAIFusionBuddyWorks
A Study of Variable-Role-based Feature Enrichment in Neural Models of CodeAftab Hussain
Understanding variable roles in code has been found to be helpful by students
in learning programming -- could variable roles help deep neural models in
performing coding tasks? We do an exploratory study.
- These are slides of the talk given at InteNSE'23: The 1st International Workshop on Interpretability and Robustness in Neural Software Engineering, co-located with the 45th International Conference on Software Engineering, ICSE 2023, Melbourne Australia
Takashi Kobayashi and Hironori Washizaki, "SWEBOK Guide and Future of SE Education," First International Symposium on the Future of Software Engineering (FUSE), June 3-6, 2024, Okinawa, Japan
DDS Security Version 1.2 was adopted in 2024. This revision strengthens support for long runnings systems adding new cryptographic algorithms, certificate revocation, and hardness against DoS attacks.
Hand Rolled Applicative User ValidationCode KataPhilip Schwarz
Could you use a simple piece of Scala validation code (granted, a very simplistic one too!) that you can rewrite, now and again, to refresh your basic understanding of Applicative operators <*>, <*, *>?
The goal is not to write perfect code showcasing validation, but rather, to provide a small, rough-and ready exercise to reinforce your muscle-memory.
Despite its grandiose-sounding title, this deck consists of just three slides showing the Scala 3 code to be rewritten whenever the details of the operators begin to fade away.
The code is my rough and ready translation of a Haskell user-validation program found in a book called Finding Success (and Failure) in Haskell - Fall in love with applicative functors.
Do you want Software for your Business? Visit Deuglo
Deuglo has top Software Developers in India. They are experts in software development and help design and create custom Software solutions.
Deuglo follows seven steps methods for delivering their services to their customers. They called it the Software development life cycle process (SDLC).
Requirement — Collecting the Requirements is the first Phase in the SSLC process.
Feasibility Study — after completing the requirement process they move to the design phase.
Design — in this phase, they start designing the software.
Coding — when designing is completed, the developers start coding for the software.
Testing — in this phase when the coding of the software is done the testing team will start testing.
Installation — after completion of testing, the application opens to the live server and launches!
Maintenance — after completing the software development, customers start using the software.
Artificia Intellicence and XPath Extension FunctionsOctavian Nadolu
The purpose of this presentation is to provide an overview of how you can use AI from XSLT, XQuery, Schematron, or XML Refactoring operations, the potential benefits of using AI, and some of the challenges we face.
Using Query Store in Azure PostgreSQL to Understand Query PerformanceGrant Fritchey
Microsoft has added an excellent new extension in PostgreSQL on their Azure Platform. This session, presented at Posette 2024, covers what Query Store is and the types of information you can get out of it.
E-commerce Application Development Company.pdfHornet Dynamics
Your business can reach new heights with our assistance as we design solutions that are specifically appropriate for your goals and vision. Our eCommerce application solutions can digitally coordinate all retail operations processes to meet the demands of the marketplace while maintaining business continuity.
4. @SvenRuppert
has been coding java since 1996
Projects in the field of:
•Automobile-industry
•Energy
•Finance / Leasing
•Space- Satellit-
•Government / UN / World-bank
Where?
•Europe
•Asia - from India up to Malaysia
3
6. 4
Save harbor statement
The following is intended for information purposes only. I
can not be held responsible for the overuse of effects and
animations in this presentation. If any person in this room
has a medical condition that is triggered by fast moving
objects on the screen and/or explosions, he/she should
probably better leave now…
(I got carried away by the topic.)
11. 5
The Environment @SvenRuppert
Codebase is > 13 years old
no test coverage
no dedicated refactoring budget
decrease complexity
but… lets start with the basics
14. 6
TDD with jUnit @SvenRuppert
are you using jUnit?
assume that the following would make sense.. ;-)
15. 6
TDD with jUnit @SvenRuppert
are you using jUnit?
assume that the following would make sense.. ;-)
public class Service {
public int add(int a, int b){
if(a<2){
return (a+b) * -1;
} else {
return a+b;
}
}
}
16. 6
TDD with jUnit @SvenRuppert
are you using jUnit?
assume that the following would make sense.. ;-)
public class Service {
public int add(int a, int b){
if(a<2){
return (a+b) * -1;
} else {
return a+b;
}
}
}
How many tests
you will need ?
17. 6
TDD with jUnit @SvenRuppert
are you using jUnit?
assume that the following would make sense.. ;-)
public class Service {
public int add(int a, int b){
if(a<2){
return (a+b) * -1;
} else {
return a+b;
}
}
}
How many tests
you will need ?
it depends ;-)
18. 7
TDD with jUnit @SvenRuppert
public class Service {
public int add(int a, int b){
if(a<2){
return (a+b) * -1;
} else {
return a+b;
}
}
}
How many tests
you will need ?
it depends ;-)
19. 7
TDD with jUnit @SvenRuppert
public class Service {
public int add(int a, int b){
if(a<2){
return (a+b) * -1;
} else {
return a+b;
}
}
}
How many tests
you will need ?
it depends ;-)
for line 100% coverage
20. 7
TDD with jUnit @SvenRuppert
public class Service {
public int add(int a, int b){
if(a<2){
return (a+b) * -1;
} else {
return a+b;
}
}
}
How many tests
you will need ?
it depends ;-)
for line 100% coverage 2
21. 7
TDD with jUnit @SvenRuppert
public class Service {
public int add(int a, int b){
if(a<2){
return (a+b) * -1;
} else {
return a+b;
}
}
}
How many tests
you will need ?
it depends ;-)
for line 100% coverage 2
but will this be enough?
22. 7
TDD with jUnit @SvenRuppert
public class Service {
public int add(int a, int b){
if(a<2){
return (a+b) * -1;
} else {
return a+b;
}
}
}
How many tests
you will need ?
it depends ;-)
for line 100% coverage 2
but will this be enough? No
23. 8
TDD with jUnit @SvenRuppert
public class Service {
public int add(int a, int b){
if(a<2){
return (a+b) * -1;
} else {
return a+b;
}
}
}
How many tests
you will need ?
for line 100% coverage 2
but will this be enough? No
it depends ;-)
24. 8
TDD with jUnit @SvenRuppert
public class Service {
public int add(int a, int b){
if(a<2){
return (a+b) * -1;
} else {
return a+b;
}
}
}
How many tests
you will need ?
for line 100% coverage 2
but will this be enough? No
how to find out, what will be enough?
it depends ;-)
25. 8
TDD with jUnit @SvenRuppert
public class Service {
public int add(int a, int b){
if(a<2){
return (a+b) * -1;
} else {
return a+b;
}
}
}
How many tests
you will need ?
for line 100% coverage 2
but will this be enough? No
how to find out, what will be enough?
how to find the right tests?
it depends ;-)
26. 9
TDD with jUnit @SvenRuppert
public class Service {
public int add(int a, int b){
if(a<2){
return (a+b) * -1;
} else {
return a+b;
}
}
}
How many tests
you will need ?
27. 9
TDD with jUnit @SvenRuppert
public class Service {
public int add(int a, int b){
if(a<2){
return (a+b) * -1;
} else {
return a+b;
}
}
}
How many tests
you will need ?
@Test
public void testAdd001() throws Exception {
final int add = new Service().add(0, 0);
Assertions.assertThat(add).isEqualTo(0);
}
28. 9
TDD with jUnit @SvenRuppert
public class Service {
public int add(int a, int b){
if(a<2){
return (a+b) * -1;
} else {
return a+b;
}
}
}
How many tests
you will need ?
@Test
public void testAdd001() throws Exception {
final int add = new Service().add(0, 0);
Assertions.assertThat(add).isEqualTo(0);
}
@Test
public void testAdd002() throws Exception {
final int add = new Service().add(3, 0);
Assertions.assertThat(add).isEqualTo(3);
}
33. 10
Mutation Testing @SvenRuppert
Mutation Testing is a structural testing method
we want to find a way to write "good" tests
how to find "good" tests?
let the machine find the targets
34. 10
Mutation Testing @SvenRuppert
Mutation Testing is a structural testing method
we want to find a way to write "good" tests
how to find "good" tests?
let the machine find the targets
let´s mutate it... but how?
36. 11
Mutation Testing - the Idea @SvenRuppert
a mutation is a small change in the code
37. 11
Mutation Testing - the Idea @SvenRuppert
a mutation is a small change in the code
.. small enough to be a small defect
38. 11
Mutation Testing - the Idea @SvenRuppert
a mutation is a small change in the code
.. small enough to be a small defect
P will be the program
39. 11
Mutation Testing - the Idea @SvenRuppert
a mutation is a small change in the code
.. small enough to be a small defect
P will be the program
T will be the collection of all tests / Test Suite
40. 12
Mutation Testing - the Idea @SvenRuppert
P will be the program
T will be the collection of all tests / Test Suite
41. 12
Mutation Testing - the Idea @SvenRuppert
P will be the program
T will be the collection of all tests / Test Suite
we will create a sequence of mutations / P1,P2,P3...
42. 12
Mutation Testing - the Idea @SvenRuppert
P will be the program
T will be the collection of all tests / Test Suite
we will create a sequence of mutations / P1,P2,P3...
.. Px will have only one mutation compared to P
43. 12
Mutation Testing - the Idea @SvenRuppert
P will be the program
T will be the collection of all tests / Test Suite
we will create a sequence of mutations / P1,P2,P3...
.. Px will have only one mutation compared to P
running all tests from T against Px
44. 12
Mutation Testing - the Idea @SvenRuppert
P will be the program
T will be the collection of all tests / Test Suite
we will create a sequence of mutations / P1,P2,P3...
.. Px will have only one mutation compared to P
running all tests from T against Px
green: T will kill the mutation
45. 12
Mutation Testing - the Idea @SvenRuppert
P will be the program
T will be the collection of all tests / Test Suite
we will create a sequence of mutations / P1,P2,P3...
.. Px will have only one mutation compared to P
running all tests from T against Px
green: T will kill the mutation
.. at leased one test from T will fail
46. 12
Mutation Testing - the Idea @SvenRuppert
P will be the program
T will be the collection of all tests / Test Suite
we will create a sequence of mutations / P1,P2,P3...
.. Px will have only one mutation compared to P
running all tests from T against Px
green: T will kill the mutation
.. at leased one test from T will fail
red: if all tests are green
49. 13
Mutation Testing - the Idea @SvenRuppert
if we kill k out of n mutants
-> we are not good enough ;-)
50. 13
Mutation Testing - the Idea @SvenRuppert
if we kill k out of n mutants
-> we are not good enough ;-)
we are perfect enough if we are reaching : k == n
51. 13
Mutation Testing - the Idea @SvenRuppert
if we kill k out of n mutants
-> we are not good enough ;-)
we are perfect enough if we are reaching : k == n
how to create all versions of Px ?
52. 13
Mutation Testing - the Idea @SvenRuppert
if we kill k out of n mutants
-> we are not good enough ;-)
we are perfect enough if we are reaching : k == n
how to create all versions of Px ?
.. the good thing..
53. 13
Mutation Testing - the Idea @SvenRuppert
if we kill k out of n mutants
-> we are not good enough ;-)
we are perfect enough if we are reaching : k == n
how to create all versions of Px ?
.. the good thing..
we could almost generate/
automate everything
59. 14
Mutation Testing @SvenRuppert
generating the mutants and
practical TDD with Mutation Testing
running all junit tests
check the reports
write more / better tests
loop until quality target reached
62. 15
Mutation Testing @SvenRuppert
mutants are a good approach / model to estimate
the default rate of defects per 1k lines of the P
estimate that:
the defects are independent
63. 15
Mutation Testing @SvenRuppert
mutants are a good approach / model to estimate
the default rate of defects per 1k lines of the P
estimate that:
the defects are independent normaly ;-)
66. 16
Mutation Testing @SvenRuppert
no need to know that Mutation Testing will be done,
independend creation of T
for K==n
we need a high number of mutants ( P1, P2, .., Px)
67. 16
Mutation Testing @SvenRuppert
no need to know that Mutation Testing will be done,
independend creation of T
for K==n
we need a high number of mutants ( P1, P2, .., Px)
.. mostly it will lead into exponential numbers of Px
68. 16
Mutation Testing @SvenRuppert
no need to know that Mutation Testing will be done,
independend creation of T
for K==n
we need a high number of mutants ( P1, P2, .., Px)
.. mostly it will lead into exponential numbers of Px
.. how to find YOUR barrier you
have to reach?
69. 16
Mutation Testing @SvenRuppert
no need to know that Mutation Testing will be done,
independend creation of T
for K==n
we need a high number of mutants ( P1, P2, .., Px)
.. mostly it will lead into exponential numbers of Px
.. how to find YOUR barrier you
have to reach?
but.. what is a mutation?
70. 17
Mutation Testing - Kinds of Mutation @SvenRuppert
but.. what is a mutation?
Value Mutation
changing constants,
loop bounds (adding/subtracting values)
71. 18
Mutation Testing - Kinds of Mutation @SvenRuppert
but.. what is a mutation?
Value Mutation
Decision Mutation
for example < will be changed to <=
72. 19
Mutation Testing - Kinds of Mutation @SvenRuppert
but.. what is a mutation?
Value Mutation Decision Mutation
for example swapping/deleting/duplicating
lines of code
Statement Mutation
73. 20
Mutation Testing - Kinds of Mutation @SvenRuppert
but.. what is a mutation?
Value Mutation Decision Mutation
Statement Mutation
74. 20
Mutation Testing - Kinds of Mutation @SvenRuppert
but.. what is a mutation?
Value Mutation Decision Mutation
Statement Mutation
for Java you could think about more
language spec. mutations
75. 20
Mutation Testing - Kinds of Mutation @SvenRuppert
but.. what is a mutation?
Value Mutation Decision Mutation
Statement Mutation
for Java you could think about more
language spec. mutations
.. changing modifiers
76. 20
Mutation Testing - Kinds of Mutation @SvenRuppert
but.. what is a mutation?
Value Mutation Decision Mutation
Statement Mutation
for Java you could think about more
language spec. mutations
.. changing modifiers
.. changing between static / non static
77. 20
Mutation Testing - Kinds of Mutation @SvenRuppert
but.. what is a mutation?
Value Mutation Decision Mutation
Statement Mutation
for Java you could think about more
language spec. mutations
.. changing modifiers
.. changing between static / non static
.. delete member initialization
78. 20
Mutation Testing - Kinds of Mutation @SvenRuppert
but.. what is a mutation?
Value Mutation Decision Mutation
Statement Mutation
for Java you could think about more
language spec. mutations
.. changing modifiers
.. changing between static / non static
.. delete member initialization
.. delete this.
79. 20
Mutation Testing - Kinds of Mutation @SvenRuppert
but.. what is a mutation?
Value Mutation Decision Mutation
Statement Mutation
for Java you could think about more
language spec. mutations
.. changing modifiers
.. changing between static / non static
.. delete member initialization
.. delete this.
.. argument order change
81. 21
Mutation Testing - in short words @SvenRuppert
mutation testing is an add on to normal jUnit TDD
82. 21
Mutation Testing - in short words @SvenRuppert
mutation testing is an add on to normal jUnit TDD
tools are supporting it well
83. 21
Mutation Testing - in short words @SvenRuppert
mutation testing is an add on to normal jUnit TDD
tools are supporting it well
generating and running all tests are time consuming
84. 21
Mutation Testing - in short words @SvenRuppert
mutation testing is an add on to normal jUnit TDD
tools are supporting it well
generating and running all tests are time consuming
but most important
85. 21
Mutation Testing - in short words @SvenRuppert
mutation testing is an add on to normal jUnit TDD
tools are supporting it well
generating and running all tests are time consuming
but most important
will effect your project structure
88. 22
Mutation Testing - Frameworks @SvenRuppert
muJava
2003. First released as JMutation (Java Mutation System).
2004. The name was changed to MuJava (Mutation System for Java).
2005. Software Copyright Registration, ALL RIGHTS RESERVED.
2005. Version 2 released with several fault fixes and modified mutation operators.
2008. Version 3 released with minimal support for Java 1.5 and 1.6.
2013. Version 4 released to support JUnit tests and Java 1.6 language features, including generics,
annotations, enumerations, varargs, enhanced for-each loops, and static imports.
2015. Additional and improved error messages. Bug fixes for OpenJava. Licensing changed to the
Apache license.
89. 22
Mutation Testing - Frameworks @SvenRuppert
muJava
2003. First released as JMutation (Java Mutation System).
2004. The name was changed to MuJava (Mutation System for Java).
2005. Software Copyright Registration, ALL RIGHTS RESERVED.
2005. Version 2 released with several fault fixes and modified mutation operators.
2008. Version 3 released with minimal support for Java 1.5 and 1.6.
2013. Version 4 released to support JUnit tests and Java 1.6 language features, including generics,
annotations, enumerations, varargs, enhanced for-each loops, and static imports.
2015. Additional and improved error messages. Bug fixes for OpenJava. Licensing changed to the
Apache license.
https://cs.gmu.edu/~offutt/mujava/
https://github.com/jeffoffutt/muJava/graphs/contributors
90. 22
Mutation Testing - Frameworks @SvenRuppert
muJava
2003. First released as JMutation (Java Mutation System).
2004. The name was changed to MuJava (Mutation System for Java).
2005. Software Copyright Registration, ALL RIGHTS RESERVED.
2005. Version 2 released with several fault fixes and modified mutation operators.
2008. Version 3 released with minimal support for Java 1.5 and 1.6.
2013. Version 4 released to support JUnit tests and Java 1.6 language features, including generics,
annotations, enumerations, varargs, enhanced for-each loops, and static imports.
2015. Additional and improved error messages. Bug fixes for OpenJava. Licensing changed to the
Apache license.
https://cs.gmu.edu/~offutt/mujava/
https://github.com/jeffoffutt/muJava/graphs/contributors
inactive
92. 23
Mutation Testing - Frameworks @SvenRuppert
2012. started around 2012 with a small codebase.
2014. very active since 2014
93. 23
Mutation Testing - Frameworks @SvenRuppert
2012. started around 2012 with a small codebase.
2014. very active since 2014
http://pitest.org/
94. 23
Mutation Testing - Frameworks @SvenRuppert
2012. started around 2012 with a small codebase.
2014. very active since 2014
http://pitest.org/
active ;-)
96. 24
Mutation Testing - Hello World @SvenRuppert
http://pitest.org/
assume the following would make sense ;-)
97. 24
Mutation Testing - Hello World @SvenRuppert
http://pitest.org/
assume the following would make sense ;-)
public class Service {
public int add(int a, int b){
if (a<2) {
return (a+b) * -1;
} else {
return a+b;
}
}
}
98. 25
Mutation Testing - Hello World @SvenRuppert
public class Service {
public int add(int a, int b){
if (a<2) {
return (a+b) * -1;
} else {
return a+b;
}
}
}
99. 25
Mutation Testing - Hello World @SvenRuppert
public class Service {
public int add(int a, int b){
if (a<2) {
return (a+b) * -1;
} else {
return a+b;
}
}
} how many test you will need for..
100. 25
Mutation Testing - Hello World @SvenRuppert
public class Service {
public int add(int a, int b){
if (a<2) {
return (a+b) * -1;
} else {
return a+b;
}
}
} how many test you will need for..
100% Line Coverage… and…
101. 25
Mutation Testing - Hello World @SvenRuppert
public class Service {
public int add(int a, int b){
if (a<2) {
return (a+b) * -1;
} else {
return a+b;
}
}
} how many test you will need for..
100% Line Coverage… and… to be save ?
102. 25
Mutation Testing - Hello World @SvenRuppert
public class Service {
public int add(int a, int b){
if (a<2) {
return (a+b) * -1;
} else {
return a+b;
}
}
} how many test you will need for..
100% Line Coverage… and… to be save ?
2 for Line Coverage
103. 25
Mutation Testing - Hello World @SvenRuppert
public class Service {
public int add(int a, int b){
if (a<2) {
return (a+b) * -1;
} else {
return a+b;
}
}
} how many test you will need for..
100% Line Coverage… and… to be save ?
2 for Line Coverage we will see ;-)
104. 26
Mutation Testing - Hello World @SvenRuppert
public class Service {
public int add(int a, int b){
if (a<2) {
return (a+b) * -1;
} else {
return a+b;
}
}
}
100% Line Coverage… and…
105. 26
Mutation Testing - Hello World @SvenRuppert
public class Service {
public int add(int a, int b){
if (a<2) {
return (a+b) * -1;
} else {
return a+b;
}
}
}
100% Line Coverage… and…
we have one if statement
106. 26
Mutation Testing - Hello World @SvenRuppert
public class Service {
public int add(int a, int b){
if (a<2) {
return (a+b) * -1;
} else {
return a+b;
}
}
}
100% Line Coverage… and…
we have one if statement with an else branch
107. 26
Mutation Testing - Hello World @SvenRuppert
public class Service {
public int add(int a, int b){
if (a<2) {
return (a+b) * -1;
} else {
return a+b;
}
}
}
100% Line Coverage… and…
we have one if statement with an else branch
this will lead to 2 jUnit Tests to get 100 %
108. 27
Mutation Testing - Hello World @SvenRuppert
public class Service {
public int add(int a, int b){
if (a<2) { return (a+b) * -1; }
else { return a+b; }
}
} 100% Line Coverage… and…
109. 27
Mutation Testing - Hello World @SvenRuppert
public class Service {
public int add(int a, int b){
if (a<2) { return (a+b) * -1; }
else { return a+b; }
}
} 100% Line Coverage… and…
@Test
public void testAdd001() throws Exception {
final int add = new Service().add(0, 0);
Assertions.assertThat(add).isEqualTo(0);
}
110. 27
Mutation Testing - Hello World @SvenRuppert
public class Service {
public int add(int a, int b){
if (a<2) { return (a+b) * -1; }
else { return a+b; }
}
} 100% Line Coverage… and…
@Test
public void testAdd001() throws Exception {
final int add = new Service().add(0, 0);
Assertions.assertThat(add).isEqualTo(0);
}
@Test
public void testAdd002() throws Exception {
final int add = new Service().add(3, 0);
Assertions.assertThat(add).isEqualTo(3);
}
111. 28
Mutation Testing - Hello World @SvenRuppert
final int add = new Service().add(0, 0);
Assertions.assertThat(add).isEqualTo(0);
final int add = new Service().add(3, 0);
Assertions.assertThat(add).isEqualTo(3);
112. 28
Mutation Testing - Hello World @SvenRuppert
final int add = new Service().add(0, 0);
Assertions.assertThat(add).isEqualTo(0);
final int add = new Service().add(3, 0);
Assertions.assertThat(add).isEqualTo(3);
113. 28
Mutation Testing - Hello World @SvenRuppert
final int add = new Service().add(0, 0);
Assertions.assertThat(add).isEqualTo(0);
final int add = new Service().add(3, 0);
Assertions.assertThat(add).isEqualTo(3);
114. 29
Mutation Testing - Hello World @SvenRuppert
final int add = new Service().add(0, 0);
Assertions.assertThat(add).isEqualTo(0);
final int add = new Service().add(3, 0);
Assertions.assertThat(add).isEqualTo(3);
115. 29
Mutation Testing - Hello World @SvenRuppert
final int add = new Service().add(0, 0);
Assertions.assertThat(add).isEqualTo(0);
final int add = new Service().add(3, 0);
Assertions.assertThat(add).isEqualTo(3);
we got 100% Line Coverage
116. 29
Mutation Testing - Hello World @SvenRuppert
final int add = new Service().add(0, 0);
Assertions.assertThat(add).isEqualTo(0);
final int add = new Service().add(3, 0);
Assertions.assertThat(add).isEqualTo(3);
we got 100% Line Coverage
How good these tests are?
117. 29
Mutation Testing - Hello World @SvenRuppert
final int add = new Service().add(0, 0);
Assertions.assertThat(add).isEqualTo(0);
final int add = new Service().add(3, 0);
Assertions.assertThat(add).isEqualTo(3);
we got 100% Line Coverage
How good these tests are?
How to measure if these test are good?
118. 29
Mutation Testing - Hello World @SvenRuppert
final int add = new Service().add(0, 0);
Assertions.assertThat(add).isEqualTo(0);
final int add = new Service().add(3, 0);
Assertions.assertThat(add).isEqualTo(3);
we got 100% Line Coverage
How good these tests are?
How to measure if these test are good?
How to find the good tests?
119. 30
Mutation Testing - Hello World @SvenRuppert
final int add = new Service().add(0, 0);
final int add = new Service().add(3, 0);
How to find the good tests?
120. 30
Mutation Testing - Hello World @SvenRuppert
final int add = new Service().add(0, 0);
final int add = new Service().add(3, 0);
How to find the good tests?
let´s generate a the mutation report
121. 30
Mutation Testing - Hello World @SvenRuppert
final int add = new Service().add(0, 0);
final int add = new Service().add(3, 0);
How to find the good tests?
let´s generate a the mutation report
with maven : pitest: mutationCoverage
122. 30
Mutation Testing - Hello World @SvenRuppert
final int add = new Service().add(0, 0);
final int add = new Service().add(3, 0);
How to find the good tests?
let´s generate a the mutation report
with maven : pitest: mutationCoverage
>> Generated 54 mutations
123. 30
Mutation Testing - Hello World @SvenRuppert
final int add = new Service().add(0, 0);
final int add = new Service().add(3, 0);
How to find the good tests?
let´s generate a the mutation report
with maven : pitest: mutationCoverage
>> Generated 54 mutations Killed 3 (6%)
124. 30
Mutation Testing - Hello World @SvenRuppert
final int add = new Service().add(0, 0);
final int add = new Service().add(3, 0);
How to find the good tests?
let´s generate a the mutation report
with maven : pitest: mutationCoverage
>> Generated 54 mutations
org.pitest……mutators.ConditionalsBoundaryMutator
Killed 3 (6%)
125. 30
Mutation Testing - Hello World @SvenRuppert
final int add = new Service().add(0, 0);
final int add = new Service().add(3, 0);
How to find the good tests?
let´s generate a the mutation report
with maven : pitest: mutationCoverage
>> Generated 54 mutations
org.pitest……mutators.ConditionalsBoundaryMutator
org.pitest……mutators.IncrementsMutator
Killed 3 (6%)
126. 30
Mutation Testing - Hello World @SvenRuppert
final int add = new Service().add(0, 0);
final int add = new Service().add(3, 0);
How to find the good tests?
let´s generate a the mutation report
with maven : pitest: mutationCoverage
>> Generated 54 mutations
org.pitest……mutators.ConditionalsBoundaryMutator
org.pitest……mutators.IncrementsMutator
org.pitest……mutators.ReturnValsMutator
Killed 3 (6%)
127. 30
Mutation Testing - Hello World @SvenRuppert
final int add = new Service().add(0, 0);
final int add = new Service().add(3, 0);
How to find the good tests?
let´s generate a the mutation report
with maven : pitest: mutationCoverage
>> Generated 54 mutations
org.pitest……mutators.ConditionalsBoundaryMutator
org.pitest……mutators.IncrementsMutator
org.pitest……mutators.ReturnValsMutator
org.pitest……mutators.MathMutator
Killed 3 (6%)
128. 30
Mutation Testing - Hello World @SvenRuppert
final int add = new Service().add(0, 0);
final int add = new Service().add(3, 0);
How to find the good tests?
let´s generate a the mutation report
with maven : pitest: mutationCoverage
>> Generated 54 mutations
org.pitest……mutators.ConditionalsBoundaryMutator
org.pitest……mutators.IncrementsMutator
org.pitest……mutators.ReturnValsMutator
org.pitest……mutators.MathMutator
org.pitest……mutators.NegateConditionalsMutator
Killed 3 (6%)
129. 31
Mutation Testing - Hello World @SvenRuppert
final int add = new Service().add(0, 0);
final int add = new Service().add(3, 0);
>> Generated 54 mutations Killed 3 (6%)
130. 31
Mutation Testing - Hello World @SvenRuppert
final int add = new Service().add(0, 0);
final int add = new Service().add(3, 0);
>> Generated 54 mutations Killed 3 (6%)
131. 31
Mutation Testing - Hello World @SvenRuppert
final int add = new Service().add(0, 0);
final int add = new Service().add(3, 0);
>> Generated 54 mutations Killed 3 (6%)
132. 32
Mutation Testing - Hello World @SvenRuppert
final int add = new Service().add(0, 0);
final int add = new Service().add(3, 0);
>> Generated 54 mutations Killed 3
133. 32
Mutation Testing - Hello World @SvenRuppert
final int add = new Service().add(0, 0);
final int add = new Service().add(3, 0);
>> Generated 54 mutations Killed 3
134. 32
Mutation Testing - Hello World @SvenRuppert
final int add = new Service().add(0, 0);
final int add = new Service().add(3, 0);
>> Generated 54 mutations Killed 3
135. Killed 3
33
Mutation Testing - Hello World @SvenRuppert
final int add = new Service().add(0, 0);
final int add = new Service().add(3, 0);
>> Generated 54 mutations
136. Killed 3
33
Mutation Testing - Hello World @SvenRuppert
final int add = new Service().add(0, 0);
final int add = new Service().add(3, 0);
>> Generated 54 mutations
final int add = new Service().add(2, 0);
137. 33
Mutation Testing - Hello World @SvenRuppert
final int add = new Service().add(0, 0);
final int add = new Service().add(3, 0);
>> Generated 54 mutations
final int add = new Service().add(2, 0);
138. Killed 4
33
Mutation Testing - Hello World @SvenRuppert
final int add = new Service().add(0, 0);
final int add = new Service().add(3, 0);
>> Generated 54 mutations
final int add = new Service().add(2, 0);
139. Killed 4
33
Mutation Testing - Hello World @SvenRuppert
final int add = new Service().add(0, 0);
final int add = new Service().add(3, 0);
>> Generated 54 mutations
final int add = new Service().add(2, 0);
140. Killed 4
33
Mutation Testing - Hello World @SvenRuppert
final int add = new Service().add(0, 0);
final int add = new Service().add(3, 0);
>> Generated 54 mutations
final int add = new Service().add(2, 0);
141. Killed 4
33
Mutation Testing - Hello World @SvenRuppert
final int add = new Service().add(0, 0);
final int add = new Service().add(3, 0);
>> Generated 54 mutations
final int add = new Service().add(2, 0);
142. Killed 4
33
Mutation Testing - Hello World @SvenRuppert
final int add = new Service().add(0, 0);
>> Generated 54 mutations
final int add = new Service().add(2, 0);
143. Killed 4
33
Mutation Testing - Hello World @SvenRuppert
>> Generated 54 mutations
final int add = new Service().add(2, 0);
144. Killed 4
34
Mutation Testing - Hello World @SvenRuppert
>> Generated 54 mutations
final int add = new Service().add(2, 0);
145. Killed 4
34
Mutation Testing - Hello World @SvenRuppert
>> Generated 54 mutations
final int add = new Service().add(2, 0);
final int add = new Service().add(1, 1);
146. 34
Mutation Testing - Hello World @SvenRuppert
>> Generated 54 mutations
final int add = new Service().add(2, 0);
final int add = new Service().add(1, 1);
147. Killed 5
34
Mutation Testing - Hello World @SvenRuppert
>> Generated 54 mutations
final int add = new Service().add(2, 0);
final int add = new Service().add(1, 1);
148. Killed 5
34
Mutation Testing - Hello World @SvenRuppert
>> Generated 54 mutations
final int add = new Service().add(2, 0);
final int add = new Service().add(1, 1);
killed 9:1
149. Killed 5
35
Mutation Testing - Hello World @SvenRuppert
>> Generated 54 mutations
final int add = new Service().add(2, 0);
final int add = new Service().add(1, 1);
killed 9:1
150. Killed 5
35
Mutation Testing - Hello World @SvenRuppert
>> Generated 54 mutations
final int add = new Service().add(2, 0);
final int add = new Service().add(1, 1);
killed 9:1
final int add = new Service().add(2, 2);
151. 35
Mutation Testing - Hello World @SvenRuppert
>> Generated 54 mutations
final int add = new Service().add(2, 0);
final int add = new Service().add(1, 1);
killed 9:1
final int add = new Service().add(2, 2);
152. Killed 6
35
Mutation Testing - Hello World @SvenRuppert
>> Generated 54 mutations
final int add = new Service().add(2, 0);
final int add = new Service().add(1, 1);
killed 9:1
final int add = new Service().add(2, 2);
153. Killed 6
35
Mutation Testing - Hello World @SvenRuppert
>> Generated 54 mutations
final int add = new Service().add(2, 0);
final int add = new Service().add(1, 1);
killed 9:1
final int add = new Service().add(2, 2);
154. Killed 6
35
Mutation Testing - Hello World @SvenRuppert
>> Generated 54 mutations
final int add = new Service().add(2, 0);
final int add = new Service().add(1, 1);
killed 9:1
final int add = new Service().add(2, 2);
155. Killed 6
35
Mutation Testing - Hello World @SvenRuppert
>> Generated 54 mutations
final int add = new Service().add(2, 0);
final int add = new Service().add(1, 1);
final int add = new Service().add(2, 2);
killed 11:1
156. Killed 6
35
Mutation Testing - Hello World @SvenRuppert
>> Generated 54 mutations
final int add = new Service().add(1, 1);
final int add = new Service().add(2, 2);
killed 11:1
157. Killed 6
36
Mutation Testing - Hello World @SvenRuppert
>> Generated 54 mutations
final int add = new Service().add(1, 1);
final int add = new Service().add(2, 2);
158. Killed 6
36
Mutation Testing - Hello World @SvenRuppert
>> Generated 54 mutations
final int add = new Service().add(1, 1);
final int add = new Service().add(2, 2);
160. 37
Mutation Testing - Lesson Learned @SvenRuppert
mutation tests are often leading to
161. 37
Mutation Testing - Lesson Learned @SvenRuppert
mutation tests are often leading to
…cleaner code compared to jUnit only
162. 37
Mutation Testing - Lesson Learned @SvenRuppert
mutation tests are often leading to
…cleaner code compared to jUnit only
… smaller modules (shorter mutation runtime)
163. 37
Mutation Testing - Lesson Learned @SvenRuppert
mutation tests are often leading to
…cleaner code compared to jUnit only
… smaller modules (shorter mutation runtime)
and something nice…
helps to find useless code
168. 39
Mutation Testing - How to start @SvenRuppert
you need jUnit - to generate the reference
169. 39
Mutation Testing - How to start @SvenRuppert
you need jUnit - to generate the reference
add the pitest-plugin to the build section
170. 39
Mutation Testing - How to start @SvenRuppert
you need jUnit - to generate the reference
add the pitest-plugin to the build section
configure the plugin
171. 39
Mutation Testing - How to start @SvenRuppert
you need jUnit - to generate the reference
add the pitest-plugin to the build section
configure the plugin
generate the reference -> clean , install
172. 39
Mutation Testing - How to start @SvenRuppert
you need jUnit - to generate the reference
add the pitest-plugin to the build section
configure the plugin
generate the reference -> clean , install
run pitest: mutationCoverage
173. 39
Mutation Testing - How to start @SvenRuppert
you need jUnit - to generate the reference
add the pitest-plugin to the build section
configure the plugin
generate the reference -> clean , install
run pitest: mutationCoverage
report will be under target/pit-reports
178. 42
Mutation Testing - practical usage @SvenRuppert
Start with some tests
generate the pitest report
179. 42
Mutation Testing - practical usage @SvenRuppert
Start with some tests
generate the pitest report
write more tests to kill mutations
180. 42
Mutation Testing - practical usage @SvenRuppert
Start with some tests
generate the pitest report
write more tests to kill mutations
if you have time, eliminate useless tests
181. 42
Mutation Testing - practical usage @SvenRuppert
Start with some tests
generate the pitest report
write more tests to kill mutations
if you have time, eliminate useless tests
do it one by one
182. 42
Mutation Testing - practical usage @SvenRuppert
Mutation 001
Mutation 002
Mutation 003
Mutation 004 Survived
Survived
Survived
Survived
Start with some tests
generate the pitest report
write more tests to kill mutations
if you have time, eliminate useless tests
do it one by one
183. 42
Mutation Testing - practical usage @SvenRuppert
Mutation 001
Mutation 002
Mutation 003
Mutation 004 Survived
Killed
Survived
Survived
Survived
Killed
Killed
Killed
Start with some tests
generate the pitest report
write more tests to kill mutations
if you have time, eliminate useless tests
do it one by one
184. Summary
43
@SvenRuppert
If you are interested…
have a look at GITHUB
ProxyBuilder
Dynamic-Dependency-Injection
Java-Microservice
or contact me ;-) @SvenRuppert
185. Summary
43
@SvenRuppert
If you are interested…
have a look at GITHUB
ProxyBuilder
Dynamic-Dependency-Injection
Java-Microservice
or contact me ;-) @SvenRuppert
Thank You !!!