Archive for June, 2011

Quality Assurance – Making it Better. Part 2: How a QA Team Looks at Features

Thursday, June 30th, 2011

The first part of this series examined the different perspectives developers and QA testers have on the QA process.  For the next part in our series I want to talk about how QA teams look at features and the type of information they need from development teams.  To do this I’ll start with an example that our instructor used when delivering a QA class.  He asked the students to describe for him how to do a Web search.  Naturally a number of answers came out and were listed on the board.  Those answers and the follow-on conversation provide some interesting insights.

The answers that came back basically amounted to the following:

  • Open your browser
  • Type the search string into the search box.
  • Click the search button

Then the instructor asked some follow on questions:

  • Was a browser even used?
  • How do I open the browser?
  • Where is the search box?
  • In the standard browser configuration are their multiple boxes in the browser interface that users might be confused by such as multiple search engines or a “find on page” box?
  • Was the address bar used instead of the dedicated search box?
  • Was a search page used instead of the browser’s search?
  • Specifically, where on the screen is the search box they are to use?
  • Is that the same in different browser applications (IE, Firefox, Chrome, etc.)?
  • Are there other ways to initiate the search such as typing the search string and pressing enter? Examples might be pasting text, using drop down control  or clicking links for common searches, using autocomplete, or using Alt-Enter to get results on a new page or tab.
  • Is there a specific search engine or search toolbar that is assumed to be installed?

Now, anyone familiar with managing development projects should be waving their arms right now and saying that this should never happen.  In the best of all worlds everything is defined in the specification before the developers’ fingers touch the keys for the first time.  The application specification should detail the features that are in the application, how they are accessed, the user interaction, and how the features should behave.  Unfortunately that is often not the case.  Sometimes design or UI is being developed in parallel with back-end functions, or changes in functionality are requested.  Things are not always completely defined, and often change, so there is frequently a need for this type of communication in the QA process.

Even this simple example shows that when something is not defined explicitly, assumptions are made.  Developers often make different assumptions than QA testers or end-users will.   Developers are often very close to the features they are coding – sometimes doing dozens of unit tests a day as code is being finalized.  Compounding this, when people are familiar with features, they make assumptions without thinking about it. Disconnects happen when assumptions are made.  Specifying things exactly alleviates QA strain and reduces QA churn.

In these instances, what the QA team needs from developers are explicit instructions, they need to know how a feature is supposed to work in very granular and explicit form.    It’s QAs job to step back and look at both the application as whole, the feature or function as a whole, and approach it from an unfamiliar perspective.  Just like end users, they have not seen the feature before.  Before submitting to QA, developers can speed the QA process by stepping back and taking a look at what they’re submitting from that perspective.

This example also tells you something else about good QA.  Good QA should try to think of ways to approach and use functions and features that developers don’t – they should try to break things.  It’s painful for developers, as bugs are generated that are sometimes seen as out of scope from the specification.  But the fact is, if a three person QA team finds a usability, functionality or usage issue, you can bet customers and end users will find it too.

To close out this post, developers should try to step back from the features and functions they are coding in the moment, and look at the application as a whole, how the feature they are about to submit fits in, and different ways it will be accessed and used.  That takes a lot of effort with development deadlines, but will save QA cycles and yield better results and fewer long nights in the project. Developers should also be prepared for the fact that QA may generate usability bugs.  Those bugs should be addressed if time permits because it will make your application better, and easier to use.

Share

Architecting Your Web Site or Application for Localization

Tuesday, June 28th, 2011

Most of the Web and desktop applications we write these days are meant to go live worldwide, if not right away, within three to six months of launch. For some of the smaller clients we work with that means support three to five different key languages, for some of the larger clients we work with that means supporting as many as 36 different languages, including right-to-left languages.  I thought I would take time here to talk about some of the things we do to build Sites and applications that are localizable cost effectively.

