Author Archives: Brian Whaley

Unknown's avatar

About Brian Whaley

Technologist, Digital Transformation Professional, User Experience Champion, Landscape & Macro Photographer, Avid World Traveler, Advanced Open Water Scuba Diver, Enthusiast of Home-Cooked Food

300 Level Testing – Test Case Design Techniques

Leveraging a process is the basis to defining and executing a test strategy.  This allows the development team to focus on repeatability, stability, speed, and results.  While researching the landscape of test design techniques, I came across three very good articles that outline a clearly defined set of test design strategies (articles from Invensis, Art of Testing, and Test Automation Resources).  These articles outline techniques based on static code and compiled dynamic code; manual and automated testing; black box, white box, and experience based testing.  Below is a breakdown of each of the test design techniques.  Some of these have been discussed in my articles on Testing 101 and 200 Level Testing.  Below is a summary of each, but follow up with each of the original articles to get more details, as well as examples.

Static Test Design Techniques

Manual

  • Walk through – a formal step by step review of all the features and documentation by the authors to better understand the software.
  • Informal review – as stated, these are more informal discussions to gather information without the documentation or code.
  • Technical review – more of a peer review of the application.
  • Audit – a formal review comparing code to documentation by an external source.
  • Inspection – a formal review by trained moderators, documenting defects in code and documentation through a detailed process.
  • Management review – a review of the project documents – project plan, budget, metrics, objectives and results, etc.

With Help of Tools

  • Analysis of coding standards (using compiler) – comparing the code against a set of rules, conventions, and standards defined within a tool or document.
  • Analysis of code metrics – analysis of things like cyclomatic numbers, complexity, nesting, lines of code, code coverage, etc.
  • Analysis of code structure – an analysis of the application by following the flow of data or paths through the code.  Also analyzes the structure of the data and the code itself.

Dynamic Test Design Techniques

Specification-based or Black-Box techniques

  • Boundary Value Analysis – test all field input values at the boundaries – highest, lowest, etc.
  • Decision Table Testing – Also called Classification Tree Method, build a decision tree for the logic of the application, and write tests for each of them.
  • State Transition Diagrams – test each of the states of the application, particularly workflow steps.
  • Equivalence Partitioning – reduce your number of tests by determining ones that test the same thing, and return the same results.
  • Use Case Testing – define scenarios based on business functionality or user functionality.
  • Combinatorial Testing – Randomly selected values, all possible values, each choice in at least one test, all-pairs or pair-wise or n-wise combinations, etc.

Structure-based or White-Box techniques

  • Statement Coverage or Line Coverage – similar t code metrics, analyzing the amount of code that has been exercised by tests.
  • Condition Coverage or Predicate Coverage – all conditions (i.e. true or false) are tested.
  • Decision Coverage or Branch Coverage – all conditions in each decision table are tested.
  • Multiple Condition Coverage – all values in all conditions are tested.

Experience-based techniques

  • Exploratory Testing – similar to an informal review, this testing is based on a general understanding of the application, product, domain, company, etc. and the experience and intuition of the tester.
  • Error Guessing or Fault Attack – leveraging prior experience and expertise, guess where the cracks are in the application, and focusing the testing there.

How to Choose the Right Technique

Once you have a general understanding of test design techniques, choosing the right approach is the most critical next step.  Here are some of the decision points to pick the right one:

  • Application Typebased on requirements for the domain as well as  mobile vs. web applications.
  • Regulatory standardsmust follow conventional rules based on IT, countries, government agencies, etc.
  • Customer’s requirements– based on relationships or contracts with customers.
  • Risk Level and TypeThis includes business risk, legal risk, compliance risk, brand risk, etc.
  • Objectives – Focus on the objectives of your testing.
  • Test Expertise – knowledge of the application, availability of documentation, familiarity with the techniques, etc.
  • Time and budget – What will provide the biggest value that fits your schedule.
  • SDLCWaterfall, Agile, Scrum, Kanban, Extreme… each affects which technique will fit.
  • Defect History – What kind of bugs have you found already for this app, in other apps, across the domain, etc.

200 Level Testing – 15 More Things To Do When There Are Still Bugs

