This document contains notes from a presentation about test-driven development (TDD). It discusses best practices for TDD including writing clear, readable tests with AAA structure; using behavior-driven development and scenarios to define tests; mocking network responses and external APIs; and focusing on validating behaviors rather than code. The goals of testing are also addressed, such as improving maintainability, establishing a common understanding between developers and testers, and supporting profitability.
Presented at Web Unleashed on September 16-17, 2015 in Toronto, Canada
More info at www.fitc.ca/webu
The Little Shop of TDD Horrors
with Giorgio Natili
OVERVIEW
When used properly, the TDD (Test Driven Development) cycle is one of the most effective ways to improve the efficiency of a team and overall code quality. However, most of the time, misuse of this powerful technique brings unsatisfactory results. During this talk we’ll explore how to identify “testing smells” and how to prevent bad tests that negatively impact the design and architecture of a Web app.
We’ll investigate some real world mobile app examples in JavaScript, Swift, and Java for Android that threaten to eat us alive!
OBJECTIVE
Learn to write effective tests for your apps.
TARGET AUDIENCE
Software and QA Engineers.
ASSUMED AUDIENCE KNOWLEDGE
Good understanding of software development and a basic knowledge of test driven development.
FIVE THINGS AUDIENCE MEMBERS WILL LEARN
Write clean tests
Dealing with legacy code
The differences between unit tests and behaviour tests
How to debug a test
How to keep the test code base clean
Here are the logical forms of the statements:
1. ∀x(ComputerScience(x) → Programming(x))
2. ∀x(┐Impressive(x))
3. Intelligent(norashidah) ∧ Friendly(norashidah) ∧ Helpful(norashidah)
4. ∃x(Graduates(x) ∧ ┐Convocation(x))
This document discusses beacons and context-aware mobile applications. It begins by asking if smartphones have enough context, then introduces iBeacon and Estimote, which use Bluetooth signals to provide location context. It explains how beacons work by broadcasting IDs that mobile apps can detect to determine proximity. Features like region monitoring and ranging are covered, along with using triggers to activate rules based on beacon context. Integrating beacon apps with cloud backends is discussed as a way to gain more context. Example use cases and code demos are provided before concluding with resources for getting started with beacon development.
The document discusses the benefits of exercise for mental health. Regular physical activity can help reduce anxiety and depression and improve mood and cognitive function. Exercise causes chemical changes in the brain that may help protect against developing mental illness and improve symptoms for those who already suffer from conditions like anxiety and depression.
Everybody knows Javascript is single-threaded and that it shares this same thread with other browser-related processes such as painting and compositing. There are several techniques to implement pseudo multithreading in JavaScript; however, during this talk we will focus our attention on how to use and debug the Service Worker API. Our end goal is to explore practical use cases in order to simplify the process to render complex user interfaces and transitions in a browser.
The document discusses issues with the MVC architecture on iOS and proposes using the VIPER architecture as a cleaner alternative. It describes how the VIPER architecture splits code into layers including View, Interactor, Presenter, Entity and Routing layers. This decouples the logic from the UI and makes the code more reusable, testable and maintainable by separating concerns. The document provides examples of how specific responsibilities like handling user input, business logic and data access would be implemented using VIPER instead of the default iOS MVC implementation.
The document discusses the benefits of exercise for mental health. Regular physical activity can help reduce anxiety and depression and improve mood and cognitive functioning. Exercise causes chemical changes in the brain that may help protect against mental illness and improve symptoms.
Presented at Web Unleashed on September 16-17, 2015 in Toronto, Canada
More info at www.fitc.ca/webu
The Little Shop of TDD Horrors
with Giorgio Natili
OVERVIEW
When used properly, the TDD (Test Driven Development) cycle is one of the most effective ways to improve the efficiency of a team and overall code quality. However, most of the time, misuse of this powerful technique brings unsatisfactory results. During this talk we’ll explore how to identify “testing smells” and how to prevent bad tests that negatively impact the design and architecture of a Web app.
We’ll investigate some real world mobile app examples in JavaScript, Swift, and Java for Android that threaten to eat us alive!
OBJECTIVE
Learn to write effective tests for your apps.
TARGET AUDIENCE
Software and QA Engineers.
ASSUMED AUDIENCE KNOWLEDGE
Good understanding of software development and a basic knowledge of test driven development.
FIVE THINGS AUDIENCE MEMBERS WILL LEARN
Write clean tests
Dealing with legacy code
The differences between unit tests and behaviour tests
How to debug a test
How to keep the test code base clean
Here are the logical forms of the statements:
1. ∀x(ComputerScience(x) → Programming(x))
2. ∀x(┐Impressive(x))
3. Intelligent(norashidah) ∧ Friendly(norashidah) ∧ Helpful(norashidah)
4. ∃x(Graduates(x) ∧ ┐Convocation(x))
This document discusses beacons and context-aware mobile applications. It begins by asking if smartphones have enough context, then introduces iBeacon and Estimote, which use Bluetooth signals to provide location context. It explains how beacons work by broadcasting IDs that mobile apps can detect to determine proximity. Features like region monitoring and ranging are covered, along with using triggers to activate rules based on beacon context. Integrating beacon apps with cloud backends is discussed as a way to gain more context. Example use cases and code demos are provided before concluding with resources for getting started with beacon development.
The document discusses the benefits of exercise for mental health. Regular physical activity can help reduce anxiety and depression and improve mood and cognitive function. Exercise causes chemical changes in the brain that may help protect against developing mental illness and improve symptoms for those who already suffer from conditions like anxiety and depression.
Everybody knows Javascript is single-threaded and that it shares this same thread with other browser-related processes such as painting and compositing. There are several techniques to implement pseudo multithreading in JavaScript; however, during this talk we will focus our attention on how to use and debug the Service Worker API. Our end goal is to explore practical use cases in order to simplify the process to render complex user interfaces and transitions in a browser.
The document discusses issues with the MVC architecture on iOS and proposes using the VIPER architecture as a cleaner alternative. It describes how the VIPER architecture splits code into layers including View, Interactor, Presenter, Entity and Routing layers. This decouples the logic from the UI and makes the code more reusable, testable and maintainable by separating concerns. The document provides examples of how specific responsibilities like handling user input, business logic and data access would be implemented using VIPER instead of the default iOS MVC implementation.
The document discusses the benefits of exercise for mental health. Regular physical activity can help reduce anxiety and depression and improve mood and cognitive functioning. Exercise causes chemical changes in the brain that may help protect against mental illness and improve symptoms.
Giorgio Natili - The Little Shop of TDD HorrorsCodemotion
When used properly, the TDD development cycle in one of the most effective ways to improve the efficiency of a team and overall code quality. However, most of the time, misuse of this powerful technique brings unsatisfactory results. During this talk we’ll explore how to identify “testing smells” and how to prevent bad tests that negatively impact the design and architecture of a web app. We’ll investigate some real world mobile app examples in Javascript, Swift, and Java for Android that threaten to eat us alive!
Break up the Monolith: Testing MicroservicesMarcus Merrell
Microservices is more than a buzzword: it’s an industry-wide tidal wave. Companies are spending millions to break up monoliths and spin up microservices, but they usually only involve QA at the very end. This talk centers around real-world experiences, posing questions you can ask your developers/product people, and offering solutions for you to help make your service more discoverable, more testable, and easier to release.
How I Learned to Stop Worrying and Love Legacy CodeGene Gotimer
Many developers would love to work on brand-new, cutting-edge, greenfield projects, never dealing with the mess of unintelligible code someone else left behind. But most of us spend most of our time maintaining existing code, and it is often spaghetti code with no unit tests, no documentation, and, if we are lucky, a comment that says, “Not sure how this works, but it does so don’t touch it.” We need to make changes, but we can’t even figure out what the code is supposed to do. You know your changes will pile on and make it worse. You can’t change the code safely without adding tests, but you can’t add tests without making changes. So how do you tackle this chicken-and-egg problem? You do it slowly and methodically, building a safety net along the way.
Join Gene as he talks about helping to maintain and improve code on an infamous software project- it was so bad it made the national news. He’ll explain his approach to breaking the code into manageable, maintainable chunks. He’ll talk about adding unit tests that actually test the code using mutation testing- one of his favorite subjects. If you have inherited a pile of code and want to clean it up into something you aren’t afraid to touch, this talk is for you. You’ll hear about some tools and approaches to help you turn legacy code into code you don’t hate.
Testing, Learning and Professionalism — 20171214David Rodenas
Two hours talk about testing, its history, its meaning and propose, a small guide of good practices, and what it is supposed to be a good professional and what is expected from us the professionals.
A la découverte des google/mock (aka gmock)Thierry Gayet
The document provides an introduction and overview of using Google Mock for unit testing in C++. It discusses defining a mock class that implements the same interface as the system under test's dependencies. The mock class can then be configured to return expected values and verify method calls during tests. Writing mock classes with Google Mock involves using macros to declare mocked methods, which then generate the method definitions. The document provides an example of defining a MockTurtle class that implements the Turtle interface.
Mockito vs JMockit, battle of the mocking frameworksEndranNL
(Original keynote slides can be found at https://github.com/Endran/PublicSlides)
For years the industry standard of mocking on the JVM has been Mockito. Mockito is a wonderful library that really speeds up your testing by allowing you to create mocks in a very simple way. That being said, it does have its drawbacks, for which different strategies need to be deployed to keep your code testable. The main drawbacks are statics and finals. Final classes cannot be mocked, nor final methods, and also static methods are a no-go. To work with these type of things we need to wrap it, and copy the signature in a non final, non static way.
I have a great adversity against statics, I've devoted an entire post about it, in short; It hides dependencies and brings so little convenience at the costs of its drawbacks. Finals on the other hand have purpose, it helps messaging the goal of a class or method. Java is one of the few languages where classes and methods are open/virtual by default and have to be closed/final by explicit action. In (for example) Kotlin, everything is final by default, if you do not want something to be final, you should use the open keyword.
No matter if you follow the principle of making things final, static or not, if you are using Mockito the decision has been made. This mocking framework demands that everything is non-final, demands that everything is designed to be extended, since it might need to be mocked away. We should be able to improve upon this, and by the name of this post, you should be able to guess which framework will save the day. JMockit will help us with our impediments, and will give some other nifty benefits as well!
The document discusses mutation testing and provides tips for implementing it. It explains different types of mutations like statement, value, and decision mutations. It also discusses how to calculate mutation score and challenges like cost. Examples are provided using tools like Pitest and Stryker. Advice is given around using mocks, refactoring complex code, and targeting tests to improve mutation testing.
Automating Tactically vs Strategically SauceCon 2020Alan Richardson
One of the biggest concepts that has made a difference to my programming and automating in recent years is the concept of “Tactical vs. Strategic.” Automating tactically might be for a specific purpose, possibly small, possibly a bit rough around the edges, not necessarily completely robust for everyone, etc. And Strategic automation is more critical to long-term aims, maintained and maintainable, etc.
In this talk, Alan Richardson will provide examples of automating both Strategically and Tactically for activities as diverse as supporting testing, marketing and general life. We will also consider how and when to move from automating tactically to strategically, and how the concept has helped me change my programming style and how to write better code.
Birmingham JUG Lightweight Microservices with Microprofile and Raspberry PIsJean-Louis MONTEIRO
Microservices has been buzzword in the last years in software engineering. It helps to solve issues we had with monolith applications, however it also brings new challenges. Eclipse MicroProfile provides a time to market set of specifications and tools addressing these many challenges. Jean-Louis will be looking on how to use these spec implementations in practice throughout this presentation and show step-by-step examples on how to add monitoring with MP Health and with MP Metrics, security with MP JWT, custom configuration with MP Config, and also teach how to easily provide documentation with MP OpenAPI and much more. Lightweight will be achieved by deploying and running Docker on raspberry PIs.
My EuroSTAR 2018 tutorial (13 November 2018 9:00 - 13:00 hrs) was about testing of intelligent machines.
I showed information about quality characteristics for artificial intelligence and robotics. Also I introduced the six angles of quality for intelligent machines.
The delegates got exercises to test a chatbot (various examples). After the break they had exercises to expoloratory tests robots, they had a choice of Lego Mindstorm Robots, a robot vacuum cleaner, an image recognition machine and more.
My book "Testing in the digital age; AI makes the difference" was an important source and also a prize in the quizzes.
Mocking plays important role in unit testing, and is a great way to isolate your dependencies that your system under test depends on. Many of us do not question libraries we use, what problems they solve. And some of us have strong opinion on what mocking is, and what it is not. Let’s retrospect on current state of popular mocking frameworks like Mockito and JMock. How are they different from each other and where their weaknesses are. The second part of the talk is an analysis of what it takes to write a mocking framework from scratch in Java 8. This talk is aimed at a curious developer who wants to understand how mocking tools work and hopefully it will hint on things where such tools can be improved. Source code for the example mocking library can be found here: https://github.com/liucijus/jinsist.
Collaborating with Developers: How-to Guide for Test Engineers - By Gil Tayar Applitools
* Full webinar recording here: https://youtu.be/0NT_fmXwz1k **
"I will give a recipe that you can follow to ease your fear of the unknown: writing tests for developer code.
At the end of this session, I guarantee that you will gain a deeper understanding of different kinds of tests, know how to decipher developer terminology, and learn how to write unit, integration, browser, and E2E tests." -- Gil Tayar. Sr. Architect & Evangelist
Testing is shifting left, moving closer to testing the code itself. But while managers dictate a shift to the left, developers and testers are confused as to how exactly to test the code.
And while the backend world has established code-testing methodologies, we are still trying to figure out how to test frontend code, while ensuring effective testing procedures and processes.
This means testers need to step in and work with the frontend developers, but with an understanding of the frameworks by which frontend code is tested, the various kinds of testing that can be performed on frontend code, and which tools can be used for this.
In this hands-on session, Gil Tayar discusses various test methodologies, and how they fit together in a coherent way. Gil also includes sample code that you can use as a template in your own project -- all in order to provide you with the knowledge and tools to approach and test developer code.
How ANDROID TESTING changed how we think about DeathFernando Cejas
"Irreproducible bugs become highly reproducible right after delivery to the customer". This is something that happens "almost" everyday.
It is well known that testing offers significant advantages as a development practice and helps ensure higher quality code with fewer defects.
Unfortunately, testing Android apps can be challenging, so in this session we are gonna talk about available tools and practices that could help us accomplish our goals.
It is widely accepted that AI is the future of testing. However, because a fault lies in the eye of the beholder, it is pretty unclear how to apply AI to testing—called the Oracle problem.
There are literally thousands of UI test automation tools. But due to high efforts for creation and maintenance, together with the brittleness and unreliability of the resulting tests, testing often remains a manual task (confirming the testing pyramid). Meanwhile Software testing accounts for 30%-40% of the budget of a typical software project.
However, there is a way to circumvent the oracle problem and use AI to not only find technical errors (i.e. crashes), but to generate tests for business functionality—autonomous automation. See how AI can be trained to generate tests that are optimized towards several goals and are even better than manually created ones.
Visit the future of testing and see how AI can help us create better software!
In this talk we discuss automated testing and give examples of tests we've seen (or written ourselves) that we don't believe add value to your test suite. These slides accompany a live talk so you might not get that much from them alone...
Odinstar 2017 - Real World Automating to Support TestingAlan Richardson
This document discusses strategies for automating testing tasks. It explores the difference between automating tactically and strategically. Tactical automation focuses on short-term goals like getting work done quickly, while strategic automation has agreed upon long-term goals. The document recommends automating flows through the system, abstracting the execution, and using multiple layers of abstraction. This helps create automation that is robust, flexible to change, and easy to maintain over time.
The document provides guidance on effective unit testing. It recommends writing tests before coding to shape code design and catch errors. An example demonstrates how unit tests revealed a potential bug introduced when another developer changed assumptions without tests. Tests should focus on simple cases, error conditions, and boundaries to future-proof code from changes.
The document summarizes a presentation on test-driven development (TDD) given by Luca Milanesio. The presentation discusses some of the challenges and downsides of TDD that can occur, such as tests becoming more complex than the code itself, or code being warped to accommodate tests rather than clarity. It also discusses how to rebuild TDD practices to focus on writing accurate, readable tests of appropriate size and scope.
You know what to expect by now: funny and puzzling questions about Java 8 and Java 9, JFrog t-shirts are airborne, the usual combo of learning and fun ahead!
Talk given by David Lucey, Systems Engineering Architect at Salesforce, at Open Network Users Group in May 2016
“Livestock, not Pets.” We’ve all heard the phrase, but it seems to be so much harder in practice. It’s even worse when applications are developed over decades.
Well, the Salesforce application suite has been developed over decades, with a massive number of products, features, and offerings within its own ecosystem. Come see how Salesforce wrangles that livestock and handles their scale of infrastructure at a high velocity – all while maintaining their high level of security.
One of most exciting engineering challenges today is building a reliable self-driving car or driving support system. Today's vehicles offer a huge variety of sensors that can feed any algorithm with enough data to provide a pretty solid driving support experience. On top of this, despite some differences, smartphones sensors are robust enough to provide a rich set of environmental information. During this presentation, we'll discover how to implement computer vision solutions on Android with OpenCV, and how to mash-up device and vehicle data to build a driver assistant solution with open source technologies.
No matter which technology you use, your software should be able to efficiently handle user interaction and data streams to satisfy all requested use cases.
In order to manage the fast growth of data sources and interaction paradigms, we must shift to a non-blocking and sequential programming paradigm--which can be solved through Reactive Programming.
In Reactive Programming, everything can be seen as a sequence of events. In conjunction with function composition, Reactive Programming is a powerful tool to leverage readability, maintainability, and testability on any layer of your software.
During this session, we'll dive into Reactive Programming and, with the help of the Reactive Extensions API, discover how to translate use cases and acceptance criteria in a stream of events across multiple platforms.
Giorgio Natili - The Little Shop of TDD HorrorsCodemotion
When used properly, the TDD development cycle in one of the most effective ways to improve the efficiency of a team and overall code quality. However, most of the time, misuse of this powerful technique brings unsatisfactory results. During this talk we’ll explore how to identify “testing smells” and how to prevent bad tests that negatively impact the design and architecture of a web app. We’ll investigate some real world mobile app examples in Javascript, Swift, and Java for Android that threaten to eat us alive!
Break up the Monolith: Testing MicroservicesMarcus Merrell
Microservices is more than a buzzword: it’s an industry-wide tidal wave. Companies are spending millions to break up monoliths and spin up microservices, but they usually only involve QA at the very end. This talk centers around real-world experiences, posing questions you can ask your developers/product people, and offering solutions for you to help make your service more discoverable, more testable, and easier to release.
How I Learned to Stop Worrying and Love Legacy CodeGene Gotimer
Many developers would love to work on brand-new, cutting-edge, greenfield projects, never dealing with the mess of unintelligible code someone else left behind. But most of us spend most of our time maintaining existing code, and it is often spaghetti code with no unit tests, no documentation, and, if we are lucky, a comment that says, “Not sure how this works, but it does so don’t touch it.” We need to make changes, but we can’t even figure out what the code is supposed to do. You know your changes will pile on and make it worse. You can’t change the code safely without adding tests, but you can’t add tests without making changes. So how do you tackle this chicken-and-egg problem? You do it slowly and methodically, building a safety net along the way.
Join Gene as he talks about helping to maintain and improve code on an infamous software project- it was so bad it made the national news. He’ll explain his approach to breaking the code into manageable, maintainable chunks. He’ll talk about adding unit tests that actually test the code using mutation testing- one of his favorite subjects. If you have inherited a pile of code and want to clean it up into something you aren’t afraid to touch, this talk is for you. You’ll hear about some tools and approaches to help you turn legacy code into code you don’t hate.
Testing, Learning and Professionalism — 20171214David Rodenas
Two hours talk about testing, its history, its meaning and propose, a small guide of good practices, and what it is supposed to be a good professional and what is expected from us the professionals.
A la découverte des google/mock (aka gmock)Thierry Gayet
The document provides an introduction and overview of using Google Mock for unit testing in C++. It discusses defining a mock class that implements the same interface as the system under test's dependencies. The mock class can then be configured to return expected values and verify method calls during tests. Writing mock classes with Google Mock involves using macros to declare mocked methods, which then generate the method definitions. The document provides an example of defining a MockTurtle class that implements the Turtle interface.
Mockito vs JMockit, battle of the mocking frameworksEndranNL
(Original keynote slides can be found at https://github.com/Endran/PublicSlides)
For years the industry standard of mocking on the JVM has been Mockito. Mockito is a wonderful library that really speeds up your testing by allowing you to create mocks in a very simple way. That being said, it does have its drawbacks, for which different strategies need to be deployed to keep your code testable. The main drawbacks are statics and finals. Final classes cannot be mocked, nor final methods, and also static methods are a no-go. To work with these type of things we need to wrap it, and copy the signature in a non final, non static way.
I have a great adversity against statics, I've devoted an entire post about it, in short; It hides dependencies and brings so little convenience at the costs of its drawbacks. Finals on the other hand have purpose, it helps messaging the goal of a class or method. Java is one of the few languages where classes and methods are open/virtual by default and have to be closed/final by explicit action. In (for example) Kotlin, everything is final by default, if you do not want something to be final, you should use the open keyword.
No matter if you follow the principle of making things final, static or not, if you are using Mockito the decision has been made. This mocking framework demands that everything is non-final, demands that everything is designed to be extended, since it might need to be mocked away. We should be able to improve upon this, and by the name of this post, you should be able to guess which framework will save the day. JMockit will help us with our impediments, and will give some other nifty benefits as well!
The document discusses mutation testing and provides tips for implementing it. It explains different types of mutations like statement, value, and decision mutations. It also discusses how to calculate mutation score and challenges like cost. Examples are provided using tools like Pitest and Stryker. Advice is given around using mocks, refactoring complex code, and targeting tests to improve mutation testing.
Automating Tactically vs Strategically SauceCon 2020Alan Richardson
One of the biggest concepts that has made a difference to my programming and automating in recent years is the concept of “Tactical vs. Strategic.” Automating tactically might be for a specific purpose, possibly small, possibly a bit rough around the edges, not necessarily completely robust for everyone, etc. And Strategic automation is more critical to long-term aims, maintained and maintainable, etc.
In this talk, Alan Richardson will provide examples of automating both Strategically and Tactically for activities as diverse as supporting testing, marketing and general life. We will also consider how and when to move from automating tactically to strategically, and how the concept has helped me change my programming style and how to write better code.
Birmingham JUG Lightweight Microservices with Microprofile and Raspberry PIsJean-Louis MONTEIRO
Microservices has been buzzword in the last years in software engineering. It helps to solve issues we had with monolith applications, however it also brings new challenges. Eclipse MicroProfile provides a time to market set of specifications and tools addressing these many challenges. Jean-Louis will be looking on how to use these spec implementations in practice throughout this presentation and show step-by-step examples on how to add monitoring with MP Health and with MP Metrics, security with MP JWT, custom configuration with MP Config, and also teach how to easily provide documentation with MP OpenAPI and much more. Lightweight will be achieved by deploying and running Docker on raspberry PIs.
My EuroSTAR 2018 tutorial (13 November 2018 9:00 - 13:00 hrs) was about testing of intelligent machines.
I showed information about quality characteristics for artificial intelligence and robotics. Also I introduced the six angles of quality for intelligent machines.
The delegates got exercises to test a chatbot (various examples). After the break they had exercises to expoloratory tests robots, they had a choice of Lego Mindstorm Robots, a robot vacuum cleaner, an image recognition machine and more.
My book "Testing in the digital age; AI makes the difference" was an important source and also a prize in the quizzes.
Mocking plays important role in unit testing, and is a great way to isolate your dependencies that your system under test depends on. Many of us do not question libraries we use, what problems they solve. And some of us have strong opinion on what mocking is, and what it is not. Let’s retrospect on current state of popular mocking frameworks like Mockito and JMock. How are they different from each other and where their weaknesses are. The second part of the talk is an analysis of what it takes to write a mocking framework from scratch in Java 8. This talk is aimed at a curious developer who wants to understand how mocking tools work and hopefully it will hint on things where such tools can be improved. Source code for the example mocking library can be found here: https://github.com/liucijus/jinsist.
Collaborating with Developers: How-to Guide for Test Engineers - By Gil Tayar Applitools
* Full webinar recording here: https://youtu.be/0NT_fmXwz1k **
"I will give a recipe that you can follow to ease your fear of the unknown: writing tests for developer code.
At the end of this session, I guarantee that you will gain a deeper understanding of different kinds of tests, know how to decipher developer terminology, and learn how to write unit, integration, browser, and E2E tests." -- Gil Tayar. Sr. Architect & Evangelist
Testing is shifting left, moving closer to testing the code itself. But while managers dictate a shift to the left, developers and testers are confused as to how exactly to test the code.
And while the backend world has established code-testing methodologies, we are still trying to figure out how to test frontend code, while ensuring effective testing procedures and processes.
This means testers need to step in and work with the frontend developers, but with an understanding of the frameworks by which frontend code is tested, the various kinds of testing that can be performed on frontend code, and which tools can be used for this.
In this hands-on session, Gil Tayar discusses various test methodologies, and how they fit together in a coherent way. Gil also includes sample code that you can use as a template in your own project -- all in order to provide you with the knowledge and tools to approach and test developer code.
How ANDROID TESTING changed how we think about DeathFernando Cejas
"Irreproducible bugs become highly reproducible right after delivery to the customer". This is something that happens "almost" everyday.
It is well known that testing offers significant advantages as a development practice and helps ensure higher quality code with fewer defects.
Unfortunately, testing Android apps can be challenging, so in this session we are gonna talk about available tools and practices that could help us accomplish our goals.
It is widely accepted that AI is the future of testing. However, because a fault lies in the eye of the beholder, it is pretty unclear how to apply AI to testing—called the Oracle problem.
There are literally thousands of UI test automation tools. But due to high efforts for creation and maintenance, together with the brittleness and unreliability of the resulting tests, testing often remains a manual task (confirming the testing pyramid). Meanwhile Software testing accounts for 30%-40% of the budget of a typical software project.
However, there is a way to circumvent the oracle problem and use AI to not only find technical errors (i.e. crashes), but to generate tests for business functionality—autonomous automation. See how AI can be trained to generate tests that are optimized towards several goals and are even better than manually created ones.
Visit the future of testing and see how AI can help us create better software!
In this talk we discuss automated testing and give examples of tests we've seen (or written ourselves) that we don't believe add value to your test suite. These slides accompany a live talk so you might not get that much from them alone...
Odinstar 2017 - Real World Automating to Support TestingAlan Richardson
This document discusses strategies for automating testing tasks. It explores the difference between automating tactically and strategically. Tactical automation focuses on short-term goals like getting work done quickly, while strategic automation has agreed upon long-term goals. The document recommends automating flows through the system, abstracting the execution, and using multiple layers of abstraction. This helps create automation that is robust, flexible to change, and easy to maintain over time.
The document provides guidance on effective unit testing. It recommends writing tests before coding to shape code design and catch errors. An example demonstrates how unit tests revealed a potential bug introduced when another developer changed assumptions without tests. Tests should focus on simple cases, error conditions, and boundaries to future-proof code from changes.
The document summarizes a presentation on test-driven development (TDD) given by Luca Milanesio. The presentation discusses some of the challenges and downsides of TDD that can occur, such as tests becoming more complex than the code itself, or code being warped to accommodate tests rather than clarity. It also discusses how to rebuild TDD practices to focus on writing accurate, readable tests of appropriate size and scope.
You know what to expect by now: funny and puzzling questions about Java 8 and Java 9, JFrog t-shirts are airborne, the usual combo of learning and fun ahead!
Talk given by David Lucey, Systems Engineering Architect at Salesforce, at Open Network Users Group in May 2016
“Livestock, not Pets.” We’ve all heard the phrase, but it seems to be so much harder in practice. It’s even worse when applications are developed over decades.
Well, the Salesforce application suite has been developed over decades, with a massive number of products, features, and offerings within its own ecosystem. Come see how Salesforce wrangles that livestock and handles their scale of infrastructure at a high velocity – all while maintaining their high level of security.
One of most exciting engineering challenges today is building a reliable self-driving car or driving support system. Today's vehicles offer a huge variety of sensors that can feed any algorithm with enough data to provide a pretty solid driving support experience. On top of this, despite some differences, smartphones sensors are robust enough to provide a rich set of environmental information. During this presentation, we'll discover how to implement computer vision solutions on Android with OpenCV, and how to mash-up device and vehicle data to build a driver assistant solution with open source technologies.
No matter which technology you use, your software should be able to efficiently handle user interaction and data streams to satisfy all requested use cases.
In order to manage the fast growth of data sources and interaction paradigms, we must shift to a non-blocking and sequential programming paradigm--which can be solved through Reactive Programming.
In Reactive Programming, everything can be seen as a sequence of events. In conjunction with function composition, Reactive Programming is a powerful tool to leverage readability, maintainability, and testability on any layer of your software.
During this session, we'll dive into Reactive Programming and, with the help of the Reactive Extensions API, discover how to translate use cases and acceptance criteria in a stream of events across multiple platforms.
The document discusses JavaScript modules and ES6 features. It begins with an introduction to modular JavaScript and the advantages of using modules. It then covers different module systems like AMD and CommonJS and how they can be converted between each other. The rest of the document summarizes new features in ES6 like iterators, generators, destructuring, and promises for handling asynchronous code. It provides examples for many of these features and suggests labs for practicing with modules and promises.
This document discusses Jasmine, a JavaScript testing framework. It describes Jasmine as a library for writing tests of JavaScript applications, providing human-readable tests that improve software documentation. The core files of Jasmine, including jasmine.js, jasmine-html.js and boot.js are explained. It also outlines how to structure test files and load them using RequireJS to run the test specs. Key aspects of Jasmine like describe(), it(), matchers and expectations are defined.
The document outlines problems with current home automation tools not being personalized to individual users' needs. It proposes a solution to create a connection between individuals and their home automation tools by using a tool that can understand users' needs through biometrics data from wearable devices, and constantly adapt the settings of home automation tools based on this learning. This would be achieved by connecting an Edison board to both wearable devices and home automation tools to integrate sensors and recalculate settings based on acquired biometric data.
The document discusses technologies for developing hybrid mobile and wearable applications, including Tizen, Android, Cordova, Crosswalk, and PhoneRTC. It provides overviews of each technology and how they can be used together. It also summarizes steps for setting up a development environment for a Tizen wearable application using Cordova and WebRTC, including installing SDKs, configuring a SAP server, importing projects, and building. The presentation concludes with a recap of the setup steps and links to additional resources.
The document provides information about multithreading and asynchronous programming. It defines multithreading as allowing multiple threads of execution to exist concurrently in a CPU. It describes differences between processes and threads, with threads being lighter weight and able to access each other's data. The document also discusses challenges of multithreading like race conditions and deadlocks, and how to address them through techniques like mutexes and condition variables. It covers asynchronous programming using workers and promises to improve responsiveness compared to blocking approaches.
- The document discusses upcoming features in ECMA Script 6 including modules, variables scoping, new core features for arrays, strings, numbers, maps, sets, destructuring, and handling external data using promises and deferred objects.
- It provides examples of how to use ECMA 6 modules, variables scoping with let, new methods for strings and arrays, sets and maps, destructuring arrays and objects, and creating and resolving promises.
- The document is intended as a guide to help understand and start using new features coming in ECMA Script 6.
TDD is a software development technique where test cases are written before production code to specify desired behavior. It involves writing a test that fails, then producing the minimum amount of code to make it pass, and refactoring the code to improve design. This process helps improve code quality, catch bugs early, and drive code design. BDD is a style of TDD that focuses on writing tests in a natural language format describing desired behavior. Frameworks like Jasmine provide tools for writing BDD-style tests in JavaScript.
This document discusses strategies for improving monolithic applications by breaking them into modular components. It recommends identifying modules/components based on requirements and ensuring they are small and decoupled. Distribution of components can be done using private repositories for Bower or NPM. The model should be abstracted and enriched with metadata to define relationships and rules rather than tying it to a specific client library. Components should have well-defined scopes, and demos, resources and the speaker's contact information are provided.
The document discusses test-driven development (TDD). It explains that TDD is a software development technique where test cases are written before code to validate requirements. The TDD process involves writing a test case for new functionality, seeing the test fail, then writing the code to pass the test and refactoring if needed. TDD helps improve code quality, catch bugs early, and clarify requirements and design through executable tests. The document outlines the TDD workflow and best practices like keeping tests and code separate, focusing on test isolation, and using test doubles. It also compares TDD to related techniques like unit testing, integration testing, and behavior-driven development.
This document provides an overview of integrating WebRTC capabilities into mobile applications. It begins with an introduction to WebRTC and its key components. It then discusses how to compile the WebRTC native code for Android and iOS. The document explains how to access media streams and establish peer connections using the WebRTC JavaScript API in modern browsers. It also provides information on building the WebRTC source code using Ninja build and GYP files. Overall, the document aims to explain how mobile apps can leverage WebRTC to enable real-time communications capabilities like video chat.
Develop, test and debug cross platforms apps with PhoneGapGiorgio Natili
The document provides information on developing mobile applications using PhoneGap, including available development tools, installing PhoneGap and required SDKs, debugging techniques, and performance tips. It recommends downloading Node.js and the Android, iOS, and other mobile platform SDKs, then using the PhoneGap command line interface to create, build, and run a new PhoneGap project targeting Android or other platforms. Various debugging and emulation tools are described, such as the Chrome developer tools, iOS Simulator, and Ripple emulator. Compression and minification techniques are suggested to improve app performance.
International Conference on NLP, Artificial Intelligence, Machine Learning an...gerogepatton
International Conference on NLP, Artificial Intelligence, Machine Learning and Applications (NLAIM 2024) offers a premier global platform for exchanging insights and findings in the theory, methodology, and applications of NLP, Artificial Intelligence, Machine Learning, and their applications. The conference seeks substantial contributions across all key domains of NLP, Artificial Intelligence, Machine Learning, and their practical applications, aiming to foster both theoretical advancements and real-world implementations. With a focus on facilitating collaboration between researchers and practitioners from academia and industry, the conference serves as a nexus for sharing the latest developments in the field.
ACEP Magazine edition 4th launched on 05.06.2024Rahul
This document provides information about the third edition of the magazine "Sthapatya" published by the Association of Civil Engineers (Practicing) Aurangabad. It includes messages from current and past presidents of ACEP, memories and photos from past ACEP events, information on life time achievement awards given by ACEP, and a technical article on concrete maintenance, repairs and strengthening. The document highlights activities of ACEP and provides a technical educational article for members.
CHINA’S GEO-ECONOMIC OUTREACH IN CENTRAL ASIAN COUNTRIES AND FUTURE PROSPECTjpsjournal1
The rivalry between prominent international actors for dominance over Central Asia's hydrocarbon
reserves and the ancient silk trade route, along with China's diplomatic endeavours in the area, has been
referred to as the "New Great Game." This research centres on the power struggle, considering
geopolitical, geostrategic, and geoeconomic variables. Topics including trade, political hegemony, oil
politics, and conventional and nontraditional security are all explored and explained by the researcher.
Using Mackinder's Heartland, Spykman Rimland, and Hegemonic Stability theories, examines China's role
in Central Asia. This study adheres to the empirical epistemological method and has taken care of
objectivity. This study analyze primary and secondary research documents critically to elaborate role of
china’s geo economic outreach in central Asian countries and its future prospect. China is thriving in trade,
pipeline politics, and winning states, according to this study, thanks to important instruments like the
Shanghai Cooperation Organisation and the Belt and Road Economic Initiative. According to this study,
China is seeing significant success in commerce, pipeline politics, and gaining influence on other
governments. This success may be attributed to the effective utilisation of key tools such as the Shanghai
Cooperation Organisation and the Belt and Road Economic Initiative.
Electric vehicle and photovoltaic advanced roles in enhancing the financial p...IJECEIAES
Climate change's impact on the planet forced the United Nations and governments to promote green energies and electric transportation. The deployments of photovoltaic (PV) and electric vehicle (EV) systems gained stronger momentum due to their numerous advantages over fossil fuel types. The advantages go beyond sustainability to reach financial support and stability. The work in this paper introduces the hybrid system between PV and EV to support industrial and commercial plants. This paper covers the theoretical framework of the proposed hybrid system including the required equation to complete the cost analysis when PV and EV are present. In addition, the proposed design diagram which sets the priorities and requirements of the system is presented. The proposed approach allows setup to advance their power stability, especially during power outages. The presented information supports researchers and plant owners to complete the necessary analysis while promoting the deployment of clean energy. The result of a case study that represents a dairy milk farmer supports the theoretical works and highlights its advanced benefits to existing plants. The short return on investment of the proposed approach supports the paper's novelty approach for the sustainable electrical system. In addition, the proposed system allows for an isolated power setup without the need for a transmission line which enhances the safety of the electrical network
Embedded machine learning-based road conditions and driving behavior monitoringIJECEIAES
Car accident rates have increased in recent years, resulting in losses in human lives, properties, and other financial costs. An embedded machine learning-based system is developed to address this critical issue. The system can monitor road conditions, detect driving patterns, and identify aggressive driving behaviors. The system is based on neural networks trained on a comprehensive dataset of driving events, driving styles, and road conditions. The system effectively detects potential risks and helps mitigate the frequency and impact of accidents. The primary goal is to ensure the safety of drivers and vehicles. Collecting data involved gathering information on three key road events: normal street and normal drive, speed bumps, circular yellow speed bumps, and three aggressive driving actions: sudden start, sudden stop, and sudden entry. The gathered data is processed and analyzed using a machine learning system designed for limited power and memory devices. The developed system resulted in 91.9% accuracy, 93.6% precision, and 92% recall. The achieved inference time on an Arduino Nano 33 BLE Sense with a 32-bit CPU running at 64 MHz is 34 ms and requires 2.6 kB peak RAM and 139.9 kB program flash memory, making it suitable for resource-constrained embedded systems.
Using recycled concrete aggregates (RCA) for pavements is crucial to achieving sustainability. Implementing RCA for new pavement can minimize carbon footprint, conserve natural resources, reduce harmful emissions, and lower life cycle costs. Compared to natural aggregate (NA), RCA pavement has fewer comprehensive studies and sustainability assessments.
Presentation of IEEE Slovenia CIS (Computational Intelligence Society) Chapte...University of Maribor
Slides from talk presenting:
Aleš Zamuda: Presentation of IEEE Slovenia CIS (Computational Intelligence Society) Chapter and Networking.
Presentation at IcETRAN 2024 session:
"Inter-Society Networking Panel GRSS/MTT-S/CIS
Panel Session: Promoting Connection and Cooperation"
IEEE Slovenia GRSS
IEEE Serbia and Montenegro MTT-S
IEEE Slovenia CIS
11TH INTERNATIONAL CONFERENCE ON ELECTRICAL, ELECTRONIC AND COMPUTING ENGINEERING
3-6 June 2024, Niš, Serbia
7. @giorgionatili #mobiletea 7
!
Setup and Teardown
Tests clarity and readability
Mocking data
Contract tests
Behaviors driven development
End to end testing
The goals of testing
What we’ll talk about
8. “We are going to cycle in good and bad practices
highlighting potential solutions…”
How we’ll talk about this
19. @giorgionatili #mobiletea 19
Eventually decouple setups
Just in case you really need
complicated setups decouple them from
tests and include them in the setup…
26. @giorgionatili #mobiletea 26
Tests are code, treat them well
Write small, readable and decoupled
tests. Tests are part of your code base,
don’t write garbage code!
35. @giorgionatili #mobiletea 35
Respect the privacy
Don’t expose methods just because you
have to test it: Well-designed public
methods should use them in such a way
they don’t need be directly tested
45. @giorgionatili #mobiletea 45
Poor descriptions
Tests descriptions are one of the best
sources of documentation, never ignore
the importance of providing a good
description
47. @giorgionatili #mobiletea 47
Arrange, Act, Assert (AAA)
Separate what is going to be tested
from the setups and keep the
verification steps clearly identified
49. @giorgionatili #mobiletea 49
Avoid conditional behaviors
If you start to add conditionals to
determine if your code is executed by
the tests suites, it means that you are in
danger
55. @giorgionatili #mobiletea 55
Network Responses
Applications rely on external data
sources, it’s important to have clear
expectations about external APIs
responses
59. @giorgionatili #mobiletea 59
'use strict';
var supertest = require('supertest-as-promised');
var request = supertest('https://ngcourse.herokuapp.com');
var assert = require('chai').assert;
describe('Backend API', function() {
it ('should return the list of users', function() {
return request.get('/api/v1/users')
.expect(200);
});
});
Contract Tests in Practice
64. @giorgionatili #mobiletea 64
Divide tests logically
Never violate the Single Responsibility
Principle neither when writing tests,
keep the ordered and in a good shape
is the key to get the more value from
them…
65. @giorgionatili #mobiletea 65
Measure complexity
If you are not able to organize your
tests in such a way it means that you
are dealing with confusing (poor!)
requirements
66. @giorgionatili #mobiletea 66
Scenarios -> Use Cases -> Behaviors
This connection is the key to defining
tests that clearly describe a feature and
its acceptance criteria
68. @giorgionatili #mobiletea 68
Test for pixels
Don’t use e2e tests for testing layout
implementations, automate (eventually)
screenshots and then examine them
69. @giorgionatili #mobiletea 69
Counting elements
Don’t use e2e testing to count UI
elements, use them to describe how the
UI *should change* with a specific
behavior
70. @giorgionatili #mobiletea 70
Writing E2E tests
Never wait too much, start to write end
user tests as soon as the requirements
are ready, the lack of automation can
bring to not reliable outputs
75. @giorgionatili #mobiletea 75
Common understanding
Don’t separate developers and testers!
Keeping them together allows you to
have testers that understand the app
internals
78. @giorgionatili #mobiletea 78
Preconditions
If you cannot define preconditions you
cannot write tests of good quality,
potentially there is a big
misunderstanding about requirements