# Shared lecture notes on the QASD visiting lecture 6.10. by Anssi Lehtelä **Topic: Stuff we do to make quality products** by Anssi Lehtelä (Visma Solutions) # Intro * Bugs vs quality => starting point by Anssi * Lack of bugs => a good product? * Some of the topics * Continuous delivery * Teamwork * Test automation * Understanding the context * Scream testing * Exploratory testing # Understanding the context/purpose Three amigos => business, development, & testing present Impact mapping by Gojko Adzic => Alright, everyone, now it's your turn to continue below => Shared understanding that comes from the planning may be more important than the plan itself # Continuous delivery ![Development Styles](https://i.imgur.com/Vx3Q3LJ.png) *Fig. CI process vs other, more "traditional" processes* When testing is only done at the end of the project, testing turns into "fixing" and actual testing is not performed Frequent deployments are the way to ensure the quality is built into the product "Quality needs to be incremental process" https://continuousdelivery.com/ # Test automation Safety net, prevents regressions (breaking existing features) A lot of bad test automation, it can be misused Quick feedback enables faster development Test Driven Development (TDD) means that unit test cases will be written first and the code after that to test that everything works all the time and you don't break something when adding new code. Test automation is one of continuous delivery activities, which ensures constant and fast feedbacks to developers during development cycle. Some automated steps in CI * Static analysis * Unit tests (functional tests) * Security testing AI Cucumber Test (https://cucumber.io/): Feature, Background, Scenario, Scenario,.. - test structure. Cucumber tests will be run trough BrowserStack Automate (https://www.browserstack.com/ paid service). Manual exploratory testing can also be done via BrowserStack - a web app can be tested in various browsers. Detectify for automated security scans & bounty program (find security problem and report it for reward) If you ask to review you code for... 1000 lines -> No issues found 50 lines -> 5 issues found -> Keep your commits small (if you want them reviewed carefully) Should happen with the team! Team should own this together. # Exploratory testing Exploratory testing is also called manual testing, which can be a misleading term. Focuses on usability and on the value Requires imagination Finding the happy flow and making sure it works vs breaking things Try crashing services should not be done in production and performed in a very careful manner, e.g. finding performance issues (1GB Attachment to invoice) - overall there are a lot of possibilities but should not be considered as the most valuable bug to find. Priorities can be set using cheat sheets e.g. https://testobsessed.com/wp-content/uploads/2011/04/testheuristicscheatsheetv1.pdf In a nutshell: only crash the service if it is necessary and if it provides value. Also taking notes can be a very helpful tool during exploratory testing. James Bach's Satisfice, contains resources like Tester’s Syllabus: https://www.satisfice.com/resources # Scream testing aka a/b testing, piloting, monitoring Scream testing basically means to wait "till it screams". Demonstrated on the example of Graylog: GrayLog (https://www.graylog.org/) - one of the tools for monitoring system logs. Graylog has nice statistics and dashboard features for monitoring. Therefore it allows to analyze for potential bugs during production. DataDog (https://www.datadoghq.com/) - Unified monitoring for metrics, traces, & logs # Team work Super important part of building a high quality products/services. Pair, or even group programming ("mob programming") is possible (done at Visma) Discussing about the topic: Why? How? Plan what to do. Plan how to test it. Ideology behind the collaboration: *"Each bigger task or project shall be done within a work group, becausee we believe that in the long run it is throught teamwork that we can deliver fast and with good quality every time"* ![Pair Programming](https://i.imgur.com/JK4BHEN.png) Other option for tracking bugs/issue is to make a decision should we fix it directly when those are found or not. Toyota's total quality management: problem is a problem that should stop the development. # Tips * Don't do exploratory testing in production if you aim to crash the system :D And only do it if it's valuable * Fix the problems as you notice them (rather right away than later) Testing cheat sheet: https://testobsessed.com/wp-content/uploads/2011/04/testheuristicscheatsheetv1.pdf Resource on testing: https://www.satisfice.com/resources ### Other, random (offtopic) notes Thanks for all contributors! You have received a point in Moodle. Visma uses Ruby, Codereviews, Paircoding Ruby linter is called Rubocop :D ![RuboCop](https://i.imgur.com/n0UfGLH.png)