All developers know that they need to test their code.  What new developers don’t understand is that the longer a bug exists in their code throughout the software developer lifecycle, the more expensive it costs to fix it.  So what do you do?  You start with the basic techniques I discussed in my last post. But that is not the end, only the beginning of the quality journey. Your next step is to bake Quality into your process, whether it is waterfall, agile, kanban, lean, etc.  You think about quality in every stage.  See some examples below of how to include testing throughout each phase of your software development process.

  1. Architectural Design – Plan your solution out before you write your code.  This includes how you will test your application.  Sometimes this means writing your functions or methods differently, or creating some test harness code.  Plan this out beforehand.
  2. Code Standards, Conventions, and Style Guides – Set the standards with the team, making code easier to read, modify, test, and predict.  Do you want to follow certain naming conventions?  Are you a fan of Hungarian Style?  Particular about indenting? Does bracket placement matter?  How about spacing?  Document it all, and stick to it.
  3. Use your User Personas – I bet at one time or another, you or yours  UX department has defined a series of personas to help define and prioritize features.  You should do the same for your code – use the journey of your personas to help you define what is critical for testing.
  4. Unit test your front end code, too – You have probably written lots of unit tests against your service layer and database code.  And, you probably have functional tests to exercise all that front end code. But don’t forget to unit test that front end code, too.  Libraries to facilitate this are mocha, karma, jasmine, jest, enzyme, selenium webdriver, cypress, puppeteer, protractor, and many more.
  5. Improve your Definition of Ready -Improving your code quality starts with purpose – what is the objective of your effort?  Ensure you have documented enough of your expected outcomes.  Just be sure not to take it too far – this could become an agile anti-pattern.
  6. Improve Acceptance Criteria –  Two great mnemonics to improve your acceptance criteria are INVEST and SMART.  Read more about them here. Remember the thoroughness of your acceptance criteria directly impacts code quality.
  7. Peer Code Reviews – One of the best ways to identify bugs as early in the process as possible.  Two heads are better than one.  Learn from your peers and catch errors early.  And here is a great article you can read about peer code reviews.
  8. Static Code Analysis Tools – Just like your coding standards and style guide, these tools analyze your source code (usually straight from your source code repository), compare your code against a wide range of rules, and help you identify areas that need help. Some examples of popular Static Code Analysis tools are Lint, AppScan, FxCop, StyleCop, Resharper, NUnit, SonarQube, and others.
  9. Dynamic Code Analysis / Vulnerability Test Tools – These tools are run against code actively running on a server in an attempt to measure resources used, find complexity, identify errors, or uncover vulnerabilities.
  10. Test Driven Development – Following this methodology, you think about your code first, write test cases that fail, and finally write your code until your tests pass.  Then you can write more test cases, or adjust, until you are complete.
  11. Behavior Driven Development – This is a methodology to define test scenarios using natural language, following a specific pattern, just like the user story. In fact, these scenarios can become your acceptance criteria, and using a tool like Gherkin, can become tests directly by Cucumber. Read more about BDD, and the benefits of BDD and TDD.
  12. Refactor – Just as much an art as a science, refactoring your code helps you to reorganize, simplify, provide focus and improve.
  13. Test Data, Test Data, Test Data – Sometimes, the key to testing all your scenarios is setting up your test data. Setting up all your automated test scenarios? Need an existing user to test a new feature? Need to mock results from a downstream system? Running a load test? You need data. Plan this out just as diligently as you would your test scenarios.
  14. Run your tests in all environments – Can you run your tests on your local machine? In Dev, Test, and Production? Both Green and Blue environments? Can you test all your downstream systems too? Is there data to be purged, or added to the environment? Need a flag to indicate this is test data? Plan this ahead – with your infrastructure teams, your partner systems, databases, and product teams to make this happen.
  15. Plan your Rollback before you need to – Not every release is a success. Faced with a production issue, you have to make the tough decision… roll back, or forward fix? What if you used Flagr, your entire feature was behind a feature flag, and could be turned off at the flip of a switch? What if you deployed using a blue / green strategy, and could roll back by flipping environments? Or kept a library of deployed code to re-implement at a moment’s notice? Plan your strategy ahead of time.

 

My next blog post will cover test strategies and techniques that can help you better define your test cases, and approach your code in unique, thorough, and thoughtful ways.

Testing 101 – 15 Ways to Build Quality Into Your Code

