This document summarizes an presentation on advanced testing techniques. It discusses refactoring test code for improved readability, including using logical grouping and custom assertions. It also covers best practices for test naming conventions and avoiding common pitfalls. The presentation shows how integrating testing frameworks can enable features like data-driven and concurrent testing. Results from refactoring showed reductions in test code size and execution time along with resolving issues.
Gallio is a test automation platform that aims to provide integration between different testing frameworks. It started as a spin-off from MbUnit, a testing framework. Gallio uses a common object model and supports many workflows to unite various testing tools, rather than control them. Implementation challenges include dealing with hostile test code, differences between how frameworks define tests, and mismatches between extensibility models of tools. Gallio's architecture includes abstract test and reflection models to enable polymorphism between frameworks.
Quality assurance and testing are very important in a life cycle of any application. Although, by far not all developers understand the significance of tests.
In this presentation, we cover the basic testing practices for developers. The following tools are discussed: JUnit, Mockito, Hamcrest, JsTestDriver, DBUnit, Arquillian, SoapUI, Selenium.
This document discusses unit testing in Java. It introduces unit testing and the JUnit framework. It explains how to set up a testing environment in Eclipse and describes best practices for writing unit tests. These include avoiding conditional logic and loops, using descriptive method and assertion names, and separating tests by type. Advantages of unit testing include speed, isolation, safety when refactoring, and serving as documentation. Disadvantages include potential high maintenance costs from unnecessary tests. Similar testing frameworks exist for other languages like C#, C++, and Python.
This presentation describes the results published in the following paper published in the Journal INFORMATION AND SOFTWARE TECHNOLOGY
TITLE: A Large Scale Empirical Comparison of State-of-the-art Search-based Test Case Generators
AUTHORS: Annibale Panichella, Fitsum Kifetew, Paolo Tonella
ABSTRACT: Context: Replication studies and experiments form an important foundation in advancing scientific research. While their prevalence in Software Engineering is increasing, there is still more to be done. Objective: This article aims to extend our previous replication study on search-based test generation techniques by performing a large-scale empirical comparison with further techniques from state of the art. Method: We designed a comprehensive experimental study involving six techniques, a benchmark composed of 180 non-trivial Java classes, and a total of 21,600 independent executions. Metrics regarding the effectiveness and efficiency of the techniques were collected and analyzed by means of statistical methods. Results: Our empirical study shows that single-target approaches are generally outperformed by multi-target approaches, while within the multi-target approaches, DynaMOSA/MOSA, which are based on many-objective optimization, outperform the others, in particular for complex classes. Conclusion: The results obtained from our large-scale empirical investigation con rm what has been reported in previous studies, while also highlighting striking differences and novel observations. Future studies, on different benchmarks and considering additional techniques, could further reinforce and extend our findings.
Gallio is a test automation platform that aims to provide integration between different testing frameworks. It started as a spin-off from MbUnit, a testing framework. Gallio uses a common object model and supports many workflows to unite various testing tools, rather than control them. Implementation challenges include dealing with hostile test code, differences between how frameworks define tests, and mismatches between extensibility models of tools. Gallio's architecture includes abstract test and reflection models to enable polymorphism between frameworks.
Quality assurance and testing are very important in a life cycle of any application. Although, by far not all developers understand the significance of tests.
In this presentation, we cover the basic testing practices for developers. The following tools are discussed: JUnit, Mockito, Hamcrest, JsTestDriver, DBUnit, Arquillian, SoapUI, Selenium.
This document discusses unit testing in Java. It introduces unit testing and the JUnit framework. It explains how to set up a testing environment in Eclipse and describes best practices for writing unit tests. These include avoiding conditional logic and loops, using descriptive method and assertion names, and separating tests by type. Advantages of unit testing include speed, isolation, safety when refactoring, and serving as documentation. Disadvantages include potential high maintenance costs from unnecessary tests. Similar testing frameworks exist for other languages like C#, C++, and Python.
This presentation describes the results published in the following paper published in the Journal INFORMATION AND SOFTWARE TECHNOLOGY
TITLE: A Large Scale Empirical Comparison of State-of-the-art Search-based Test Case Generators
AUTHORS: Annibale Panichella, Fitsum Kifetew, Paolo Tonella
ABSTRACT: Context: Replication studies and experiments form an important foundation in advancing scientific research. While their prevalence in Software Engineering is increasing, there is still more to be done. Objective: This article aims to extend our previous replication study on search-based test generation techniques by performing a large-scale empirical comparison with further techniques from state of the art. Method: We designed a comprehensive experimental study involving six techniques, a benchmark composed of 180 non-trivial Java classes, and a total of 21,600 independent executions. Metrics regarding the effectiveness and efficiency of the techniques were collected and analyzed by means of statistical methods. Results: Our empirical study shows that single-target approaches are generally outperformed by multi-target approaches, while within the multi-target approaches, DynaMOSA/MOSA, which are based on many-objective optimization, outperform the others, in particular for complex classes. Conclusion: The results obtained from our large-scale empirical investigation con rm what has been reported in previous studies, while also highlighting striking differences and novel observations. Future studies, on different benchmarks and considering additional techniques, could further reinforce and extend our findings.
TDD is a design technique where tests are written before code to determine requirements. The Red-Green-Refactor process is followed: 1) Write a test that fails (red), 2) Write minimum code to pass the test (green), 3) Refactor code. TDD ensures quality, keeps code simple and testable, and allows for rapid change. Writing tests first helps design by clarifying requirements and preventing bugs.
JUnit is a unit testing framework for Java programming language. It was originally written by Kent Beck and Erich Gamma. Some key points:
- JUnit was one of the first unit testing frameworks for Java and has become the de facto standard.
- It allows writing and running repeatable tests to help find and prevent bugs. Tests are written in plain Java classes and methods.
- JUnit provides annotations like @Test, @Before, @After to identify test methods and set up/tear down methods.
- It includes assertions for validations and will report failures immediately. Tests can be organized into test suites.
JUnit is an open source unit testing framework for Java applications. It was written by Erich Gamma and Kent Beck and is part of the xUnit family of unit testing frameworks. JUnit allows developers to write test cases that test individual classes and methods. These test cases can be grouped into test suites and run automatically to ensure code meets requirements and to catch errors early in the development process. JUnit includes annotations like @Test to identify test methods and asserts to validate method output. It integrates with development tools like Eclipse to provide test results.
Test-driven development (TDD) is a software development process that relies on the repetition of short development cycles called the TDD cycle. The TDD cycle involves first writing a test case that defines a desired improvement or new function, then producing code to pass that test and finally refactoring the new code to acceptable standards. The document discusses TDD training which includes topics like fixtures, assertion patterns, test quality and a case study. It motivates TDD by explaining how it helps build quality code, improves maintainability and meets client needs by focusing on internal and external quality. Key aspects of TDD like the AAA test format and strategies for selecting the next test are also covered. Finally, the document reviews evidence from case
Automated Repair of Feature Interaction Failures in Automated Driving SystemsLionel Briand
The document describes an approach called ARIEL for automatically repairing feature interaction failures in automated driving systems. ARIEL uses a customized genetic programming algorithm that leverages fault localization weighted by test failure severity and generates patches through threshold changes and condition reordering. An evaluation on two industrial case studies found ARIEL outperformed baselines in fully repairing the systems within 16 hours. Domain experts judged the synthesized patches to be valid, understandable, useful and superior to what could be produced manually.
CppUnit is a unit testing framework for C++ that was originally ported from JUnit. The document discusses using CppUnit framework classes like TestCase, TestRunner, and TestFixture for unit testing. It also covers integrating CppUnit into the build process and using helper macros to minimize coding errors when creating tests.
This document discusses various techniques for unit testing in Java with JUnit, including naming tests clearly, using Hamcrest matchers for assertions, writing parameterized tests, using JUnit rules, and measuring code coverage. It provides examples of how to write tests that follow best practices and leverage JUnit's capabilities for parameterized testing, timeouts, error collection, and more. It also discusses running tests in parallel and measuring code coverage in IDEs like IntelliJ and Eclipse.
OSGi Applications Testing - André Elia Assad, System Engineer, Cesarmfrancis
This document discusses testing OSGi applications. It introduces the OSGi test harness, which includes a test director bundle and target test bundles. The test director manages test suites and targets, while targets run tests on devices under test. The document also covers how the OSGi test framework relates to JUnit, guidelines for writing OSGi test cases focusing on robustness and performance, and common testing patterns like unit testing, bundle testing, and service contract testing. In conclusion, it notes that compliance programs cannot completely cover specifications and that OSGi testing focuses on functionality over robustness and usability.
Unit testing patterns for concurrent codeDror Helper
Getting started with unit testing is not hard, the only problem is that most programs are more than a simple calculator with two parameters and a returns value that is easy to verify.
Writing unit tests for multi-threaded code is harder still.
Over the years I discovered useful patterns that helped me to test multi-threaded and asynchronous code and enabled the creation of deterministic, simple and robust unit tests.
Come learn how to test code that uses concurrency and parallelism – so that the excuses of not writing unit tests for such code would become as obsolete as a single core processors.
This document discusses best practices for writing unit tests. It emphasizes that unit tests should be easy to understand, trustworthy, and robust. A good unit test only fails if a bug is introduced or requirements change. The document provides examples of well-written unit tests and discusses how to avoid common problems like fragile tests. It stresses the importance of testing only specified functionality, using isolation frameworks to mock dependencies, and not putting test logic in the test. Overall, the document promotes writing "clean tests" to avoid brittle tests and minimize maintenance overhead.
Next Generation Developer Testing: Parameterized TestingTao Xie
The document discusses parameterized unit testing (PUT) as an improvement over conventional unit tests (CUTs). PUTs separate test specifications from test data generation, addressing issues with CUTs like low fault detection and redundant tests. PUTs can be represented as universally quantified conditional axioms. Major steps to retrofit CUTs to PUTs include parameterizing values, generalizing test oracles, and adding assumptions. Examples demonstrate how a CUT can be generalized to a PUT to improve test coverage. Parameterized testing is now supported by various frameworks like JUnit and Visual Studio.
Unit Testing: The Whys, Whens and Hows discusses unit testing definitions, benefits, and best practices. It covers:
- Defining what constitutes a unit test and different testing styles. Unit tests should be written by developers, run fast, be deterministic, and not integrate multiple areas of code.
- Benefits of unit testing include better code quality, a safety net for refactoring, documentation of functionality, and preventing code from becoming untestable.
- Characteristics of good unit tests like being functionally correct, running independently, running fast, and adding new tests for bugs fixed. Good code is more unit testable through interfaces, contracts, and low dependencies.
JUnit is the de facto standard in Java testing. Yet many advanced JUnit features are little known and poorly understood. This session reviews some lesser-known features of JUnit, along with a few associated libraries, that can make your unit tests more powerful, expressive, and fun. The session is intended for Java developers, lead developers, and architects trying to introduce good testing practices into their teams.
Need(le) for Speed - Effective Unit Testing for Java EEhwilming
Needle is a lightweight framework for testing Java EE components outside of the container in isolation. It reduces the test setup code by analysing dependencies and automatic injection of mock objects. It will thus maximize the speed of development as well as the execution of unit tests.
The document discusses unit testing in Java. It introduces the JUnit testing framework and describes unit testing methodology, including how to design testable code, write maintainable tests, and handle indirect inputs and outputs through stubs and mocks. The document provides guidance on test-driven development and testing legacy code. It contrasts unit testing with functional testing and discusses best practices for test granularity, assertions, and fixtures.
This document provides an introduction to using the Google Test framework for unit testing C++ code. It begins with an example of a simple test for a function called calc_isect. It then demonstrates how to add assertions to tests, use test fixtures to reduce duplicated setup code, and generate parameterized tests. The document also covers best practices for test organization, installing and using Google Test, and some key features like XML output and selecting subsets of tests. Overall, the document serves as a tutorial for getting started with the Google Test framework for writing and running unit tests in C++ projects.
This document describes the STAMP project which aims to increase test automation in DevOps. It focuses on test amplification using techniques like mutation analysis and automatic test improvement. The project involves 4 research institutions, 5 companies and an open source consortium with 516 person months. It will develop tools like Descartes and DSpot which use extreme mutation and suggest improvements to existing test cases.
Performance Test Driven Development with Oracle Coherencearagozin
This presentation discusses test driven development with Oracle Coherence. It outlines the philosophy of PTDD and challenges of testing Coherence, including the need for a cluster and sensitivity to network issues. It discusses automating tests using tools like NanoCloud for managing nodes and executing tests remotely. Different types of tests are described like microbenchmarks, performance regression tests, and bottleneck analysis. Common pitfalls of performance testing like fixed users vs fixed request rates are also covered.
C++ Testing Techniques Tips and Tricks - C++ LondonClare Macrae
Links from the talk are available at:
https://github.com/claremacrae/talks/blob/master/Cpp_Testing_Techniques_Tips_and_Tricks.md#top
Presented at C++ London Meetup, on Thursday, November 21, 2019.
Abstract:
An assortment of practical techniques to make it easier to write effective automated tests of C++ code, both old and new.
I share some approaches for easier handling of commonly troublesome testing scenarios. This is a brand new talk, that is independent of test frameworks, and even covers a little for those creating Qt desktop applications.
TDD is a design technique where tests are written before code to determine requirements. The Red-Green-Refactor process is followed: 1) Write a test that fails (red), 2) Write minimum code to pass the test (green), 3) Refactor code. TDD ensures quality, keeps code simple and testable, and allows for rapid change. Writing tests first helps design by clarifying requirements and preventing bugs.
JUnit is a unit testing framework for Java programming language. It was originally written by Kent Beck and Erich Gamma. Some key points:
- JUnit was one of the first unit testing frameworks for Java and has become the de facto standard.
- It allows writing and running repeatable tests to help find and prevent bugs. Tests are written in plain Java classes and methods.
- JUnit provides annotations like @Test, @Before, @After to identify test methods and set up/tear down methods.
- It includes assertions for validations and will report failures immediately. Tests can be organized into test suites.
JUnit is an open source unit testing framework for Java applications. It was written by Erich Gamma and Kent Beck and is part of the xUnit family of unit testing frameworks. JUnit allows developers to write test cases that test individual classes and methods. These test cases can be grouped into test suites and run automatically to ensure code meets requirements and to catch errors early in the development process. JUnit includes annotations like @Test to identify test methods and asserts to validate method output. It integrates with development tools like Eclipse to provide test results.
Test-driven development (TDD) is a software development process that relies on the repetition of short development cycles called the TDD cycle. The TDD cycle involves first writing a test case that defines a desired improvement or new function, then producing code to pass that test and finally refactoring the new code to acceptable standards. The document discusses TDD training which includes topics like fixtures, assertion patterns, test quality and a case study. It motivates TDD by explaining how it helps build quality code, improves maintainability and meets client needs by focusing on internal and external quality. Key aspects of TDD like the AAA test format and strategies for selecting the next test are also covered. Finally, the document reviews evidence from case
Automated Repair of Feature Interaction Failures in Automated Driving SystemsLionel Briand
The document describes an approach called ARIEL for automatically repairing feature interaction failures in automated driving systems. ARIEL uses a customized genetic programming algorithm that leverages fault localization weighted by test failure severity and generates patches through threshold changes and condition reordering. An evaluation on two industrial case studies found ARIEL outperformed baselines in fully repairing the systems within 16 hours. Domain experts judged the synthesized patches to be valid, understandable, useful and superior to what could be produced manually.
CppUnit is a unit testing framework for C++ that was originally ported from JUnit. The document discusses using CppUnit framework classes like TestCase, TestRunner, and TestFixture for unit testing. It also covers integrating CppUnit into the build process and using helper macros to minimize coding errors when creating tests.
This document discusses various techniques for unit testing in Java with JUnit, including naming tests clearly, using Hamcrest matchers for assertions, writing parameterized tests, using JUnit rules, and measuring code coverage. It provides examples of how to write tests that follow best practices and leverage JUnit's capabilities for parameterized testing, timeouts, error collection, and more. It also discusses running tests in parallel and measuring code coverage in IDEs like IntelliJ and Eclipse.
OSGi Applications Testing - André Elia Assad, System Engineer, Cesarmfrancis
This document discusses testing OSGi applications. It introduces the OSGi test harness, which includes a test director bundle and target test bundles. The test director manages test suites and targets, while targets run tests on devices under test. The document also covers how the OSGi test framework relates to JUnit, guidelines for writing OSGi test cases focusing on robustness and performance, and common testing patterns like unit testing, bundle testing, and service contract testing. In conclusion, it notes that compliance programs cannot completely cover specifications and that OSGi testing focuses on functionality over robustness and usability.
Unit testing patterns for concurrent codeDror Helper
Getting started with unit testing is not hard, the only problem is that most programs are more than a simple calculator with two parameters and a returns value that is easy to verify.
Writing unit tests for multi-threaded code is harder still.
Over the years I discovered useful patterns that helped me to test multi-threaded and asynchronous code and enabled the creation of deterministic, simple and robust unit tests.
Come learn how to test code that uses concurrency and parallelism – so that the excuses of not writing unit tests for such code would become as obsolete as a single core processors.
This document discusses best practices for writing unit tests. It emphasizes that unit tests should be easy to understand, trustworthy, and robust. A good unit test only fails if a bug is introduced or requirements change. The document provides examples of well-written unit tests and discusses how to avoid common problems like fragile tests. It stresses the importance of testing only specified functionality, using isolation frameworks to mock dependencies, and not putting test logic in the test. Overall, the document promotes writing "clean tests" to avoid brittle tests and minimize maintenance overhead.
Next Generation Developer Testing: Parameterized TestingTao Xie
The document discusses parameterized unit testing (PUT) as an improvement over conventional unit tests (CUTs). PUTs separate test specifications from test data generation, addressing issues with CUTs like low fault detection and redundant tests. PUTs can be represented as universally quantified conditional axioms. Major steps to retrofit CUTs to PUTs include parameterizing values, generalizing test oracles, and adding assumptions. Examples demonstrate how a CUT can be generalized to a PUT to improve test coverage. Parameterized testing is now supported by various frameworks like JUnit and Visual Studio.
Unit Testing: The Whys, Whens and Hows discusses unit testing definitions, benefits, and best practices. It covers:
- Defining what constitutes a unit test and different testing styles. Unit tests should be written by developers, run fast, be deterministic, and not integrate multiple areas of code.
- Benefits of unit testing include better code quality, a safety net for refactoring, documentation of functionality, and preventing code from becoming untestable.
- Characteristics of good unit tests like being functionally correct, running independently, running fast, and adding new tests for bugs fixed. Good code is more unit testable through interfaces, contracts, and low dependencies.
JUnit is the de facto standard in Java testing. Yet many advanced JUnit features are little known and poorly understood. This session reviews some lesser-known features of JUnit, along with a few associated libraries, that can make your unit tests more powerful, expressive, and fun. The session is intended for Java developers, lead developers, and architects trying to introduce good testing practices into their teams.
Need(le) for Speed - Effective Unit Testing for Java EEhwilming
Needle is a lightweight framework for testing Java EE components outside of the container in isolation. It reduces the test setup code by analysing dependencies and automatic injection of mock objects. It will thus maximize the speed of development as well as the execution of unit tests.
The document discusses unit testing in Java. It introduces the JUnit testing framework and describes unit testing methodology, including how to design testable code, write maintainable tests, and handle indirect inputs and outputs through stubs and mocks. The document provides guidance on test-driven development and testing legacy code. It contrasts unit testing with functional testing and discusses best practices for test granularity, assertions, and fixtures.
This document provides an introduction to using the Google Test framework for unit testing C++ code. It begins with an example of a simple test for a function called calc_isect. It then demonstrates how to add assertions to tests, use test fixtures to reduce duplicated setup code, and generate parameterized tests. The document also covers best practices for test organization, installing and using Google Test, and some key features like XML output and selecting subsets of tests. Overall, the document serves as a tutorial for getting started with the Google Test framework for writing and running unit tests in C++ projects.
This document describes the STAMP project which aims to increase test automation in DevOps. It focuses on test amplification using techniques like mutation analysis and automatic test improvement. The project involves 4 research institutions, 5 companies and an open source consortium with 516 person months. It will develop tools like Descartes and DSpot which use extreme mutation and suggest improvements to existing test cases.
Performance Test Driven Development with Oracle Coherencearagozin
This presentation discusses test driven development with Oracle Coherence. It outlines the philosophy of PTDD and challenges of testing Coherence, including the need for a cluster and sensitivity to network issues. It discusses automating tests using tools like NanoCloud for managing nodes and executing tests remotely. Different types of tests are described like microbenchmarks, performance regression tests, and bottleneck analysis. Common pitfalls of performance testing like fixed users vs fixed request rates are also covered.
C++ Testing Techniques Tips and Tricks - C++ LondonClare Macrae
Links from the talk are available at:
https://github.com/claremacrae/talks/blob/master/Cpp_Testing_Techniques_Tips_and_Tricks.md#top
Presented at C++ London Meetup, on Thursday, November 21, 2019.
Abstract:
An assortment of practical techniques to make it easier to write effective automated tests of C++ code, both old and new.
I share some approaches for easier handling of commonly troublesome testing scenarios. This is a brand new talk, that is independent of test frameworks, and even covers a little for those creating Qt desktop applications.
Into The Box 2018 | Assert control over your legacy applicationsOrtus Solutions, Corp
This document discusses how to add tests to legacy code using the TestBox testing framework for ColdFusion applications. It defines unit testing and different types of tests like unit, integration, and end-to-end tests. TestBox allows writing automated tests for ColdFusion code and isolating dependencies using test doubles. The document outlines best practices for test-driven development including writing tests before code, using life cycle methods, and refactoring code without changing external behavior. Implementing a testing framework like TestBox helps assert control over legacy applications by adding tests and the ability to refactor code safely.
IT Talk in Odessa for QA Automation/SDET engineers on 26/12/2016:
https://dou.ua/calendar/13626/
https://dataart.ru/events/odessa/it-talk-odessa-testng-vs-junit/
JUnit 4 code on github: https://github.com/a-oleynik/junit-workshop/tree/junit-4.13.2
TestNG code on github: https://github.com/a-oleynik/testng-workshop
Webinar on youtube (it was the next version but only a few slides and details were added): https://www.youtube.com/watch?v=3C-Nu5mkyOQ&t=3189
Technical Lessons Learned Turning the Agile Dials to Eleven!Craig Smith
Talk delivered by Craig Smith and Paul King at Agile 2008 in Toronto, Canada on 7 August 2008.
Developer practices for traditional and agile Java development are well understood and documented. But dynamic languages - Groovy, Ruby, and others - change the ground rules. Many of the common practices, refactoring techniques, and design patterns we have been taught either no longer apply or should be applied differently and some new techniques come into play. In this talk, techniques for agile development with dynamic languages are discussed. How should we better apply refactoring techniques? What new aspects do we need to think about?
This document provides an introduction to JUnit, a unit testing framework for Java. It discusses key concepts like unit testing, test phases (setup, exercise, verify, teardown), test fixtures, JUnit features, annotations like @Test and @Before, assertion statements to validate test results, and best practices for writing unit tests. The goal of JUnit and unit testing is to test code at the component level to find and fix bugs early in the development process.
The document discusses software testing, including definitions of key terms like failure, error, and fault. It covers different types of testing like unit testing, integration testing, and acceptance testing. It also discusses techniques for fault avoidance, detection, and tolerance. Black-box and white-box testing approaches are explained. Finally, it provides an overview of the JUnit testing framework in Java.
May: Automated Developer Testing: Achievements and ChallengesTriTAUG
Developer testing, a common step in software development, involves generating sufficient test inputs and checking the behavior of the program under test during the execution of the test inputs. Complicated logics inside a method make generating appropriate arguments difficult. In testing object-oriented programs, generating method sequences to put the receiver object or argument objects into appropriate states further complicates test-input generation. After the generated test inputs are executed, program crashes or uncaught exceptions can be used to indicate program problems, especially robustness problems. However, some program problems such as producing wrong program outputs do not crash the program.
In this talk, the speaker will present an overview of achievements and challenges in improving automation in developer testing, especially on test-input generation (i.e., generating sufficient test inputs) and test oracles (i.e., checking the behavior of the program under test).
About the speaker:
Tao Xie is an Associate Professor in the Department of Computer Science of the College of Engineering at North Carolina State University. He received his Ph.D. in Computer Science from the University of Washington in 2005. Before that, he received an M.S. in Computer Science from the University of Washington in 2002, an M.S. in Computer Science from Peking University in 2000, and a B.S. in Computer Science from Fudan University in 1997. He worked as a visiting researcher at Microsoft Research Redmond and Microsoft Research Asia.
His research interests are in software engineering, focusing on automated software testing and mining software engineering data. He has published more than 100 research papers in refereed journals and conference proceedings in the area of software engineering. Besides doing research, he has contributed to understanding the software engineering research community.
He has served as the ACM SIGSOFT History Liaison in the SIGSOFT Executive Committee as well as serving in the ACM History Committee. He received a National Science Foundation Faculty Early Career Development (CAREER) Award in 2009. He received 2008, 2009, and 2010 IBM Faculty Awards and a 2008 IBM Jazz Innovation Award. He received 2010 North Carolina State University Sigma Xi Faculty Research Award. He received the ASE 2009 Best Paper Award and an ACM SIGSOFT Distinguished Paper Award. He was Program Co-Chair of 2009 IEEE International Conference on Software Maintenance (ICSM) and is Program Co-Chair of 2011 and 2012 International Working Conference on Mining Software Repositories (MSR).
Ivan Pashko - Simplifying test automation with design patternsIevgenii Katsan
The document discusses simplifying test automation through the use of design patterns. It begins by defining code smells that make tests complex, such as duplication, conditional logic, obscure tests, and fragile tests. It then explains several design patterns that can address these smells, including template method for removing duplication, strategy for replacing conditional logic, factory/builder for constructing complex objects, composite for grouping objects, and decorator for adding responsibilities dynamically. The document advocates for clean, well-structured test code through applying these patterns.
The document discusses progressive refinement in quality assurance (QA), from initial broad testing to more targeted testing. It provides examples of assessing existing QA capabilities, prioritizing what to test, designing a QA approach, prototyping tests, and refining tests. Specifically, it summarizes the AdoptOpenJDK Quality Assurance (AQA) project, which aims to test OpenJDK builds across platforms and versions using an automated three-layer testing framework that is continuously refined.
Unit tests give developers and testers a quick way to look for logic errors in the methods of classes in Visual C#, Visual Basic, and Visual C++ projects. A unit test can be created one time and run every time that source code is changed to make sure that no bugs are introduced.
Automated php unit testing in drupal 8Jay Friendly
An overview of PHPUnit Automated testing in Drupal 8, including a comparison of manual testing vs automated testing, the pros and cons of automated testing, and the types of automated tests available in Drupal 8.
Unit testing involves testing individual units or components of an application to verify that each unit performs as expected. A unit test automates the invocation of a unit of work and checks the expected outcome without relying on other units. Good unit tests are automated, repeatable, easy to implement, run quickly and consistently, and isolate the unit from its dependencies. Integration testing differs in that it involves testing units using real dependencies rather than isolated fakes or stubs. Test-driven development involves writing tests before code so that tests fail initially and then pass after the code is implemented. Unit testing frameworks like NUnit provide attributes to mark tests, expected exceptions, setup and teardown methods, and assertions to validate outcomes.
This document discusses definitions, principles, and best practices of test-driven development (TDD). It defines different types of TDD like test-oriented development, test-driven design, acceptance TDD, and developer TDD. The key principles of TDD discussed are red-green-refactor cycles, writing tests before code, and values like improved design, code quality, and maintenance. Guidelines around trustworthy, maintainable and readable unit tests are also provided.
This document summarizes a test automation stack that uses Selenium, Cucumber, and Jenkins for end-to-end testing. It utilizes Cucumber for test design with a Gherkin syntax to make tests human-readable. Selenide is used for test development to enable simple code with clear structure and stable Selenium framework methods. Tests are executed in Jenkins with parameterization to run on different environments and browsers. Test results are evaluated using Report Portal for automated analysis, dashboards, and error correlation. A live demo of the stack is available on GitHub.
This document summarizes a test automation stack that uses Cucumber, Selenium, and Jenkins for end-to-end testing. Cucumber is used for test design with a Gherkin syntax to make tests human-readable. Selenium and the Selenide framework provide test development with reusable, stable tests implemented as page objects. Tests are executed via Jenkins pipelines for continuous integration and parameterization. Test results are evaluated using Report Portal for correlation, visualization of errors, and automated analysis.
Test automation principles, terminologies and implementationsSteven Li
A general slides for test automation principle, terminologies and implementation
Also, the slides provide an example - PET, which is a platform written by Perl, but not just for Perl. It provides a general framework to use.
The presentation explains the PHP unit testing framework and provides a basic training on Testing with PHPunit. It Covers fundamental of unit testing, unit testing benefits and best practices. Starting ground up from PHP unit fundamentals, features of unit testing tries to explore advanced topics like Data providers, Fuxtures, Test doubles and more...
QtTest is a unit testing framework that comes with Qt. It provides classes and methods for building test fixtures to test units of code. QtTest allows testing signals without needing to write slots using QSignalSpy. It can also simulate user events like mouse clicks and key presses. While QtTest is useful for unit testing, it does not provide isolation of dependencies between units. Tests using QtTest should focus on testing one thing at a time and creating new objects for each test to isolate the code being tested.
Similar to When assertthat(you).understandUnitTesting() fails (20)
2024-03-07 - Berne Institute - Neurodiversity Awareness Training.pdfMartin Skurla
Martin Skurla attended a 6-hour neurodiversity awareness training workshop with Dr. Tanya Banfield on March 7th, 2024. The workshop was directed by Adrienne Lee and provided continuing professional development credits. The training aimed to promote excellence, autonomy, and homonomy.
2024-03-03 - Chairwork - Beyond the Basics.pdfMartin Skurla
This certificate of attendance certifies that Matthew Pugh attended a three-day intensive webinar training on chairwork from January 1-3, 2024. The training, titled "Chairwork: Beyond the Basics", provided 21 hours of continuing professional development. It was hosted by chairwork.co.uk and led by Tobyn Bell.
2024-02-20 - Berne Institute - Mental Health Familiarisation.pdfMartin Skurla
Martin Skurla attended a 12-hour Mental Health Familiarisation Workshop on the 13th and 20th of February 2024 with Dr. Mike Harris. The workshop aimed to promote excellence, autonomy, and homonomy in mental health. Dr. Harris certified Martin Skurla's attendance on the 21st of February 2024.
Exploring Relational Practice Through Clinical DilemmasMartin Skurla
This document provides information about a workshop titled "Exploring Relational Practice Through Clinical Dilemmas" led by Martin Skurla and Alistair Berlin on November 10th-11th, 2023 that will last 6 hours. The workshop will use clinical dilemmas to explore relational practice in psychotherapy.
Martin Skurla attended a 5-hour Interpretive Dynamic Transactional Analysis Psychotherapy CPD training on October 28, 2023. The training was led by Ales Zivkovic and accredited by the United Kingdom Association for Transactional Analysis and the European Association for Transactional Analysis. The certificate confirms Martin Skurla's attendance at the training event but does not represent a qualification.
This certificate documents that Martin Skurla attended a continuing education activity called "Mastering Redecision Therapy" from July 17-22, 2023, which was sponsored by the Southeast Institute for Group and Family Therapy. The certificate verifies that Martin Skurla earned 36 continuing education credits by completing the entire activity.
Martin Skurla attended a two-day Life Script Workshop in Chapel Hill, NC from July 7-8, 2023. The workshop was sponsored by the Southeast Institute for Group and Family Therapy and provided Martin Skurla with 12 continuing education credits. The Southeast Institute for Group and Family Therapy is approved by the American Psychological Association to sponsor continuing education for psychologists.
Martin Skurla attended a 6-hour training course called "The Vital Skill of Clinical Assessment" with Nancy Dalton on July 1st, 2023. The training was certified by Patrick Brook, the Academic Director, and provided Martin with ongoing professional development in clinical assessment skills.
This document provides information about a transpersonal workshop titled "There's No Place Like Home" led by Geoff Hopping on March 26th, 2023. The workshop will be 14.5 hours long and focus on transpersonal topics led by facilitator Geoff Hopping.
Martin Škurla attended the UKATA National Conference held in Cardiff from April 21-23, 2023. He earned 16 hours of continuing professional development by attending the conference. The certificate verifies Martin Škurla's attendance and CPD hours earned at the UKATA National Conference, as signed by Paul Robinson, the UKATA Chair on April 23, 2023.
This document is a certificate for Martin Skurla for completing a 60-hour course in Applied Transactional Analysis in Clinical Practice with Suna Güven. The course was taught by Geoff Hopping and the certificate is dated May 30, 2023.
Martin Skurla completed training in Personality Focused Treatment (PFT) from January 27-28, 2023 at the Southeast Institute for Group and Family Therapy in Chapel Hill, North Carolina. The training focused on the six core personality adaptations and was led by Dr. Vann Joines of the Southeast Institute.
"Choosing proper type of scaling", Olena SyrotaFwdays
Imagine an IoT processing system that is already quite mature and production-ready and for which client coverage is growing and scaling and performance aspects are life and death questions. The system has Redis, MongoDB, and stream processing based on ksqldb. In this talk, firstly, we will analyze scaling approaches and then select the proper ones for our system.
Discover the Unseen: Tailored Recommendation of Unwatched ContentScyllaDB
The session shares how JioCinema approaches ""watch discounting."" This capability ensures that if a user watched a certain amount of a show/movie, the platform no longer recommends that particular content to the user. Flawless operation of this feature promotes the discover of new content, improving the overall user experience.
JioCinema is an Indian over-the-top media streaming service owned by Viacom18.
"Frontline Battles with DDoS: Best practices and Lessons Learned", Igor IvaniukFwdays
At this talk we will discuss DDoS protection tools and best practices, discuss network architectures and what AWS has to offer. Also, we will look into one of the largest DDoS attacks on Ukrainian infrastructure that happened in February 2022. We'll see, what techniques helped to keep the web resources available for Ukrainians and how AWS improved DDoS protection for all customers based on Ukraine experience
Connector Corner: Seamlessly power UiPath Apps, GenAI with prebuilt connectorsDianaGray10
Join us to learn how UiPath Apps can directly and easily interact with prebuilt connectors via Integration Service--including Salesforce, ServiceNow, Open GenAI, and more.
The best part is you can achieve this without building a custom workflow! Say goodbye to the hassle of using separate automations to call APIs. By seamlessly integrating within App Studio, you can now easily streamline your workflow, while gaining direct access to our Connector Catalog of popular applications.
We’ll discuss and demo the benefits of UiPath Apps and connectors including:
Creating a compelling user experience for any software, without the limitations of APIs.
Accelerating the app creation process, saving time and effort
Enjoying high-performance CRUD (create, read, update, delete) operations, for
seamless data management.
Speakers:
Russell Alfeche, Technology Leader, RPA at qBotic and UiPath MVP
Charlie Greenberg, host
AI in the Workplace Reskilling, Upskilling, and Future Work.pptxSunil Jagani
Discover how AI is transforming the workplace and learn strategies for reskilling and upskilling employees to stay ahead. This comprehensive guide covers the impact of AI on jobs, essential skills for the future, and successful case studies from industry leaders. Embrace AI-driven changes, foster continuous learning, and build a future-ready workforce.
Read More - https://bit.ly/3VKly70
[OReilly Superstream] Occupy the Space: A grassroots guide to engineering (an...Jason Yip
The typical problem in product engineering is not bad strategy, so much as “no strategy”. This leads to confusion, lack of motivation, and incoherent action. The next time you look for a strategy and find an empty space, instead of waiting for it to be filled, I will show you how to fill it in yourself. If you’re wrong, it forces a correction. If you’re right, it helps create focus. I’ll share how I’ve approached this in the past, both what works and lessons for what didn’t work so well.
Conversational agents, or chatbots, are increasingly used to access all sorts of services using natural language. While open-domain chatbots - like ChatGPT - can converse on any topic, task-oriented chatbots - the focus of this paper - are designed for specific tasks, like booking a flight, obtaining customer support, or setting an appointment. Like any other software, task-oriented chatbots need to be properly tested, usually by defining and executing test scenarios (i.e., sequences of user-chatbot interactions). However, there is currently a lack of methods to quantify the completeness and strength of such test scenarios, which can lead to low-quality tests, and hence to buggy chatbots.
To fill this gap, we propose adapting mutation testing (MuT) for task-oriented chatbots. To this end, we introduce a set of mutation operators that emulate faults in chatbot designs, an architecture that enables MuT on chatbots built using heterogeneous technologies, and a practical realisation as an Eclipse plugin. Moreover, we evaluate the applicability, effectiveness and efficiency of our approach on open-source chatbots, with promising results.
Northern Engraving | Modern Metal Trim, Nameplates and Appliance PanelsNorthern Engraving
What began over 115 years ago as a supplier of precision gauges to the automotive industry has evolved into being an industry leader in the manufacture of product branding, automotive cockpit trim and decorative appliance trim. Value-added services include in-house Design, Engineering, Program Management, Test Lab and Tool Shops.
Session 1 - Intro to Robotic Process Automation.pdfUiPathCommunity
👉 Check out our full 'Africa Series - Automation Student Developers (EN)' page to register for the full program:
https://bit.ly/Automation_Student_Kickstart
In this session, we shall introduce you to the world of automation, the UiPath Platform, and guide you on how to install and setup UiPath Studio on your Windows PC.
📕 Detailed agenda:
What is RPA? Benefits of RPA?
RPA Applications
The UiPath End-to-End Automation Platform
UiPath Studio CE Installation and Setup
💻 Extra training through UiPath Academy:
Introduction to Automation
UiPath Business Automation Platform
Explore automation development with UiPath Studio
👉 Register here for our upcoming Session 2 on June 20: Introduction to UiPath Studio Fundamentals: https://community.uipath.com/events/details/uipath-lagos-presents-session-2-introduction-to-uipath-studio-fundamentals/
QA or the Highway - Component Testing: Bridging the gap between frontend appl...zjhamm304
These are the slides for the presentation, "Component Testing: Bridging the gap between frontend applications" that was presented at QA or the Highway 2024 in Columbus, OH by Zachary Hamm.
As AI technology is pushing into IT I was wondering myself, as an “infrastructure container kubernetes guy”, how get this fancy AI technology get managed from an infrastructure operational view? Is it possible to apply our lovely cloud native principals as well? What benefit’s both technologies could bring to each other?
Let me take this questions and provide you a short journey through existing deployment models and use cases for AI software. On practical examples, we discuss what cloud/on-premise strategy we may need for applying it to our own infrastructure to get it to work from an enterprise perspective. I want to give an overview about infrastructure requirements and technologies, what could be beneficial or limiting your AI use cases in an enterprise environment. An interactive Demo will give you some insides, what approaches I got already working for real.
Keywords: AI, Containeres, Kubernetes, Cloud Native
Event Link: https://meine.doag.org/events/cloudland/2024/agenda/#agendaId.4211
Introducing BoxLang : A new JVM language for productivity and modularity!Ortus Solutions, Corp
Just like life, our code must adapt to the ever changing world we live in. From one day coding for the web, to the next for our tablets or APIs or for running serverless applications. Multi-runtime development is the future of coding, the future is to be dynamic. Let us introduce you to BoxLang.
Dynamic. Modular. Productive.
BoxLang redefines development with its dynamic nature, empowering developers to craft expressive and functional code effortlessly. Its modular architecture prioritizes flexibility, allowing for seamless integration into existing ecosystems.
Interoperability at its Core
With 100% interoperability with Java, BoxLang seamlessly bridges the gap between traditional and modern development paradigms, unlocking new possibilities for innovation and collaboration.
Multi-Runtime
From the tiny 2m operating system binary to running on our pure Java web server, CommandBox, Jakarta EE, AWS Lambda, Microsoft Functions, Web Assembly, Android and more. BoxLang has been designed to enhance and adapt according to it's runnable runtime.
The Fusion of Modernity and Tradition
Experience the fusion of modern features inspired by CFML, Node, Ruby, Kotlin, Java, and Clojure, combined with the familiarity of Java bytecode compilation, making BoxLang a language of choice for forward-thinking developers.
Empowering Transition with Transpiler Support
Transitioning from CFML to BoxLang is seamless with our JIT transpiler, facilitating smooth migration and preserving existing code investments.
Unlocking Creativity with IDE Tools
Unleash your creativity with powerful IDE tools tailored for BoxLang, providing an intuitive development experience and streamlining your workflow. Join us as we embark on a journey to redefine JVM development. Welcome to the era of BoxLang.
"What does it really mean for your system to be available, or how to define w...Fwdays
We will talk about system monitoring from a few different angles. We will start by covering the basics, then discuss SLOs, how to define them, and why understanding the business well is crucial for success in this exercise.
3. “More than the act of testing, the act of designing tests is one of the
best bug preventers known. The thinking that must be done to create
a useful test can discover and eliminate bugs before they are coded –
indeed, test-design thinking can discover and eliminate bugs at every
stage in the creation of software, from conception to specification, to
design, coding and the rest.” [1]
3 | Advanced testing techniques | 23 October 2014
Boris Beizer
[1] Software Testing Techniques, Creating a Software Engineering Culture by Karl Eugene Wiegers, ISBN: 0932633331 , Page: 211
4. Agenda
• Test face-lifting
• naming conventions
• logical grouping
• test code smells and “refactoring patterns”
• bad practices and pitfalls
• Custom assertions
• Declarative and Data driven testing
• Advanced techniques
• TestNG framework integration
• concurrent test execution
• Results (code reduction, number of tests, execution time)
4 | Advanced testing techniques | 23 October 2014
5. Naming conventions
• The most important asset of a unit test is readability.
• We try to achieve “readable tests”
• readable vs. understandable tests
• Test method naming conventions:
• testNameOfTheMethod() antipattern
• method name should contain 3 parts: behavior being tested, inputs and outputs
• e.g. attrUsedInRules_ShouldNotBeAbleToRemove(),
removingAttrUsedInRules_ShouldThrowIllegalArgumentException(),
ruleEqualsAndHashCodeMethods_ShouldBeCorrectlyImplemented(),
getAttrVal_ShouldThrowExceptionWhenAmbiguityHappens()
• Test lifecycle method naming conventions:
• setUp() & tearDown() antipatterns
• e.g. @BeforeMethod public void rulesInit() {…}
5 | Advanced testing techniques | 23 October 2014
6. Logical grouping
• Don’t put all test code related to single class/method always into the
same test class.
• NameOfClassTest antipattern
• it doesn’t scale for anything but trivial examples
• Instead, you should group tests logically.
• AE has attributes, attribute groups, cross rule validation, distinct rules, matching
expressions, meta rules, querying API, rule ambiguities handling, rule precedence,
target expressions, transactional behavior
• e.g. AttrManipulationTest, AttributeEngineTest, AttrGroupTest,
CrossRuleValidationTest, DistinctRuleTest,
GettingAttrsRulesAndValsAPITest, MatchingAttrExpressionsTest,
MetaRuleManipulationTest, MetaRulesTest, RuleAmbiguitiesTest,
RuleManipulationTest, RuleMatchValsTest, RulePrecedenceTest,
TargetAttrExpressionsTest, TransactionalBehaviorTest
6 | Advanced testing techniques | 23 October 2014
7. Test code smells and “refactoring patterns”
• Conditions
• introducing multiple test execution paths is bad
• => multiple tests, JUnit assumptions, TestNG SkipException
• Loops
• introducing multiple test cases into a single test is bad
• => parameterized testing, more powerful (custom) assertions
• Assertions on different objects
• test should only assert on a single object: SUT
• => refactoring to multiple tests
• Multiple assignments into the same variable
• reinitializing the SUT is bad
• => refactoring to multiple tests
7 | Advanced testing techniques | 23 October 2014
8. “Yesterday’s best practices is tomorrow’s anti-pattern.” [2]
8 | Advanced testing techniques | 23 October 2014
Neal Ford
[2] GeeCON Prague 2014 Conference, This is water, Opening Keynote
9. Bad practices
• Using assertTrue(), assertFalse(), assertEquals()
• => use custom assertions
• Sophisticated string assertion description
• assertEquals(String message, Object expected, Object actual);
• => use custom assertions
• Logging and printing into console
• => remove it
• Boolean asserted aggregation
• => rewrite to multiple tests
• Sophisticated tests
• GC tests, memory leak tests, latency tests
• => remove them
9 | Advanced testing techniques | 23 October 2014
10. Common pitfalls
• Removing repetition
• some level of repetition is actually good
• => don’t do that
• Introducing constants
• test constants should only be introduced if the particular value is not important for test
• => don’t introduce constants as in normal code
• SUT initialization in @BeforeMethod
• not conforming to arrange-act-assert
• not directly obvious how SUT is initialized
• introduces mutability (stay tuned)
• => don’t initialize SUT in @BeforeMethod if not necessary
• Reusing SUT
• you might be relying on already modified state
• => never reuse already used SUT
10 | Advanced testing techniques | 23 October 2014
11. Agenda
• Test face-lifting
• naming conventions
• logical grouping
• test code smells and “refactoring patterns”
• bad practices and pitfalls
• Custom assertions
• Declarative and Data driven testing
• Advanced techniques
• TestNG framework integration
• concurrent test execution
• Results (code reduction, number of tests, execution time)
11 | Advanced testing techniques | 23 October 2014
12. Custom assertions
• Because of readability
• assertThatAttr(“T1”).hasDescription(“…”);
• Very useful when API is leaking implementation details
• e.g. returning complicated data structures
• assertThatUnsuppressedRules(rules).containRulesOnLines(1, 2);
assertThatSuppressedRules(rules).isNull();
• Very powerful when custom assertions reuse other custom assertions
• assertThatException(e).forRuleOnLine(1).hasDependentCount(1)
.forRuleOnLine(2).hasDependentCount(2);
• Think twice before adding custom assertions.
12 | Advanced testing techniques | 23 October 2014
13. Agenda
• Test face-lifting
• naming conventions
• logical grouping
• test code smells and “refactoring patterns”
• bad practices and pitfalls
• Custom assertions
• Declarative and Data driven testing
• Advanced techniques
• TestNG framework integration
• concurrent test execution
• Results (code reduction, number of tests, execution time)
13 | Advanced testing techniques | 23 October 2014
14. Declarative and Data driven testing
• Data driven testing
• testing the same code, but with different inputs and outputs
• Declarative testing
• tests are saying what to do and not how
@DataProvider private String[][] attrGroupDataProvider() {
return new String[][] {{“XETRA”, “b111”, “rule2”}};}
@MatchingAttrDelimiter(“!”)
@AeColumns(“M1 ! M2 || +M1 || T1 ”)
@AeRules( {“LSE ! || EUROPE || ”,
“+EUROPE” ! /a111 || || rule1”)
@Test(dataProvider= “attrGroupDataProvider” )
public void attrGroup_...(String m1, String m2, String expT1) {}
14 | Advanced testing techniques | 23 October 2014
15. Agenda
• Test face-lifting
• naming conventions
• logical grouping
• test code smells and “refactoring patterns”
• bad practices and pitfalls
• Custom assertions
• Declarative and Data driven testing
• Advanced techniques
• TestNG framework integration
• concurrent test execution
• Results (code reduction, number of tests, execution time)
15 | Advanced testing techniques | 23 October 2014
16. TestNG framework integration
• TestNG listeners
• for handling declarative testing
• @AEColumns, @AEFileResources, @AERules, @MatchingAttrDelimiter,
@MetaAEColumns, @MetaAERules, @TrimOnlyLeadingAndTrailingSpaces
• listeners should play nicely with data providers
• listeners should support concurrency
• But how does it feel like to integrate into TestNG?
• happiness followed by hacking3
private static final Set<String> UGLY_HACK = new HashSet<String>();
• you have to expect issues
• internal bugs (Maven surefire plug-in)
• workarounds (ROCK-581)
3 “to devise or modify (a computer program), usually skillfully” according to http://dictionary.reference.com/browse/hacking?s=t
16 | Advanced testing techniques | 23 October 2014
17. Concurrent test execution
• The point of adding concurrency into tests was surprisingly not
performance.
• the reason was the independence (isolation)
• Different granularities
• test suites, test classes, test methods
• Achievable by removing all unnecessary and guarding the necessary
shared state.
• application of thread-safety and functional principles
• Test framework integration
• solid understanding of the testing framework thread model is essential
• But what to do when thread-safety cannot be achieved?
• @Test(singleThreaded = true)
• JVM forking (last resort solution)
17 | Advanced testing techniques | 23 October 2014
18. Agenda
• Test face-lifting
• naming conventions
• logical grouping
• test code smells and “refactoring patterns”
• bad practices and pitfalls
• Custom assertions
• Declarative and Data driven testing
• Advanced techniques
• TestNG framework integration
• concurrent test execution
• Results (code reduction, number of tests, execution time)
18 | Advanced testing techniques | 23 October 2014
19. Results
• JIRA issues resolved:
• specifically created: ROCK-349, ROCK-395, ROCK-396, ROCK-397,
ROCK-481, ROCK-613
• resolved as a side-effect of refactoring: ROCK-295
• TestNG workarounds: ROCK-581
• won’t fix: ROCK-511
• introduced bug: ROCK-585
• pending: ROCK-495
• Testable documentation
• This is in line with Barclay’s Values including Stewardship
19 | Advanced testing techniques | 23 October 2014
20. Results
40
35
30
25
20
15
10
600
550
500
450
400
350
300
250
200
150
100
Before ROCK-349 ROCK-397 ROCK-396 ROCK-395 ROCK-481 ROCK-613
Number of tests Execution time (sec)
65000
60000
55000
50000
45000
40000
35000
30000
550
500
450
400
350
300
Before ROCK-349 ROCK-397 ROCK-396 ROCK-395 ROCK-481 ROCK-613
Test code size (kB) Test resources size (kB)
• Number of tests:
• 373.38%
• Execution time:
• 42.64%
• Number of lines:
• 61.57%
• Test code size:
• 63.99%
• Test resources size:
• 57.45%
20 | Advanced testing techniques | 23 October 2014
21. More on testing libraries, books
• Links4:
• http://testng.org/doc/index.html
• http://code.google.com/p/hamcrest/
• http://joel-costigliola.github.io/assertj/
• http://code.google.com/p/catch-exception/
• http://www.manning.com/koskela2/
• http://www.manning.com/osherove2/
4 These links were accessed on 23/09/2014. The websites are those of third parties and Barclays is not responsible for any information stated to be obtained
or derived from these third party sources.
21 | Advanced testing techniques | 23 October 2014
22. Q & A
22 | Advanced testing techniques | 23 October 2014