Beyond Agile Testing to Lean Development — Rakuten Technology ConferenceJames Coplien
The document discusses moving beyond traditional agile testing approaches to lean testing. It argues that most unit tests are unnecessary and test scenarios that will never occur. It promotes exploratory and experience-based testing over unit testing alone. The document also advocates for shipping tests with code to catch bugs in the field, using assertions to make code more readable, and taking a lean approach where fixing testing processes is prioritized over fixing individual bugs.
These are the slides from my well-received keynote at the Finnish Software Testing Board's FiSTB 2014 conference, held in Helsinki on 25 September 2014. This was a great event with many fantastic talks — see more at http://testingassembly.fistb.fi.
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!
Meetup of test mini conference on ai in testingKai Lepler
this presentation is intended to start thinking about the benefits AI can bring to the testing profession.
Just randomly replacing human brains with machines will not do the trick...
QA Fest 2017. Jeremias Rößler. Applying AI to testingQAFest
If the future of testing is AI, I will show you how.
Various automation tools are available, but due to high creation and maintenance efforts for tests, GUI-Testing is still mainly a manual task. Meanwhile overall testing effort has risen to make up 30% of a typical software budget. Is crowd-testing the answer? What if we could have automated test cases be created automatically?
Monkey Testing is not a new idea. But combined with a manually trainable AI and an innovative new testing approach (dubbed ""difference testing""), we can now not only have the monkey search for technical bugs (i.e. crashes) but generate functional test cases 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!
This document discusses how AI can be used to assist with software testing and development. It suggests that AI may one day be able to understand complex problems, automatically generate error-free code, and even replace testers. However, AI tools also need to be intuitive, easy to use, and help improve workflows. The document promotes using AI to enhance activities like automated regression testing and program compilation. Overall, the document explores the potential for AI to both automate certain testing tasks and help testers work more efficiently.
Recheck-web ( https://github.com/retest/recheck-web) is a free Open Source test automation tool on basis of Selenium. It implements Golden Master testing, which makes for
– easy to create and maintain tests
– that are more complete
– and less fragile.
And on top of that it can make your test almost unbreakable and elements easy to address with a constant virtual id.
Learn how recheck-web works and train hands-on with some examples.
https://www.hustef.hu/speakerslist2019/speaker_dr-jeremias-rosler/
Beyond Agile Testing to Lean Development — Rakuten Technology ConferenceJames Coplien
The document discusses moving beyond traditional agile testing approaches to lean testing. It argues that most unit tests are unnecessary and test scenarios that will never occur. It promotes exploratory and experience-based testing over unit testing alone. The document also advocates for shipping tests with code to catch bugs in the field, using assertions to make code more readable, and taking a lean approach where fixing testing processes is prioritized over fixing individual bugs.
These are the slides from my well-received keynote at the Finnish Software Testing Board's FiSTB 2014 conference, held in Helsinki on 25 September 2014. This was a great event with many fantastic talks — see more at http://testingassembly.fistb.fi.
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!
Meetup of test mini conference on ai in testingKai Lepler
this presentation is intended to start thinking about the benefits AI can bring to the testing profession.
Just randomly replacing human brains with machines will not do the trick...
QA Fest 2017. Jeremias Rößler. Applying AI to testingQAFest
If the future of testing is AI, I will show you how.
Various automation tools are available, but due to high creation and maintenance efforts for tests, GUI-Testing is still mainly a manual task. Meanwhile overall testing effort has risen to make up 30% of a typical software budget. Is crowd-testing the answer? What if we could have automated test cases be created automatically?
Monkey Testing is not a new idea. But combined with a manually trainable AI and an innovative new testing approach (dubbed ""difference testing""), we can now not only have the monkey search for technical bugs (i.e. crashes) but generate functional test cases 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!
This document discusses how AI can be used to assist with software testing and development. It suggests that AI may one day be able to understand complex problems, automatically generate error-free code, and even replace testers. However, AI tools also need to be intuitive, easy to use, and help improve workflows. The document promotes using AI to enhance activities like automated regression testing and program compilation. Overall, the document explores the potential for AI to both automate certain testing tasks and help testers work more efficiently.
Recheck-web ( https://github.com/retest/recheck-web) is a free Open Source test automation tool on basis of Selenium. It implements Golden Master testing, which makes for
– easy to create and maintain tests
– that are more complete
– and less fragile.
And on top of that it can make your test almost unbreakable and elements easy to address with a constant virtual id.
Learn how recheck-web works and train hands-on with some examples.
https://www.hustef.hu/speakerslist2019/speaker_dr-jeremias-rosler/
Automating Strategically or Tactically when TestingAlan Richardson
"Test Automation" can be viewed as strategic or tactical.
This presentation describes reasons for making this distinction and how you know if you are working strategically or tactically when you automate as part of your test approach.
Exactpro FinTech Webinar - Global Exchanges Test OraclesIosif Itkin
The document discusses test oracles, which are mechanisms for determining whether a test has passed or failed. It describes how oracles work by comparing the actual output of a system under test to the expected output determined by the oracle. Several types of oracles are discussed, including hand-crafted oracles, specification-based oracles, and independent implementation oracles. The document emphasizes that all oracles are partial, as it is impossible to create a perfect oracle that evaluates all possible outputs of a system.
This document provides 5 insights to revolutionize software testing: 1) There are two types of code (experience and infrastructure) that require different testing approaches; 2) Testing should focus on capabilities rather than features; 3) Focus on testing techniques rather than individual test cases; 4) Testing should improve development rather than just find bugs; 5) Testing needs innovation to engage talent and avoid repetitive work. The author advocates shifting testing strategy to higher levels of abstraction and partnering with development to build quality in from the start.
Lightening Talk I gave at Inaka in May 2014.
This is sort of the continuation of my previous iOS TDD talk.
Since TDD and DI go quite hand in hand and they are both extend concepts to learn in one shot, I had to prepare a completely separated talk for spreading to my fellows the DI knowledge I had acquired.
assertYourself - Breaking the Theories and Assumptions of Unit Testing in Flexmichael.labriola
This document discusses automated testing in Flex. It begins by explaining why automated testing is important, such as reducing costs from software errors and allowing developers to change code without fear of breaking other parts of the project. It then covers topics like writing unit tests, using theories and data points to test over multiple values, and writing integration tests. The document emphasizes that writing testable code is key, and provides some principles for doing so, such as separating construction from application logic and using interfaces. It also discusses using fakes, stubs and mocks to isolate units for testing.
The document discusses pushing functional testing further by exploring the technology used to build systems. It presents models for technical testing that involve modeling, observing, interrogating, and manipulating systems at different levels. Examples are given of technical testing approaches for a Java application and web application. The document notes overlap between technical testing and security testing. It provides suggestions for testers to increase their technical abilities, such as learning about technologies through books, online courses, and hands-on experience.
Software Testing Terms Defined. Answering the FAQ "What is Regression Testing?"
- What is Regression Testing?
- How to do Regression Testing?
- Why do we do Regression Testing?
- How to re-think Regression Testing in terms of Risk?
The document discusses exploratory testing in an agile context. It describes exploratory testing as simultaneously learning about a system while designing and executing tests, using feedback from the last test to inform the next. It also discusses that agile teams do both checking of requirements through automated tests as well as exploring to discover unintended consequences. Finally, it provides an example charter for exploratory testing of editing user profiles on a system.
1) Unit testing involves writing test code to validate the functionality of individual units or components in isolation from the rest of the system. This helps identify bugs and ensures code works as intended even when other code changes.
2) When refactoring code, unit tests allow developers to make many small incremental changes safely without using a debugger since the tests will fail if changes break existing functionality. Adding new code is riskier as tests need to be added and may initially break existing tests.
3) Key principles of unit testing include single responsibility, dependency injection to isolate units, and following the "FIRST" criteria of tests being fast, isolated, repeatable, self-validating, and timely. Tests should validate expected behavior
Joy of Coding Conference 2019 slides - Alan RichardsonAlan Richardson
Adventures in Testing, Programming, Teaching, Automating and Marketing
When you already know how to code, it's easy to forget how hard some of that learning was... until you have to teach people. And if all you've ever built are applications, you don't know really know the nuances of writing code to automate them. And if you've written the code but never had to market the applications then you've not really experienced the full joy of coding.
In this presentation Alan will revisit many of his past projects to identify lessons learned. Lessons from: writing commercial and open source tools, multi-user adventure games, REST APIs, test automation, automating applications to make them do things they are not supposed to do, and coding for technical marketing.
Some lessons we will learn:
* The 'install' is the hardest part
* Writing frameworks is too much fun and should be banned
* Applications are just "code calling other libraries"
* Writing a Text Adventure s the most fun and educational thing you'll ever code
* The Dangers of knowing how to code
We will also learn the dangers of knowing how to code and discover how our coding skills can give us an edge, in business and online live in general, if we choose to harness our skills to improve our daily experiences.
# Automating Pragmatically
Testival Meetup 20190604
## Alan Richardson
- EvilTester.com
- @EvilTester
- compendiumdev.co.uk
- digitalonlinetactics.com
---
~~~~~~~~
Title: Automating Pragmatically
The online discussions of automating can leave me confused.
- Should you automate through the GUI?
- Should GUI automating be banned?
- Do all testers need to code? Is automating part of testing
or not?
- Do we need to automate to get a job?
In this short session Alan will discuss automating
from a pragmatic and contextual position and
share how he thinks about automating.
~~~~~~~~
The document discusses various .NET debugging techniques, including:
1. The importance of debugging and the tools available for debugging .NET applications, such as Visual Studio and Debugging Tools for Windows.
2. Basic debugging tasks like setting breakpoints, stepping through code, and examining variables and call stacks.
3. Advanced techniques like debugging managed code, threads, and memory issues.
How to Deliver the Right Software (Specification by example)Asier Barrenetxea
Talk about Specification by Example. What's the problems it tries to tackle and how to solve them.
I gave this talk at findmypast.com on a "lunch and learn" weekly meeting for the company.
This is a new version of my previous presentation about "Specification by example"
http://www.slideshare.net/AsierBarrenetxea1/specification-by-example-33594438
This document outlines Alan Richardson's webinar on technical testing. It discusses why technical testing is important given increasing technical complexity. It describes what technical testing entails, such as understanding databases and code. The document provides examples of technical testing concepts like boundary value analysis. It also discusses how to identify technical testing and what barriers may exist, emphasizing personal motivation. Finally, it suggests that with the right approach, anyone can learn technical testing and offers resources for further reading.
The document discusses automating exploratory testing by creating an app crawler that can emulate user interactions, test across different platforms, languages, resolutions and orientations. Some key points:
- Automated exploratory testing is needed due to shorter release cycles and less manual testing time.
- The author created an app crawler that can capture elements, images, errors, exceptions, performance data and replay tests across platforms.
- Challenges include handling authentication, detecting unique locators, and rescuing apps that get stuck.
- The crawler detects languages, monitors logs and exceptions, and uses Applitools for image validation to further automate the process.
- The goal is to help fill quality gaps
Test Driven Development (TDD) is a software development process that involves writing tests before code. The TDD cycle involves three steps: 1) writing a failing test for the next piece of functionality, 2) writing just enough code to pass that test, and 3) refactoring the new and old code. TDD provides benefits like validated systems, code coverage, enabling refactoring, and documenting behavior. It promotes writing isolated, modular unit tests and designing code in a test-driven manner. While TDD has benefits, potential pitfalls include focusing on coverage over quality, neglecting refactoring steps, and writing overly broad tests.
Your Automated Execution Does Not Have to be FlakyAlan Richardson
Alan Richardson will present on how to remove intermittent failures from automated test execution. Common causes of intermittency include lack of synchronization, parallel test interference, long running tests, difficulty automating the system under test, outdated tools, uncontrolled test preconditions, incorrect assumptions in assertions, and uncontrolled data. Richardson will provide examples of each cause and recommend solutions such as adding synchronization, isolating test environments, controlling data, and investigating failures rather than assuming tests are "flaky". The goal is to convince attendees that intermittent failures are a result of unresolved issues, not flaws in tests, and can be addressed through proper testing practices.
No, it is not necessarily a bug. The code is skipping file names that start with a period, which is common for hidden or system files in some operating systems. Without more context on the intended behavior, this alone does not indicate a bug.
Effective Software Testing for Modern Software DevelopmentAlan Richardson
The document discusses modern software development and testing. It argues that testing is not a separate phase but rather a process that is customized and integrated into the overall development system to mitigate risks. Modern development processes build in safety controls like automated testing, but there are still risks to address like integration testing and exploring edge cases. The document advocates adapting methods to people and focusing testing on risks and uncertainties rather than definitions or roles.
Unit testing in Android involves testing individual units or components of an Android application to verify their correctness. This is done during development by the developer. The document discusses what unit testing involves, provides examples of unit tests for a number validator class and interval overlapping detector class, and discusses test doubles, constraints of unit testing in Android, where to unit test in an Android app, and test-driven development.
Ever tried doing Test First Test Driven Development? Ever failed? TDD is not easy to get right. Here's some practical advice on doing BDD and TDD correctly. This presentation attempts to explain to you why, what, and how you should test, tell you about the FIRST principles of tests, the connections of unit testing and the SOLID principles, writing testable code, test doubles, the AAA of unit testing, and some practical ideas about structuring tests.
Automating Strategically or Tactically when TestingAlan Richardson
"Test Automation" can be viewed as strategic or tactical.
This presentation describes reasons for making this distinction and how you know if you are working strategically or tactically when you automate as part of your test approach.
Exactpro FinTech Webinar - Global Exchanges Test OraclesIosif Itkin
The document discusses test oracles, which are mechanisms for determining whether a test has passed or failed. It describes how oracles work by comparing the actual output of a system under test to the expected output determined by the oracle. Several types of oracles are discussed, including hand-crafted oracles, specification-based oracles, and independent implementation oracles. The document emphasizes that all oracles are partial, as it is impossible to create a perfect oracle that evaluates all possible outputs of a system.
This document provides 5 insights to revolutionize software testing: 1) There are two types of code (experience and infrastructure) that require different testing approaches; 2) Testing should focus on capabilities rather than features; 3) Focus on testing techniques rather than individual test cases; 4) Testing should improve development rather than just find bugs; 5) Testing needs innovation to engage talent and avoid repetitive work. The author advocates shifting testing strategy to higher levels of abstraction and partnering with development to build quality in from the start.
Lightening Talk I gave at Inaka in May 2014.
This is sort of the continuation of my previous iOS TDD talk.
Since TDD and DI go quite hand in hand and they are both extend concepts to learn in one shot, I had to prepare a completely separated talk for spreading to my fellows the DI knowledge I had acquired.
assertYourself - Breaking the Theories and Assumptions of Unit Testing in Flexmichael.labriola
This document discusses automated testing in Flex. It begins by explaining why automated testing is important, such as reducing costs from software errors and allowing developers to change code without fear of breaking other parts of the project. It then covers topics like writing unit tests, using theories and data points to test over multiple values, and writing integration tests. The document emphasizes that writing testable code is key, and provides some principles for doing so, such as separating construction from application logic and using interfaces. It also discusses using fakes, stubs and mocks to isolate units for testing.
The document discusses pushing functional testing further by exploring the technology used to build systems. It presents models for technical testing that involve modeling, observing, interrogating, and manipulating systems at different levels. Examples are given of technical testing approaches for a Java application and web application. The document notes overlap between technical testing and security testing. It provides suggestions for testers to increase their technical abilities, such as learning about technologies through books, online courses, and hands-on experience.
Software Testing Terms Defined. Answering the FAQ "What is Regression Testing?"
- What is Regression Testing?
- How to do Regression Testing?
- Why do we do Regression Testing?
- How to re-think Regression Testing in terms of Risk?
The document discusses exploratory testing in an agile context. It describes exploratory testing as simultaneously learning about a system while designing and executing tests, using feedback from the last test to inform the next. It also discusses that agile teams do both checking of requirements through automated tests as well as exploring to discover unintended consequences. Finally, it provides an example charter for exploratory testing of editing user profiles on a system.
1) Unit testing involves writing test code to validate the functionality of individual units or components in isolation from the rest of the system. This helps identify bugs and ensures code works as intended even when other code changes.
2) When refactoring code, unit tests allow developers to make many small incremental changes safely without using a debugger since the tests will fail if changes break existing functionality. Adding new code is riskier as tests need to be added and may initially break existing tests.
3) Key principles of unit testing include single responsibility, dependency injection to isolate units, and following the "FIRST" criteria of tests being fast, isolated, repeatable, self-validating, and timely. Tests should validate expected behavior
Joy of Coding Conference 2019 slides - Alan RichardsonAlan Richardson
Adventures in Testing, Programming, Teaching, Automating and Marketing
When you already know how to code, it's easy to forget how hard some of that learning was... until you have to teach people. And if all you've ever built are applications, you don't know really know the nuances of writing code to automate them. And if you've written the code but never had to market the applications then you've not really experienced the full joy of coding.
In this presentation Alan will revisit many of his past projects to identify lessons learned. Lessons from: writing commercial and open source tools, multi-user adventure games, REST APIs, test automation, automating applications to make them do things they are not supposed to do, and coding for technical marketing.
Some lessons we will learn:
* The 'install' is the hardest part
* Writing frameworks is too much fun and should be banned
* Applications are just "code calling other libraries"
* Writing a Text Adventure s the most fun and educational thing you'll ever code
* The Dangers of knowing how to code
We will also learn the dangers of knowing how to code and discover how our coding skills can give us an edge, in business and online live in general, if we choose to harness our skills to improve our daily experiences.
# Automating Pragmatically
Testival Meetup 20190604
## Alan Richardson
- EvilTester.com
- @EvilTester
- compendiumdev.co.uk
- digitalonlinetactics.com
---
~~~~~~~~
Title: Automating Pragmatically
The online discussions of automating can leave me confused.
- Should you automate through the GUI?
- Should GUI automating be banned?
- Do all testers need to code? Is automating part of testing
or not?
- Do we need to automate to get a job?
In this short session Alan will discuss automating
from a pragmatic and contextual position and
share how he thinks about automating.
~~~~~~~~
The document discusses various .NET debugging techniques, including:
1. The importance of debugging and the tools available for debugging .NET applications, such as Visual Studio and Debugging Tools for Windows.
2. Basic debugging tasks like setting breakpoints, stepping through code, and examining variables and call stacks.
3. Advanced techniques like debugging managed code, threads, and memory issues.
How to Deliver the Right Software (Specification by example)Asier Barrenetxea
Talk about Specification by Example. What's the problems it tries to tackle and how to solve them.
I gave this talk at findmypast.com on a "lunch and learn" weekly meeting for the company.
This is a new version of my previous presentation about "Specification by example"
http://www.slideshare.net/AsierBarrenetxea1/specification-by-example-33594438
This document outlines Alan Richardson's webinar on technical testing. It discusses why technical testing is important given increasing technical complexity. It describes what technical testing entails, such as understanding databases and code. The document provides examples of technical testing concepts like boundary value analysis. It also discusses how to identify technical testing and what barriers may exist, emphasizing personal motivation. Finally, it suggests that with the right approach, anyone can learn technical testing and offers resources for further reading.
The document discusses automating exploratory testing by creating an app crawler that can emulate user interactions, test across different platforms, languages, resolutions and orientations. Some key points:
- Automated exploratory testing is needed due to shorter release cycles and less manual testing time.
- The author created an app crawler that can capture elements, images, errors, exceptions, performance data and replay tests across platforms.
- Challenges include handling authentication, detecting unique locators, and rescuing apps that get stuck.
- The crawler detects languages, monitors logs and exceptions, and uses Applitools for image validation to further automate the process.
- The goal is to help fill quality gaps
Test Driven Development (TDD) is a software development process that involves writing tests before code. The TDD cycle involves three steps: 1) writing a failing test for the next piece of functionality, 2) writing just enough code to pass that test, and 3) refactoring the new and old code. TDD provides benefits like validated systems, code coverage, enabling refactoring, and documenting behavior. It promotes writing isolated, modular unit tests and designing code in a test-driven manner. While TDD has benefits, potential pitfalls include focusing on coverage over quality, neglecting refactoring steps, and writing overly broad tests.
Your Automated Execution Does Not Have to be FlakyAlan Richardson
Alan Richardson will present on how to remove intermittent failures from automated test execution. Common causes of intermittency include lack of synchronization, parallel test interference, long running tests, difficulty automating the system under test, outdated tools, uncontrolled test preconditions, incorrect assumptions in assertions, and uncontrolled data. Richardson will provide examples of each cause and recommend solutions such as adding synchronization, isolating test environments, controlling data, and investigating failures rather than assuming tests are "flaky". The goal is to convince attendees that intermittent failures are a result of unresolved issues, not flaws in tests, and can be addressed through proper testing practices.
No, it is not necessarily a bug. The code is skipping file names that start with a period, which is common for hidden or system files in some operating systems. Without more context on the intended behavior, this alone does not indicate a bug.
Effective Software Testing for Modern Software DevelopmentAlan Richardson
The document discusses modern software development and testing. It argues that testing is not a separate phase but rather a process that is customized and integrated into the overall development system to mitigate risks. Modern development processes build in safety controls like automated testing, but there are still risks to address like integration testing and exploring edge cases. The document advocates adapting methods to people and focusing testing on risks and uncertainties rather than definitions or roles.
Unit testing in Android involves testing individual units or components of an Android application to verify their correctness. This is done during development by the developer. The document discusses what unit testing involves, provides examples of unit tests for a number validator class and interval overlapping detector class, and discusses test doubles, constraints of unit testing in Android, where to unit test in an Android app, and test-driven development.
Ever tried doing Test First Test Driven Development? Ever failed? TDD is not easy to get right. Here's some practical advice on doing BDD and TDD correctly. This presentation attempts to explain to you why, what, and how you should test, tell you about the FIRST principles of tests, the connections of unit testing and the SOLID principles, writing testable code, test doubles, the AAA of unit testing, and some practical ideas about structuring tests.
There's no shortage of cowboy code-slingers out there in the PHP range. Heck, I used to be one...! You know the types: buckin' bronco projects and spaghetti western logic, firing their guns as many times as they've got bullets... There's a better way, my friends, and it's not just for the yeller-bellied and quail-hearted. Sit by the fire a spell and learn a little about Unit Testing with PHPUnit (or any of them xUnits): what it is, how to do it, and how to sell it to your boss...! 'Cause we all know every cowpoke answers to the man in the big house, after all.
1. Create test classes for each item type (book, food, medical, imported, etc.) and calculate tax amounts
2. Write test methods that pass sample baskets of items to the calculation method and assert the expected tax and total amounts are returned
3. Include test cases that validate tax rounding is performed correctly for different tax rates and item prices
4. Write exception tests to ensure invalid item types or negative prices throw the expected exceptions
The document discusses various aspects of unit testing including definitions, benefits, naming standards, and best practices. It provides definitions for terms like error, defect, failure. It outlines the benefits of unit testing like finding bugs early, enabling code refactoring. It discusses what should be tested like boundaries, error conditions. It also provides examples of good test names and guidelines for structuring and naming unit tests.
The document discusses unit testing and provides guidance on effective unit testing practices. It defines key terms like error, defect, and failure. It outlines the benefits of unit testing like finding defects earlier and maintaining stable code. It discusses naming conventions and frameworks for unit tests. It provides examples of different types of unit tests and guidelines for writing good unit tests that are independent, fast, and test all functionality. The document emphasizes testing boundary conditions and errors as well as documenting test cases.
The document discusses various aspects of unit testing including definitions, benefits, naming standards, and best practices. It provides definitions for terms like error, defect, failure. It outlines the benefits of unit testing like finding bugs early, enabling code refactoring. It discusses what should be tested like boundaries, error conditions. It also provides examples of good test names and guidelines for structuring and naming unit tests.
Unit testing involves writing code to test individual units or components in isolation to determine if they are functioning as expected. Writing tests first, before production code (test-driven development or TDD) can lead to higher quality code, easier debugging, and increased confidence in changes. The TDD process involves writing a failing test, then code to pass the test, and refactoring code as needed. To apply TDD effectively, tests should focus on logical code, avoid duplications, and isolate dependencies to keep tests simple and maintainable. Both server-side and client-side code need testing, focusing on things like business rules, view models, repositories, and UI logic.
This document discusses software testing and Android testing. It covers unit testing with JUnit and mock objects in Android. Unit tests isolate classes and replace dependencies with mocks. The document provides examples of writing unit tests for an EmailValidator class. It also discusses instrumented tests and testing asynchronous functions. Best practices like writing testable code and case studies are presented.
This document discusses various techniques for rapid application testing (RAT) such as unit testing, integration testing, smoke testing, system testing, regression testing, performance testing, and test-driven development. It emphasizes automating test plans and test execution to allow tests to be run multiple times for little additional cost. The goal of testing is to balance cost and risk by reusing automated tests that are fast and good predictors of issues while throwing more tests at critical areas.
The document discusses unit testing and provides guidance on how to effectively implement unit testing. It defines unit testing as testing individual units or components of software code to verify they are functioning as intended. The document outlines best practices for unit testing such as writing test cases that cover valid, invalid, and boundary conditions. It also recommends testing frameworks like JUnit that can automate running test cases. Overall, the document advocates for developing a rigorous unit testing strategy and practicing habits like writing tests first and continuously running tests to improve code quality.
This document provides tips and best practices for unit testing code. It discusses why unit testing is important, such as guarding against bugs and enabling refactoring. It also covers different types of testing and recommends a test-first approach using test-driven development. Specific tips include breaking dependencies through dependency injection, using fakes/mocks to replace external dependencies, and following principles like single responsibility to make code more testable.
The document discusses test driven development (TDD). It defines TDD and describes the TDD cycle of writing a test, code, and refactoring. It outlines different approaches to TDD like outside-in and inside-out. It discusses the benefits of TDD like aiding design, promoting refactoring, and instilling confidence. It also covers test smells, misconceptions about TDD, and tools used for TDD.
Unit testing and end-to-end (E2E) testing are important types of automated testing for JavaScript applications. Unit tests focus on testing individual functions or components in isolation to catch bugs, while E2E tests ensure that user flows work as expected by interacting with the application through a browser. The presentation discussed setting up testing frameworks like Karma and Jasmine for unit testing and Protractor for E2E testing. It also covered writing testable code, handling dependencies through dependency injection, and selecting elements and interacting with them during E2E tests.
Automated verification is becoming increasingly important. Getting a product from idea to customer as fast as possible in a Continuous Delivery, or a Deployment pipeline is crucial in more businesses than ever before. But how do we get a product through that pipe line, with high quality? Kristian will talk about how automated verification can get you there.
Testing As A Bottleneck - How Testing Slows Down Modern Development Processes...TEST Huddle
We often claim the purpose of testing is to verify that software meets a desired level of quality. Frequently, the term “testing” is associated with checking for functional correctness. However, in large, complex software systems with an established user-base, it is also important to verify system constraints such as backward compatibility, reliability, security, accessibility, usability. Kim Herzig from Microsoft explores these issues with the latest webinar on test Huddle.
Automated and agile testing techniques and tools can help teams get software to a "DONE" state. Key aspects include:
- Writing automated unit, integration, and other tests to validate functionality and catch bugs early. This includes techniques like test-driven development.
- Leveraging continuous integration to run tests automatically on each code change to prevent regressions and catch issues quickly.
- Maintaining a balance of test types from unit to acceptance level while focusing on automation to make testing efficient and free up humans for more investigative tasks.
Similar to [Rakuten TechConf2014] [G-4] Beyond Agile Testing to Lean Development (20)
This document discusses how to make software more green and environmentally friendly. It defines green software as software that is carbon efficient, energy efficient, hardware efficient, and carbon aware. It provides recommendations for various roles within an organization on driving green initiatives, including focusing on efficiency for CxOs, architects, infrastructure engineers, and developers. Examples include optimizing resource usage, using public clouds effectively, prioritizing equipment standardization, and developing applications that can run more efficiently.
Simple and Effective Knowledge-Driven Query Expansion for QA-Based Product At...Rakuten Group, Inc.
The document proposes a knowledge-driven query expansion approach for question answering (QA)-based product attribute extraction. It trains QA models using attribute-value pairs from training data as knowledge, while mimicking imperfect knowledge at test time through techniques like knowledge dropout and token mixing. This helps induce better query representations, especially for rare and ambiguous attributes. Experiments on a cleaned product attribute dataset show the proposed approach with all techniques outperforms baseline methods in both macro and micro F1 scores.
This document summarizes Andrew Hajinikitas' work developing Rakuten's private cloud infrastructure. It describes the key components of Rakuten's infrastructure including metal instances, microservers, and GPU servers. It provides details on Rakuten's software stack and their goals to expand managed services. Currently, Rakuten operates 9 data centers in Japan and overseas providing around 30,000 servers to support their ecosystem. Their future plans include extending network self-service, making GPU resources available as a platform service, and improving efficiency through optimized hardware selection.
The document discusses the Travel & Leisure Platform Dept and its responsibilities related to data and platform management. It provides an overview of the technical stack including private/public clouds, databases, containers, and automation/monitoring tools. It then discusses recent projects involving business continuity, containerization, alert integration, and automation. Finally, it describes open roles for a DBA and DevOps position and their responsibilities related to database provisioning, backup/recovery, infrastructure as code, and providing platforms and tools for developers.
This presentation introduces the OWASP Top 10:2021.
It explains how to look at the data related to OWASP Top 10:2021, and provides detailed explanations of items with distinctive data. It also introduces the OWASP Project related to each item.
Gora API Group technology provides a microservices architecture and APIs for Rakuten's golf course reservation system, improving the user experience and increasing customer loyalty and annual golf rounds. The architecture migrates the monolithic reservation system to microservices using Kotlin, Spring Boot, and other technologies, exposing APIs for the frontend and new products while sustaining the legacy system through services, queues, continuous delivery, and operations monitoring.
inQuba Webinar Mastering Customer Journey Management with Dr Graham HillLizaNolte
HERE IS YOUR WEBINAR CONTENT! 'Mastering Customer Journey Management with Dr. Graham Hill'. We hope you find the webinar recording both insightful and enjoyable.
In this webinar, we explored essential aspects of Customer Journey Management and personalization. Here’s a summary of the key insights and topics discussed:
Key Takeaways:
Understanding the Customer Journey: Dr. Hill emphasized the importance of mapping and understanding the complete customer journey to identify touchpoints and opportunities for improvement.
Personalization Strategies: We discussed how to leverage data and insights to create personalized experiences that resonate with customers.
Technology Integration: Insights were shared on how inQuba’s advanced technology can streamline customer interactions and drive operational efficiency.
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.
The Microsoft 365 Migration Tutorial For Beginner.pptxoperationspcvita
This presentation will help you understand the power of Microsoft 365. However, we have mentioned every productivity app included in Office 365. Additionally, we have suggested the migration situation related to Office 365 and how we can help you.
You can also read: https://www.systoolsgroup.com/updates/office-365-tenant-to-tenant-migration-step-by-step-complete-guide/
"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
Getting the Most Out of ScyllaDB Monitoring: ShareChat's TipsScyllaDB
ScyllaDB monitoring provides a lot of useful information. But sometimes it’s not easy to find the root of the problem if something is wrong or even estimate the remaining capacity by the load on the cluster. This talk shares our team's practical tips on: 1) How to find the root of the problem by metrics if ScyllaDB is slow 2) How to interpret the load and plan capacity for the future 3) Compaction strategies and how to choose the right one 4) Important metrics which aren’t available in the default monitoring setup.
"$10 thousand per minute of downtime: architecture, queues, streaming and fin...Fwdays
Direct losses from downtime in 1 minute = $5-$10 thousand dollars. Reputation is priceless.
As part of the talk, we will consider the architectural strategies necessary for the development of highly loaded fintech solutions. We will focus on using queues and streaming to efficiently work and manage large amounts of data in real-time and to minimize latency.
We will focus special attention on the architectural patterns used in the design of the fintech system, microservices and event-driven architecture, which ensure scalability, fault tolerance, and consistency of the entire system.
Lee Barnes - Path to Becoming an Effective Test Automation Engineer.pdfleebarnesutopia
So… you want to become a Test Automation Engineer (or hire and develop one)? While there’s quite a bit of information available about important technical and tool skills to master, there’s not enough discussion around the path to becoming an effective Test Automation Engineer that knows how to add VALUE. In my experience this had led to a proliferation of engineers who are proficient with tools and building frameworks but have skill and knowledge gaps, especially in software testing, that reduce the value they deliver with test automation.
In this talk, Lee will share his lessons learned from over 30 years of working with, and mentoring, hundreds of Test Automation Engineers. Whether you’re looking to get started in test automation or just want to improve your trade, this talk will give you a solid foundation and roadmap for ensuring your test automation efforts continuously add value. This talk is equally valuable for both aspiring Test Automation Engineers and those managing them! All attendees will take away a set of key foundational knowledge and a high-level learning path for leveling up test automation skills and ensuring they add value to their organizations.
Essentials of Automations: Exploring Attributes & Automation ParametersSafe Software
Building automations in FME Flow can save time, money, and help businesses scale by eliminating data silos and providing data to stakeholders in real-time. One essential component to orchestrating complex automations is the use of attributes & automation parameters (both formerly known as “keys”). In fact, it’s unlikely you’ll ever build an Automation without using these components, but what exactly are they?
Attributes & automation parameters enable the automation author to pass data values from one automation component to the next. During this webinar, our FME Flow Specialists will cover leveraging the three types of these output attributes & parameters in FME Flow: Event, Custom, and Automation. As a bonus, they’ll also be making use of the Split-Merge Block functionality.
You’ll leave this webinar with a better understanding of how to maximize the potential of automations by making use of attributes & automation parameters, with the ultimate goal of setting your enterprise integration workflows up on autopilot.
Dandelion Hashtable: beyond billion requests per second on a commodity serverAntonios Katsarakis
This slide deck presents DLHT, a concurrent in-memory hashtable. Despite efforts to optimize hashtables, that go as far as sacrificing core functionality, state-of-the-art designs still incur multiple memory accesses per request and block request processing in three cases. First, most hashtables block while waiting for data to be retrieved from memory. Second, open-addressing designs, which represent the current state-of-the-art, either cannot free index slots on deletes or must block all requests to do so. Third, index resizes block every request until all objects are copied to the new index. Defying folklore wisdom, DLHT forgoes open-addressing and adopts a fully-featured and memory-aware closed-addressing design based on bounded cache-line-chaining. This design offers lock-free index operations and deletes that free slots instantly, (2) completes most requests with a single memory access, (3) utilizes software prefetching to hide memory latencies, and (4) employs a novel non-blocking and parallel resizing. In a commodity server and a memory-resident workload, DLHT surpasses 1.6B requests per second and provides 3.5x (12x) the throughput of the state-of-the-art closed-addressing (open-addressing) resizable hashtable on Gets (Deletes).
What is an RPA CoE? Session 2 – CoE RolesDianaGray10
In this session, we will review the players involved in the CoE and how each role impacts opportunities.
Topics covered:
• What roles are essential?
• What place in the automation journey does each role play?
Speaker:
Chris Bolin, Senior Intelligent Automation Architect Anika Systems
In our second session, we shall learn all about the main features and fundamentals of UiPath Studio that enable us to use the building blocks for any automation project.
📕 Detailed agenda:
Variables and Datatypes
Workflow Layouts
Arguments
Control Flows and Loops
Conditional Statements
💻 Extra training through UiPath Academy:
Variables, Constants, and Arguments in Studio
Control Flow in Studio
The Department of Veteran Affairs (VA) invited Taylor Paschal, Knowledge & Information Management Consultant at Enterprise Knowledge, to speak at a Knowledge Management Lunch and Learn hosted on June 12, 2024. All Office of Administration staff were invited to attend and received professional development credit for participating in the voluntary event.
The objectives of the Lunch and Learn presentation were to:
- Review what KM ‘is’ and ‘isn’t’
- Understand the value of KM and the benefits of engaging
- Define and reflect on your “what’s in it for me?”
- Share actionable ways you can participate in Knowledge - - Capture & Transfer
Must Know Postgres Extension for DBA and Developer during MigrationMydbops
Mydbops Opensource Database Meetup 16
Topic: Must-Know PostgreSQL Extensions for Developers and DBAs During Migration
Speaker: Deepak Mahto, Founder of DataCloudGaze Consulting
Date & Time: 8th June | 10 AM - 1 PM IST
Venue: Bangalore International Centre, Bangalore
Abstract: Discover how PostgreSQL extensions can be your secret weapon! This talk explores how key extensions enhance database capabilities and streamline the migration process for users moving from other relational databases like Oracle.
Key Takeaways:
* Learn about crucial extensions like oracle_fdw, pgtt, and pg_audit that ease migration complexities.
* Gain valuable strategies for implementing these extensions in PostgreSQL to achieve license freedom.
* Discover how these key extensions can empower both developers and DBAs during the migration process.
* Don't miss this chance to gain practical knowledge from an industry expert and stay updated on the latest open-source database trends.
Mydbops Managed Services specializes in taking the pain out of database management while optimizing performance. Since 2015, we have been providing top-notch support and assistance for the top three open-source databases: MySQL, MongoDB, and PostgreSQL.
Our team offers a wide range of services, including assistance, support, consulting, 24/7 operations, and expertise in all relevant technologies. We help organizations improve their database's performance, scalability, efficiency, and availability.
Contact us: info@mydbops.com
Visit: https://www.mydbops.com/
Follow us on LinkedIn: https://in.linkedin.com/company/mydbops
For more details and updates, please follow up the below links.
Meetup Page : https://www.meetup.com/mydbops-databa...
Twitter: https://twitter.com/mydbopsofficial
Blogs: https://www.mydbops.com/blog/
Facebook(Meta): https://www.facebook.com/mydbops/
From Natural Language to Structured Solr Queries using LLMsSease
This talk draws on experimentation to enable AI applications with Solr. One important use case is to use AI for better accessibility and discoverability of the data: while User eXperience techniques, lexical search improvements, and data harmonization can take organizations to a good level of accessibility, a structural (or “cognitive” gap) remains between the data user needs and the data producer constraints.
That is where AI – and most importantly, Natural Language Processing and Large Language Model techniques – could make a difference. This natural language, conversational engine could facilitate access and usage of the data leveraging the semantics of any data source.
The objective of the presentation is to propose a technical approach and a way forward to achieve this goal.
The key concept is to enable users to express their search queries in natural language, which the LLM then enriches, interprets, and translates into structured queries based on the Solr index’s metadata.
This approach leverages the LLM’s ability to understand the nuances of natural language and the structure of documents within Apache Solr.
The LLM acts as an intermediary agent, offering a transparent experience to users automatically and potentially uncovering relevant documents that conventional search methods might overlook. The presentation will include the results of this experimental work, lessons learned, best practices, and the scope of future work that should improve the approach and make it production-ready.
6. Why doesn’t unit
testing work?
We can’t test things of business
value
Not knowing what to test, we test
many things that don’t need testing
Automated crap is still crap
7. Unit tests can’t test
things of business value
Can you demonstrate that Method X of
Object Y will ever be invoked in practice?
If a unit test fails, how does it affect ROI?
What’s amazing is that we continue to test…
Paths that will never be exercised
Methods that are never used
Naive method invocation sequences
8. Most unit tests are
unnecessary
We test scenarios that will never be
exercised in the real world
We test methods that will never be
invoked
We supply data that a real application
would never have to process
9. Automated crap is
still crap
Design requires intelligence:
intelligence cannot be automated
Autonomation instead of automation
Testing is about exploratory inference
Get manual procedures working first
and then automate the mundane parts
13. Weinberg’s Law of
Decomposition
Used Interface
Used Interface
Mu s t unit-te s t!
Must unit-test!
Must unit-test!
14. Weinberg’s Law of
Decomposition
Wasted testing effort
Use
Size
Test
Size
15. Part III: You Will Have Bugs!
Scenarios we
test in the lab
Scenarios
exhibiting
faults
Scenarios
invoked in
the field
16. Testing waste
Removing tests
leaves field faults
Scenarios we
test in the lab
Scenarios
exhibiting
faults
Scenarios
invoked in
the field
undetected!
Type 2
Muda
Type 1
Muda
Type 4
Muda
Type 1: Defects
Type 2: Stuff
customers
don’t ask for
Type 4:
Type Overprocessing
1 Muda
(field)
17. Why do we unit
test?
Because we can
It doesn’t require teamwork
We don’t have to talk with the business
We get to interact with tools instead of
people
Our decisions are emotional, not rational
18. Reduction of Waste
Type 1: Better testing (e.g., going beyond
contextual testing to exploratory & experience-based
testing) (and better yet, better analysis
and design, where the real payoffs are)
Type 2: Don’t test dead code
Type 4: Remove redundant and tautalogical
tests, and tests that give no information
Type 1 in the field: Ship your tests!
19. Don’t take the tests
out when you ship!
Remember, you will have bugs in the
field!
Deployment is your largest test driver
Ship your tests as part of the code
IN case of a failure, it saves you
from Type 9 muda (unsafe execution)
21. How Adding ASSERTS reduces work
2500000
2000000
1500000
1000000
500000
0
15 bugs p=0.01 15 bugs p=0.02
10 bugs p=0.01 10 bugs p=0.02
5 bugs p=0.01 5 bugs p=0.02
0 1 2 5 10 20 50 100
number of ASSERTS
Work, Tsinglechecks
Overload
Magazine,
October 2014
22. Defensive
Programming
… is largely the incorporation of
tests in the code
Long known for high-reliability
systems
The value of asserting the obvious
Design by Contract
23. Assertions make code
readable!
- (void) prepareForSegue: (UIStoryboardSegue*) segue
sender: (id) sender
{
assert(segue != nil);
if ([[segue identifier] isEqualToString:
@"SegueAvatarPickerToPickOneLoginPlayer"]) {
assert((UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone));
// The field parentViewController_ (instance variable) is
// maybe null if we are in iPhone mode and doing a real
// segue, instead of a popover as we do on the iPad. So
// get the right object from the segue record.
KnowsyPlayerPickerCommonViewController *parentViewController =
[segue destinationViewController];
[parentViewController setKnowsyData: knowsyData_];
} else {
// iPad - no special processing - should be no popover
assert(parentViewController_ == nil);
}
}
24. Part IV: Beyond agile
testing, Lean testing
When a test finds a bug, it’s about
fixing the process — not the bug
The long-term payoff is higher!
No bug-tracking systems: we fix
problems NOW.
The tester should be the team’s
conscience
25. Other Lean-isms
Deming: Quality is inversely
proportional to the number of
testers
GM kept around its cars for 1 - 6
weeks for test and repair: Toyota
drove them off the end of the
assembly line onto the car carriers.
26. Conclusion
Be humble about what tests can accomplish
It’s not about testing, but value
Design tests to assess properties of business value
Go beyond unit testing to defensive
programming and design-by-contract
As agile testers, focus on process first and
product second
Editor's Notes
BEYOND AGILE TESTING TO LEAN DEVELOPMENT - Jim Coplien
• Testing is a business function that should be focused on risk
• Lean defines testing as waste — why do it?
• Automated tests should reflect requirements, but testers shouldn't test requirements
• Testers are the team's conscience
50 Minutes
Mike Cohn’s testing triangle
http://qz.com/196200/toyota-is-becoming-more-efficient-by-replacing-robots-with-humans/ Max Niesen, April 7, 2014
James Bach: “Testing Requires Inference.” “Exploratory inference may sound like a strange idea. It means one idea leading to another in ways you can’t predict in advance” [and, therefore, can’t script].
What if the methods we break them down with are private and used just to make the code more readable?
I'm sure you could pronounce it faster... And I'm sure that it takes less time to read individual sentences than to read all of Moby Dick. But readability isn't the entire story, and comprehension is a big part of that. Appreciation comes in the whole. You don't appreciate the beauty of the Mona Lisa by studying only her nose: you take in the whole. It is more than the sum of its parts, just as understanding must be more than the sum of its parts.
There are some strange loops going in the other direction, and this is where I've picked up a new tool in the past weeks: Weinberg's law of decomposition. Each part is much more than a decomposition of the whole. Because it is so much more, it is harder to understand as an entity than it is to understand when contextualized by its surroundings. So the phrase, "Frankly, dear, I don't give a damn" has some meaning in its own right but 100 times as much meaning when read in the context of "Gone With The Wind."
Poetry is about about compression: about using cultural context, and the context of the rest of the work, to amplify meaning. Great software is group poetry writing. If you're not doing that, you're just a machine automating the generation of some object code in an assembly language called Java.
What if the methods we break them down with are private and used just to make the code more readable?
I'm sure you could pronounce it faster... And I'm sure that it takes less time to read individual sentences than to read all of Moby Dick. But readability isn't the entire story, and comprehension is a big part of that. Appreciation comes in the whole. You don't appreciate the beauty of the Mona Lisa by studying only her nose: you take in the whole. It is more than the sum of its parts, just as understanding must be more than the sum of its parts.
There are some strange loops going in the other direction, and this is where I've picked up a new tool in the past weeks: Weinberg's law of decomposition. Each part is much more than a decomposition of the whole. Because it is so much more, it is harder to understand as an entity than it is to understand when contextualized by its surroundings. So the phrase, "Frankly, dear, I don't give a damn" has some meaning in its own right but 100 times as much meaning when read in the context of "Gone With The Wind."
Poetry is about about compression: about using cultural context, and the context of the rest of the work, to amplify meaning. Great software is group poetry writing. If you're not doing that, you're just a machine automating the generation of some object code in an assembly language called Java.
What if the methods we break them down with are private and used just to make the code more readable?
I'm sure you could pronounce it faster... And I'm sure that it takes less time to read individual sentences than to read all of Moby Dick. But readability isn't the entire story, and comprehension is a big part of that. Appreciation comes in the whole. You don't appreciate the beauty of the Mona Lisa by studying only her nose: you take in the whole. It is more than the sum of its parts, just as understanding must be more than the sum of its parts.
There are some strange loops going in the other direction, and this is where I've picked up a new tool in the past weeks: Weinberg's law of decomposition. Each part is much more than a decomposition of the whole. Because it is so much more, it is harder to understand as an entity than it is to understand when contextualized by its surroundings. So the phrase, "Frankly, dear, I don't give a damn" has some meaning in its own right but 100 times as much meaning when read in the context of "Gone With The Wind."
Poetry is about about compression: about using cultural context, and the context of the rest of the work, to amplify meaning. Great software is group poetry writing. If you're not doing that, you're just a machine automating the generation of some object code in an assembly language called Java.
Type 2: Weinberg’s Law of Decomposition
Type 4: Keeping tests that never fail
Last point: Most tests are irrational: i.e., you can never presume software correctness from the tests. But we do feel better by having checked, so we test anyhow.
Be customer-focused
Debug Complexity: How Assertions Affect Debugging Time. Sergey Ignatchenko and Dmytro Ivanchykhin, Overload, October 2014
Conscience… Curmudgeonly and like Emperor’s New Clothes — not in the sense of standing in the way. That’s business’s job.
No unit - subsystem - system - integration - acceptance test leveling.