Things certainly have changed.  I remember a day when testing meant writing up a set of scenarios to manually test, or having a checklist of features to repeatedly test against on deployment day.  Now, with modern tools, there are lots more ways to test your code.  Automation can repeatedly test those scenarios for you, and ensure you didn’t break your code when new changes are made.  You can use these automation tests in lots of different ways, along with some basic things to keep in mind to ensure those tests are as valuable as possible.

Basic Types of Automation

  1. Unit Testing with Code Coverage – Write reusable test cases that test your functions, methods, and classes.  Integrate them into your automated build pipeline, and measure how much of your code is tested.  Aim for 100%, but expect a bit less.  Some unit testing tools are jUnit, nUnit, CA LISA, Rhino Mocks, and many more.
  2. Functional / System Testing – Write tests from your customer’s perspective.  walk through your application in the browser, fill in the fields with predefined values, and submit.  Test if the data is correct, if the validations worked, if the data was submitted.  Common tools for this are Selenium, Cucumber, CA Lisa, Rhino Mocks, etc.
  3. Browser and Device Testing – The Browser Wars may be over, but we still have a fragmented landscape of browsers used, and you have to test them all – Chrome, Edge, IE, Safari, Firefox, Android, iOS, phones, tablets, desktops… To cover them all, you can automate your tests and integrate with tools like BrowserStack, SauceLabs, Selenium, etc.
  4. Beta / Acceptance Testing – You need to ensure that you have built a quality project that meets the requirements of the business and the customer.  This is usually a set of manual tests completed by your customer before and / or after launch.
  5. Install Testing – This subset of existing automation tests ensures you exercise as much of your codebase as possible in a new environment, particularly production, to ensure your server installation has completed properly.
  6. Smoke Testing – A small subset of existing automation tests, most probably used in other cases, that ensures any environment changes have not had an impact on your codebase and its functionality.  These tests usually follow the happy paths (or red routes).
  7. Regression Testing – a complete and thorough suite of tests that exercise all of your code, new features and old, happy path and all known edge cases, including past and present bugs, ensuring you are prepared for a launch to production.
  8. Performance / Load / Stress Tests – Identify break points and thresholds in your software and hardware, and improve.  Common tools include jMeter, LoadRunner, Silk Performer, and many others.
  9. Security / Penetration tests – Make your code more secure, prevent hacking and attacks.  Tools include SonarQube, OWASP ZAP, Nexpose, WireShark, Retina, Aquila, and many more.

Tips To Keep In Mind

  1. Keep your code simple – Keep your code focused on solving one problem at a time.  This makes it easier to read and understand, code correctly, debug, and maintain.
  2. Pair Programming – Two heads are better than one.  Write your code cleaner, faster, and with less bugs.  This method comes with built in code reviews.
  3. Use Design Patterns and Architecture Patterns – Follow these, and you are using proven methods that other developers will understand.  The Gang of Four is a good place to start learning design patterns, and there are many others.  MVC, MVP, MVVM, and VIPER are some common architecture patterns that you can use to organize your code at an application level.
  4. Comment and Document your Code – Do this as close to the code as possible.  This makes your code easier to read and understand.  One way I like to do this is write pseudocode first, then fill in with actual code.  Then the pseudocode becomes natural code commenting.
  5. Automated Builds and Continuous Integration – Run your code and test cases as often as possible, make sure they all work together.  Jenkins is the most common way to achieve this.  Another common tool is Bamboo.
  6. Demos – this forces you to think holistically about your code, how you will communicate your solution to others, and gather feedback from your audience.  If you follow an agile methodology, chances are this is already part of your process.

 

Brian T. Whaley – A README File

============================================================

Who I Am

I am currently the Director of Engineering responsible for the Global Prospects Application Experience Team.

Prior to American Express, I led global digital web development departments for healthcare, financial, telecommunications, and media companies.  I bring with me expertise in UI Development, Software Project Management, and Agile Methodologies.  Some of my most recent projects outside AmEx include launching custom developed marketing, E-Commerce, and Content Management systems, focusing on SEO, Analytics, and User Experience.

I hold an MSIS degree from the Stevens Institute of Technology, a Bachelor’s degree in Art and Art History from Rutgers University, am a Certified Project Management Professional, and am a Certified Scrum Master.  In addition, I serve on the Advisory Board of the Design Thinking Certificate program at Rutgers University.

I live in Morristown, NJ with my wife of 18 years, Mary Ann. My hobbies include photography, scuba diving and reading Sci-Fi and Fantasy novels.

