Error message

  • Warning: date_timezone_set() expects parameter 1 to be DateTime, boolean given in format_date() (line 2040 of D:\domains\uktmf.com\wwwroot\includes\common.inc).
  • Warning: date_format() expects parameter 1 to be DateTime, boolean given in format_date() (line 2050 of D:\domains\uktmf.com\wwwroot\includes\common.inc).
  • Warning: date_timezone_set() expects parameter 1 to be DateTime, boolean given in format_date() (line 2040 of D:\domains\uktmf.com\wwwroot\includes\common.inc).
  • Warning: date_format() expects parameter 1 to be DateTime, boolean given in format_date() (line 2050 of D:\domains\uktmf.com\wwwroot\includes\common.inc).
  • Warning: date_timezone_set() expects parameter 1 to be DateTime, boolean given in format_date() (line 2040 of D:\domains\uktmf.com\wwwroot\includes\common.inc).
  • Warning: date_format() expects parameter 1 to be DateTime, boolean given in format_date() (line 2050 of D:\domains\uktmf.com\wwwroot\includes\common.inc).
  • Warning: date_timezone_set() expects parameter 1 to be DateTime, boolean given in format_date() (line 2040 of D:\domains\uktmf.com\wwwroot\includes\common.inc).
  • Warning: date_format() expects parameter 1 to be DateTime, boolean given in format_date() (line 2050 of D:\domains\uktmf.com\wwwroot\includes\common.inc).
  • Warning: date_timezone_set() expects parameter 1 to be DateTime, boolean given in format_date() (line 2040 of D:\domains\uktmf.com\wwwroot\includes\common.inc).
  • Warning: date_format() expects parameter 1 to be DateTime, boolean given in format_date() (line 2050 of D:\domains\uktmf.com\wwwroot\includes\common.inc).
  • Warning: date_timezone_set() expects parameter 1 to be DateTime, boolean given in format_date() (line 2040 of D:\domains\uktmf.com\wwwroot\includes\common.inc).
  • Warning: date_format() expects parameter 1 to be DateTime, boolean given in format_date() (line 2050 of D:\domains\uktmf.com\wwwroot\includes\common.inc).
  • Warning: date_timezone_set() expects parameter 1 to be DateTime, boolean given in format_date() (line 2040 of D:\domains\uktmf.com\wwwroot\includes\common.inc).
  • Warning: date_format() expects parameter 1 to be DateTime, boolean given in format_date() (line 2050 of D:\domains\uktmf.com\wwwroot\includes\common.inc).

Agile

Quaere, Heuristics, Mnemonics, and Acronyms

Alan Richardson's Blog - Wed, 24/05/2017 - 11:30
Don’t limit yourself to a set of attributes and words, seek more, develop strategies for identifying new concepts and ways of exploring them for then you have manifested the spirit of Quaere.



How might I describe the process of model building?I was writing some notes on ‘Testing’ and trying to think through how I might describe the process of model building.

And I wrote down a few words:

  • Questioning,
  • Exploration,
  • Experimentation,
  • Analysis.
Useful words methinks.

Marketers ruin everythingAnd then my marketing brain kicked in.

“What if you made an acronym?”

Q.U.A.E.R.E - An Acronym I could MarketOK, well, “Q” requires a “U”

  • Usage?
And what else?

  • R? for Reasoning
And feed all of that into an online anagram solver:

“Quaere”

“Quaere” a word “to seek”The word “Quaere” coincidentally maps on very well to the process.

Since the word originates from Latin, to “seek, look for; ask”.

“Quaere” definitions:

Mnemonics and HeuristicsClearly at this point I should own this and present it as a branded Mnemonic.

“Quaere”, which would lead you to the individual words: Questioning, Usage, Analysis, Exploration, Reasoning, Experimentation.

And how would you use those words?

I see many presentations of lists of words as Heuristics, but I don’t think of individual words as heuristics.

I think of individual words as words.

But I could have a parameterized statement that works as a Heuristic that says “Meditate on an individual word to think of ideas to improve your testing”.

And the parameter is defined as “an individual word”

  • “Meditate on [an individual word] to think of ideas to improve your testing”.
Becomes:

  • “Meditate on Questioning to think of ideas to improve your testing”.
  • “Meditate on Usage to think of ideas to improve your testing”.
  • “Meditate on Analysis to think of ideas to improve your testing”.
  • “Meditate on Exploration to think of ideas to improve your testing”.
  • “Meditate on Reasoning to think of ideas to improve your testing”.
  • “Meditate on Experimentation to think of ideas to improve your testing”.
I might think - what other parameterized heuristicesque sentences could I use?

  • “Have I performed enough [an individual word]?”
  • “Has my [an individual word] been good enough?”
  • “Did my [an individual word] cover everything it could?”
