-
C and C++ Aren’t Future Proof
A C or C++ program is expected to follow a collection of rules such as “don’t access out-of-bounds array elements.” There are a lot of these rules and they are listed (or are implicit) in the various language standards. A program that plays by all of these rules—called a conforming program—is one where we might, potentially,…
-
Hiding Bugs from Branch Coverage
It’s hard to know when a piece of software has been sufficiently tested. Code coverage metrics are a partial answer. Basically, a coverage metric is a function that maps each execution to a set of coverage targets. For example, if we are performing function coverage, then the universe of targets is comprised of functions from…
-
When Software Ages Badly
In some respects, software ages gracefully: it generally starts out working poorly but gets better over time as bugs are fixed. Unlike hardware, there’s no physical wearing out of parts. This post is about a few ways in which software doesn’t get better with age. In The Mythical Man Month Brooks observes that any sufficiently complex software…
-
Is the Browser the New OS?
Yes, this is an old question. I still think it’s interesting. Disclaimer: I haven’t tried out a Chromebook yet. First, let’s look at the situation as of late 2012. The applications I use generally fall into three categories: Web-based. Native, but easily available on Windows, Mac, and Linux. These include a file browser, a shell, Emacs,…
-
Software Testing Using Easy Cases
Chapter 2 of Street Fighting Mathematics is called Easy Cases. The idea is very simple: A correct solution works in all cases, including the easy ones. Solution 2 in this writeup of the napkin ring problem is a fun example of applying this principle. Easy cases can be exploited for software testing as well as…
-
Oracles for Random Testing
Random testing is a powerful way to find bugs in software systems. However, to actually find a bug it’s necessary to be able to automatically tell the difference between a correct and an incorrect execution of the system being tested. Sometimes this is easy: we’re just looking for crashes. On the other hand, there are…
-
How Does Formal Verification Affect Software Testing?
This has been a difficult piece to write and I’ve already deleted everything and started over more than once. So, I’m going to take the easy way out and structure it as a sequence of questions and answers. What does formal verification mean? Something like “using mathematical techniques to convincingly argue that a piece of…