The last part of that sentence is the key.  In today’s economy, customers want cost effective localization.  What does that mean?  It’s a two part process, the text has to be translated, and the Site needs to be updated, and companies want to pay as little as possible for both.  That trend that we are seeing is that localization companies are being asked to both do the translation, and update the Site without having to purchase an expensive, custom-code based admin tool.  That’s where problems can occur.  The length of text is not the same form language to language, and the Site design should not be broken as part of localization.  There are lots of issues, form cramped text and graphics, to more serious issues of graphics becoming misaligned, to even more serious issues such as localized text no longer fitting on buttons – and those are just three issues!

Here at Aeshen we’ve done this enough that we’ve found ways to strike that balance between getting that great look and feel from a design, and supporting text localization. The best way to do this is to build an architecture for the Site or application that supports easy updating of text by a non-technical, non-developer localization team.

First we use a liquid or fluid design that allows pages to scale based on what content is in them.  We’ve also found that part of architecting applications for easy localization is to build 40% extra space for text into the base design.  This provides a lot of room for longer text and to make adjustments to graphics once text has been localized.   Another thing we do is store text for pages in XML.  This is popular because XML is human readable, and easy to update with any number of text editors localization teams find it easy to work with.  We also provide coordinates in the XML for graphics, and allow graphics to be adjusted, within a defined pixel tolerance.  This allows graphics to be moved  slightly, and allows localization teams to do things like adjust the width or height of a button to accommodate longer text, move the button to ensure text is centered and so forth.

Finally we recognize the position that localization teams are being put in.  They are going to be working in areas that they are not experts in, Web development and Design.  We provide localization documentation to our customers for how to localize their application.  We use very clear, very explicit instructions with lots of graphics (you have to keep in mind that for many localization teams, English is their second language).  We also make sure the update process is a pattern, this is often easier for localization teams to follow (if the update these coordinates on the affected objects they should get the results they are expecting).

Using our localization friendly development techniques we’ve been able to create great looking, rich Web sites and applications that have scaled to worldwide audiences, while keeping our customers localization costs low.

Share

Quality Assurance – Making it Better. Part 1: Perspectives on QA.

Friday, June 24th, 2011

Aeshen has an in-house Quality Assurance (QA) team and we pride ourselves on delivering great services and applications that are thoroughly tested.  Our team is so good, QA has evolved from a being a component of our service offerings to being its own service offering.  We provide QA for hire services to companies large and small.  But that’s enough chest thumping.  What I really want to talk about are some of the things we’ve learned about the different perspectives developers and QA testers have on QA and the QA process.  I also want to relate some of the key things developers can do to improve the quality of their code, and reduce the amount of time QA takes.  We’ve been asked to, and have delivered training to development teams on QA, and we’re going to take some of the key points and insights from these training courses and give them to you in this series.

When we put together our first formal training for a customer on QA one of the challenges was how to message why QA is important.  From the perspective of customer, the end user and also from any good development shop QA is simple, it ensures that the application functions as it is supposed to and doesn’t have any bugs.  Going in a little deeper, and with QA, the deeper you go, the more subtle things seem to get, applications that have gone through a good QA process also don’t have any unexpected issues – from odd dialogs popping up, to odd end-states of UI navigation.  The user experience for a well QA’ed app should be smooth, intuitive, and never leave the user confused.

If you go still deeper, you get to the perspectives of the QA testers and the developers.  To some extent, both groups want the same thing– to get done with their tasks and move onto the next project.  In building and delivering our QA courses, we found some other interesting motives.  When our QA team delivered their beta version of the course to our in-house review panel, we found that much of the content demonstrated quite clearly how developers often did things in a way that made life difficult for testers.   It wasn’t quite a rant-o-course, but at times it was close.

Our review panel and an Aeshen instructional designer worked with the QA team to modify the course.  The first order of business was to make sure that the course would resonate with developers.  With any training the students need to know why they should care.  Why should they modify their development routine and take extra time to ensure QA is happy?  The course had to convey the perspectives of the QA team, but it also had to speak to QA from the developers’ perspective.