============================================================

Why A README Document

The objective of my REAME is to describe who I am, set some expectations, and management  styles.  What I don’t want this document to do is dictate how to work with me.  I believe that good  leaders adjust to the personality styles of the people reporting to them.

============================================================

My Job

Talent Management

My primary function is to attract, hire, retain, and grow the best talent I can for our team.  We need  a heterogeneous mix of backgrounds, interests, and experience.  We need to work within a safe,  transparent, and productive culture.  Without the right people on the team and culture to work  within, we cannot deliver our products effectively.

Technology Management

I am also responsible to develop a technology roadmap, lay out the right architecture, advancements, and improvements  to deliver our product with little friction, the best user experience, and fastest time to market.

============================================================

What You can Expect from Me

  • Focus on Servant Leadership 
  • Develop leadership at all levels in all roles, from the bottom up
  • People over Process, as the Agile Manifesto recommends
  • Give and receive timely and regular feedback – recognition in public, criticism in private
  • I will book 1:1s only when I have something I need to share, or for performance reviews.
  • Deliver continuous improvement in everything we do – code, processes, policies, meetings, etc.
  • Provide transparency and candor wherever and whenever possible
  • A bias toward action
  • Due to my long train commute, I plan to be in the office at 9am, leave at 5pm
  • Work from the office whenever possible, but when working from home, be available on all  channels (phone, text, email, slack, WebEx, etc.)
  • I am a night owl, so I may be working later than you.  Don’t feel obligated to respond during  non-business hours, unless it is related to a production issue.

============================================================

What I Expect from You

  • Book your 1:1s if you want them.  Regularly scheduled or ad-hoc, the schedule and agenda is up to you.  They are your time with me.
  • Provide feedback regularly – to your staff, your peers, and your boss.  That’s me!
  • Display honesty and transparency in all that you do.
  • Focus on People First, Product Second, and Everything Else Third.
  • Do your best work all the time.
  • Try something new.  Educate yourself.
  • Don’t be afraid to fail.  Trying and failing should be celebrated.
  • Don’t be afraid to ask for help.  But don’t bring problems without a proposed solution.
  • Show you care.  Emotions included.
  • Exhibit leadership from your position.  You don’t need to be a manager to be a leader.
  • Display an extremely high sense of ownership, with a bias for action.
  • Continually point out things we can improve, in everything we do.

============================================================

Personality Test Results

People learn a lot about themselves and the people around them when they take personality tests.  It is an excellent exercise in introspection and self understanding.  To that end, here are my results from some popular personality tests.

Strengths Finder Results

  1. Achiever (EXECUTING)
  2. Ideation (STRATEGIC THINKING)
  3. Positivity (RELATIONSHIP BUILDING)
  4. Woo (INFLUENCING)
  5. Learner (STRATEGIC THINKING)

MBTI Results

============================================================

Books

I am an avid reader.  Unfortunately, I do read books in waves.  I primarily read Science Fiction, Fantasy, and Management books.  The book I recommend most often to people at work is Turn The Ship Around by L. David Marquet.  It is about leading from the bottom up, fostering individual contributors as leaders with high levels of ownership, and scaling these ideas across the organization.  Just the kind of culture I try to foster in my organization.  Here is my Goodreads book library for more information.

============================================================

Favorite Quote

“It doesn’t make sense to hire smart people and tell them what to do; we hire smart people so they can tell us what to do.” – Steve Jobs – https://www.inc.com/marcel-schwantes/this-classic-quote-from-steve-jobs-about-hiring-employees-describes-what-great-leadership-looks-like.html

9 Tools to Help You Recover from Malware

So I was at my parents’ house this weekend, and my dad asked a very simple question… “Could you take a look at my computer?  I can’t run CCleaner.”  I thought to myself… That’s great!  He has been running CCleaner regularly!  But when I sat down to take a look, things only got worse.  Windows Update wouldn’t start, CCleaner wouldn’t start, Microsoft Security Essentials wouldn’t start properly or update, and AVG Free wouldn’t install.  That is not good.  Here is a list of tools I used to scrub his machine, and boy did i need them all, and for different reasons.

  1. MalwareBytes Anti-Malware
  2. PortableApps
  3. SpyBot Search & Destroy
  4. SuperAntiSpyware
  5. CCleaner
  6. HijackThis
  7. AVG
  8. Microsoft Windows Defender
  9. Belarc Advisor

