|
It can be extremely noisome, particularly if you have to arrange presentations or training for customer representatives.
One "very funny gag" can cost hours of time, editing it out of screenshots, rebuilding databases, etc.
I would strongly suggest that it be avoided, if you want your customers (and other people in your company) to view you as a professional.
I wanna be a eunuchs developer! Pass me a bread knife!
|
|
|
|
|
Or just never use a development database for demos.
A development database is going to have test data, probably even some invalid data to test certain scenarios.
|
|
|
|
|
It's only after the contract is fulfilled that you have a production database, so the vast majority of demos are done with development databases, to describe to/train customers on "what you are going to get", and the docs guys can't wait until the product is installed and working customer-side to produce umpty-bagillion pages of documentation for it.
One aspect of professionalism is that of not giving your colleagues a sh1tty time for no good reason.
Another is that of not wasting money -- the guys who have to spend hours, days, and weeks making corrections to cover the little jokes have to be paid for their time.
Another is that of not putting the company in the position of being embarrassed in front of customers.
Could you remind me again what the plus side of the little jokes is?
If you want to joke, come to the Lounge; don't go to potentially customer-facing material.
I wanna be a eunuchs developer! Pass me a bread knife!
|
|
|
|
|
The downside to using actual data is that I have to know the domain I'm working in.
I recently did some work on something for a toxicology department. I'm no toxicologist, I just used stuff like "WATER" and mixed it with "FORMALDEHYDE" as that is something I saw in the docs. After that it was just "TEST" and "SUB OF TEST". Not something you want customers to see, but what else am I going to put there?
If someone wants a demo let them create a separate branch of the software that's sure to stay frozen with a database that has exactly the records you'd expect in the demo.
How the hell are you going to demo a constantly changing product anyway?
|
|
|
|
|
Sander Rossel wrote: The downside to using actual data is that I have to know the domain I'm working in. Just use values that don't sound like schoolboy jokes -- you don't have to be an expert to look at the customer's web-site and pick a few pointers from there, or to google "list of toxins".
References to Star Wars, LotR, Harry Potter, etc, not only make the company look foolish, but also make it a lot harder to explain what the program is doing -- whereas if you use something similar to what the customer will be using, they'll "get it" instantly -- so they have to be replaced in a mad panic, and/or edited out of screenshots.
That's not to mention that developers often use obscure fonts in UIs, so the correct font has to be found, then made to look exactly the same size as the other text in the screenshot (which could be at any zoom, not just font size), and then fuzzed/sharpened/blended in with its background the same as the other text (which was rendered by the GUI, not by the graphics tool that has to be used to fix it) -- it's a sh1tty, time-consuming task.
Put it this way: it's a damned sight harder and more stressful than spending five minutes on google, so reserve that treatment for people you hate, not for guys you don't know (but who will learn to hate you)Sander Rossel wrote: How the hell are you going to demo a constantly changing product anyway? There is no "how", there's just a "you have to".
e.g:
0. If you use Agile, "you have to" show them what you've got at least once each sprint.
1. If you're working on a closed or high-secure system, they can demand to see what you're doing any time they want.
2. Even if !0 and !1, you can rest assured that you have colleagues who have to constantly "show and tell" with the customer.
I wanna be a eunuchs developer! Pass me a bread knife!
|
|
|
|
|
A company I worked for a while ago (who shall remain nameless) used to demo their product using standard demo data that was created by the test team. Unfortunately, some of the developers would often amend the demo data when testing their new features. Some of them would create customers such as Mr Erectile Tissue or Mrs Fanny Flaps and the like. You can imagine how this went down at demos to prospective clients
"There are two ways of constructing a software design: One way is to make it so simple that there are obviously no deficiencies, and the other way is to make it so complicated that there are no obvious deficiencies. The first method is far more difficult." - C.A.R. Hoare
Home | LinkedIn | Google+ | Twitter
|
|
|
|
|
At least I make sure my test data isn't offensive
|
|
|
|
|
I, on the other hand, was not quite so bright.
|
|
|
|
|
Whenever possible I try to use a copy of real production data for tests.
I learned that it is impossible to predict the absurdities you'll find in the _real_ data.
|
|
|
|
|
There is no better crazy than an end user.
Human Error
Hogan
|
|
|
|
|
I worked for a DMV and the database usage was tightly tracked, as even the Dev & Test databases were loaded with real customer data. Theft of that data was a real problem, so we were warned to not search for people, etc.
So ... in the Dev and Test environments, when I needed fresh test data the safest thing to do was use my own ID (the system listed everything I had owned in that state). When I left that job I had more than 70 cars titled in my name, including Lamborghini, Ferrari, McLaren, Saleen, and Maybach. I had fun researching the cars ... the MSRP of my collection was about $65 million.
|
|
|
|
|
That sounds like fun. You might actually learn something
|
|
|
|
|
For test data, we use production data that we merge with test data. Primary key/Unique Ids in production start at DB default of 1, test DBs have been "juked" to insert new Ids starting at 1,000,000. This keeps refresh logic really simple.
I had some alpha revision software that I did with a joint venture.
If their interface ever returned an error code, I had programmed some hard stop/system level message boxes with messages like "Karem f%#$# up again: api [1-5]". Karem was the developer from the joint venture company.
I return from the trip and barely have it integrated back into SCM (without changing the "fun" messages), when the president shows it to a customer after I told everyone, including him, that it was not ready for release yet.
Thank goodness Karem was a good programmer! No messages appeared, but I am sure I would have been fired if they had.
No more "fun" data after that close call...
|
|
|
|
|
Test data isn't the only area for making fun. One of my colleagues, like so many others, issued crazy error messages for "impossible" error situations that will never occurs. We believe. The day following a major release, on customer contacted us by email, asking for the meaning of this strange error message, "Balla henger på fjøsveggen". My colleague nervously answered that it indicated an internal error (which was certainly true), and the message carried essential information to the software developers. The customer was satisfied. The 'essential information' can roughly be translated to "The balls are nailed to the cowshed wall".
Licensing terms are another field of fun, even in released products. However, if that internal tool I maintain, with approx 200 internal users, is to be relased to customers, the licensing terms will probably be rewritten - or replaced with the standard text on which it is based (and I guess some of you can identify). I update the text from time to time (and I would be happy to receive proposals for those sections that are not much modified from the template). Currently, it reads:
______________________________________________________________________________
<company> has previously made versions of this software available in more or less buggy versions. If you received an earlier version of the software that contains bugs with whom you have made friends and would like to keep, you are hereby entitled not to install the new version, and ignore the conditions specified by this Tool License.
Common Pubic License Version 1.0
THE ACCOMPANYING PROGRAM IS PROVIDED UNDER THE TERMS OF THIS COMMON PUBLIC LICENSE ("AGREEMENT"). ANY USE, REPRODUCTION OR DISTRIBUTION OF THE PROGRAM CONSTITUTES RECIPIENT'S ACCEPTANCE OF THIS AGREEMENT.
1. DEFINITIONS
"Contribution" means:
a) in the case of the initial Contributor, the initial code and documentation distributed under this Agreement, and
b) in the case of each subsequent Contributor:
i) changes to the Program, and
ii) additions to the Program;
iii) subtractions from the Program;
iv) multiplication of the Program;
v) divisions of the Program;
vi) demolition of the Program;
where such changes and/or additions to the Program originate from and are distributed by that particular Contributor.
A Contribution 'originates' from a Contributor if it was added to the Program by such Contributor itself or anyone acting on such Contributor's behalf, including his dog or other pet.
Contributions do not include additions to the Program which:
(i) are separate modules of software distributed in conjunction with the Program under their own license agreement,
(ii) are wrapped in silk and golden threads, and
(iii) are not derivative works of the Program.
"Contributor" means any person or entity that distributes the Program, including the whole of the Internet community (if distribution is by Internet).
"Licensed Patents" mean patent claims licensable by a Contributor which are necessarily infringed by the use or sale of its Contribution alone or when combined with the Program.
"Program" means the Contributions distributed in accordance with this Agreement.
"Recipient" means anyone who receives the Program under this Agreement, including all Contributors.
2. GRANT OF RIGHTS
a) Subject to the terms of this Agreement, each Contributor hereby grants Recipient a non-exclusive, worldwide, royalty-free and presidency-free copyright license to reproduce (however limited to reproduction methods not above PG rating), prepare derivative works of, publicly display, publicly perform, praise or worship, distribute and sublicense the Contribution of such Contributor, if any, and such derivative works, in source, destination and object code form.
b) Subject to the terms of this Agreement, each Contributor hereby grants Recipient a non-exclusive, worldwide, coffeine-free patent license under Licensed Patents to make, use, sell, offer to sell, import and otherwise transfer the Contribution of such Contributor, if any, in source, destination and object code form. This patent license shall apply to the combination of the Contribution and the Program if, at the time the Contribution is added by the Contributor, such addition of the Contribution causes such combination to be covered by the Licensed Patents. The patent license shall not apply to any other combinations which include the Contribution. No hardware per se is licensed hereunder.
c) Recipient understands that although each Contributor grants the licenses to its Contributions set forth herein, no assurances are provided by any Contributor that the Program does not infringe the patent, privacy or other intellectual property rights of any other entity. Recipient understands that the Program may forward any information in any file stored at the Contributer's disks and have it be transferred by the Program to the NSA. Each Contributor disclaims any liability to Recipient for claims brought by any other entity based on infringement of intellectual or geographical property rights or otherwise. As a condition to exercising the rights and licenses granted hereunder, each Recipient hereby assumes sole responsibility to secure any other intellectual property rights needed, if any. For example, if a third party patent license is required to allow Recipient to distribute the Program, it is Recipient's responsibility to acquire that license before distributing the Program.
d) Each Contributor represents that to its knowledge it has sufficient copyright rights in its Contribution, if any, to grant the copyright license set forth in this Agreement.
e) Each Recipient may uninstall, delete or in any other way remove the Program from a computer, under the strict condition that
i) a complete, deep reformatting is made of the entire storage device where the Program was stored, and if not the same, the system drive of all computers having access to this copy of the Program. The formatting shall be performed a minimum of three (3) times,
ii) a physical demolishion of said storage device(s) is done by use of a sledgehammer of weight no less than five kilograms, reducing the device to a maximum thickness of 2 mm for rotating magnetic disks or a maximum grain size of 2 mm for solid state devices.
By exercizing any such removal of the Program, the Recipient agrees for all future to make no complaints or critical statements about the Program or any other software procuded by any of the Contributors to the program.
A Recipient may reinstall the Program by performing the inverse operations listed above, in the reverse order.
3. REQUIREMENTS
A Contributor may choose to distribute the Program in object code form under its own license agreement, provided that:
a) it complies with the terms and conditions of this Agreement; and
b) its license agreement:
i) effectively disclaims on behalf of all Contributors all warranties and conditions, express and implied, including warranties or conditions of title and non-infringement, and implied warranties or conditions of merchantability and fitness for a particular purpose;
ii) effectively excludes on behalf of all Contributors all liability for damages, including direct, indirect, special, incidental and consequential damages, such as lost profits or friendships;
iii) states that any provisions which differ from this Agreement are offered by that Contributor alone and not by any other party or other social gathering; and
iv) states that source and destination code for the Program is available from such Contributor, and informs licensees how to obtain it in a reasonable manner on or through a medium customarily used for software exchange, including, but not limited to, Pirate Bay.
c) the following Friday, two large size pizzas (one Pigs Knuckle, one Rio Grande) are delivered from Peppe's Pizza Pub at the Contributer's expense to the premises of the <company> Software Development group, no later than 2.pm.
When the Program is made available in source code form:
a) it must be made available under this Agreement; and
b) a copy of this Agreement must be included with each copy of the Program.
Contributors may not remove or alter any copyright notices contained within the Program for any other purpose than to ridicule typical License Agreements.
Each Contributor must identify itself as the originator of its Contribution, if any, in a manner that reasonably allows subsequent Recipients to identify the originator of the Contribution.
4. COMMERCIAL DISTRIBUTION
Commercial distributors of software may accept certain responsibilities with respect to end users, business or intimate partners and the like. While this license is intended to facilitate the commercial use of the Program, the Contributor who includes the Program in a commercial product offering should do so in a manner which does not create potential liability for other Contributors. Therefore, if a Contributor includes the Program in a commercial product offering, such Contributor ("Commercial Contributor") hereby agrees to defend and indemnify every other Contributor ("Indemnified Contributor") against any losses, damages and costs (collectively "Losses") arising from claims, lawsuits and other legal actions brought by a third party of any political color against the Indemnified Contributor to the extent caused by the acts or omissions of such Commercial Contributor in connection with its distribution of the Program in a commercial product offering.
The obligations in this section do not apply to any claims or Losses relating to any actual or alleged intellectual property infringement. In order to qualify, an Indemnified Contributor must: a) promptly notify the Commercial Contributor in writing of such claim, and
b) allow the Commercial Contributor to control, and cooperate with the Commercial Contributor in, the defense and any related settlement negotiations. The Indemnified Contributor may participate in any such claim at its own expense.
For example, a Contributor might include the Program in a commercial product offering, Product X. That Contributor is then a Commercial Contributor. If that Commercial Contributor then makes performance claims, or offers warranties related to Product X, those performance claims and warranties are such Commercial Contributor's responsibility alone. Under this section, the Commercial Contributor would have to defend claims against the other Contributors related to those performance claims and warranties, and if a court requires any other Contributor to pay any damages as a result, the Commercial Contributor must pay those damages.
5. NO WARRANTY
EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Each Recipient is solely responsible for determining the appropriateness of using and distributing the Program and assumes all risks associated with its exercise of rights under this Agreement, including but not limited to the risks and costs of program errors, compliance with applicable laws, damage to or loss of data, programs or equipment, and unavailability or interruption of operations.
6. DISCLAIMER OF LIABILITY
EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS AND LOST RESPECT), HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
7. GENERAL
If any provision of this Agreement is invalid or unenforceable under applicable law, it shall not affect the validity or enforceability of the remainder of the terms of this Agreement, and without further action by the parties hereto, such provision shall be reformed to the minimum extent necessary to make such provision valid and enforceable.
If Recipient institutes patent litigation against a Contributor with respect to a patent applicable to software (including a cross-claim or counterclaim in a lawsuit), then any patent licenses granted by that Contributor to such Recipient under this Agreement shall terminate as of the date such litigation is filed. In addition, if Recipient institutes patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Program itself (excluding combinations of the Program with other software or hardware) infringes such Recipient's patent(s), then such Recipient's rights granted under Section 2(b) shall terminate as of the date such litigation is filed.
All Recipient's rights under this Agreement shall terminate if it fails to comply with any of the material terms or conditions of this Agreement and does not cure such failure in a reasonable period of time after becoming aware of such noncompliance. If all Recipient's rights under this Agreement terminate, Recipient agrees to cease use and distribution of the Program as soon as reasonably practicable, and never more make any reference to the Program neither in writing, speech nor thought. However, Recipient's obligations under this Agreement and any licenses granted by Recipient relating to the Program shall continue and survive.
Everyone is permitted to copy and distribute copies of this Agreement, but in order to avoid inconsistency the Agreement is copyrighted and may only be modified in the following manner. The Agreement Steward reserves the right to publish new versions (including revisions) of this Agreement from time to time. No one other than the Agreement Steward has the right to modify this Agreement. <company>, represented by the Dev.Ops Team, is the initial Agreement Steward. <company> may assign the responsibility to serve as the Agreement Steward to a suitable separate entity. Each new version of the Agreement will be given a distinguishing version number. The Program (including Contributions) may always be distributed subject to the version of the Agreement under which it was received. In addition, after a new version of the Agreement is published, Contributor may elect to distribute the Program (including its Contributions) under the new version. Except as expressly stated in Sections 2(a) and 2(b) above, Recipient receives no rights or licenses to the intellectual property of any Contributor under this Agreement, whether expressly, by implication, estoppel or otherwise. All rights in the Program not expressly granted under this Agreement are reserved.
This Agreement is governed by the laws of Nature and the intellectual property laws of the Bouvet Island. No party to this Agreement will bring a legal action under this Agreement more than one year after the cause of action arose. Each party waives its rights to a jury trial in any resulting litigation.
|
|
|
|
|
Way, way back, in 1992 I worked for Worldspan (now Travelport) on an accounting system used by travel agencies. We had printed test plan binders, 3 inch binders, where each step was it's own page. DOS screen shots. Anyway one of the values you were required to test with was an abbreviation of Whitesnake, I think it was whtsnk. There were several other hair metal bands as client/traveler names but we were REQUIRED to use the Whitesnake one.
I finally asked why and was told that in previous versions of the software that client name caused the system to abort. Apparently it was some sort of internal command in the database software being used and they found it by accident because the QA person was a hair metal fan and she used all the band names as her client test data.
Even though they no longer used that database software, I think it was an early version of rBase, Whitesnake lived on.
|
|
|
|
|
You think WHITESNAKE was some bogus test data by the original database developer?
|
|
|
|
|
We had an error message "Houston, we have a problem!" for something that should NEVER happen.
Of course, it happened during a TEXAS install. LOL. The confusion that ensued was comical.
I think we TOAST this error message and that event every time we get together.
But more realistic test data has been my push, because the point is that errors should be obvious.
Funniest thing that happened with bad test data. 1984, I wrote a program to keep track of books checked out of the school library. My teacher input "The Sex Life of an Aardvark" as the book. And then the output came: (Oopsie Lawson was the student name he used):
Oopsie Lawson now has The Sex Life of an Aardvark until XX/XX/XX.
OMG, the tears of laughter... Then Ms. Lawson walks in... You cannot imagine. Remember it was High School. We were stupid, and immature. And funny. LOL
|
|
|
|
|
Sander Rossel wrote: It's all fun and games until something accidentally lands on a production environment
Or until a sales guy accidentally uses test data and not the demo data and loses the sale due to some slightly nsfw content (nothing really raunchy just in poor taste) appearing on the screens.
|
|
|
|
|
I collect, or invent silly names that I might use in test data. Sometimes I base the name from a dead musician or sometimes someone I've known. Others are just silly names. Names like "Amy Wino", or "Hurt Cobain" remind me of the ZX Spectrum game "Rock Star Ate My Hamster". "Gribble" was a boss I've worked for, and "Baboonboy" is an actual name in the world. "Lolly Pop", "Ham Salad" or "Porkie Sausage" are just silly.
Let's face it, testing is a chore for us developers; anything to get through those days
|
|
|
|
|
I drive a 2013 Chevy Volt. Coolest car I've ever owned. The dashboard display has all the bells and whistles and whatnot. It shows me messages in plain text (or some cute little graphic) for pretty much everything. Tire pressure for each tire, low traction, battery vs. engine usage, temperature, blah blah blah. If you open a door, a little car icon shows which door is open, etc. you get the idea.
So here's the thing...
The little door that covers my charging port gets stuck once in a while. And when it does, the FREAKING CHECK ENGINE LIGHT comes on! No message, no clue whatsoever as to what's actually going on.
So what do you think? Did Chevy go over budget and couldn't afford to add ONE more error message? Did they really think people would figure out that the check-engine-light could also mean something wrong with the charging port door? Seriously? I mean if I was the programmer for that thing, I would have "gone the extra mile" and added the charging port message.
|
|
|
|
|
There's probably a diagnostic code that you could get from the OBD port.
#SupportHeForShe
Government can give you nothing but what it takes from somebody else. A government big enough to give you everything you want is big enough to take everything you've got, including your freedom.-Ezra Taft Benson
You must accept 1 of 2 basic premises: Either we are alone in the universe or we are not alone. Either way, the implications are staggering!-Wernher von Braun
|
|
|
|
|
Well, they worry if you leave the charging port door open too long some of the hamsters might escape or/and fall out on the road (- or maybe the little imp that checks the tire pressures.)
hence, you should check.
Sin tack ear lol
Pressing the any key may be continuate
|
|
|
|
|
Hmmm... Had not considered that one. It all kinda makes sense now thanks!
|
|
|
|
|
Just today I worked on the tool that keeps track of the microcontrollers and their software versions in prototypes of new vehicles. Quite possible that they did not bother to spend much time developing a new code version, possibly requiring a microontroller with more memory. It's the testing that makes such a change quite expensive. They probably used an existing controller and software version and put this sensor on an unused input.
The language is JavaScript. that of Mordor, which I will not utter here
This is Javascript. If you put big wheels and a racing stripe on a golf cart, it's still a f***ing golf cart.
"I don't know, extraterrestrial?"
"You mean like from space?"
"No, from Canada."
If software development were a circus, we would all be the clowns.
|
|
|
|
|
|