We came up with a fundamental set of guidance and related it to the developer perspective.  The guidance is: understand how QA will look at the product being produced, and provide all additional information that QA will need in order to test (such as validation requirements).  Developers should try to look at what they’re about to drop to QA from that perspective and ensure what they‘re delivering meets specified QA criteria.  Any why should developers care?  Because the better the product they ship to QA, the faster it will get through QA, and the faster they will be done.  Most applications go through long finalization stages, beta, RC1, RC2 etc, and many developers know the product isn’t 100% at a given stage, and feel that things will get worked out through those finalization stages.  Here’s why it’s important to developers to deliver high quality at all stages:  it saves long hours as the ship date approaches, and helps ensure ship dates a hit. Developers know the score here.  Shipping dates are hard to push out, and managers will work development teams long hours (nights and weekends) if those dates are in jeopardy.   In addition, managers and developers alike are rated on their ability to hit ship dates.  If a developers code doesn’t pass QA and that results in a missed milestone, that can come back to haunt them at review time.  It can also impact the quality of the shipped product.  Increased end-game churn increases the likelihood that the quality of the application will be impacted, as managers may elect to leave non-critical defects unaddressed to meet the ship date — defects that could have easily been addressed earlier.

The bottom line here is that everyone in the development process from managers to developers to QA testers, have a vested interest in improving the QA process, communications that are part of that process and reducing churn in that process.

As I said, this is the first part of a multi-part series.  Other posts in this series will discuss the QA workflow; show how QA test plan writers examine tasks and the elements that go into test plans ; discuss how QA deals with unspecified new features; illuminate common communication problems between developers and QA testers; and give you some of the light bulb moments from our trainings on QA.

Share

Using Simulations Instead of Videos or Test\Demo Environments for Training – Part 1

Friday, June 24th, 2011

I have been developing technical training and presentations for about 12 years now. Until recently whenever the training or presentation required an application or server I used some version of the real thing. Either it was an actual installation of the application or a real server(s) or a Virtual Machine (VM) of the server(s). Obviously having the real thing gives you the most options for what you can do but it also has a downside. The application might have dependencies that make it difficult to run in a classroom, on your laptop, or just sitting at your desk. Using virtual machines makes building and using servers easier but they can also take up a lot of disk space and require a lot of processing power. Not always things that you have in abundance.

Recently I have been working more and more with simulations instead. These have sometimes been linear click-thrus where you basically follow the dots and perform predetermined tasks, and other times that have been more robust simulations that feel like the real thing. The click-thru simulations look real but you can tell you are not using a live interface. Typically these jump from screenshot to screenshot with hotspots for clicking something on the screen or typing text. These work well for performing specific tasks but it is difficult to go off the map so to speak and do something on the fly. These simulations are similar to what you can build with Captivate or DemoMate.

Other simulations I have been working with lately are more dynamic and can give you as much of the real interface as you want to put into them. With these the interface responds just like the real one and it is hard to tell you are not using the real thing. You don’t have to follow a linear script and you can go off the map if you enabled whatever it is that you are trying to show. These are better if you want to simulate an environment rather than just having a simulation that allows you to perform specific tasks in that environment.

Simulations are small and can be moved around easily or accessed remotely through a browser. Using a simulation for training purposes requires that the user actually perform the steps rather than just watching them. This helps them retain the knowledge better having done it themselves. Also with a simulation they can use it more than once without a lot of hassle and further increase the chance that they will remember the training. If the simulation is hosted where the user can access it through a browser then they can use it whenever they are unsure of something and make any mistakes in the simulation and not their real environment.

So that gives you a rundown on simulations and why they are useful. In my next post I will go over the reasons why and when you would want to use one instead of a test\demo environment or just a video.

Share

Wiring up pre-made components can provide a lot of functionality at a great price!

Friday, June 24th, 2011

One of the ways we add value for our customers is to provide rich solutions that are also cost effective. We were able to do this recently for one of our customers and I wanted to share the story here.

