{"id":252,"date":"2026-03-02T17:27:03","date_gmt":"2026-03-02T17:27:03","guid":{"rendered":"https:\/\/sites.nd.edu\/softwaretesting\/?page_id=252"},"modified":"2026-03-03T14:36:34","modified_gmt":"2026-03-03T14:36:34","slug":"test-optimization-techniques-testing-smarter-not-harder","status":"publish","type":"page","link":"https:\/\/sites.nd.edu\/softwaretesting\/testing-techniques\/test-optimization-techniques-testing-smarter-not-harder\/","title":{"rendered":"Test Optimization Techniques (Testing Smarter, Not Harder)"},"content":{"rendered":"\n<p>These techniques help reduce the number of test cases while still finding defects.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">1. Equivalence Partitioning<\/h3>\n\n\n\n<p>Instead of testing every possible input, inputs are grouped into <strong>categories<\/strong> that behave the same.<\/p>\n\n\n\n<p>You test <strong>one value from each group<\/strong>.<\/p>\n\n\n\n<p><strong>Example:<\/strong><br>If a field accepts numbers between 10,000 and 99,999:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Below 10,000 \u2192 invalid<\/li>\n\n\n\n<li>Between 10,000\u201399,999 \u2192 valid<\/li>\n\n\n\n<li>Above 99,999 \u2192 invalid<\/li>\n<\/ul>\n\n\n\n<p>Testing one value from each group is usually enough.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">2. Boundary Value Analysis<\/h3>\n\n\n\n<p>Focuses on values <strong>at the edges<\/strong> of allowed ranges.<\/p>\n\n\n\n<p>Bugs often occur at boundaries.<\/p>\n\n\n\n<p><strong>Example:<\/strong><br>If the max value is 99,999:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Test 99,998<\/li>\n\n\n\n<li>Test 99,999<\/li>\n\n\n\n<li>Test 100,000<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">3. Decision Table Testing<\/h3>\n\n\n\n<p>Used when <strong>complex business rules<\/strong> determine outcomes.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Inputs (conditions) are listed<\/li>\n\n\n\n<li>Expected actions\/results are mapped<\/li>\n\n\n\n<li>Each rule becomes a test case<\/li>\n<\/ul>\n\n\n\n<p>This helps ensure no combinations are missed.<\/p>\n\n\n\n<p>Example:<br>Decision Table based on possible outcomes when a player lands on a property in the game of Monopoly:<\/p>\n\n\n\n<figure class=\"wp-block-table\">\n  <table class=\"has-fixed-layout\" style=\"width:7in;max-width:100%\">\n    <colgroup>\n      <col style=\"width:85%\">\n      <col style=\"width:15%\">\n      <col style=\"width:15%\">\n      <col style=\"width:15%\">\n    <\/colgroup>\n    <tbody>\n      <tr>\n        <td><\/td>\n        <td class=\"has-text-align-center\" data-align=\"center\"><strong>Rule 1<\/strong><\/td>\n        <td class=\"has-text-align-center\" data-align=\"center\"><strong>Rule 2<\/strong><\/td>\n        <td class=\"has-text-align-center\" data-align=\"center\"><strong>Rule 3<\/strong><\/td>\n      <\/tr>\n      <tr>\n        <td colspan=\"4\"><strong>Conditions<\/strong><\/td>\n      <\/tr>\n      <tr>\n        <td>Player lands on a property owned by another player<\/td>\n        <td class=\"has-text-align-center\" data-align=\"center\">Yes<\/td>\n        <td class=\"has-text-align-center\" data-align=\"center\">Yes<\/td>\n        <td class=\"has-text-align-center\" data-align=\"center\">No<\/td>\n      <\/tr>\n      <tr>\n        <td>Player has enough money to pay rent<\/td>\n        <td class=\"has-text-align-center\" data-align=\"center\">Yes<\/td>\n        <td class=\"has-text-align-center\" data-align=\"center\">No<\/td>\n        <td class=\"has-text-align-center\" data-align=\"center\">N\/A<\/td>\n      <\/tr>\n      <tr>\n        <td colspan=\"4\"><strong>Actions<\/strong><\/td>\n      <\/tr>\n      <tr>\n        <td>Player stays in the game<\/td>\n        <td class=\"has-text-align-center\" data-align=\"center\">Yes<\/td>\n        <td class=\"has-text-align-center\" data-align=\"center\">No<\/td>\n        <td class=\"has-text-align-center\" data-align=\"center\">Yes<\/td>\n      <\/tr>\n    <\/tbody>\n  <\/table>\n<\/figure>\n\n\n\n<p>Resulting test cases:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\" style=\"width:8in;max-width:100%\"><colgroup><col style=\"width:15%\"><col style=\"width:55%\"><col style=\"width:30%\"><\/colgroup><tbody><tr><td class=\"has-text-align-center\" data-align=\"center\"><strong>Test Case<\/strong><\/td><td><strong>Execution Step<\/strong><\/td><td><strong>Acceptance Criteria<\/strong><\/td><\/tr><tr><td class=\"has-text-align-center\" data-align=\"center\">1<\/td><td>Player lands on a property owned by another player and has enough money to pay rent<\/td><td>Player stays in the game<\/td><\/tr><tr><td class=\"has-text-align-center\" data-align=\"center\">2<\/td><td>Player lands on a property owned by another player and <strong>does not<\/strong> have enough money to pay rent<\/td><td>Player <strong>does not<\/strong> stay in the game<\/td><\/tr><tr><td class=\"has-text-align-center\" data-align=\"center\">3<\/td><td>Player lands on a property which is either not owned or is owned by the player<\/td><td>Player stays in the game<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\">4. Pairwise Testing<\/h3>\n\n\n\n<p>Used when many fields or options exist.<\/p>\n\n\n\n<p>Instead of testing <strong>every possible combination<\/strong>, this technique ensures:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Every <strong>pair of inputs<\/strong> is tested at least once<\/li>\n<\/ul>\n\n\n\n<p>This catches most real-world defects with far fewer tests.<\/p>\n\n\n\n<p>Example:<br>An application with a list box containing 10 elements (a,b,c,d,e,f,g,h,i,j), a text box that allows numeric entry of values from 1 to 100 and a checkbox:<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"318\" height=\"241\" src=\"https:\/\/sites.nd.edu\/softwaretesting\/files\/2026\/03\/Pairwise-Application-1.jpg\" alt=\"\" class=\"wp-image-292\" srcset=\"https:\/\/sites.nd.edu\/softwaretesting\/files\/2026\/03\/Pairwise-Application-1.jpg 318w, https:\/\/sites.nd.edu\/softwaretesting\/files\/2026\/03\/Pairwise-Application-1-300x227.jpg 300w\" sizes=\"auto, (max-width: 318px) 100vw, 318px\" \/><\/figure>\n\n\n\n<p>The following pairwise table would be used to identify the needed test cases:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\" style=\"width:7in;max-width:100%\"><colgroup><col style=\"width:40%\"><col style=\"width:30%\"><col style=\"width:30%\"><\/colgroup><tbody><tr><td><strong>Text Box<\/strong><\/td><td><strong>List Box<\/strong><\/td><td><strong>Check Box<\/strong><\/td><\/tr><tr><td>Valid Integer<\/td><td>In set<\/td><td>Checked<\/td><\/tr><tr><td>Valid Integer<\/td><td>In set<\/td><td>Unchecked<\/td><\/tr><tr><td>Valid Integer<\/td><td>Not in set<\/td><td>Checked<\/td><\/tr><tr><td>Valid Integer<\/td><td>Not in set<\/td><td>Unchecked<\/td><\/tr><tr><td>Invalid Integer<\/td><td>In set<\/td><td>Checked<\/td><\/tr><tr><td>Invalid Integer<\/td><td>In set<\/td><td>Unchecked<\/td><\/tr><tr><td>Invalid Integer<\/td><td>Not in set<\/td><td>Checked<\/td><\/tr><tr><td>Invalid Integer<\/td><td>Not in set<\/td><td>Unchecked<\/td><\/tr><tr><td>Alpha character<\/td><td>In set<\/td><td>Checked<\/td><\/tr><tr><td>Alpha character<\/td><td>In set<\/td><td>Unchecked<\/td><\/tr><tr><td>Alpha character<\/td><td>Not in set<\/td><td>Checked<\/td><\/tr><tr><td>Alpha character<\/td><td>Not in set<\/td><td>Unchecked<\/td><\/tr><tr><td>Special character\/symbol<\/td><td>In set<\/td><td>Checked<\/td><\/tr><tr><td>Special character\/symbol<\/td><td>In set<\/td><td>Unchecked<\/td><\/tr><tr><td>Special character\/symbol<\/td><td>Not in set<\/td><td>Checked<\/td><\/tr><tr><td>Special character\/symbol<\/td><td>Not in set<\/td><td>Unchecked<\/td><\/tr><tr><td>Blank<\/td><td>In set<\/td><td>Checked<\/td><\/tr><tr><td>Blank<\/td><td>In set<\/td><td>Unchecked<\/td><\/tr><tr><td>Blank<\/td><td>Not in set<\/td><td>Checked<\/td><\/tr><tr><td>Blank<\/td><td>Not in set<\/td><td>Unchecked<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p><\/p>\n","protected":false},"excerpt":{"rendered":"<p>These techniques help reduce the number of test cases while still finding defects. 1. Equivalence Partitioning Instead of testing every possible input, inputs are grouped into categories that behave the same. You test one value from each group. Example:If a field accepts numbers between 10,000 and 99,999: Testing one value from each group is usually [&hellip;]<\/p>\n","protected":false},"author":4975,"featured_media":0,"parent":226,"menu_order":2,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-252","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/sites.nd.edu\/softwaretesting\/wp-json\/wp\/v2\/pages\/252","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/sites.nd.edu\/softwaretesting\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/sites.nd.edu\/softwaretesting\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/sites.nd.edu\/softwaretesting\/wp-json\/wp\/v2\/users\/4975"}],"replies":[{"embeddable":true,"href":"https:\/\/sites.nd.edu\/softwaretesting\/wp-json\/wp\/v2\/comments?post=252"}],"version-history":[{"count":37,"href":"https:\/\/sites.nd.edu\/softwaretesting\/wp-json\/wp\/v2\/pages\/252\/revisions"}],"predecessor-version":[{"id":318,"href":"https:\/\/sites.nd.edu\/softwaretesting\/wp-json\/wp\/v2\/pages\/252\/revisions\/318"}],"up":[{"embeddable":true,"href":"https:\/\/sites.nd.edu\/softwaretesting\/wp-json\/wp\/v2\/pages\/226"}],"wp:attachment":[{"href":"https:\/\/sites.nd.edu\/softwaretesting\/wp-json\/wp\/v2\/media?parent=252"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}