14 Web Site Graders To Test Your Redesigned Site

When you redesign or enhance your site, you make a lot of changes.  You change the content, the design, the front end technology, the back end stack, the user flows, the information architecture, everything.  It is tough to know what you have done right, and what needs help, particularly as it compares to other sites.  These sites can help show you what you have done right, what needs help, and how you compare to other sites.  I use them… and so should you.

  • https://website.grader.com/ – the gold standard of online web site graders. Shows performance, SEO, mobile capability, and security.
  • https://www.semrush.com/ – this site gathers a LOT of marketing information about your site… Monitor this information before and after your cutover.
  • https://validator.w3.org/ – Are you W3C Compliant?  Are you writing valid HTML?  Using this throughout your development will ensure your site is as readable and indexable as possible.
  • http://www.webpagetest.org – How long does the first view of my page take?  How about the second view?  This grader shows you both… just like the Developer Tools in Google Chrome.
  • https://developers.google.com/speed/pagespeed/insights/ – another technical site grader that can give you guidance where to increase performance.  Be careful trying to get 100/100, though… not everything NEEDS to be done.
  • http://nibbler.silktide.com/en_US – Evaluates your site down in four areas – Accessibility, Experience, Marketing, and Technology.  Still useful to get another view of your site.
  • https://www.woorank.com/ – “Run a review to see how your site can improve across 70+ metrics” – Marketing, SEO, Mobile, Usability, Technology, Crawl Errors, Backlinks, Social, Local, SERP Checker, Visitors.
  • http://www.similarweb.com/ – Another great site for a large, corporate web site.  But not a lot of information about performance.  Good to monitor usage and marketing metrics.
  • https://moz.com/researchtools/ose – Moz is known for its SEO tools, and this is an easy dashboard of information to monitor before and after your redesign.  The free version is useful, but the Pro version is even better.  Not a lot of tech help here, though.
  • http://www.alexa.com/ – 7 days for free, the paid version is the only one really useful.  Lots of marketing information is available, though.
  • http://builtwith.com/ – Very technical.  Shows you the infrastructure and software choices made by the development team.  You will be surprised.  Helpful for technology and information security teams.
  • http://www.google.com/analytics  – Free analytics tool.  Tells you who uses your site, how much, where they are from, what browsers, what time of day… a plethora of information.  Including Page Speed.
  • https://www.google.com/webmasters/tools – Free tool that shows you what index errors Google has encountered, things to make your site more indexable, and what your pages look like to the Google Search Crawlers.  Use this.
  • http://www.bing.com/toolbox/webmaster – Everything that Search Console is for Google, this site is for Bing.

So did I miss any tools that you use?  Are any of these ones you have struck off your list?  How do you measure results of your site before and after?  Leave a comment and let me know!

EDIT: Two more sites were recommended to me that help redesign projects, so I am adding them here:

2 New jQuery Plugins

I have just finished creating two new jQuery plugins.  I found them very useful for my own site, and thought I would share them with everyone else.  One is called FlickrTools, the other is SocialCards.

FlickrTools

FlickrTools is a simple jQuery plugin that queries the Flickr API, and gathers all the images that match a certain tag.  At some point, this can be expanded to query other properties in the API, but this is the simplest way to start.  I use my flickr images as part of my home page hero, and as a rotating carousel of images.  One of the nice things about this plugin is that the data retrieved from the query is reusable between both features on the site.  The hero is custom jQuery, whole the carousel uses Slick.

SocialCards

SocialCards is a jQuery plugin that queries all of your social media outlets and gathers all of your recent content into cards and displays them on your own site.  Currently it queries blog posts, Etsy, Flickr, Foursquare, GoodReads, Pinterest, and Tumblr.  Soon to be developed are Facebook, Google+, Instagram, Twitter, and Youtube.  It uses a masonry style based on the one I found on w3bits, that is configurable using CSS, included in the sample.  The plugin integrates with the Google API for easy RSS reading, and with Yahoo YQL API for other more complex data.

Please feel free to give these a try.  These are the 1.0 release, so they may not fit your needs exactly.  Reach out to me at brian.whaley@gmail.com with any comments, suggestions, or constructive criticism.

One Site Design when Serving Two Masters

