Today on the Coverity Development Testing Blog’s continuing series Ask The Bug Guys I’m turning it around and asking you to figure out why a seemingly correct and totally awesome implementation of random.Next has a serious bug. That’s right, it’s everyone’s favourite game, Spot the Defect! Can you figure out where I wrote a bug without running the program? Check it out.
Category Archives: C#
Internal or public?
Suppose we have a sealed internal class C with a member M intended to be accessed from throughout the assembly:
internal sealed class C
{
??? void M() { ... }
}
Should the accessibility modifier at ??? be internal or public? Continue reading
Comment commentary
A recent highly-voted-up question on Programmers asked what’s wrong with comments that explain complex code? I think quite a bit about how I comment my code but rather than posting an answer on Programmers I thought I’d blog about it a bit here. I already discussed this topic — HOLY GOODNESS TEN YEARS AGO wow I have been writing this blog for a long time — and everything I said then still applies. But today thanks to Roslyn being open-sourced there is now a large corpus of my code on the internet so I can talk about my comment strategy in the context of real production code. Continue reading
ATBG: Ontogeny, phylogeny and virtual methods
I’m back! As always, I had a delightful August visiting friends and relatives in Canada. It was even more fun than usual because I’ve got a new boat. That is, a new-to-me boat; the boat is almost as old as I am. It’s a 1976 avocado-green Hobie 16. Here’s a video I shot of my first time trying it out: (I recommend watching it in HD resolution.)
Well enough chit-chat, back to programming language design. Today on the Coverity Development Testing Blog’s continuing series Ask The Bug Guys I’ll discuss how C++ is like a discredited theory of evolutionary biology and why that means you should not call a virtual method in a constructor.
What is up with transparent identifiers? Part two
This will be my last post before I head off for my annual vacation in Canada; see you again in September for more Fabulous Adventures in Coding!
Last time on FAIC I suggested a rule for translating nested “from” query expressions into a much simpler form than the C# specification requires. Why does the C# specification not use my simplified form?
In fact what I showed yesterday is pretty close to what the LINQ translation rules for SelectMany queries looked like shortly before shipping C# 3.0. The problem with it becomes apparent when you consider the following: Continue reading
What is up with transparent identifiers? Part one
A query expression in C# is, as you probably know, just a syntactic sugar for a bunch of method calls. For example,
from customer in customers where customer.City == "London" select customer.LastName
is a syntactic sugar for
customers. Where(customer => customer.City == "London"). Select(customer => customer.LastName)
A great many queries are straightforward variations on this pattern: the query is translated into a series of method calls where the arguments are lambdas formed from the range variables and expressions in the query. However, some of them are weird. This one is straightforward: Continue reading
Short questions
Finishing off my series of questions people asked during my recent webcast that I didn’t have time to answer, some short Q&A: Continue reading
Analyzing test code
Continuing with my series of answers to questions that were asked during my webcast last week…
Do the “checkers” (algorithms that find specific defect patterns) find defects in unit testing code?
If you want them to, yes. Continue reading
Copy-paste defects
Continuing with my series of answers to questions that were asked during my webcast on Tuesday:
The copy-paste checker example you showed was interesting. I’ve heard that NASA disallows copy-pasting in code because it is so error prone; is this true?
For readers who did not attend the talk: my favourite Coverity checker looks for code where you cut some code from one place, pasted it in another, and then made a series of almost but not quite consistent edits. An example taken from real world code is: Continue reading
Analysis vs code review
Thanks to everyone who came out to my “webinar” talk today; we had an excellent turnout. Apologies for the problems with the slides; there is some performance issue in the system where it works fine when it is not under load, but when there are lots of people using it, the slides do not advance as fast as they should. Hopefully the hosting service will get it sorted out.
As I mentioned last time, the recording will be edited and posted on the Coverity blog; I’ll post a link when I have one.
We got far, far more questions from users than we could possibly answer in the few minutes we had left at the end, and far too many to fit into one reasonably-sized blog post, so I’m going to split them up over the next few episodes. Today:
What percentage of defects does the Coverity analyzer find that should have been caught by code review? Continue reading