Below are online resources related to some of the tools and topics we will cover. Some of these will be discussed in class, but they will not generally be required. They are simply intended to be helpful in the completion of this course and beyond.
This section contains links to articles about the practice of testing rather than individual tools or technologies. Some of these articles might contradict one another because different practitioners have different opinions. Your mileage may vary, but it is useful to understand what others have said to jump-start developing our own opinions.
Software Testing Anti-patterns, a collection of questionable testing practices that developers sometimes fall into (http://blog.codepipes.com/testing/software-testing-antipatterns.html)
A Bunch of Tests, an enumeration of the different types of software testing with examples and discussion (https://www.hillelwayne.com/post/a-bunch-of-tests/)
The True Meaning of Unit Testing, a short, but thoughtful, discussion about the different types of testing and what they attempt to accomplish (https://codewithoutrules.com/2018/06/08/what-does-unittesting-mean/)
A pair of blog posts published by two of my coworkers that have some good basic information about testing practices (https://www.workiva.com/careers/workiva-life-blog/software-testing-methodologies-101) and (https://www.workiva.com/careers/workiva-life-blog/engineering-quality)
Really Friendly Command Line Intro - a short, free e-book about the Unix command line, geared toward Mac users but applicable to Linux as well (https://hellowebbooks.com/learn-command-line/)
One-day Udacity course that introduces a broad range of command line functionality (https://www.udacity.com/course/shell-workshop--ud206)
One-week Udacity course that goes into more detail on the topics discussed in the shorter version (https://www.udacity.com/course/linux-command-line-basics--ud595)
Advanced Bash Scripting Guide - basically everything there is to know about the Bash shell (https://www.tldp.org/LDP/abs/html/abs-guide.html)
A collection of fables and poems about software development - http://thecodelesscode.com/contents
Bash Automated Testing System (BATS) - a functional test framework for command line applications written in Bash (https://github.com/bats-core/bats-core)
Cram - a functional test framework for command line applications written in Python (https://pypi.python.org/pypi/cram)
Puppeteer - a Node.js (JavaScript) library that allows the Chrome web browser to be automated easily (https://developers.google.com/web/tools/puppeteer/)
Selenium - a tool for automating a web browser, usable from many different programming languages (https://docs.seleniumhq.org/)
Go - a compiled, statically typed language created by Google, popular as a replacement for Python and Ruby (https://golang.org/)
Node.js - a runtime that makes it possible to write non-browser applications in JavaScript (https://nodejs.org/en/)
Python - an interpreted language popular among web developers and scientists (https://www.python.org/)
ApprovalTests - test framework that makes gold file testing easier (http://approvaltests.com/)
Regular expression tutorials - there are hundreds of tutorials online, listed below are a couple that seem reasonable
https://www.regexone.com/ (friendly)
https://www.princeton.edu/~mlovett/reference/Regular-Expressions.pdf (comprehensive)
Regex tester, very useful for debugging complex regular expressions and generally exploring the various syntaxes that are available (https://regex101.com/)
Another regex tester, with a lot of powerful features for understanding why your regex does what it does (https://regexr.com/)
Java
JUnit (https://junit.org/junit5/)
Python
Go
Go testing package (https://golang.org/pkg/testing/)
Assert package (https://godoc.org/github.com/stretchr/testify/assert)
JavaScript
Mocha (https://mochajs.org/)
Should.js (https://shouldjs.github.io/)
Jasmine (https://jasmine.github.io/)
Also take a look at http://www.puppeteer.fun/creating-beautiful-test-output-from-mocha-tests-using-mochawesome/
We probably won't get to any of this material in class, but the world of software testing is incredibly vibrant and new ideas (or new interpretations of old ideas) regularly appear and gain traction so there is always something new to learn.
Property-Based Testing Basics, a description of property-based testing with links to additional resources (https://ferd.ca/property-based-testing-basics.html)
State of Mutation Testing at Google, a discussion about one way to verify that our tests are testing what we think they are testing, basically tests for our tests (https://ai.google/research/pubs/pub46584)
An Orchestrated Survey on Automated Software Test Case Generation, a survey of "generative testing", which attempts to automatically create useful test cases (https://cs.stanford.edu/people/saswat/research/ASTJSS.pdf)
An interesting argument about how types can be more useful than traditional tests (https://www.tedinski.com/2018/06/12/types-can-be-pervasive.html)