Regarding Software Bugs (Interesting article)

Collapse
X
 
  • Time
  • Show
Clear All
new posts
  • Consultant01

    #1

    Regarding Software Bugs (Interesting article)

    LINK TO ORIGINAL ARTICLE
    Creating quality software products means knowing when to fix bugs and when to leave well alone, writes Eric Sink.


    <snip>
    Inside IT
    Why we all sell code with bugs

    Creating quality software products means knowing when to fix bugs and when to leave well alone, writes Eric Sink

    Thursday May 25, 2006
    The Guardian

    The world's six billion people can be divided into two groups: group one, who know why every good software company ships products with known bugs; and group two, who don't. Those in group 1 tend to forget what life was like before our youthful optimism was spoiled by reality. Sometimes we encounter a person in group two, a new hire on the team or a customer, who is shocked that any software company would ship a product before every last bug is fixed.

    Every time Microsoft releases a version of Windows, stories are written about how the open bug count is a five-digit number. People in group two find that interesting. But if you are a software developer, you need to get into group one, where I am. Why would an independent software vendor - like SourceGear - release a product with known bugs? There are several reasons:

    · We care about quality so deeply that we know how to decide which bugs are acceptable and which ones are not.

    · It is better to ship a product with a known quality level than to ship a product full of surprises.

    · The alternative is to fix them and risk introducing worse bugs.

    All the reasons are tied up in one truth: every time you fix a bug, you risk introducing another. Don't we all start out with the belief that software only gets better as we work on it? Nobody on our team intentionally creates new bugs. Yet we have done accidentally.

    Risky changes

    Every code change is a risk. If you don't recognise this you will never create a shippable product. At some point, you have to decide which bugs aren't going to be fixed.

    Think about what we want to say to ourselves just after our product is released. The people in group two want to say: "Our bug database has zero open items. We didn't defer a single bug."

    The group 1 person wants to say: "Our bug database has lots of open items. We have reviewed every one and consider each to be acceptable. We are not ashamed of this list. On the contrary, we draw confidence because we are shipping a product with a quality that is well known. We admit our product would be even better if all these items were 'fixed', but fixing them would risk introducing new bugs."

    I'm not suggesting anybody should ship products of low quality. But decisions about software quality can be tough and subtle.

    There are four questions to ask about every bug. The first two are customer ones, and the next two are developer ones.

    1) How bad is its impact? (Severity)

    2) How often does it happen? (Frequency)

    3) How much effort is required to fix it? (Cost)

    4) What is the risk of fixing it? (Risk)

    I like to visualise the first two plotted on a 2D graph, with severity on the vertical axis. The top of the graph is a bug with extreme impact ("the user's computer bursts into flames") and the bottom one has very low impact ("one splash screen pixel is the wrong shade of grey").

    The horizontal axis is frequency: on the right side is a bug that happens very often ("the user sees this each day") and on the left, one that seldom happens.

    Broadly speaking, stuff gets more important as you move up or to the right of the graph. A bug in the upper right should be fixed. A bug in the lower left should not. Sometimes I draw this graph on a whiteboard when arguing for or against a bug.

    Questions three and four are about the tradeoffs involved in fixing the bug. The answers can only ever make the priority of a bug go down - never up. If, after answering questions one and two, a bug does not deserve attention, skip the other two. A common mistake is to use question three to justify fixing a bug that isn't important. We never make unimportant code changes just because they're easy.

    Every code change has a cost and a risk. Bad decisions happen when people make code changes ignoring these two issues.

    For instance, our product, Vault, stores all data using Microsoft SQL Server. Some people don't like this. We've been asked to port the back end to Oracle, PostgreSQL, MySQL and Firebird. This issue is in our bug database as item 6740. The four questions would look like this:

    · Severity: People who refuse to use SQL Server can't use Vault.

    · Frequency: This "bug" affects none of our users; it merely prevents a group of people from using our product.

    · Cost: Very high. Vault's backend makes extensive use of features specific to Microsoft SQL Server. Contrary to popular belief, SQL isn't portable. Adapting the backend for any other database would take months, and the maintenance costs of two back ends would be quite high.

    · Risk: The primary risk lies in any code changes made to the server to enable it to speak to different backend implementations of the underlying SQL store.

    Obviously, this is more of a feature request than a bug.

    Example: Item 10016. Linux and MacOS users have problems over how end-of-line terminators show up. Last October, we tried to fix this and accidentally introduced a nastier bug that prevented users creating new versions of a project. So the four questions for 10016 would look like this:

    · Severity: For a certain class of users, this bug is a showstopper. It does not threaten data integrity, but makes Vault unusable.

    · Frequency: This bug only affects users on non-Windows platforms, a rather small percentage of our user base.

    · Cost: The code change is small and appears simple.

    · Risk: We thought - wrongly - that the risk was low.

    If testing had told us that the risk was higher than we thought, we would have revisited the four questions. Because the frequency is relatively low, we might have decided to defer this fix until we figured out how to do it without breaking things. In fact, that's what we ended up doing: we "undid" the fix for Bug 10016 in a minor update to Vault, so it's now open again.

    Contextual understanding

    Not only do you have to answer the four questions, you have to answer them with a good understanding of the context in which you are doing business. You need to understand the quality expectations of your market segment and what the market window is for your product. We can ship products with "bugs" because there are some that customers will accept.

    I know what you want, and I want it too: a way to make these decisions easy. I want an algorithm with simple inputs to tell me which bugs I should fix and in what order.

    I want to implement this algorithm as a feature in our bug-tracking product. Wouldn't it be a killer feature? In the Project Settings dialog, the user would enter a numeric value for "Market Quality Expectations" and a schedule for the closing of the "Market Window". For every bug, the user would enter numeric values for severity, frequency, cost and risk. The Priority field for each bug would be automatically calculated. Sort the list on Priority descending and you see the order in which bugs should be fixed. The ones near the bottom should not be fixed at all.

    I'd probably even patent this algorithm even though, in principle, I believe software patents are fundamentally evil.

    Alas, this ethical quandary is not going to happen, as "Eric's Magic Bug Priority Algorithm" will never exist. There is no shortcut. Understand your context, ask all four questions and use your judgment.

    Experienced developers can usually make these decisions quickly. It only takes a few seconds mentally to process the four questions. In tougher cases, gather two co-workers near a whiteboard and the right answer will probably show up soon.

    · Eric Sink is a software developer at SourceGear. A longer version of this article appeared on his website: see http://software.ericsink.com/

    · If you'd like to comment on any aspect of Technology Guardian, send your emails to tech@guardian.co.uk



    </snip>

    The insolent brats who think "The Man" at EA is lazy not to fix bugs need an education in how these things really work. I hope this post helps.
  • redrider

    #2
    Re: Regarding Software Bugs (Interesting article)

    I didnt read the long version of this article, just the part you presented here. It sounds a whole lot like an intermittent type problem I have to deal with in my line of work. Sometimes you have to let it ride untill it is cost effective to fix it. A good repairman usually knows when to say when and also when a temp fix is needed to carry you over to the real fix. The hardest thing anyone has to learn to do is say "I dont know". After learning that, the next phrase that goes with that is " But I will find out".
    Again really good article! . . . . . . .Red

    Comment

    • AnotherEd

      #3
      Re: Regarding Software Bugs (Interesting article)

      The insolent brats who think "The Man" at EA is lazy not to fix bugs need an education in how these things really work.
      This article isn't an excuse to allow bugs that affect game play either. Obviously the four questions he poses are subjective for the most part. When people complain about bugs, the implication is they are indicating the bug's frequency is too high and it's impact is too noticeable. This is what they are debating. You can't just post an article like this and claim everyone should now stfu...

      Comment

      • Consultant01

        #4
        Re: Regarding Software Bugs (Interesting article)

        more people should read this the next time they complain about bugs.

        Comment

        • AnotherEd

          #5
          Re: Regarding Software Bugs (Interesting article)

          Why? What would it solve? Perhaps it might solve the ad hominem attacks on EA. But if they still are upset about a bug, they are upset about a bug. Not much will change that.

          Comment

          • Limech

            #6
            Re: Regarding Software Bugs (Interesting article)

            I completely understand the article. However, there's one thing that I don't understand.

            Assuming DICE developers are in group 1 (those that know that products ships with bugs) then I also have to assume they know that every time you try to fix a bug you can introduce new ones.

            Since the same applies to writing in new features, why does DICE feel like adding new features at this point when not all the bugs are fixed?

            Example: They introduce an in-game UAV model. Nice, but hardly useful other than to give you some indication (if you take the time to look up or just happen to see it) that the enemy knows exactly where you are.
            They introduce this new feature that nobody asked for and then the playback of demos crashes the application as soon as the commander puts a UAV in place in a match.

            So given that lesson's learned (if they didn't already know), why would they proceed to change stuff like the logic behind squad joining/leaving and dropping vehicles from the sky?

            Granted, some changes were nice to see, like the more potent anti-air, even if it meant some bugs got introduced with regards to the oil tower fires on Zatar for example.

            My guess is that they introduce some stuff to test out things. For example, the vehicle drop. I heard they are planning to have it in BF2142? It then makes sense to add it now, find out how the population uses it (discover cartillery) and then make a decision if it is indeed wise to add it to the next product.

            Comment

            • NOSKills

              #7
              Re: Regarding Software Bugs (Interesting article)

              IMO, if you create a patch that is more bugged or has worse bugs than the previous patch, then you revert to the previous patch and start from scratch or leave it alone. The underlying intention for a pacth is to fix things, not the other way around. I am baffled everytime I am penalized for TKing a teammate that shows up red, or I go around getting TKed by my teammates because of a bug. I cannot see how this is acceptable to anyone. All "whinning" regarding this patch is justified! We whine because we care!

              Comment

              • lmimmfn
                Member
                • Sep 2006
                • 247

                #8
                Re: Regarding Software Bugs (Interesting article)

                Im a software developer, and while i agree with most points above its a heavy read( after a days work on code ), it boils down to cost/benefit analysis of fixing something and the risk involved. Software will ALWAYS have bugs its a matter of deciding which have the highest priority and which are of most benefit to the customer. Customer bugs are of the highest priority but also things like crashes etc. MUST be fixed ASAP
                BIT tests and Unit tests are added for every fix to test in every concievable use case, reducing costs in the long run

                In relation to DICE they do neither, whoever wrote the server browser should be strung out and shot, this should have been caught by the developer after implementation via a deskcheck, if not there then the cost increases and it goes to function test, if they find it( which they obviously didnt for BF2 ) then this requires a redelivery and package rebuild( increasing cost ), if its caught even later then a redelivery requires it to be regression tested again by function test etc., as you can see this all snowballs the later its found with the highest cost being when its delivered to the customer( US in BF2 case ) where its found.
                Dice made a huge loss in their last results and its no wonder why, also new features are rarely if ever introduced to a maintainence product. The reason being that extra code increases the code base, thus increasing the maintainence cost as its more likely to cause more problems

                For our team,we only introduce new features if they are requested by the customer( we never asked for vehicle drops ) and then it must be costed by every organisation involved, if the cost is deemed acceptable and its a high priority customer requirement then it is implemented and we live with it, so why was vehicle drop introduced? well i think it must have resulted from a cost/benefit of trying it with the community and based on the results its added to BF2142

                Another point of interest is if our server crashes then a rollback is performed the moment the crash is found and deemed to be the result of a bug fix, this usually happens within 2 days, soo why are we still on 1.3 with CTD's and server disconnects, i blame BF2's project manager, this should have been rolled back asap unless of course Dice dont care anymore as its EA that are making the money from server rental, and if people stop renting servers because they are fed up with this nonsense DICE wont care but EA will

                Comment

                Working...