|
|
|
||
|
I just about pulled my hair out over the weekend on a bug that was time dependent. The code roughly looked like:
final int index = (int)(System.currentTimeMillis() / intervalPerFrame) %
numberOfFrames;
final Frame frame = frames[index];
This is perfectly legimate code and ran just fine a few months ago but was now throwing So how could a series of positive values return a negative number? Well, it just so happens that on Saturday, January 10th at 7:37:04AM 2004 the time in milliseconds goes from Lesson learned: be much more careful casting |
|
||
|
If you're unsure of what the CMMI is, here is a nice introduction. Most managers I encounter are caught up in the tactical day-to-day activities of management: finish the project plan; prod so-and-so to finish the thing-a-ma-bob; update the timelines; etc. When asked what they are attempting to achieve, most respond tactically: get the product out on time; reduce the quality risks; etc. Where are the strategic components to all of this? If the managers are only focused on the tactical and the developers are certainly focused on the tactical, who's focused on the strategic? The upper management? Probably not. They're typically heads down in the tactial morass too; reduce the bottom line; increase profits for the board; get better products out; and so on. (Quick disclaimer: of course there are companies out there that have a strong strategic component to them. But what fun would it be to talk about them? *grin*) My bother-in-law recently finished his MBA at a top-notch university. Given my interests in management, we have had a number of lively discussions about both the strategic and tactical sides of management. I would relate a number of our discussions back to the CMMI as a blanket way of understanding how the topics would relate to one another. Much to my surpise, he had never heard of the CMMI. To me, the CMMI is a roadmap or set of guide posts against which you can gauge progress. It presents the over-arching strategic goals that the day-to-day tactical tasks should be geared towards. Without the vision that it provides, it's nearly impossible to judge the effect and quality of the processes that are employed. If our management producing machines (i.e. universities) are not presenting a strategic road map, how can we expect our companies to extend beyond the tactical? A thank you goes out to Christoph Cemper for the link to the "What is the CMMI?" article. |
|
||
|
I would periodically run into a developer associate of mine and ask him how things are going. Invariably he would complain about a bug in an open source UML modelling tool whereby he could not cut and paste large diagrams. This went on for over a year. On one such encounter I asked him in jest "Did you file a bug report for it?". I had assumed that someone that would complain and have to work around a problem for over a year would have certainly filed a bug. To my horror his response was "No" -- and not just a normal "No" but one that dripped with "Why should I be the one that has to do it? Don't they know what's wrong with their own product?!?" I finally managed to convinced him that he should file the bug. The next time I saw him (about 2 weeks later) he was elated! They had fixed the bug and he was able to finally work at a reasonable pace. The moral to this story is that it is the responsibility of every user of a project to file concise and reporducable bug reports. Developers of a project do not always encounter the cases that a user may encounter -- you may be the only one that has a particular use case. Don't fall into the trap of believing that "someone else will do it" or "the developers must have this problem and are just ignoring it". File a bug today! |
|
||
|
Lately I have been preparing the engineering infrastructure for a technology startup. I have been liberally sprinking QA across this infrastructure (remember: QA is a process). For anyone that is in need of an excellent reference on QA, I recommend: Software Quality Assurance: From theory to implementation by Daniel Galin. It is well worth the heafty price tag. |
|
||
|
I constantly hear developers calling testing QA. "Send the build to QA". Based on ANSI/IEEE standards:
The key difference to remember is that QA is interested in the process whereas testing and quality control are interested in the product. Having a testing component in your development process demonstrates a higher degree of quality (as in QA). Testing links
Testing / QA FAQs
Test Interview Questions
General interview tips
For those of you who also want the answers to these questions I offer you the following advice: if you spend the time to look up the answers yourself then it is much more likely that you will have a greater understanding of the answer and you will be more confident when talking with the interviewer or when taking the test. I cannot stress enough to everyone to spend some time looking for answers through Google before posting your questions here. I enjoy answering the occasional difficult or obtuse question, but when I'm swamped with a hundred questions whose answers are easily found via Google then it's hard to become motivated. For example, someone asked: "please explain how to test a web application with winrunner or with any other testing tool". If I go to Google and type in "testing web application", I find Downloadable Reference Library Testing Web Applications which has more information than I know what do to with. This page has links to a Winrunner 7.0 tutorial, users guide, and TSL (Test Script Language) reference. It should be very helpful for those of you that are interested in learning this tool. A WinRunner FAQ is located here. |
|
||
|
Which is a better choice?
There is no clear-cut answer to this: "it depends". Let's throw out numbers to attempt to make sense of this. It takes 5 man days to implement a change using technology number one that has an average bug rate of 1 bug per week. It takes 0.2 man days to implement a change using technology number two but it has a bug rate of 10 bugs per week. This means that technology #2 is 10x more error prone but takes 25x less effort to use it. From this, it appears that it is better to use the more bug-prone technology than it would be to use the restrictive technology. This is obviously a contrived case. The gedankenexperiment behind all of this is to determine when one should introduce a technology into a project in order to reduce risk (in this case, bugs). If a technology has high costs associated with its use (e.g. time, training, personnel) then it may not reduce the overall project risk. Bottom line: Understand all risks associated with a new technology and appropriately factor those into the over-all risk of the project. If the risk increases, it may not be worth while to use technology. If the risk decreases, then the technology will likely provide the desired returns. If there is no appreciable change in risk, then look at other factors such as long-term benefits, project duration, and cost. |
|
||
|
"Never attribute to malice that which is adequately explained by stupidity."
Robert A. Heinlein
|
|
||
|
It has been my experience that most people respond to change as they do to loss or grieving. Elisabeth Kubler-Ross first identified the five stages of grieving: denial, bargaining, anger, despair, and acceptance. (These five stages have been humorously portrayed in the Simpsons.) Effectively managing a team through change requires recognizing the reaction and guiding individuals though the steps as they occur. In most scenarios providing adequate time and an having an "open door policy" where people are encouraged to discuss their feelings is sufficient. For the more difficult cases, human resources may need to be brought in. |
|
||
|
I have been doing to research lately into natural language processing (NLP) and information extraction (IE) when I stumbled on The Double Metaphone Search Algorithm and phonetic distance. This is a good starting point for reference information. |
|
||
|
I was just working with some of the testing folks and they were talking about NAPs and WADs. I had never heard these TLAs (three letter acronyms) before so I had to look them up:
You learn something new every day. |
|
||
|
A colleague of mine and I were chatting around the proverbial water cooler this morning when we ventured onto the topic of developer skills. Do developer skills scale with increasing complexity and project size? Personally, I have witnessed excellent small project programmers completely fall apart on large projects. I have also seen programmers get barreled over by a complex software suite. Is this a marking of cognitive ability, a lack of developed or necessary skills, or do the possessed skills simply not scale? What do you think? |
|
||
|
How many time have I heard a programmer say: "If the code is written well enough, there's no need for comments". This statement could not be farther from the truth. The code, sans comments, obviously defines the what and how: what does the code do and how does it do it. But what is missing from this is the why: under what conditions and what assumptions were made. Comment Types and Categories Before discussing commenting practices let's break down the various types of comments. Some of these are specific to Java and javadoc but it should be an easy exercise for the reader to extrapolate to other langauges.
These comment types can be divided into categories:
Commenting Guildelines
Comment Notifiers It is common to see
Ex: "PERF: ArrayList is explicitly used (rather than List) to minimize the overhead of polymorphism" At times the modifiers can be ambiguous; a |
|
|
Unless otherwise expressly stated, all original material of whatever nature created by Rob Grzywinski and included in this weblog and any related pages, including the weblog's archives, is licensed under a Creative Commons License. |