Our client approached us about creating a secure customer documents center.  Our customer needed a robust solution that would allow their users to register for the site, get approved by an administrator, have a permissions level assigned to them, and then have access to files that matched their permission levels.  In addition, the user had to be able to search for documents that were relevant to them and the administrator had to be able to fully manage the site including the look and feel.

Our process began by working with the client to discover their needs. During this time Aeshen determined that the client had long term needs that would extend beyond the scope of this project.  These needs had to be considered in order to create a solution that was extensible without duplicating effort.  Aeshen choose Drupal as the platform to develop in. By choosing Drupal Aeshen was able to deliver all of the features that the client needed now, in a cost efficient way, while creating the foundation for development in the future.

The reason that Drupal was so cost efficient is that we are able to deliver prebuilt functionality while writing very little custom code.  Aeshen used Drupal modules to enable the features that were needed. In the future Aeshen will enable new modules to add functionality and since the foundation has already been developed this will be a very cost efficient effort as well.

Some of the features that have been discussed are not available in a Drupal module now and for those items Aeshen will write custom modules that fit our client’s needs perfectly.

Share

Using Windows PowerShell as an IT Pro – Part 19

Wednesday, June 22nd, 2011

In my last post I looked at comparison operators. Let’s finish by reviewing the logical operators.

The logical operators connect expressions and statements, allowing you to use a single expression to test for multiple conditions. Statements that use the logical operators return Boolean (TRUE or FALSE) values.

Windows PowerShell supports the following Logical operators.

  • -and – returns a TRUE value when both statements are true.
  • -or – returns a TRUE value when one or both statements are true.
  • -xor – returns a TRUE value when one statement is true and the other is false.
  • -not – This one negates, or reverses, the statement that comes after it.  So if you had a statement that would normally return a TRUE value, if you used –not it would now return a FALSE value.

The Windows PowerShell logical operators evaluate only the statements required to determine the truth value of the statement. If the left operand in a statement contains the -and operator is FALSE, the right operand is not evaluated. If the left operand in a statement that contains the -or statement is TRUE, the right operand is not evaluated. As a result, you can use these statements in the same way that you would use the If statement (covered in the next section).

As an example, the following statement uses the -and operator and the -or operator to connect three conditional statements. The statement is true only when 4 is greater than 3, and either 4 or 21 is less than 20.

(4 -gt 3) -and ((4 -lt 20) -or (21 -lt 20))

LogOper01

If we add –not before the first conditional statement then the value returned is reversed since the first condition is negated.

-not(34 -gt 33) -and ((4 -eq 5) -or (19 -lt 20))

LogOper02

In my next post we will move on to controlling the flow.

Share

Using Windows PowerShell as an IT Pro – Part 18

Tuesday, June 14th, 2011

I’m finally getting back to my blog and PowerShell. In my last post I was looking at Comparison Operators. There are a couple more that I want to take a quick look at.

The match operators (-match and -notmatch) find elements that match or do not match a specified pattern using regular expressions, searching only in strings. They cannot search in arrays of integers or other objects. The following examples show some uses of the -match operator.

"Professional", "Baseball" -match "Ball"

CompOper13

 

"Professional", "Ball" -match "Baseball"

CompOper14

The -match and -notmatch operators populate the $Matches automatic variable when the input (the left-side argument) to the operator is a single scalar object. When the input is scalar, the -match and -notmatch operators return a Boolean value and set the value of the $Matches automatic variable to the matched components of the argument.

If the input is a collection, the -match and -notmatch operators return the matching members of that collection, but the operator does not populate the $Matches variable.

For example, the following command submits a single string to the -match operator. The -match operator returns a Boolean value and populates the $Matches automatic variable.

"Baseball" -match "Ball"

$Matches

CompOper15

Replace Operator

The -replace operator replaces all or part of a value with the specified value using regular expressions. You can use the -replace operator for many administrative tasks, such as renaming files. The following example shows a use of the -replace operator:

"PowerShell_1" -replace "1", "2"

CompOper16

In my next post we will look at Logical Operators.

Share