{"id":175,"date":"2010-08-11T11:11:54","date_gmt":"2010-08-11T18:11:54","guid":{"rendered":"http:\/\/angryweasel.com\/blog\/?p=175"},"modified":"2010-08-11T11:11:54","modified_gmt":"2010-08-11T18:11:54","slug":"code-coverage-with-manual-testing","status":"publish","type":"post","link":"https:\/\/angryweasel.com\/blog\/code-coverage-with-manual-testing\/","title":{"rendered":"Code Coverage with Manual Testing"},"content":{"rendered":"<p>Here\u2019s a tip. Want me to write about something in particular? Ask me a question. It\u2019s that easy. <a href=\"http:\/\/www.oneofthewolves.com\" target=\"_blank\">Tim Coulter<\/a> had a question about <a href=\"http:\/\/angryweasel.com\/blog\/?p=172\" target=\"_blank\">my last blog post<\/a>. He asked:<\/p>\n<blockquote>\n<p>Would love to hear how you check code coverage of manual testing, actually. Is that just \u201cfeature coverage\u201d (break it up into logical blocks and test those)?<\/p>\n<\/blockquote>\n<p>I realized that a lot of people may not be measuring code coverage during manual testing \u2013 but it\u2019s quite valuable to do so, as measuring code coverage <em>still helps you find missing tests.<\/em><\/p>\n<p>Let\u2019s consider a silly command line app that does math operations. It takes 3 parameters, the first two are the values to operate on, and the third parameter is the operator to execute. For example, a command line of 2 3 + would return a value of 5. Let\u2019s test it (manually).<\/p>\n<div style=\"padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px\" id=\"scid:9D7513F9-C04C-4721-824A-2B34F0212519:2ec79c6f-dc68-45e7-927a-1cecc3a724b6\" class=\"wlWriterEditableSmartContent\">\n<pre class=\"brush: plain; gutter: false; first-line: 1; tab-size: 4;  toolbar: false;  width: 488px; height: 339px;\" style=\" width: 488px; height: 339px;overflow: auto;\">c:\\example&gt;calul8r.exe\nUsage:\ncalcul8r [value] [value] [operation]\nfor example:\n  calcul8r 4 2 +\n\nc:\\example&gt;calul8r.exe 2 3 +\nThe result of 2 + 3 is 5\n\nc:\\example&gt;calul8r.exe 4 2 -\nThe result of 4 - 2 is 2\n\nc:\\example&gt;calul8r.exe 5 5 *\nThe result of 5 * 5 is 25\n\nc:\\example&gt;calul8r.exe 15 3 \/\nThe result of 15 \/ 3 is 5<\/pre>\n<p><!-- Code inserted with Steve Dunn's Windows Live Writer Code Formatter Plugin.  http:\/\/dunnhq.com --><\/div>\n<p>&#160;<\/p>\n<p>OK \u2013 looks like it sort of works. But are there test cases we forgot? Let\u2019s look at what code coverage tells us.<\/p>\n<div class=\"WordSection1\">\n<p style=\"line-height: normal; margin-bottom: 0pt\" class=\"MsoNormal\"><span style=\"font-family: &quot;Courier New&quot;; color: blue; font-size: 10pt\">1 int<\/span><span style=\"font-family: &quot;Courier New&quot;; color: black; font-size: 10pt\"> DoMath(<\/span><span style=\"font-family: &quot;Courier New&quot;; color: blue; font-size: 10pt\">int<\/span><span style=\"font-family: &quot;Courier New&quot;; color: black; font-size: 10pt\"> val1, <\/span><span style=\"font-family: &quot;Courier New&quot;; color: blue; font-size: 10pt\">int<\/span><span style=\"font-family: &quot;Courier New&quot;; color: black; font-size: 10pt\"> val2, <\/span><span style=\"font-family: &quot;Courier New&quot;; color: blue; font-size: 10pt\">int<\/span><span style=\"font-family: &quot;Courier New&quot;; color: black; font-size: 10pt\"> valOperator)<\/span><\/p>\n<p style=\"line-height: normal; margin-bottom: 0pt\" class=\"MsoNormal\"><span style=\"font-family: &quot;Courier New&quot;; color: black; font-size: 10pt\">2 {<\/span><\/p>\n<p style=\"line-height: normal; margin-bottom: 0pt\" class=\"MsoNormal\"><span style=\"font-family: &quot;Courier New&quot;; color: black; font-size: 10pt\">3&#160;&#160;&#160;&#160;&#160;&#160; <\/span><span style=\"font-family: &quot;Courier New&quot;; color: blue; font-size: 10pt\">int<\/span><span style=\"font-family: &quot;Courier New&quot;; color: black; font-size: 10pt\"> result = <\/span><span style=\"font-family: &quot;Courier New&quot;; color: purple; font-size: 10pt\">0xbaadf00d<\/span><span style=\"font-family: &quot;Courier New&quot;; color: black; font-size: 10pt\">;<\/span><\/p>\n<p style=\"line-height: normal; margin-bottom: 0pt\" class=\"MsoNormal\"><span style=\"font-family: &quot;Courier New&quot;; color: black; font-size: 10pt\">4&#160;&#160;&#160;&#160;&#160;&#160; <\/span><span style=\"font-family: &quot;Courier New&quot;; color: blue; font-size: 10pt\">switch<\/span><span style=\"font-family: &quot;Courier New&quot;; color: black; font-size: 10pt\"> (valOperator)<\/span><\/p>\n<p style=\"line-height: normal; margin-bottom: 0pt\" class=\"MsoNormal\"><span style=\"font-family: &quot;Courier New&quot;; color: black; font-size: 10pt\">5&#160;&#160;&#160;&#160;&#160;&#160; {<\/span><\/p>\n<p style=\"line-height: normal; margin-bottom: 0pt\" class=\"MsoNormal\"><span style=\"font-family: &quot;Courier New&quot;; color: black; font-size: 10pt\">6&#160;&#160;&#160;&#160;&#160;&#160; <\/span><span style=\"font-family: &quot;Courier New&quot;; color: blue; font-size: 10pt\">case<\/span><span style=\"font-family: &quot;Courier New&quot;; color: black; font-size: 10pt\"> <\/span><span style=\"font-family: &quot;Courier New&quot;; color: maroon; font-size: 10pt\">&#8216;+&#8217;<\/span><span style=\"font-family: &quot;Courier New&quot;; color: black; font-size: 10pt\">:<\/span><\/p>\n<p style=\"line-height: normal; margin-bottom: 0pt\" class=\"MsoNormal\"><span style=\"font-family: &quot;Courier New&quot;; color: black; font-size: 10pt\">7&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; result = val1 + val2;<\/span><\/p>\n<p style=\"line-height: normal; margin-bottom: 0pt\" class=\"MsoNormal\"><span style=\"font-family: &quot;Courier New&quot;; color: black; font-size: 10pt\">8&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; <\/span><span style=\"font-family: &quot;Courier New&quot;; color: blue; font-size: 10pt\">break<\/span><span style=\"font-family: &quot;Courier New&quot;; color: black; font-size: 10pt\">;<\/span><\/p>\n<p style=\"line-height: normal; margin-bottom: 0pt\" class=\"MsoNormal\"><span style=\"font-family: &quot;Courier New&quot;; color: black; font-size: 10pt\">9&#160;&#160;&#160;&#160;&#160;&#160; <\/span><span style=\"font-family: &quot;Courier New&quot;; background: yellow; color: blue; font-size: 10pt\">case<\/span><span style=\"font-family: &quot;Courier New&quot;; background: yellow; color: black; font-size: 10pt\"> <\/span><span style=\"font-family: &quot;Courier New&quot;; background: yellow; color: maroon; font-size: 10pt\">&#8216;x&#8217;<\/span><span style=\"font-family: &quot;Courier New&quot;; background: yellow; color: black; font-size: 10pt\">:<\/span><\/p>\n<p style=\"line-height: normal; margin-bottom: 0pt\" class=\"MsoNormal\"><span style=\"font-family: &quot;Courier New&quot;; color: black; font-size: 10pt\">10&#160;&#160;&#160;&#160;&#160; <\/span><span style=\"font-family: &quot;Courier New&quot;; color: blue; font-size: 10pt\">case<\/span><span style=\"font-family: &quot;Courier New&quot;; color: black; font-size: 10pt\"> <\/span><span style=\"font-family: &quot;Courier New&quot;; color: maroon; font-size: 10pt\">&#8216;*&#8217;<\/span><span style=\"font-family: &quot;Courier New&quot;; color: black; font-size: 10pt\">:<\/span><\/p>\n<p style=\"line-height: normal; margin-bottom: 0pt\" class=\"MsoNormal\"><span style=\"font-family: &quot;Courier New&quot;; color: black; font-size: 10pt\">11&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; result = val1 * val2;<\/span><\/p>\n<p style=\"line-height: normal; margin-bottom: 0pt\" class=\"MsoNormal\"><span style=\"font-family: &quot;Courier New&quot;; color: black; font-size: 10pt\">12&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; <\/span><span style=\"font-family: &quot;Courier New&quot;; color: blue; font-size: 10pt\">break<\/span><span style=\"font-family: &quot;Courier New&quot;; color: black; font-size: 10pt\">;<\/span><\/p>\n<p style=\"line-height: normal; margin-bottom: 0pt\" class=\"MsoNormal\"><span style=\"font-family: &quot;Courier New&quot;; color: black; font-size: 10pt\">13 <\/span><\/p>\n<p style=\"line-height: normal; margin-bottom: 0pt\" class=\"MsoNormal\"><span style=\"font-family: &quot;Courier New&quot;; color: black; font-size: 10pt\">14&#160;&#160;&#160;&#160;&#160; <\/span><span style=\"font-family: &quot;Courier New&quot;; color: blue; font-size: 10pt\">case<\/span><span style=\"font-family: &quot;Courier New&quot;; color: black; font-size: 10pt\"> <\/span><span style=\"font-family: &quot;Courier New&quot;; color: maroon; font-size: 10pt\">&#8216;\/&#8217;<\/span><span style=\"font-family: &quot;Courier New&quot;; color: black; font-size: 10pt\">:<\/span><\/p>\n<p style=\"line-height: normal; margin-bottom: 0pt\" class=\"MsoNormal\"><span style=\"font-family: &quot;Courier New&quot;; color: black; font-size: 10pt\">15&#160;&#160;&#160;&#160;&#160; <\/span><span style=\"font-family: &quot;Courier New&quot;; background: yellow; color: blue; font-size: 10pt\">case<\/span><span style=\"font-family: &quot;Courier New&quot;; background: yellow; color: black; font-size: 10pt\"> <\/span><span style=\"font-family: &quot;Courier New&quot;; background: yellow; color: maroon; font-size: 10pt\">&#8216;\\\\&#8217;<\/span><span style=\"font-family: &quot;Courier New&quot;; background: yellow; color: black; font-size: 10pt\">:<\/span><\/p>\n<p style=\"line-height: normal; margin-bottom: 0pt\" class=\"MsoNormal\"><span style=\"font-family: &quot;Courier New&quot;; color: black; font-size: 10pt\">16&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; <\/span><span style=\"font-family: &quot;Courier New&quot;; background: yellow; color: blue; font-size: 10pt\">if<\/span><span style=\"font-family: &quot;Courier New&quot;; background: yellow; color: black; font-size: 10pt\"> (val2 ==<\/span><span style=\"font-family: &quot;Courier New&quot;; background: yellow; color: purple; font-size: 10pt\">0<\/span><span style=\"font-family: &quot;Courier New&quot;; background: yellow; color: black; font-size: 10pt\">)<\/span><\/p>\n<p style=\"line-height: normal; margin-bottom: 0pt\" class=\"MsoNormal\"><span style=\"font-family: &quot;Courier New&quot;; background: yellow; color: black; font-size: 10pt\">17&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; {<\/span><\/p>\n<p style=\"line-height: normal; margin-bottom: 0pt\" class=\"MsoNormal\"><span style=\"font-family: &quot;Courier New&quot;; background: yellow; color: black; font-size: 10pt\">18&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; printf(<\/span><span style=\"font-family: &quot;Courier New&quot;; background: yellow; color: maroon; font-size: 10pt\">&quot;Invalid input. Cannot divide by zreo&quot;<\/span><span style=\"font-family: &quot;Courier New&quot;; background: yellow; color: black; font-size: 10pt\">);<\/span><\/p>\n<p style=\"line-height: normal; margin-bottom: 0pt\" class=\"MsoNormal\"><span style=\"font-family: &quot;Courier New&quot;; background: yellow; color: black; font-size: 10pt\">19&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; }<\/span><\/p>\n<p style=\"line-height: normal; margin-bottom: 0pt\" class=\"MsoNormal\"><span style=\"font-family: &quot;Courier New&quot;; color: black; font-size: 10pt\">20&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; <\/span><span style=\"font-family: &quot;Courier New&quot;; color: blue; font-size: 10pt\">else<\/span><\/p>\n<p style=\"line-height: normal; margin-bottom: 0pt\" class=\"MsoNormal\"><span style=\"font-family: &quot;Courier New&quot;; color: black; font-size: 10pt\">21&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; {<\/span><\/p>\n<p style=\"line-height: normal; margin-bottom: 0pt\" class=\"MsoNormal\"><span style=\"font-family: &quot;Courier New&quot;; color: black; font-size: 10pt\">22&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; result = val1 \/ val2;<\/span><\/p>\n<p style=\"line-height: normal; margin-bottom: 0pt\" class=\"MsoNormal\"><span style=\"font-family: &quot;Courier New&quot;; color: black; font-size: 10pt\">23&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; }<\/span><\/p>\n<p style=\"line-height: normal; margin-bottom: 0pt\" class=\"MsoNormal\"><span style=\"font-family: &quot;Courier New&quot;; color: black; font-size: 10pt\">24&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; <\/span><span style=\"font-family: &quot;Courier New&quot;; color: blue; font-size: 10pt\">break<\/span><span style=\"font-family: &quot;Courier New&quot;; color: black; font-size: 10pt\">;<\/span><\/p>\n<p style=\"line-height: normal; margin-bottom: 0pt\" class=\"MsoNormal\"><span style=\"font-family: &quot;Courier New&quot;; color: black; font-size: 10pt\">25 <\/span><\/p>\n<p style=\"line-height: normal; margin-bottom: 0pt\" class=\"MsoNormal\"><span style=\"font-family: &quot;Courier New&quot;; color: black; font-size: 10pt\">26&#160;&#160;&#160;&#160;&#160; <\/span><span style=\"font-family: &quot;Courier New&quot;; color: blue; font-size: 10pt\">case<\/span><span style=\"font-family: &quot;Courier New&quot;; color: black; font-size: 10pt\"> <\/span><span style=\"font-family: &quot;Courier New&quot;; color: maroon; font-size: 10pt\">&#8216;-&#8216;<\/span><span style=\"font-family: &quot;Courier New&quot;; color: black; font-size: 10pt\">:<\/span><\/p>\n<p style=\"line-height: normal; margin-bottom: 0pt\" class=\"MsoNormal\"><span style=\"font-family: &quot;Courier New&quot;; color: black; font-size: 10pt\">27&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; result = val1 &#8211; val2;<\/span><\/p>\n<p style=\"line-height: normal; margin-bottom: 0pt\" class=\"MsoNormal\"><span style=\"font-family: &quot;Courier New&quot;; color: black; font-size: 10pt\">28&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; <\/span><span style=\"font-family: &quot;Courier New&quot;; color: blue; font-size: 10pt\">break<\/span><span style=\"font-family: &quot;Courier New&quot;; color: black; font-size: 10pt\">;<\/span><\/p>\n<p style=\"line-height: normal; margin-bottom: 0pt\" class=\"MsoNormal\"><span style=\"font-family: &quot;Courier New&quot;; color: black; font-size: 10pt\">29 <\/span><\/p>\n<p style=\"line-height: normal; margin-bottom: 0pt\" class=\"MsoNormal\"><span style=\"font-family: &quot;Courier New&quot;; color: black; font-size: 10pt\">30&#160;&#160;&#160;&#160;&#160; <\/span><span style=\"font-family: &quot;Courier New&quot;; color: blue; font-size: 10pt\">default<\/span><span style=\"font-family: &quot;Courier New&quot;; color: black; font-size: 10pt\">:<\/span><\/p>\n<p style=\"line-height: normal; margin-bottom: 0pt\" class=\"MsoNormal\"><span style=\"font-family: &quot;Courier New&quot;; color: black; font-size: 10pt\">31&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; <span style=\"background: yellow\">printf(<\/span><\/span><span style=\"font-family: &quot;Courier New&quot;; background: yellow; color: maroon; font-size: 10pt\">&quot;Unknown oprator &#8211; %d\\n&quot;<\/span><span style=\"font-family: &quot;Courier New&quot;; background: yellow; color: black; font-size: 10pt\">);<\/span><\/p>\n<p style=\"line-height: normal; margin-bottom: 0pt\" class=\"MsoNormal\"><span style=\"font-family: &quot;Courier New&quot;; color: black; font-size: 10pt\">32&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; <\/span><span style=\"font-family: &quot;Courier New&quot;; color: blue; font-size: 10pt\">break<\/span><span style=\"font-family: &quot;Courier New&quot;; color: black; font-size: 10pt\">;<\/span><\/p>\n<p style=\"line-height: normal; margin-bottom: 0pt\" class=\"MsoNormal\"><span style=\"font-family: &quot;Courier New&quot;; color: black; font-size: 10pt\">33&#160;&#160;&#160;&#160;&#160; }<\/span><\/p>\n<p style=\"line-height: normal; margin-bottom: 0pt\" class=\"MsoNormal\"><span style=\"font-family: &quot;Courier New&quot;; color: black; font-size: 10pt\">34&#160;&#160;&#160;&#160;&#160; <\/span><span style=\"font-family: &quot;Courier New&quot;; color: blue; font-size: 10pt\">return<\/span><span style=\"font-family: &quot;Courier New&quot;; color: black; font-size: 10pt\"> result;<\/span><\/p>\n<p class=\"MsoNormal\"><span style=\"line-height: 115%; font-family: &quot;Courier New&quot;; color: black; font-size: 10pt\">35 }<\/span><\/p>\n<\/div>\n<p>The \u201cmeat\u201d of this app is in the DoMath function, and the results show that I missed a few lines of code in my first round of tests. The first two lines I missed (lines 9 and 15) are a bit of discovery. It looks like the app can take the letter x as well as an * (asterisk) for multiplication, and a backslash (\\) as well as a forward slash (\/) for division. The functionality is the same, but it\u2019s interesting nonetheless.<\/p>\n<p>Oh \u2013 but I was stupid and forgot to test for divide by zero. It\u2019s nice that there is some error handling for that, but if you look closer, you\u2019ll see that executing this particular test would reveal a typo in the output string.<\/p>\n<p>I also forgot to test with an invalid operator \u2013 and wouldn\u2019t you know it, there\u2019s another typo there. What I\u2019ve done is used the code coverage data to guide my design for new tests. This app is simple, but the idea works on a larger scale too. I\u2019ve known testers to discover large areas of functionality they weren\u2019t aware of before, or (more often) hidden functionality within the areas they had tested extensively. <\/p>\n<p>An important thing to remember is that once I\u2019ve added those test cases (and reported those bugs), is that I\u2019ll have 100% code coverage. Remember though, that 100% code coverage doesn\u2019t mean bug free. In fact, this app doesn\u2019t check for integer overflow. Sure enough, check this out:<\/p>\n<div style=\"padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px\" id=\"scid:9D7513F9-C04C-4721-824A-2B34F0212519:b4d8417f-275f-4945-b901-792cbee31077\" class=\"wlWriterEditableSmartContent\">\n<pre class=\"brush: csharp; gutter: true; first-line: 1; tab-size: 4;  toolbar: false;  width: 546px; height: 75px;\" style=\" width: 546px; height: 75px;overflow: auto;\">c:\\example&gt;calul8r.exe 2147483647 1 +\nThe result of 2147483647 + 1 is -2147483648<\/pre>\n<p><!-- Code inserted with Steve Dunn's Windows Live Writer Code Formatter Plugin.  http:\/\/dunnhq.com --><\/div>\n<p>Oops! Remember \u2013 just because the code is \u201ccovered\u201d, it doesn\u2019t mean it\u2019s tested. Please don\u2019t forget that (and don\u2019t let your managers forget either).<\/p>\n<p>Thanks Tim, for prompting this post \u2013 I hope you (and others) find it helpful.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Here\u2019s a tip. Want me to write about something in particular? Ask me a question. It\u2019s that easy. Tim Coulter had a question about my last blog post. He asked: Would love to hear how you check code coverage of manual testing, actually. Is that just \u201cfeature coverage\u201d (break it up into logical blocks and&#8230;<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_kad_post_transparent":"","_kad_post_title":"","_kad_post_layout":"","_kad_post_sidebar_id":"","_kad_post_content_style":"","_kad_post_vertical_padding":"","_kad_post_feature":"","_kad_post_feature_position":"","_kad_post_header":false,"_kad_post_footer":false,"_kad_post_classname":"","_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_publicize_message":"","jetpack_publicize_feature_enabled":true,"jetpack_social_post_already_shared":false,"jetpack_social_options":{"image_generator_settings":{"template":"highway","default_image_id":0,"font":"","enabled":false},"version":2},"jetpack_post_was_ever_published":false},"categories":[1],"tags":[],"class_list":["post-175","post","type-post","status-publish","format-standard","hentry","category-allposts"],"jetpack_publicize_connections":[],"jetpack_featured_media_url":"","jetpack_likes_enabled":true,"jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/angryweasel.com\/blog\/wp-json\/wp\/v2\/posts\/175","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/angryweasel.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/angryweasel.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/angryweasel.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/angryweasel.com\/blog\/wp-json\/wp\/v2\/comments?post=175"}],"version-history":[{"count":0,"href":"https:\/\/angryweasel.com\/blog\/wp-json\/wp\/v2\/posts\/175\/revisions"}],"wp:attachment":[{"href":"https:\/\/angryweasel.com\/blog\/wp-json\/wp\/v2\/media?parent=175"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/angryweasel.com\/blog\/wp-json\/wp\/v2\/categories?post=175"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/angryweasel.com\/blog\/wp-json\/wp\/v2\/tags?post=175"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}