Slashdot Mirror


Programmers Learn to Check Code Earlier for Holes

Carl Bialik from WSJ writes "Many companies are teaching programmers to write safer code and test their security as software is built, not afterward, the Wall Street Journal reports. This stands in contrast to an earlier ethos to rush to beat rivals with new software, and, of course, brings tradeoffs: 'Revamping the software-development process creates a Catch 22: being more careful can mean missing deadlines.' The WSJ focuses on RIM and Herb Little, its security director, who 'uses Coverity every night to scan the code turned in by engineers. The tool sends Mr. Little an email listing potential red flags. He figures out which problems are real and tracks down each offending programmer, who has to fix the flaw before moving on. Mr. Little has also ramped up security training and requires programmers to double-check each others' code more regularly.'"

47 of 212 comments (clear)

  1. This just in: by r_jensen11 · · Score: 5, Funny

    Writers are encouraged to proofread.

    1. Re:This just in: by AcidTag · · Score: 2, Informative

      The difference is that writing a paper that can stand a proof-read means it has one execution path, you read the article top to bottom and are done.

      A program has any number of execution combinations, and without a decent test-harness some paths may not be checked. If ever piece of software written was tested in every concievable scenario we wouldnt have any bugs, when that day comes I'll be a happy coder. The more 'features' one adds to a program, the problems of detecting bugs increases. Simply creating a piece of code once that doesnt break, doesnt mean the addition of more code that does something else wont break the older code.

      So for every new line of code, you have to go back and verify that all the previous lines of code have no negative outcome to the new line. So we developers use our experience and foresight to hopefully avoid this problem, but the problem can still occur... How many rev's of the Linux kernel we upto now?

      But what is a Bug? Is it simply that a new piece of code was written poorly?
      Is the bug the new code you wrote, or the interaction with the old code? I can write solid bug free code all day long, as long as it doesnt have to interact with anything.

    2. Re:This just in: by orielbean · · Score: 2, Funny

      This just in after that : Business models sacrifice quality for speedy delivery of product. :-)

    3. Re:This just in: by Anonymous Coward · · Score: 5, Insightful

      No point you proofreading you own code. You see what you think you've written, not what you've actually written, therefore don't spot any problems with it.
      The trick is to get 2-3 other people to review it.

      1. The earlier you spot a defect, the cheaper it is to fix.
      2. Test results are only as good as the test code written.
      3. Edge cases don't normally show up in test code. Test cases are typically designed to show that the code works, rather than finding the boundary where it fails.
      4. You can suggest better ways of writing the code/learn new tricks during code reviews.

    4. Re:This just in: by kcbrown · · Score: 2, Informative
      No point you proofreading you own code. You see what you think you've written, not what you've actually written, therefore don't spot any problems with it.

      Sometimes.

      But sometimes, you do spot problems. I'll often spot errors in prose I've written here prior to submitting it. It's one of the reasons I use the "Preview" button (as shocking and unconventional as that may be). I don't necessarily catch everything, but I do catch a lot.

      It's the same for coding. If I go over what I've written first, there's a decent chance I'll spot something wrong. I won't necessarily spot everything, but something is better than nothing.

      Back in college they made us use punch cards on a mainframe in one of our classes. I'm sure part of the reason was that they didn't (at the time) want to upgrade to newer equipment because of the cost, but another part was to force people to proofread their code before submitting it for compilation/execution. The turnaround cycle was long enough that it was worth reviewing the code in detail to ensure that it would compile and that it would do what you intended. After a while, you got good at this.

      There's not nearly the incentive to do that with an interactive system, and in some ways that's unfortunate. The discipline of reviewing your code is useful. That said, the perception of improved productivity of letting the machine figure out all the problems is so great that even those who have done it the other way will naturally gravitate towards letting the machine do all the work. People are naturally lazy that way, and there's no getting around human nature.

      The bottom line is that you're probably better off reviewing your own code, even if it feels less productive.

      --
      Use 'slashdot stuff' in the subject line in any email you send me if you want to get past the spam filter.
    5. Re:This just in: by Psyonic · · Score: 2, Insightful

      I hate to nitpic, but I have to object to your statement that, "If ever piece of software written was tested in every concievable scenario we wouldnt have any bugs, when that day comes I'll be a happy coder." That would be true if they all got fixed, but having worked in the business for a little while I can say that most companies know of hundreds, perhaps thousands of small bugs in their code, but they just don't know the manpower or motivation to get them all fixed.

      --
      A man walks into a bar. The bartender says, "What is this, some kind of joke?"
  2. static_analysis++ by tcopeland · · Score: 4, Interesting

    Static analysis is great stuff. I've worked on an open source Java static analysis tool, PMD, for the past few years and I've gotten lots of feedback from folks who have used it to find all sorts of things in their code. Just a quick scan for unused variables can yield some excellent results, and the copy/paste detector works quite nicely too. And there's a book, too!

    Coverity's doing a nice job with their tech marketing, too - l think a couple of open source projects are using the stuff they found to clean things up. At least, there's been a fair amount of traffic on the Ruby core list about some things Coverity's scan found. Good times...

    1. Re:static_analysis++ by Jonboy+X · · Score: 2, Insightful

      Umm, about your comment: The link goes to a blog entry of yours about the inefficiency of using StringBuffer.append(String) to append a single-character string instead of just using StringBuffer.append(char). Sure, it's a good idea, but there's another kinda-orthogonal piece of advice that will likely improve runtime performance a good bit more:

      The vast majority of the code that uses StringBuffer could save a bunch of time by using the new-ish(JDK 1.5) StringBuilder class, which has the same API but is not internally synchronized. This translates to a runtime savings of approximately a KAJILLION percent by avoiding the horrendous synchronization overhead hit when the StringB*ef in question is only being used by one thread. It's very similar to using an old-skool Vector when an ArrayList will do just as well and not slow down your code.

      Like I say every thime this kind of thing comes up, Java isn't slow (any more), but we're certainly not helping matters with this kind of sloppy coding.

      Also, back on topic, try writing financial software some time. It's like a different world. Everything is unit tested, and the unit tests don't so much check for bugs as prove that your code works. That way, when a million-dollar bank wire doesn't go through, you can prove that it's not your head that should be on the chopping block. It's actually kind of refreshing knowing that any code you touch is pre-vetted so you don't have to worry about trusting it enough to build on it.

      --

      "In a 32-bit world, you're a 2-bit user. You've got your own newsgroup, alt.total.loser." -Weird Al
    2. Re:static_analysis++ by Stellian · · Score: 5, Informative

      Enough whith Coverity allready. It's like the 50th slashdot article that talks about this.
      FYI, it costs about 50.000 $ for a medium sized project (500.000 lines), and is no more than a lint on steroids. Here is a somewhat cheaper competitor.
      None of this tools is a mach for a manual audit performed by a professional.

    3. Re:static_analysis++ by Coryoth · · Score: 5, Insightful

      Also, back on topic, try writing financial software some time. It's like a different world. Everything is unit tested, and the unit tests don't so much check for bugs as prove that your code works.

      Unit tests don't prove your code works any more than drawing a few right angled triangles and measuring the sides proves Pythagoras' theorem. If you want to prove your ode works you use a theorem prover. To do tht you usually need to provide more detailed specification (beyond just type signatures) about how your code is intended to function. That tends to be more work, though if you really need to know your code is going to work it can often save time in the long run (over ridculously long and exhaustive testing). There are things out there that provide toold support for theorem proving aout your code: SPARK Ada along with the SPARK tools provides a powerful theorem prover, and HasCASL with CASL tools (including the HOL theorem prover) provides string theorem proving for Haskell. Even ESC/Java2 utilises a theorem prover (called Simplify) to provide extended static checking of Java code. I'm sure there are more examples.

      My point is not that Unit testing is bad (it's very good), but that you shouldn't overstate its effectiveness. Unit tests are a great way to provide a reasonable degree of assurance that your code will hopefully ork as intended. It isn't a substitute for actual assurance however. It really depends on exactly how sure you need to be - how much an error will cost, and whether that can be tolerated.

      Jedidiah,

    4. Re:static_analysis++ by Coryoth · · Score: 3, Insightful

      I've worked in industry as a mathematician. When we say we're going to prove something we actually prove it, rather than just tossing out a few random examples for demonstration. Given that a piece of software is, at its heart, just a lot of mathematics, and the fact that it really is possible to prove things about code in the real sense of the word, I would be very careful about saying you "prove" your software works.

      Jedidiah.

    5. Re:static_analysis++ by IamTheRealMike · · Score: 4, Insightful
      FYI, it costs about 50.000 $ for a medium sized project (500.000 lines)

      Yes it's incredibly expensive. Yet, plenty of well known companies pay for it, so I suspect it's worth it to them.

      is no more than a lint on steroids.

      Er, no. No, no, wrong, no.

      I've got access to the Coverity results for WineHQ. It's already found many problems that evaded both manual code review and unit testing. Its rate of false positives is remarkably low once properly configured. A lot of these problems would only occur in obscure circumstances or on error paths - but these are precisely the kind of errors that unit testing tends not to reveal. It can detect problems like race conditions or memory leaks that lint cannot. The recent X security bugs were revealed by the tool first.

      I've seen tools like this before, but not one as good as this. I've never used competing commercial products, so cannot speak as to their effectiveness, but for a large C++ codebase I would certainly be happy to have such a tool helping me out.

      Microsoft have used similar programs developed by MS Research on the Windows codebase for some time now and they're apparently very effective. Quite a lot of security problems revealed by them were silently fixed along with other problems in updates.

      None of this tools is a mach for a manual audit performed by a professional.

      Totally wrong. Every patch that gets checked into Wine passes code review by at least Alexandre who is without question the best programmer I've ever met. He is easily as good as Linus but his much quieter and more conservative personality means he doesn't get Linus' press attention (a good thing, imo). And all the patches are posted to a public mailing list where several other people can and do review patches too.

      Static analysis can reveal problems that simply don't get spotted by the human eye because they're too complicated to follow, because they occur in very weird situations, or because the code evolves over time under the direction of many different people and inconsistencies creep in.

    6. Re:static_analysis++ by addaon · · Score: 2, Interesting

      You say "I am unable to prove this correct" and, if such a proof is required for acceptance of the feature, re-write in such a way that you can deliver it along with a proof, or demonstrate that doing so is unreasonable.

      --

      I've had this sig for three days.
  3. I hold any bet by Opportunist · · Score: 5, Insightful

    After missing a few deadlines, the marketing goons will push to abandon security for more crap on the shelves.

    After all, that's how the software market works. People buy anything. "LOOK! THE NEW (insert program/OS name here)! I MUST HAVE IT!"

    Stable?
    Secure?
    Mem-leak free?
    In one word: FINISHED?

    Who cares? It's new, it's shiny, it's been all over all the mags and preview pages, the hype is on, WANNAHAVE!

    And as long as we keep buying the unfinished crap, it won't change.

    Yes, I'm sure everyone in the tech departments would see this as the right way to go. Test your software, preferably during development, not afterwards. Go through memleak tests, go through stability tests, have some experienced whitehats poke at it, and if it survives, let it go into beta.

    If anyone gets that idea past marketing, I will bow down to him.

    --
    We used to have a Bill of Rights. Now, with the rights gone, all we have left is the bill.
    1. Re:I hold any bet by NineNine · · Score: 3, Interesting

      You're right... The problem is that software consumers already have a mindset that makes broken programs OK, and the way to fix them is by buying the new version. One of the worst offenders that I've seen in Intuit. Intuit is famous for releasing new programs every single year, regardless of whether or not anything has actually changed. They're also notorious for simply not fixing old code after the new version is released, with the official response of "Your problem is fixed in the new version. Buy that one." This is grossly fraudulent, in my opinion.

      The problem is that we all, as consumers, already accept this kind of shit as acceptable. I wish I knew a way to reverse this, but realistically, I don't see this mindset changing any time soon.

    2. Re:I hold any bet by Gnavpot · · Score: 2, Insightful
      After missing a few deadlines, the marketing goons will push to abandon security for more crap on the shelves.
      Is it a fact that early testing will delay a project?

      I must admit that I don't know much about large software development projects. But I do know a lot about large development projects in my own profession. It seems that any problem which was unresolved/ignored/insignificant during early development will turn into huge problems a few days before a deadline.

      Are software projects different? I would think that early warnings about bad coding practices at least would make a programmer change his coding habits so he doesn't make the same error again and again and finally has to correct it in 200 different parts of the code after the final quality check.
    3. Re:I hold any bet by TheGreek · · Score: 2, Insightful

      If I'm guilty of infringement, I can't give a shit. Legal or not, I don't believe that copyright should be binding past ten years - check my past posts, I've got a record of saying five-ten should be the copyright limit, and I do live by that.

      Unfortunately for you, what you believe doesn't matter.

      "I'm sorry, officer. I don't believe that the speed limit should only be 45 on this road. I'm far enough away from the urban area, aren't I?"

  4. Catch 22? by Tourney3p0 · · Score: 3, Insightful
    Revamping the software-development process creates a Catch 22: being more careful can mean missing deadlines.

    Alright, so writing better code means you might miss a deadline. But not writing better code means.. things are exactly as they've always been, or the software development cycle will be revamped appropriately?

    Not much of a catch 22.

    1. Re:Catch 22? by Kapsar · · Score: 2, Insightful

      A Catch 22 is a "damned if you do, damned if you don't" circumstance. In this case if you miss your deadline because you created a better product, or you make your deadline but end up with crap and then miss it later. catch 22 is not an old school mentality, it's a realistic way of looking at situations, read the book you'll understand then.

      --
      "Doubt is not a pleasant condition, but certainty is absurd." - Voltaire
  5. QA is..... by Wisp · · Score: 3, Funny

    The new Black!

  6. I do this personally. by cableshaft · · Score: 3, Insightful

    I usually do some quick general design and planning beforehand, then go in and write the software one element at a time, testing to make certain it works properly before moving on to the next. The benefits seem to far outweight doing it the other way, for me, as it reveals problems I wouldn't have noticed in the planning stages in the design or implementation early, and it also helps isolate where any bugs would be located at, so I'm not checking all over the place.

    I'm not sure if it really saves me any time in the long run, but I'm much more comfortable coding this way, which is probably more important.

    Also, so far, I've been the only coder for my projects at work and my games at home, so it *might* not be quite as effective for large teams, although what I've read on XP seems to suggest that it can still be very effective.

    --
    Creator of the popular web game Proximity
  7. Catch-22 by kentyman · · Score: 5, Informative
    Revamping the software-development process creates a Catch 22: being more careful can mean missing deadlines.
    That's not a Catch-22. That's just a tradeoff.
    --
    You know where you are? You're in the $PATH, baby. You're gonna get executed!
  8. Slippery slope by metamatic · · Score: 3, Funny

    Jeez, next thing programmers will be expected to document their code.

    What will the XP weenies do then?

    --
    GCHQ Quantum Insert installed. If only our tongues were made of glass, how much more careful we would be when we speak
  9. Ain't gonna last by FiveDollarYoBet · · Score: 5, Funny
    Those aren't security holes.... They're undocumented network transfer features!

    It sounds good and all but there's a direct correlation between the deadline and how bullet proof the code is.

    insert sig here

  10. Well I learned that at Uni by Yrd · · Score: 4, Interesting

    Correct-by-construction programming is a fundamental part of a proper education in software engineering, I would have thought.

    Where did these people learn to code?

    --
    Miri it is whil Linux ilast...
    1. Re:Well I learned that at Uni by truthsearch · · Score: 4, Interesting

      In the real world... where the client says, "I don't care about security, just get it done!" Of course they start to care after a break-in, so they have things fixed in hind-sight.

  11. That's why... by GillBates0 · · Score: 5, Funny
    I always make sure I use the highest quality bits when I program. You'll find none of those low-quality, flimsy and occasionally perforated bits in my code.

    Agreed, periodic checking for holes has it's own value, but nothing beats using the best quality, industrial-strength (tm) bits to start with, moreso while developing reliable software in the post-911 world.

    --
    An Indian-American Hindu committed to non-violent thought/speech/action alarmed by the global explosion of radical Islam
  12. This Just In From Microsoft by Metabolife · · Score: 4, Funny

    After taking this training routine, Microsoft says that Vista will be delayed another 2 years.

  13. gets() and people by mkiwi · · Score: 3, Insightful
    Sometimes it amazes me what people do with the C programming language, for good or for bad. Take some pro programmers who I caught using gets() instead of fgets(). I'm not a rocket scientist, but I'd say anything that uses gets() is a serious problem, since that function does no bounds checking and is prone to attacks.

    How do people learn to code like this? Is it just early habits that do not go away?

    1. Re:gets() and people by chthonicdaemon · · Score: 2, Insightful

      In many cases they learn to program for their own projects, where speed/ease of coding may be more important than security. If you just pick up an old C book, no-one warns you to stay away from gets(), so people learn to use it, and it works. Then they get told to use something else that is more secure but it is slow or more difficult to learn, so they don't.

      In my building there is a whole floor of guys doing simulations in Fortran 77. When I tell them about new functions in F90 or about ways they could solve their problem in C++ they have only one question: "isn't that going to be slow?".

      So ultimately the problem is that most "bad" code comes from people who have hacked together a useful tool by leveraging their experience in fields where security or stability doesn't really matter. They have probably been coding successfully for some time without ever seeing anything wrong with their approach until they used it out of context.

      --
      Languages aren't inherently fast -- implementations are efficient
  14. OT: not a Catch 22 by cain · · Score: 4, Insightful

    The example in the write up is not a catch 22. A catch 22 requires two things be done, each one before the other, thus neither can be done.

    1. Re:OT: not a Catch 22 by LargeWu · · Score: 2, Insightful

      No, I think you have failed to comprehend the example from the book. Go back and read it again. A catch-22 is a circular set of conditions that can only be fulfilled if the other is true. The second condition in your example falsely assumes that code which is released on schedule cannot also be bug free. Furthermore, "Damned if you do, damned if you don't" is a lose-lose situation, not a catch-22. This phrase assumes that "do" and "don't" are not dependent on each other. Of course, if you have to "do" in order to "not do", and have to "not do" in order to "do", then you've got a catch-22.

  15. Thinly veiled ad? by Mr+Z · · Score: 5, Insightful

    Is it just me, or does the article just read like a thinly veiled advertisement for Coverity? It's reads like a generic commercial template: "Meet Bob. Bob thought everything was fine. But then he discovered he had Problem X. That's when Bob discovered Company Y with Solution Z." (etc. etc.).

    1. Re:Thinly veiled ad? by cant_get_a_good_nick · · Score: 3, Interesting

      Seems they've been astroturfing for a while. wasn't that long ago they did a big writeup on flaws Coverity found in certain FLOSS projects. at least then they found some bugs and helped fix.

      I'm all for tools like this. YOu can find a billion text editors on sourceforge.net but very few good programmers tools. Just this smells like an add for me.

  16. Good at publicising themselves by derek_farn · · Score: 5, Informative

    Tools are a cost effective way of checking source for lots of different kinds of problems. I have no direct experience of the Coverity tool, but see that they are certainly good at getting lots of publicity. A List of static analysis tools is available on Wikipedia.

  17. Or, ... by UbuntuDupe · · Score: 2, Funny

    to paraphrase Oscar Wilde: Anyone who doesn't have enough time to do it right, has enough time to do it again.

  18. Deadlines are set wrong by 192939495969798999 · · Score: 4, Insightful

    If being careful makes you miss the deadline, then the deadline is set wrong. Shipping a product with security holes that you knew about + could've fixed with a bit more time is how we got into the position we're in. Pushing back a release date to fix them first should be the rule, not the exception.

    --
    stuff |
  19. Obligatory Fight Club by Weaselmancer · · Score: 3, Funny

    Narrator: A new program written by my company is shipped on time, but with bugs. The network stack locks up. The OS crashes and burns and scrambles the hard drive. Now, should we initiate a code review? Take the number of licenses in the field, A, multiply by the probable rate of failure, B, multiply by the average out-of-court settlement, C. A times B times C equals X. If X is less than the cost of a code review, we don't do one.
    Business woman on plane: Are there a lot of these kinds of bugs?
    Narrator: You wouldn't believe.
    Business woman on plane: Which software company do you work for?
    Narrator: A major one.

    --
    Weaselmancer
    rediculous.
  20. Security is a Voyage Not a Destination by Greyfox · · Score: 2, Insightful

    I see static analysis and code auditing as an excellent step on the road of security, but at a completely different level you have to also make sure that the processes you're coding are also secure. All the secure programming techniques in the world will not help you if your design itself has flawed assumptions. So not only should you program for security but you should also design for security.

    --

    I'm trying to teach myself to set people on fire with my mind... Is it hot in here?

  21. Laws? by VGR · · Score: 2, Insightful
    From the article:
    Many companies rushed to beat rivals with new software, and checking for bugs that could later be exploited by hackers was often seen as a waste of time. That has begun to change in the past few years as new laws force the disclosure of security holes and breaches...
    What laws are these? This is the first I've heard of such a thing. And why do I have a feeling these laws have a clause that directly or indirectly exempts certain large software companies?
    --
    The Internet is full. Go away.
  22. I don't buy the idea of missed deadlines by Allnighterking · · Score: 2, Insightful

    The problem is one of doing things in software the way Automobile companies did in the 60's and Japan stopped doing in the 70's. Traditionally in software development you design... then send to engineering to build then send to QA for an endless cycle of test bitch fix bitch retest bitch fix bitch test bitch deadline ooops market. QA should be involved the moment some fool says "I have an idea" and stay in the loop all the way. Testing in increments as things are built. I've done more in a white paper on my site as for writing this all up but this is the jist. Integration of Quality control from the start means less problems. The idea of. I'll fix it later sucks because it never gets to be later.

    --

    I'm sorry, I'm to tired to be witty at the moment so this message will have to do.

  23. Its all in the build by z4pp4 · · Score: 2, Insightful

    Everybody makes mistakes. That is how we learn and progress to a more experienced state of being.
    By telling people not to make mistakes is letting them know that they cannot try out new and inventive, sometimes even shorter ways of doing things.
    Unit testing is fine and should be encouraged, but really the thing you want to do here is make your build process do all the donkey work as much as possible, and let your programmers worry about the programming issues and doing things smarter and achieve the most with the least possible effort.
    The build process can do the following, if you do it right:
    -> Build the code to executable format and even CD ISO distributables (duh)
    -> Do code indenting and formatting etc. to conform to a standard.
    -> Do unit testing on code segments, and even tell you what % parts were not tested.
    -> Scan the code for bad practices such as strcpy and unmatched mallocs.
    -> Gather all your TODO's and your FIXME's into an output file.
    -> Run the program live and do input fuzzing testing, with extended debugging logs.
    -> Run nessus and other attack scripting languages to take care of the obvious issues.
    With all these measures in place, it is a simple matter of having *somebody* go through the build logs and make a priority / TODO list, fixing security first and stability later, and the small imperfections last.

    But alas. Nobody looks at the logs. Logs are boring. Thats why you have to keep them visible. Maybe via RSS, IM or email?

  24. Wow. A 'Developer' article by ishmalius · · Score: 4, Insightful
    I'm just so happy that a "Developer" article actually made the front page. I have been afraid that the tech level of the audience of Slashdot has been falling lately. Compare it to the number of "Game" articles on the front page.

    But to stay with the topic, analysis tools are just that: tools. They are not a cure to chronic software problems. Developers are not excused from the responsibility of at least attempting to write quality code.

    Some current project development methods really contribute to buggy and insecure code. Example: XP. I really think that some aspects of XP programming are a bad idea. Namely, the "code as fast as you can" aspect of it is fraught with errors. A more thoughtful, disciplined approach might seem like it is terribly slow. Yet being inherently less buggy, it can reach the target faster than the sloppier, more haphazard approach. This is much like the Tortoise and the Hare. Or maybe a better analogy would be like a rally driver who is more careful with his fuel and tires.

    Don't get me wrong. Some parts of XP are fine. The Buddy System is an excellent way to get things done quickly by short-circuiting the collaboration cycle.

    1. Re:Wow. A 'Developer' article by wickedj · · Score: 2, Funny

      "Some parts of XP are fine."

      Yes, I believe they've pretty much got Solitaire down.

  25. Mr little will be the most loved person there? by nietsch · · Score: 2, Insightful

    It is very nice that this bozo has a (very expensive I read) little program that tries to detect problems when they have already happened. So along comes mr friendly one day (or more?) after the fact to dicipline the programmer? That does not sound like a very positive approach to me.
    If you want to learn someby something (I hope mr belittle does) it works much better if you have a quick feedback loop, react immediately when something is going wrong, not one weekend later when the programmer has all but forgotten why he did it that way. I agree you cannot use a mr little for such feedback, but unittests and other tests that have to run before the developer can turn in his work can be run automagically. Test are not partial, do not have favorites, and are easy to understand by a programmer. Mr little is probably the opposite. You will either need a pairprogramming or review process to prevent programmers from just disabling the test that fail, but with such a process you will have good software and happy programmers. Mr Little does not make programmers happy.
    Have a look at aegis, a Configuration management system that can enforce such a process and do a lot of other commonsense things. The 'problem' with aegis is that it does not have a pretty pictures interface, so it's advantages are hard to explain to pointy haired bosses.

    --
    This space is intentionally staring blankly at you
  26. Customers, refer to basic project rules: by SeaDuck79 · · Score: 2, Informative

    Good. Fast. Cheap. Pick any two. You can define the scope, the deadline, or the budget. Pick one. Not two. Not three. One.

  27. XP != code as fast as you can by hotsauce · · Score: 2, Insightful

    You should really read Unit Testing in Java: How the Tests Drive the Code. XP is about small, direct steps, and when these are done with tests first, they greatly improve the quality of the code. You can draw all the big, fancy, pie-in-the-sky diagrams you want, and still get sloppy code.