+3  A: 

In all but trivial cases, you cannot 'prove' that your software is correct.

That's the role of User Acceptance Testing: to show that that an acceptable level of usefulness has been reached.

Mitch Wheat
How can users tell if you have a well behaved, yet unmaintainable, ball of mud? I think the question is about software quality, not usability.
Daniel Paull
I've updated: I usd usability when the word I was looking for is usefulness.
Mitch Wheat
The point I was trying to make is that UAT does not prove anything about the quality of the code as you have claimed. UAT merely provides anecdotal evidence that the software is "good enough" in the eyes of a user.
Daniel Paull
A: 

by doing it right?

abmv
Wow...Brilliant answer.
senfo
What is "it"? and what is "right"?
Daniel Paull
your job?........
abmv
+4  A: 

You cant prove it beyond the scope of the tests, and unless there is a bulletproof specification (which there never is) then the tests never prove anything beyond the obvious.

What you can do as a team is approach your software design in a responsible manner and not give in to the temptations of writing bad code to please managers, demanding the necessary resources and time constraints, and treating the whole process as much as a craft as a job. The finest renaissance sculptors knew no-one would see the backs statues to be placed in the corners of cathedrals but still took the effort to make sure they weren't selling themselves short.

As a team the only way to prove your software is reliable is to build up a track record: do things correctly from the start, fix bugs before implementing new features, never give in to the quick hack fix, and make sure everyone shares the same enthusiasm and respect for the code.

Guy
+1  A: 

I think this is putting the cart before the horse. It's tantamount to a foot soldier trying to explain to the general what battle maneuvers are and why protecting your flanks is important. If management can't tell the difference between quality code and a big ball of mud, you're always going to end up delivering a big ball of mud.

Unfortunately it is completely impossible to "prove" that your software is working bug-free (the windows xp commercials always annoyed me by announcing "the most secure version of windows ever", that's impossible to prove at release). It's up to management to setup and enforce a QA process and establish metrics as to what a deliverable product actually looks like and what level of bugs or unexpected behaviors is acceptable in the final release.

That said, if you're a small team and set your own QA policies with little input from management I think it would be advantageous to write out a basic QA process and have management sign off on it. For our web apps we currently support 4 browsers -- and management knows this -- so when the application breaks in some obscure handheld browser everyone clearly understands that this is not something we designed the application to support. It also provides good leverage for hiring additional development or test resources when management decides it wants to start testing for x.

Chris Pebble
Thanks Chris. Having a QA policy agreed with the stakeholds might indeed be what my team is looking for. Now the follow-up question might be to what should all be in that QA policy... Let me see if I can add this to the starting-question.
Hace
+3  A: 

I'm part of a team working on a large project for a governmental client. The first module of phase 1 was a huge disaster, the team was un-managed, there were'nt a QA team and the developers were not motivated to work better. Instead, the manager kept shouting and deducting wages for people who didnt work overtime!!

The client, huh, dont ask about that, they were really pissed off, but they stayed with our company because they know that no one understand the business as we do.

So what was the solution:

  • First thing separated the management from programmers, and put a friendly team leader.
  • Second, get a qualified QA team. In the first few weeks, bugs were in 100s.
  • Third, put 2-3 developers as support team, there responsibility is not to do any new task, just fix bugs, work directly with the QA.
  • Fourth, motivate the guys, sometimes its not about the money or extra vacations, sometimes a good word will be perfect. Small example, after working 3 days in row for almost 15 hours a day, the team leader made a note to the manager. Two days later i received a letter from the CEO thanking me on my efforts and giving me 2 vacation days.

We will soon deliver the 4th module of the system, and as one of the support team i could say its at least 95% bug free. Which is a huge jump from our first modules.

Today we have a powerful development team, qualified QA and expert bug fixers.

Sorry for the long story, but thats how our team (during 4 months) proved to the manager and client that we are reliable, and just need the right environment.

medopal
+1  A: 

As Billy Joel once say, "It's always been a matter of trust."

You need to understand that software development is "black magic" to all except those who write software. It's not obvious (actually, quite counter intuitive) to to the rest of your company that many of your initiatives lead to increasing quality and reducing risk of running over time and/or budget.

The key is to build a trusting, respectful relationship between development and other parts of the business. How do you build this trust? Well that's one of those touchy-feely people problems... you will need to experiment a little. I use the following tools often:

  1. Process visibility - make sure everyone knows what you are doing and how things are progressing. Also, make sure everyone can see the impact of and changes that occur during development.
  2. Point out the little victories - to build up trust, point out when things went exactly as you planned. Try to find situations where you had to make a judgement call and use the term "mitigated the risk" with your management.
  3. Do not say, "I told you so." - let's say that you told management that you needed 2 months to undertake some task and they say, "well you only have three weeks." The outcome is not likely to be good (assuming your estimate is accurate). Make management aware of the problem and document all the things you had to do to try to meet the deadline. When quality is shown to be poor, you can work through the issues you faced (and recorded) in a professional manner rather than pointing the finger and saying, "I told you so."

If you have a good relationship with you manager, you can suggest that they read some books specific to software development so they can understand industry best practices.

Also, I would point out to your boss that not allowing you to act as a professional software developers is hurting your career. You really want to work somewhere that lets you grow professionally rather than somewhere that turns you into a hacker.

Daniel Paull