A Springboard for IdeasAs a springboard for ideas, word generation and cogitation can work well, I’m not knocking it, I just don’t think of a word as a Heuristic.

And I get nervous of lists in general because I have a tendency to view them as complete and never see the invisible “etc.” at the bottom which reminds me to expand them.

Don’t limit yourself to this set of attributes, seek more, for then you have manifested the spirit of Quaere.

Related Reading

Newer readers might like to read my earlier mentions of Stichomancy:

Categories: Agile, Software Testing

Names that make computers go crazy

Gojko Adzic's blog - Tue, 23/05/2017 - 23:00
this is an excerpt from my upcoming book, Computer Says No, about wrong assumptions, computer bugs and humans caught in between In 1961 IBM introduced a new monster processing system, called 7074. The beast was normally delivered in several trucks, required a room of 40 by 40 feet, and weighed more than 41,000 pounds. The system had a disk storage unit with a capacity of 28 million characters and could process almost 34,000 operations per second. Still, the IBM 7074 was no match for Hubert B. Wolfeschlegelsteinhausenbergerdorff. Hubert rose to fame in 1964 when Associated Press carried the story of...
Categories: Agile, Software Testing

How to use JavaScript Bookmarklets to Amend Web Page Example [Tutorial Text and Video]

Alan Richardson's Blog - Fri, 19/05/2017 - 09:52
TLDR; When you learn to manipulate the DOM with JavaScript you can create simple tools and automate from within the browser and use bookmarklets to make the code easy to execute and sync across different machines.






BackgroundWhen I first learned how to code it was in BASIC with an interpreter. This was great because I didn’t have to write a lot of scaffolding code to create an application I just wrote code and it ran.

I can experience a similar process using JavaScript in the browser console which makes JavaScript a good first language to hack about with and make your first steps learning how to code.

It also means that I an get a lot done very quickly from the console to help me when I test web applications.

I can manipulate a web application client in my browser by:
  • changing the DOM
  • amending the JavaScript
  • changing the values of variables
  • adding new elements into the DOM
A client, in a browser, is ours to command.
A Set of Twitter linksBearing the above in mind. I visited the TestingCircus.com list of testers on twitter and there were a few names I didn’t recognise.

The page handily provides the twitter handle and the URL but the URL is a text element, not a clickable URL. Therefore in order for me to check if I follow that person I have to engage in manual effort to copy and paste the text into the browser URL field and visit the page.

Ugh, manual effort.

Fortunately however:
  • this is a web page
  • the URLs are on the page as text
  • I know how to get the URL from the page with JavaScript
  • I know how to amend the DOM with JavaScript
  • I can write some JavaScript to convert all the text URLs into clickable URLs
The full process for this is shown in a video on youtube.
The codeIf I inspect the page and into the JavaScript console I paste the following code and hit return to execute the code then all the Twitter URLs will become clickable:

posslinks = document.getElementsByTagName("td");
for (var plinkid = 0; plinkid < posslinks.length; plinkid++) {
if (posslinks[plinkid].innerHTML.startsWith("https://")) {
posslinks[plinkid].innerHTML =
"<a href='" + posslinks[plinkid].innerHTML + "'>" +
posslinks[plinkid].innerHTML + "</a>"
}
}
  • get all the elements with tag name “td”
  • iterate over them all in a for loop
  • if the text in the table data/cell starts with “https://” then
    • change the text so that it is clickable link
The bookmarkletSince I will probably want to do this a few times I can make this easier by creating a bookmarklet.

A bookmarklet is:
  • javascript code
  • wrapped in an anonymous function that executes immediately
  • prefixed with “javascript:”
  • added to your browsers bookmarks
javascript:(function(){
posslinks = document.getElementsByTagName("td");
for (var plinkid = 0; plinkid < posslinks.length; plinkid++) {
if (posslinks[plinkid].innerHTML.startsWith("https://")) {
posslinks[plinkid].innerHTML =
"<a href='" + posslinks[plinkid].innerHTML + "'>" +
posslinks[plinkid].innerHTML + "</a>"
}
}
})

If I paste the above code into my bookmark toolbar then I’ll create a bookmarklet that I canclick on to change all the listed URLs to clickable URLs.

Bookmarklets can sync across machines .e.g if logged into Chrome Browser then your bookmarklets sync across all logged in browser sessions.
A ToolBecause I create small JavaScript snippets and convert them into bookmarklets to help me with my testing and general web navigation, I created a tool to help with this process.
You can see the tool in action in the video.
End Notes
  • A small knowledge of JavaScript can help you do very powerful actions.
  • JavaScript is a useful language to learn to ‘do stuff’ quickly
  • You can automate web applications from the JavaScript console
  • The Web Client pages are manipulatable and yours to control
  • Bookmarklets allow you have easy access to custom JavaScript
The Video
Categories: Agile, Software Testing