I have recently come across this situation during a site redesign project.  There are two primary objectives for the web site property, each with their own distinct and unique persona.  What do you do in this situation?  I recommend you embrace the bipolar nature of the site, and use a split screen design.

A split screen design, as it suggests, splits the home page in half, each side embracing one of the personas.  You can design each side to look very different – color schemes, styles, fonts, etc.  Shared elements such as header, footer, navigation, hero images, etc. bridge the gap between the different sides of the site.  The hero can rotate between different calls to action, focusing on the personas and themes.  And, shared pages such as the home page can be a continuous scroll to allow the large volume of content.

Instead of fighting the nature of the beast to blend the personas, embrace  the content divide, emphasize it, and stay focused on your users.

Here are some examples of Split Screen Design I have come across in my research:

Upgrades to My Web Site – Eating My Own Dog Food

It has been a couple years since I have made any big changes to my web site, so I thought it was time.  I have taken my own advice in my post 2014 Web Design Trends, and added some changes to my own site.  I have flattened the design, added a hero image area, focused on Mobile First design, trimmed some text, and focused on a card based design.

Flat Design

I have made some minor changes to focus on a flatter, simpler design.  I have removed shadows and rounded corners throughout.  This makes the site look lighter, simpler, and cleaner.  I like the look. You can see more at 25 Delightful Flat Design 2.0 Websites for Inspiration.

Fixed header and navigation

I have anchored the header and navigation at the top of the page, so that it is visible even if you scroll away from the top of the page.  This is a very popular technique, particularly if the header and navigation is kept slim.  You can see more examples of fixed header and navigation areas at 22 Examples of Fixed Position Navigation in Web Design.

Hero Area

I have added a hero area on the home page, which showcases my own photos stored on flickr.  This adds a lot more interest and personalization to my site.  Some additional examples of this design can be seen at 30 Web Designs that Fully Embrace the Hero Image.

Mobile First

The amount of traffic coming from mobile devices increases with each passing day.  Building mobile specific web sites or applications separate from your desktop web site is not sustainable.  My site is now accessible on phones, tablets, desktops, and extra large screens.

Less Text

I have trimmed the extra, unneeded filler text from each of the different areas of my web site.  this kept the site focused on the original content, and on my photography too.

Card Based Design

This is a very popular design lately.  I have gathered and organized my most recent social media content from pinterest, tumblr, twitter, and my blog, and displayed it on my home page.  Each post, tweet, and pin is shown as a separate card.  I like that it is always updating and follows my pixelated design theme.  You can see more examples of card based designs at 15 delicious examples of card-based web design.

8 Planning Poker Options for Remote Teams

The most common way to size user stories for an agile team is to use planning poker and fibonacci sequence numbers.  But sometimes doing this is difficult if you are not colocated.  I was a big fan of planningpoker.com.  But without much fanfare, they changed their tool to only allow 10 people into their estimation session.  Definitely hoses half of my team.  now i need a new tool to help me size my user stories.  Here are some web based tools that can help me out.

  1. The Original – Planning Poker – https://www.planningpoker.com/ .  This is what I used for years.  But now, the free version is only available to 10 people on your team at a time.  To add more you must pay $25 per month.  Crazy talk.
  2. Pointing Poker – https://www.pointingpoker.com/ .  Simple, basic, very popular, and FREE.  That is all that needs to be said.
  3. Plan It Poker – http://www.planitpoker.com/ .  I like their tag line.  “Completely free to use no matter how large your team.”  Sign me up.
  4. Planning Poker for Hangouts – http://nearsoft.com/resources/tools/planning-poker/ .  If you or your team are fans of Google Hangouts, this is the tool for you.
  5. Scrummy – http://playscrummy.com/ .  This one looks cool… but sounds like it was more of a technology proof of concept than a new product to be launched.
  6. FirePoker – http://firepoker.io/#/ .  Another popular estimation tool.  This one uses angular.js .  Give it a try.
  7. Planning Poker (old version) – http://www.old-planningpoker.com/ .  This one looks to be a legacy install of the original planning poker before the change, and before the redesign.  This might be the answer to my problem.
  8. Agile Estimation for Jira – https://marketplace.atlassian.com/plugins/agile.estimation.3.0_private .  If you are a Jira user,and don’t mind spending money on a plug-in, this is for you.  Not how I would go… but maybe you will.

Which one do you use?  How do you estimate?  Have a tool I missed?  Leave me a comment and let me know!