<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>Forem: ashleygraf_</title>
    <description>The latest articles on Forem by ashleygraf_ (@ashleygraf_).</description>
    <link>https://forem.com/ashleygraf_</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F410065%2F7df8c984-55e3-47f0-b2a5-bcd272a47d2a.jpg</url>
      <title>Forem: ashleygraf_</title>
      <link>https://forem.com/ashleygraf_</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/ashleygraf_"/>
    <language>en</language>
    <item>
      <title>The software tester as "Designated Ignoramus"</title>
      <dc:creator>ashleygraf_</dc:creator>
      <pubDate>Sun, 02 Feb 2025 01:59:56 +0000</pubDate>
      <link>https://forem.com/ashleygraf_/the-software-tester-as-designated-ignoramus-1098</link>
      <guid>https://forem.com/ashleygraf_/the-software-tester-as-designated-ignoramus-1098</guid>
      <description>&lt;p&gt;As a software tester, it's basically impossible to test the software you test like a user like, except maybe at the start of your time with a company, when it's still new to you. But I maintain that you can still get close. &lt;/p&gt;

&lt;p&gt;I use personas to try and achieve this. In particular, these ones: &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;User is a traveller with a different native language&lt;/li&gt;
&lt;li&gt;Very very tired user&lt;/li&gt;
&lt;li&gt;Drunk user&lt;/li&gt;
&lt;li&gt;User with an urgent deadline and no time to read the manual&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I then think of something even shorter than test scenarios: goals, which I derive from user stories. &lt;/p&gt;

&lt;p&gt;For example, as a user I want to&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Book tickets to the next destination&lt;/li&gt;
&lt;li&gt;Withdraw money from the bank&lt;/li&gt;
&lt;li&gt;Pay for my doctor's appointment&lt;/li&gt;
&lt;li&gt;Arrange accommodation&lt;/li&gt;
&lt;li&gt;Book a museum visit&lt;/li&gt;
&lt;li&gt;Get a week travel pass&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Those are your goals. &lt;/p&gt;

&lt;p&gt;To achieve these goals, you don't read the code, you don't look at the Figma, and you certainly don't create test steps.&lt;/p&gt;

&lt;p&gt;All you, the user, knows, is what is right in front of you, or maybe not even that. You may not understand the language, or the screen may be hazy in front of you. Your fingers might slip. You might press the wrong button by accident. &lt;/p&gt;

&lt;p&gt;It's a test of how closely the software follows design patterns, how well it handles errors and mis-steps, how much sense each screen makes, and how logically the steps flow. &lt;/p&gt;

&lt;p&gt;In this way, you can take a first pass to find "obvious errors".&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Creating test data with Claude Sonnet 3.5</title>
      <dc:creator>ashleygraf_</dc:creator>
      <pubDate>Fri, 26 Jul 2024 05:42:15 +0000</pubDate>
      <link>https://forem.com/ashleygraf_/creating-test-data-with-claude-sonnet-35-4b9j</link>
      <guid>https://forem.com/ashleygraf_/creating-test-data-with-claude-sonnet-35-4b9j</guid>
      <description>&lt;p&gt;&lt;strong&gt;Chatbot&lt;/strong&gt;: Claude Sonnet 3.5&lt;br&gt;
&lt;strong&gt;Testbed&lt;/strong&gt;: &lt;a href="https://www.weather.gov/documentation/services-web-api" rel="noopener noreferrer"&gt;the US Weather API.&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Task&lt;/strong&gt;: &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Try out different queries and see how usable the result is&lt;/li&gt;
&lt;li&gt;Develop my skills using AI chatbots&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Experiments&lt;/strong&gt;: &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;ran the same query over and over on the same chatbot&lt;/li&gt;
&lt;li&gt;ran the same query on different chatbots&lt;/li&gt;
&lt;li&gt;made queries increasingly specific&lt;/li&gt;
&lt;li&gt;tried different ways to make the queries more specific&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Focus&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Generating test data&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I am also exploring using AI with test planning and automation, and I hope to share the results with you in later weeks. &lt;/p&gt;

&lt;p&gt;I encountered a few issues. For example: &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;requesting a list of test data that DIDN'T match a regex, the very first item DID match that regex (although the rest did not).&lt;/li&gt;
&lt;li&gt;requesting a list of test data that DIDN'T match a regex, two items did match the regex&lt;/li&gt;
&lt;li&gt;the Claude Sonnet training data was less extensive than I expected, and results got pretty deterministic surprisingly fast. &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;References&lt;/strong&gt;:&lt;br&gt;
I took some inspiration from prompt engineering examples I've seen, including from Mark Winteringham's book, &lt;a href="https://www.manning.com/books/ai-assisted-testing" rel="noopener noreferrer"&gt;Software Testing with Generative AI&lt;/a&gt;, as well as my own attempts at creating some useful queries. &lt;/p&gt;
&lt;h1&gt;
  
  
  Test Data
&lt;/h1&gt;
&lt;h2&gt;
  
  
  Functions
&lt;/h2&gt;

&lt;p&gt;Create a JavaScript function that returns an array of UTC DateTimes from the current date to 7 days ago, at 24-hour intervals, starting with mid-day of the current date.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;function getLastWeekDatesFromMidDay() {
  const dates = [];
  const now = new Date();

  // Set the time to 12:00:00 UTC for today
  now.setUTCHours(12, 0, 0, 0);

  for (let i = 0; i &amp;lt; 8; i++) {
    const date = new Date(now);
    date.setUTCDate(now.getUTCDate() - i);
    dates.push(date.toISOString().slice(0, 19) + 'Z');
  }

  return dates.reverse();
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Regular expressions
&lt;/h2&gt;

&lt;p&gt;Can you create a list of dates in date formats that do not match yyyy-mm-dd hh:mm:ss for the DateTime 2020-05-14T05:40:44Z?&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;invalidDateFormats": [
    "2020-05-14", 
    "2020-05-14T", 
    "2020-05-14T5",
    "2020-05-14T05", 
    "2020-05-14T05:40",
    "2020-05-14T05:40:4",
    "14/05/2020 05:40:44",
    "05/14/2020 05:40:44",
    "2020/05/14 05:40:44",
    "14-05-2020 05:40:44",
    "05-14-2020 05:40:44",
    "20200514054044",
    "14052020054044",
    "May 14, 2020 05:40:44",
    "14 May 2020 05:40:44",
    "Thu, 14 May 2020 05:40:44",
    "2020-05-14 05:40:44",
    "05:40:44 14-05-2020",
    "1589433644",
    "20-05-14 05:40:44",
    "2020.05.14 05:40:44",
    "14/05/20 05:40:44",
    "05/14/20 05:40:44"
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Can you give a list of text that does not match this regular expression? [\"AK\",\"AL\",\"AM\",\"AN\",\"AR\",\"AS\",\"AZ\",\"CA\",\"CO\",\"CT\",\"DC\",\"DE\",\"FL\",\"FM\",\"GA\",\"GM\",\"GU\",\"HI\",\"IA\",\"ID\",\"IL\",\"IN\",\"KS\",\"KY\",\"LA\",\"LC\",\"LE\",\"LH\",\"LM\",\"LO\",\"LS\",\"MA\",\"MD\",\"ME\",\"MH\",\"MI\",\"MN\",\"MO\",\"MP\",\"MS\",\"MT\",\"NC\",\"ND\",\"NE\",\"NH\",\"NJ\",\"NM\",\"NV\",\"NY\",\"OH\",\"OK\",\"OR\",\"PA\",\"PH\",\"PK\",\"PM\",\"PR\",\"PS\",\"PW\",\"PZ\",\"RI\",\"SC\",\"SD\",\"SL\",\"TN\",\"TX\",\"UT\",\"VA\",\"VI\",\"VT\",\"WA\",\"WI\",\"WV\",\"WY\"]"&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;[
  "AK",
  "ak",
  "Ak",
  "aK",
  "AAK",
  "AKA",
  "A K",
  "AK ",
  " AK",
  "AK,",
  "AK.",
  "AK-",
  "AK_",
  "(AK)",
  "[AK]",
  "{AK}",
  "\"AK\"",
  "AK1",
  "1AK",
  "AKAK",
  "AL-AK",
  "Alaska",
  "ALASKA",
  "USA",
  "US",
  "United States",
  "123",
  "AB",
  "ZZ",
  "XX",
  "AA",
  "ak,al",
  "AK AL",
  "AK.AL",
  "AK;AL",
  "A-K",
  "a.k.",
  "KA",
  "_AK",
  "AK_",
  "-AK",
  "AK!",
  "!AK",
  "AK?",
  "?AK",
  null,
  "",
  " ",
  "\\AK",
  "AK\\",
  "AK\nAL",
  "AK\tAL"
]
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Can you give me test data that does not match the regular expression in the line below, and can you provide it in JSON format in an object named "invalidZoneCodes"? "^(A[KLMNRSZ]|C[AOT]|D[CE]|F[LM]|G[AMU]|I[ADLN]|K[SY]|L[ACEHMOS]|M[ADEHINOPST]|N[CDEHJMVY]|O[HKR]|P[AHKMRSWZ]|S[CDL]|T[NX]|UT|V[AIT]|W[AIVY]|[HR]I)[CZ]\d{3}$"&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;  "invalidZoneCodes": [
    "AKC1234",
    "NYC123",
    "CAZ12",
    "CAX123",
    "ca123",
    "AK 123",
    "AKCZ123",
    "AKC12A",
    "AKC-123",
    "AKZC123",
    "123AKC",
    "AKC",
    "123",
    "AKCA23",
    "AK123C",
    "AKC1Z3",
    "AKZ000",
    "RIC1234",
    "HIC1234",
    "AK123Z",
    "UTCABC",
    "VAZ1234",
    "WYC12",
    "ORC12Z",
    "MNC123C"
  ]
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Can you give me test data that does match the regular expression in the line below, and can you provide it in JSON format in an object named "validZoneCodes"? "^(A[KLMNRSZ]|C[AOT]|D[CE]|F[LM]|G[AMU]|I[ADLN]|K[SY]|L[ACEHMOS]|M[ADEHINOPST]|N[CDEHJMVY]|O[HKR]|P[AHKMRSWZ]|S[CDL]|T[NX]|UT|V[AIT]|W[AIVY]|[HR]I)[CZ]\d{3}$"&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;"validZoneCodes": [
    "AKZ123",
    "CAC456",
    "DEZ789",
    "FLZ012",
    "GAC345",
    "ILC678",
    "KSZ901",
    "LAC234",
    "MNC567",
    "NJZ890",
    "OHC123",
    "PAZ456",
    "SDC789",
    "TXZ012",
    "UTC345",
    "VAZ678",
    "WAC901",
    "HIZ234",
    "RIZ567",
    "AZC890",
    "COZ123",
    "DCZ456",
    "GMC789",
    "IAZ012",
    "KYC345"
  ] 
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Classification
&lt;/h2&gt;

&lt;p&gt;Can you create a map of the parameter keys and values used in this API response? After that, can you generate test data for those keys? Your purpose is to check the integrity of the data input by the weather stations, as the migration has not yet completed, and some agencies are using ENUMs for some values, and others are still using plain text. What data would you classify as valid, and what data would you classify as invalid, considering the training data. It should cover valid and invalid cases, with a focus on big and little. Please take into account the fact that null and empty fields are not invalid.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Classification of Valid and Invalid Data:
Valid Data:

ENUM values and their plain text equivalents
Numeric values with appropriate units
Null values
Empty arrays

Invalid Data:

Values not matching ENUM or expected plain text
Numeric values with incorrect units or format
Non-numeric values for numeric fields

Test Data:

windThreat:

Valid (Big): ["RADAR INDICATED", "OBSERVED", null, "", "POSSIBLE"]
Valid (Little): ["RADAR INDICATED"], [], null
Invalid (Big): ["RADAR_INDICATED", "STRONG", "WEAK", "UNKNOWN", 123]
Invalid (Little): ["INVALID"]


maxWindGust:

Valid (Big): ["70 MPH", "100 KPH", "50 MPS", null, ""]
Valid (Little): ["1 MPH"], [], null
Invalid (Big): ["500 MPH", "-10 MPH", "100", "STRONG", "70MPH"]
Invalid (Little): ["GUSTY"]


hailThreat:

Valid (Big): ["RADAR INDICATED", "OBSERVED", null, "", "POSSIBLE"]
Valid (Little): ["RADAR INDICATED"], [], null
Invalid (Big): ["RADAR_INDICATED", "LARGE", "SMALL", "UNKNOWN", 123]
Invalid (Little): ["INVALID"]


maxHailSize:

Valid (Big): ["0.88", "1.00", "2.75", null, ""]
Valid (Little): ["0.25"], [], null
Invalid (Big): ["10.00", "-1.00", "GOLF BALL", "LARGE", "0,88"]
Invalid (Little): ["SMALL"]


thunderstormDamageThreat:

Valid (Big): ["CONSIDERABLE", "NONE", "MODERATE", null, ""]
Valid (Little): ["NONE"], [], null
Invalid (Big): ["VERY_CONSIDERABLE", "UNKNOWN", "LIGHT", "HEAVY", 123]
Invalid (Little): ["INVALID"]


tornadoDetection:

Valid (Big): ["RADAR INDICATED", "OBSERVED", null, "", "POSSIBLE"]
Valid (Little): ["RADAR INDICATED"], [], null
Invalid (Big): ["RADAR_INDICATED", "STRONG", "WEAK", "UNKNOWN", 123]
Invalid (Little): ["INVALID"]
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You are a software tester testing data integrity for a weather data API. Can you suggest a set of test data for the value "maximum hail size"? It should cover positive and negative cases. The positive cases should include edge cases.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;  "maximumHailSize": {
    "validCases": [
      0.00,
      0.25,
      0.50,
      0.75,
      1.00,
      1.25,
      1.50,
      1.75,
      2.00,
      2.50,
      3.00,
      4.00,
      4.50,
      5.00,
      6.00,
      7.00,
      8.00
    ],
    "edgeCases": [
      0.01,
      0.10,
      9.99,
      10.00
    ],
    "invalidCases": [
      -0.01,
      -1.00,
      10.01,
      15.00,
      100.00,
      0.001,
      0.999,
      "0",
      "1.5",
      "",
      " ",
      null,
      undefined,
      true,
      false,
      [],
      {},
      Infinity,
      -Infinity,
      NaN,
      1.5e2,
      "trace",
      "1.5 inches",
      "1,50",
      "1/2",
      "ping pong",
      "golf ball"
    ]
  }
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You are a software tester testing data integrity for a weather data API. You are generating tests for the nightly run checking that the data entered by various weather stations is valid. Can you suggest a set of test data for the value "maximum hail size"? It should cover positive, negative, edge, creative, big, little, invalid,  exploratory, and boundary-related cases. It should also check for external interference with the system in a non-destructive manner.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;  "maximumHailSize": {
    "validCases": [
      0.00,
      0.25,
      0.50,
      1.00,
      1.75,
      2.50,
      4.00,
      6.00,
      8.00
    ],
    "edgeCases": [
      0.01,
      7.99,
      8.00
    ],
    "bigCases": [
      100.00,
      1000.00,
      9999.99
    ],
    "littleCases": [
      0.001,
      0.009,
      0.01
    ],
    "invalidCases": [
      -0.01,
      -1.00,
      8.01,
      "0",
      "",
      " ",
      null,
      undefined,
      true,
      false,
      [],
      {},
      Infinity,
      -Infinity,
      NaN
    ],
    "creativeInputs": [
      "golf ball",
      "baseball",
      "grapefruit",
      "1,50",
      "1/2",
      "1.5 inches",
      "trace",
      "melted",
      "unknown"
    ],
    "exploratoryInputs": [
      1.5e2,
      "0xFF",
      "0b1010",
      "0o777",
      "\u0037\u002E\u0035",
      "    7.5    ",
      "7.5\n",
      "7.5\t",
      "+7.5",
      "７.５"
    ],
    "boundaryTests": [
      -0.01,
      0.00,
      0.01,
      7.99,
      8.00,
      8.01
    ],
    "externalInterference": [
      "&amp;lt;script&amp;gt;alert('XSS')&amp;lt;/script&amp;gt;",
      "'; DROP TABLE weather_data; --",
      "%00%3Cscript%3Ealert(%27XSS%27)%3C/script%3E",
      "../../../etc/passwd",
      "{{7*7}}",
      "${7*7}",
      "#{7*7}",
      "=7+7",
      "@{7*7}"
    ]
  }
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;I want you to act as an expert software tester who works on creating test data to provide comprehensive test data coverage. &lt;br&gt;
I want you to generate tests for the nightly run checking that the data entered by various weather stations is valid.&lt;br&gt;
I want you to generate positive, negative, creative, big, little, invalid,  exploratory, boundary-related, and penetration-testing related test data to expose vulnerabilities.&lt;br&gt;&lt;br&gt;
Here are some common types of test data attacks that you can also learn from and incorporate while creating our own test data: &lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Paths/Files: Long Name (&amp;gt;255 chars), Special Characters in Name, Non-Existent characters, Character with No Space. &lt;/li&gt;
&lt;li&gt;Time and Date: Crossing Time Zones, Leap Days, Always Invalid Days (Feb 30, Sept 31), Feb 29 in Non-Leap Years, Different Formats (June 5, 2001; 06/05/2001; 06/05/01; 06-05-01; 6/5/2001 12:34), Internationalisation dd.mm.yyyy, mm/dd/yyyy, am/pm, Daylight Savings Changeover. &lt;/li&gt;
&lt;li&gt;Numbers: 0, 32768 (215), 32769 (215 + 1), 65536 (216), 65537 (216 +1), 2147483648 (231), 2147483649 (231 + 1), 4294967296 (232), 4294967297 (232 + 1), Scientific Notation (1E-16), Negative, Floating Point/Decimal (0.0001), With Commas (1,234,567), European Style (1.234.567,89). &lt;/li&gt;
&lt;li&gt;Strings: Long (255, 256, 257, 1000, 1024, 2000, 2048 or more characters), Accented Chars (àáâãäåçèéêëìíîðñòôõöö, etc.), Asian Characters Common Delimiters and Special Characters ( “ ‘ ` | / \ , ; : &amp;amp; &amp;lt; &amp;gt; ^ * ? Tab ), Leave Blank, Single Space, Multiple Spaces, Leading Spaces, SQL Injection ( ‘select * from customer),  Emojis.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Provide the results in json format. &lt;br&gt;
I want you to generate as many cases as you can think of for each test case type.&lt;br&gt;
These are the variable names to create test data for: "maximum hail size"&lt;/p&gt;

&lt;p&gt;&lt;code&gt;&lt;/code&gt;&lt;code&gt;&lt;br&gt;
{&lt;br&gt;
      "type": "Positive",&lt;br&gt;
      "value": 1.0,&lt;br&gt;
      "description": "Valid small hail size in inches"&lt;br&gt;
    },&lt;br&gt;
    {&lt;br&gt;
      "type": "Positive",&lt;br&gt;
      "value": 2.5,&lt;br&gt;
      "description": "Valid medium hail size in inches"&lt;br&gt;
    },&lt;br&gt;
    {&lt;br&gt;
      "type": "Positive",&lt;br&gt;
      "value": 4.75,&lt;br&gt;
      "description": "Valid large hail size in inches"&lt;br&gt;
    },&lt;br&gt;
    {&lt;br&gt;
      "type": "Positive",&lt;br&gt;
      "value": 8.0,&lt;br&gt;
      "description": "Valid extreme hail size in inches (near record)"&lt;br&gt;
    },&lt;br&gt;
    {&lt;br&gt;
      "type": "Boundary",&lt;br&gt;
      "value": 0.0,&lt;br&gt;
      "description": "Minimum possible size"&lt;br&gt;
    },&lt;br&gt;
    {&lt;br&gt;
      "type": "Boundary",&lt;br&gt;
      "value": 0.01,&lt;br&gt;
      "description": "Just above minimum size"&lt;br&gt;
    },&lt;br&gt;
    {&lt;br&gt;
      "type": "Boundary",&lt;br&gt;
      "value": 9.99,&lt;br&gt;
      "description": "Very large, but still plausible"&lt;br&gt;
    },&lt;br&gt;
    {&lt;br&gt;
      "type": "Boundary",&lt;br&gt;
      "value": 10.0,&lt;br&gt;
      "description": "Maximum plausible size"&lt;br&gt;
    },&lt;br&gt;
    {&lt;br&gt;
      "type": "Negative",&lt;br&gt;
      "value": -1.0,&lt;br&gt;
      "description": "Invalid negative size"&lt;br&gt;
    },&lt;br&gt;
    {&lt;br&gt;
      "type": "Negative",&lt;br&gt;
      "value": -0.01,&lt;br&gt;
      "description": "Small negative value"&lt;br&gt;
    },&lt;br&gt;
    {&lt;br&gt;
      "type": "Invalid",&lt;br&gt;
      "value": 100.0,&lt;br&gt;
      "description": "Unrealistically large size"&lt;br&gt;
    },&lt;br&gt;
    {&lt;br&gt;
      "type": "Invalid",&lt;br&gt;
      "value": 1000.0,&lt;br&gt;
      "description": "Absurdly large size"&lt;br&gt;
    },&lt;br&gt;
    {&lt;br&gt;
      "type": "Invalid",&lt;br&gt;
      "value": "abc",&lt;br&gt;
      "description": "Non-numeric input"&lt;br&gt;
    },&lt;br&gt;
    {&lt;br&gt;
      "type": "Invalid",&lt;br&gt;
      "value": "1,5",&lt;br&gt;
      "description": "Comma instead of decimal point"&lt;br&gt;
    },&lt;br&gt;
    {&lt;br&gt;
      "type": "Invalid",&lt;br&gt;
      "value": "1.5.5",&lt;br&gt;
      "description": "Multiple decimal points"&lt;br&gt;
    },&lt;br&gt;
    {&lt;br&gt;
      "type": "Invalid",&lt;br&gt;
      "value": "1.5\"",&lt;br&gt;
      "description": "Unit included in the value"&lt;br&gt;
    },&lt;br&gt;
    {&lt;br&gt;
      "type": "Invalid",&lt;br&gt;
      "value": "1/2",&lt;br&gt;
      "description": "Fraction instead of decimal"&lt;br&gt;
    },&lt;br&gt;
    {&lt;br&gt;
      "type": "Creative",&lt;br&gt;
      "value": 3.14159,&lt;br&gt;
      "description": "Pi as hail size"&lt;br&gt;
    },&lt;br&gt;
    {&lt;br&gt;
      "type": "Creative",&lt;br&gt;
      "value": 9.8,&lt;br&gt;
      "description": "Gravity acceleration as hail size"&lt;br&gt;
    },&lt;br&gt;
    {&lt;br&gt;
      "type": "Creative",&lt;br&gt;
      "value": 299792458,&lt;br&gt;
      "description": "Speed of light as hail size"&lt;br&gt;
    },&lt;br&gt;
    {&lt;br&gt;
      "type": "Big",&lt;br&gt;
      "value": 999999999.99,&lt;br&gt;
      "description": "Very large number"&lt;br&gt;
    },&lt;br&gt;
    {&lt;br&gt;
      "type": "Little",&lt;br&gt;
      "value": 0.000000001,&lt;br&gt;
      "description": "Very small positive number"&lt;br&gt;
    },&lt;br&gt;
    {&lt;br&gt;
      "type": "Exploratory",&lt;br&gt;
      "value": "1E-6",&lt;br&gt;
      "description": "Scientific notation"&lt;br&gt;
    },&lt;br&gt;
    {&lt;br&gt;
      "type": "Exploratory",&lt;br&gt;
      "value": "1.5e2",&lt;br&gt;
      "description": "Scientific notation for large value"&lt;br&gt;
    },&lt;br&gt;
    {&lt;br&gt;
      "type": "Exploratory",&lt;br&gt;
      "value": "+2.5",&lt;br&gt;
      "description": "Explicit positive sign"&lt;br&gt;
    },&lt;br&gt;
    {&lt;br&gt;
      "type": "Exploratory",&lt;br&gt;
      "value": "0x1A",&lt;br&gt;
      "description": "Hexadecimal value"&lt;br&gt;
    },&lt;br&gt;
    {&lt;br&gt;
      "type": "Exploratory",&lt;br&gt;
      "value": "0b1010",&lt;br&gt;
      "description": "Binary value"&lt;br&gt;
    },&lt;br&gt;
    {&lt;br&gt;
      "type": "Boundary",&lt;br&gt;
      "value": 32767,&lt;br&gt;
      "description": "2^15 - 1 (max 16-bit signed integer)"&lt;br&gt;
    },&lt;br&gt;
    {&lt;br&gt;
      "type": "Boundary",&lt;br&gt;
      "value": 32768,&lt;br&gt;
      "description": "2^15"&lt;br&gt;
    },&lt;br&gt;
    {&lt;br&gt;
      "type": "Boundary",&lt;br&gt;
      "value": 65535,&lt;br&gt;
      "description": "2^16 - 1 (max 16-bit unsigned integer)"&lt;br&gt;
    },&lt;br&gt;
    {&lt;br&gt;
      "type": "Boundary",&lt;br&gt;
      "value": 2147483647,&lt;br&gt;
      "description": "2^31 - 1 (max 32-bit signed integer)"&lt;br&gt;
    },&lt;br&gt;
    {&lt;br&gt;
      "type": "Invalid",&lt;br&gt;
      "value": null,&lt;br&gt;
      "description": "Null value"&lt;br&gt;
    },&lt;br&gt;
    {&lt;br&gt;
      "type": "Invalid",&lt;br&gt;
      "value": "",&lt;br&gt;
      "description": "Empty string"&lt;br&gt;
    },&lt;br&gt;
    {&lt;br&gt;
      "type": "Invalid",&lt;br&gt;
      "value": " ",&lt;br&gt;
      "description": "Space character"&lt;br&gt;
    },&lt;br&gt;
    {&lt;br&gt;
      "type": "Invalid",&lt;br&gt;
      "value": "   2.5   ",&lt;br&gt;
      "description": "Value with leading/trailing spaces"&lt;br&gt;
    },&lt;br&gt;
    {&lt;br&gt;
      "type": "Penetration",&lt;br&gt;
      "value": "'; DROP TABLE weather_data; --",&lt;br&gt;
      "description": "SQL injection attempt"&lt;br&gt;
    },&lt;br&gt;
    {&lt;br&gt;
      "type": "Penetration",&lt;br&gt;
      "value": "&amp;lt;script&amp;gt;alert('XSS')&amp;lt;/script&amp;gt;",&lt;br&gt;
      "description": "Cross-site scripting attempt"&lt;br&gt;
    },&lt;br&gt;
    {&lt;br&gt;
      "type": "Internationalization",&lt;br&gt;
      "value": "2,5",&lt;br&gt;
      "description": "European decimal format"&lt;br&gt;
    },&lt;br&gt;
    {&lt;br&gt;
      "type": "Internationalization",&lt;br&gt;
      "value": "२.५",&lt;br&gt;
      "description": "Hindi numerals"&lt;br&gt;
    },&lt;br&gt;
    {&lt;br&gt;
      "type": "Internationalization",&lt;br&gt;
      "value": "二.五",&lt;br&gt;
      "description": "Chinese numerals"&lt;br&gt;
    },&lt;br&gt;
    {&lt;br&gt;
      "type": "Time-related",&lt;br&gt;
      "value": "1.5@12:00",&lt;br&gt;
      "description": "Size with time"&lt;br&gt;
    },&lt;br&gt;
    {&lt;br&gt;
      "type": "Date-related",&lt;br&gt;
      "value": "2.0@2024-02-29",&lt;br&gt;
      "description": "Size with leap day date"&lt;br&gt;
    },&lt;br&gt;
    {&lt;br&gt;
      "type": "Invalid",&lt;br&gt;
      "value": "🌨️",&lt;br&gt;
      "description": "Weather-related emoji"&lt;br&gt;
    },&lt;br&gt;
    {&lt;br&gt;
      "type": "Invalid",&lt;br&gt;
      "value": "∞",&lt;br&gt;
      "description": "Infinity symbol"&lt;br&gt;
    },&lt;br&gt;
    {&lt;br&gt;
      "type": "Invalid",&lt;br&gt;
      "value": "NaN",&lt;br&gt;
      "description": "Not a Number"&lt;br&gt;
    },&lt;br&gt;
    {&lt;br&gt;
      "type": "Creative",&lt;br&gt;
      "value": "MAXIMUM",&lt;br&gt;
      "description": "Text instead of number"&lt;br&gt;
    },&lt;br&gt;
    {&lt;br&gt;
      "type": "Creative",&lt;br&gt;
      "value": -273.15,&lt;br&gt;
      "description": "Absolute zero temperature as size"&lt;br&gt;
}&lt;br&gt;
&lt;/code&gt;&lt;code&gt;&lt;/code&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>testing</category>
      <category>productivity</category>
    </item>
    <item>
      <title>#TestInPublic: Charty App</title>
      <dc:creator>ashleygraf_</dc:creator>
      <pubDate>Fri, 21 Jun 2024 20:34:15 +0000</pubDate>
      <link>https://forem.com/ashleygraf_/testinpublic-charty-app-151a</link>
      <guid>https://forem.com/ashleygraf_/testinpublic-charty-app-151a</guid>
      <description>&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Flxypvr5fl5p9jw1b8q5y.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Flxypvr5fl5p9jw1b8q5y.png" alt="I'm a #designer"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Update
&lt;/h2&gt;

&lt;p&gt;These issues are in the process of being addressed where appropriate. &lt;/p&gt;

&lt;p&gt;See &lt;a href="https://x.com/excentiodev/status/1804351579404878294" rel="noopener noreferrer"&gt;this Twitter post&lt;/a&gt; for the first set.&lt;/p&gt;

&lt;h2&gt;
  
  
  Introduction
&lt;/h2&gt;

&lt;p&gt;Hi! I'm Ashley. I'm a software tester who used to work in marketing and communications so I keep swapping hats back and forth. I'm recently back on the job hunt after a 6 month sabbatical which I was very lucky to be able to take. But it's a very different market to the last two that I have experienced as a QE, so I'm trying new things. I've been more than a little bit inspired by the indie hacker movement, so I want to help y'all out while I'm interviewing. &lt;/p&gt;

&lt;p&gt;Every fortnight, I'm going to choose one early-stage project to #testinpublic with a real-world application to keep my testing skills sharp. You can nominate your product, or suggest a friend's, and I'll take a look over a couple days, and send you my thoughts. &lt;/p&gt;

&lt;p&gt;For my first week, I'm looking at &lt;a href="https://chartyapp.com" rel="noopener noreferrer"&gt;Charty App&lt;/a&gt;, an app where you can create animated charts. This one is just soon to come out of alpha so I expect it to be usable, but not polished. Did anyone say "Minimum Lovable Product"? &lt;/p&gt;

&lt;h1&gt;
  
  
  Executive Summary
&lt;/h1&gt;

&lt;ul&gt;
&lt;li&gt;2-day functional testing exercise&lt;/li&gt;
&lt;li&gt;Tested key features: user account, payment, one type of chart, import, export&lt;/li&gt;
&lt;li&gt;Most issues were around user experience and error handling&lt;/li&gt;
&lt;/ul&gt;

&lt;h1&gt;
  
  
  Summary
&lt;/h1&gt;

&lt;p&gt;Most issues I found were in two categories: user experience, and error handling. &lt;/p&gt;

&lt;p&gt;It came down to two questions&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;How do you avoid overwhelming users when you want to give them all the possible options?&lt;/li&gt;
&lt;li&gt;How do you handle errors for minimum negative impact on customer experience?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;With user experience, there are some issues I’d like to call out. &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The main issue is that there was premature optimisation of categories, with settings for several aspects scattered across several categories. It added a lot of scrolling and short-term memory recollection to do what I wanted.&lt;/li&gt;
&lt;li&gt;I was also expecting some categories and settings to have different names, as it was what I had come to expect from using other charting software.&lt;/li&gt;
&lt;li&gt;The next, is that many settings were missing default values and/or units of measurement. Give the user a reference point! &lt;/li&gt;
&lt;li&gt;The last, is that some subcategory titles were missing the title CSS styling, and they got a bit lost in that big list. For styling, with this many options available, it becomes really important to be able to separate feature from feature aspects at first glance&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I’d rank the importance of the error-handling issues in the below order&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;500 errors that led to crashes and therefore lost work&lt;/li&gt;
&lt;li&gt;Silent failures that would lead to confusion and lost time&lt;/li&gt;
&lt;li&gt;Enabling inputs outside of the allowed range&lt;/li&gt;
&lt;/ul&gt;

&lt;h1&gt;
  
  
  Approach
&lt;/h1&gt;

&lt;p&gt;When I start looking at a new piece of software, I always try and gain as much understanding of the product as possible by wandering around it for a while by myself without any deliberate provision of context from the creators. Then I'll dig in when it gets interesting. This means that I don't have any explanations of how it works to make my experience easier, and I use it much closer to how an actual new user would.&lt;/p&gt;

&lt;p&gt;When I take this approach, I deliberately DON'T ask questions, just like most users wouldn't, and I see if I get disoriented or confused or overwhelmed, and so on. My context is instead similar products, and UX design patterns. These create unwritten expectations. &lt;/p&gt;

&lt;p&gt;For this exercise, I'm going to limit my testing to a small part of the app. I chose The User Account, Line Charts, Import, Export, and Payment.&lt;/p&gt;

&lt;p&gt;I have not prioritised (what I feel may be) the key issues, because while a QA may and should engage in bug advocacy they are not the ultimate decision maker. I have chosen instead key features to test, and thrown everything that I think could be of concern into an organised pile. Occasionally I will put my marketing hat back on and make some suggestions. I will always point out when that is. &lt;/p&gt;

&lt;p&gt;This is also not exhaustive, as I set a time limit of 2 days to test. It also cannot be exhaustive. There are always bugs, just hopefully as few as possible. &lt;/p&gt;

&lt;p&gt;For the sake of brevity, I will only be functional testing, and only on my home device. My observations will only cover possible defects, concerns, and questions. &lt;/p&gt;

&lt;p&gt;I tested with the latest version of Chrome on Windows 10.&lt;/p&gt;

&lt;h1&gt;
  
  
  General Observations
&lt;/h1&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;I felt like the settings options were a bit scattered and the namings and labels a little inconsistent. Some titles are missing title CSS styling as well. While some settings have on-hover tooltips and others don't. I'll provide examples for each further down.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;There is no unit of measurement provided for some of the different settings. Is it px? I would assume it's px. &lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frbp498uqurw2syubdwbq.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frbp498uqurw2syubdwbq.png" alt="No tooltip or title explaining unit of measurement"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;I was able to enter numbers above the maximum set in the slider for most features using sliders to set values. This should not be possible. &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frxlzybf00xnska0x1tg6.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frxlzybf00xnska0x1tg6.png" alt="Actual limit for Line Width"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fliqhdq1ftl3jgki8hst4.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fliqhdq1ftl3jgki8hst4.png" alt="Over the limit for Line Width"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Naming consistency
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Placement dropdown naming was inconsistent. For Common Text Properties it used used "top, bottom". For Ticks it used "start, middle, end". But these both referred to label positions.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fyrctk6y1l82uw7wutlr8.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fyrctk6y1l82uw7wutlr8.png" alt="Header Vertical Placement Dropdown"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3brvu49hhsgzwzb72bxf.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3brvu49hhsgzwzb72bxf.png" alt="Ticks Position Dropdown"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Box Radius is titled Angle for Background Plate Border and Box Radius for Watermark Box. Unless I am misunderstanding something.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fthf7shbzctvsaolmsq9g.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fthf7shbzctvsaolmsq9g.png" alt="Background Properties example"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fr2ug69l3yzyjnhqs6r8l.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fr2ug69l3yzyjnhqs6r8l.png" alt="Watermark example"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;There are some Points settings in Graph Settings and other Points settings in Points Labels. Personally, I found it annoying going to two different places to set all the Points settings.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Animations settings are in three places&lt;br&gt;
-- Animation Timings&lt;br&gt;
-- Graph Animation&lt;br&gt;
-- Particles, which appear to be celebratory animations (unless you chose the sad or angry face emoji)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Most Ticks settings are in Ticks, but to set Tick label size, I need to go to Common Text Properties. &lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fpbxmxh6fc3qugsys6mke.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fpbxmxh6fc3qugsys6mke.png" alt="Common Text Properties - Tick settings"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;500s could be handled better. When they happen, the whole application crashes and I see the start of the stack-trace. I will not provide screenshots of that here. &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;There seem to be two ways to add and remove Grid Lines&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Ticks -&amp;gt; Horizontal Ticks&lt;br&gt;
Ticks -&amp;gt; Vertical Ticks&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fma88eh097k1gbeti8sv3.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fma88eh097k1gbeti8sv3.png" alt="Ticks Grid render option"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Grid -&amp;gt; Enable Grid X&lt;br&gt;
Grid -&amp;gt; Enable Grid Y&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fpagk09ycz0s2q36a2po1.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fpagk09ycz0s2q36a2po1.png" alt="Grid render option"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;However, the Grid Line settings over-rule the Ticks Line settings. This could get confusing for the user (and it's more code that the developer has to maintain), especially as the default setting for the Starter Line Chart has the Grids turned off in Grid. &lt;/p&gt;

&lt;p&gt;&lt;em&gt;Marketing hat on&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;The Animation options sound very mathematical and I wasn't sure what the difference was between most of them without trying them out! Perhaps a section on your features page with animations demonstrating all the options. &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;There are a LOT of options. The user can basically customise everything! There's celebratory graphics for social media, and slick animations for everything. For that reason, I would &lt;br&gt;
consider &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;some renaming of some categories. &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;some rearranging of some categories.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;clustering the animations options together.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;subcategories&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;I personally was unsure about how to add x and y labels for a while! &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;ALL settings are Graph Settings. That category is probably a high candidate for renaming. &lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;How to get to there&lt;/p&gt;

&lt;p&gt;1) on-hover tooltips explaining what each category means (just temporarily. in the long term the new short titles should be enough)&lt;/p&gt;

&lt;p&gt;2) running analytics to see which categories and settings are most often used and least often used for a more effective clustering.&lt;/p&gt;

&lt;p&gt;3) talking to customers to understand why&lt;/p&gt;

&lt;p&gt;Perhaps: Least often used - at the bottom and accordion shut by default. Most often used - At the top and accordion shut by default. &lt;/p&gt;

&lt;p&gt;&lt;em&gt;Marketing hat off&lt;/em&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  ~The User Account~ (Log In, User Profile)
&lt;/h1&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;I believe it's a standard of web experience that the user should never lose their work. I would expect that if you click "Log In" from a page where you are editing a project, it would ask you if you want to save the project currently in progress as a JSON file (as there is not currently an option to save projects in progress on the user profile). This does not happen. Additionally, I was unable to use the Back button to rescue my work. &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;I can't close the User Profile modal. I have to click Open Editor to close it indirectly.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fif3z7re0mddsddrbvzyg.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fif3z7re0mddsddrbvzyg.png" alt="No X to close the modal"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  Payment
&lt;/h1&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;I think I was given a crypto wallet to use for DePlan when I signed up for an account but I can't be sure as it was labeled "Your UID" in my User Profile. I don't know what it's for.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Not necessarily a bug but why is it not an option to pay for Pay-As-You-Go Access from the User Profile page? Probably something about DePlan I do not understand.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Why is the dollar sign on the left for the Pay-As-You-Go option, and on the right for the Monthly Premium option? It's not clear what currency you pay in for either option. I think it's USD.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fesibch2lrn4fa3xybbc6.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fesibch2lrn4fa3xybbc6.png" alt="Payment options"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  File/Import
&lt;/h1&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;If the user attempts to import non-compliant JSON it silently fails.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;If the user attempts to import the project without the project settings it silently fails. &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;If the user removes a setting from the JSON they are still able to import it. The relevant setting just returns to the default.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;If the user brute forces a setting to be higher than the maximum or lower than the minimum, unless it's Animation Framerate, it is allowed. It can still be successfully uploaded.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;It was unclear until I tried it that Open referred to importing project files.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;em&gt;Marketing hat on&lt;/em&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The purpose of File -&amp;gt; Open is a little unclear until you look at the icon. Then it's obvious that it means 'Import'. I would maybe change the titles like
File -&amp;gt; Project
Open -&amp;gt; Import
Save -&amp;gt; Save.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;em&gt;Marketing hat off&lt;/em&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  Export
&lt;/h1&gt;

&lt;ul&gt;
&lt;li&gt;Why is there a + icon for "Export Image" but not "Export Animation"&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F51qdtqwmm0tborrrhzl5.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F51qdtqwmm0tborrrhzl5.png" alt="Icons"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  Play button
&lt;/h1&gt;

&lt;ul&gt;
&lt;li&gt;No on-hover tooltip. Interesting that it's not using the start/stop video icons. &lt;/li&gt;
&lt;/ul&gt;

&lt;h1&gt;
  
  
  The Starter Line Chart
&lt;/h1&gt;

&lt;h2&gt;
  
  
  Animation Timings
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;What is the maximum animation framerate? It's not clear but it appears to be 300 because when I try a number higher than that, it changes to 300. &lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Background Properties
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Plate Border is missing some title CSS styling&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Watermark
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Watermark means something else to me. I would be expecting to  Free version to have the ChartyApp logo watermark in the bottom right-hand corner, but it didn't. &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;em&gt;Marketing hat on&lt;/em&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The watermark on the premium version seems more like somewhere to put the customer's branding. I'd suggest, if I may, an option to upload an image instead of adding text.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;em&gt;Marketing hat off&lt;/em&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;At the default X and Y offset, the Watermark is falling off the chart for characters like "q, j, p, g" when they are lower case for fonts with both lower and upper case, like Raleway and Montserrat. &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwdbu5gklks7z847zhrwb.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwdbu5gklks7z847zhrwb.png" alt="Watermark positioning"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Changing the Box Padding should probably push the box up so all the text remains in the chart, but it stays in the same place horizontally.  &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F32jjf9l8mrqgz0t1jwas.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F32jjf9l8mrqgz0t1jwas.png" alt="Off the page"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  Common Text Properties
&lt;/h1&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;There was no character limit for the Graph Header. &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The on-hover tooltip for the Enable Graph Header slider to show the tooltip, is not correct.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F50nuukhpwmnq4djn1t6f.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F50nuukhpwmnq4djn1t6f.png" alt="Misplaced description"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;If you hid the Graph Header, the chart did not increase in size to fill up the space no longer used by it.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fnmzg6417gc7nckkbrfqt.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fnmzg6417gc7nckkbrfqt.png" alt="Empty space from no more Graph Header"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;There was a very high range of options for the Ticks Label Text Size. It currently doesn't detect collision and set a limit when that is reached, and so they can currently overlap. &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fou6m2fg7tixuul137d1i.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fou6m2fg7tixuul137d1i.png" alt="Tick text collision detection"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Particles
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;There is some sort of bug with Particles -&amp;gt; Graphics -&amp;gt; Custom Emojis at the moment generating a 500 error, and when I tried to select it, the whole application crashes and I see the start of the stacktrace.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Emoji Set 1 -&amp;gt; 9 didn't really mean anything to me as I don't know what's in the set before I try it. They are not descriptive.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Points Labels
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;It is interesting that the default is to not leave a space between the point value and point unit of measurement. It does give the user more options.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fuo3tf9baj89hg19j0o7y.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fuo3tf9baj89hg19j0o7y.png" alt="No space on Suffix"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Non-numeric characters are removed for the Y-axis when adding the Label Suffix to it. For the X-axis, the NaN error appears. &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fzq5c8zgqij6hlwmde27e.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fzq5c8zgqij6hlwmde27e.png" alt="Y Axis"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4ezngyk9jryzm9q3f6t6.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4ezngyk9jryzm9q3f6t6.png" alt="x Axis"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Graph Animation
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;The dropdown options for Animation Type should be Capital Case to make the rest.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Graph Settings
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;The sliders are missing on-hover tooltips.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Line Curve is missing a sub heading, and the dropdown settings are still in camelCase.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fp2tzgt6mazr9dqhzmvij.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fp2tzgt6mazr9dqhzmvij.png" alt="Curve option Catmull-Rom spline"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Legends
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;The labels appear to have multi-lingual capabilities. That's good. I tried Cyrillic.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Ticks
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Horizontal Ticks is missing the title CSS styling.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4xeg6vrt57di133x8w9n.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4xeg6vrt57di133x8w9n.png" alt="Example of missing title CSS styling with Horizontal Ticks"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;I found it a little confusing initially without a reference to x-axis and y-axis. &lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Editor
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;The x-axis values allow non-numeric characters. I suppose so that the user can do the time series any direction they want? &lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Simple Editor
&lt;/h2&gt;

&lt;p&gt;For 'Import Your Data', when CSV has header, the title 'Group' Values Column (can be empty) implies it can be empty, but there were no NULL options provided. I had to select a column to choose as the Group values column. &lt;/p&gt;

&lt;h2&gt;
  
  
  Raw Data
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;It would be good to have some kind of written alert when the JSON file is no longer JSON compliant. &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;If you remove the x-axis value on Raw Data for one of the Groups, it disappears for all on the chart. &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;If you deleted the name of the group in the Raw Data editor, that group would disappear from the chart. It wouldn't just remove the name from the label, as you might expect. &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Once the Raw Data JSON was no longer JSON compliant, the chart "froze" in its last compliant state (and red underlines would appear on the editor) but there was no other indicator to the user that the data was not compliant. &lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6yu7ccb9hq2ktr2kkv88.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6yu7ccb9hq2ktr2kkv88.png" alt=""&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  Conclusion
&lt;/h1&gt;

&lt;p&gt;I'd like to give Naz a shout-out for some amazing work! And thank you for being a good sport about my publishing my findings of your alpha-stage software on the internet!&lt;/p&gt;

</description>
      <category>testing</category>
      <category>startup</category>
    </item>
    <item>
      <title>Heuristics for identifying legal (documentation) risks as a QA</title>
      <dc:creator>ashleygraf_</dc:creator>
      <pubDate>Wed, 05 Jun 2024 20:46:55 +0000</pubDate>
      <link>https://forem.com/ashleygraf_/heuristics-for-identifying-legal-documentation-risks-as-a-qa-dl7</link>
      <guid>https://forem.com/ashleygraf_/heuristics-for-identifying-legal-documentation-risks-as-a-qa-dl7</guid>
      <description>&lt;p&gt;[This article is not a substitute for professional legal advice. This article does not create an attorney-client relationship, nor is it a solicitation to offer legal advice.]&lt;/p&gt;

&lt;p&gt;Companies generally have to follow certain requirements for legal documentation. These are that legal documentation such as Terms and Conditions and the Privacy Policy, amongst other documents, must be&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;PRESENT&lt;/li&gt;
&lt;li&gt;UP-TO-DATE&lt;/li&gt;
&lt;li&gt;NOT SKIPPABLE&lt;/li&gt;
&lt;li&gt;EASY TO LOCATE AND ACCESS&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;So if they are BOHNN, you might have an issue.&lt;/p&gt;

&lt;h2&gt;
  
  
  BYPASS
&lt;/h2&gt;

&lt;p&gt;Find paths that allow users to BYPASS/SKIP the terms and conditions or the privacy policy page/{other relevant documentation check with your company's lawyer/legal team) when signing up for the product, signing into the platform or buying a new service. &lt;/p&gt;

&lt;h2&gt;
  
  
  OUTDATED
&lt;/h2&gt;

&lt;p&gt;Find links to OUTDATED legal copy documents. &lt;/p&gt;

&lt;p&gt;Is the copy on the page - if it's directly on the screen - up-to-date?&lt;/p&gt;

&lt;p&gt;Do the links to the documentation page or document go to the correct one? &lt;/p&gt;

&lt;p&gt;Is the outdated legal documentation still viewable if/when it's not supposed to be?&lt;/p&gt;

&lt;p&gt;When all the legal links/documents/copy were updated on the website, were they really ALL updated? Does it match the rest of the links (if it is supposed to match)?&lt;/p&gt;

&lt;h2&gt;
  
  
  HIDDEN
&lt;/h2&gt;

&lt;p&gt;Find HIDDEN (links to) legal copy. &lt;/p&gt;

&lt;p&gt;A link might be hidden if it blends in with the background colour of the page. &lt;/p&gt;

&lt;p&gt;It might also be hidden if it's not accessible from every screen. &lt;/p&gt;

&lt;h2&gt;
  
  
  MISSING
&lt;/h2&gt;

&lt;p&gt;Find MISSING (links to) legal copy. &lt;/p&gt;

&lt;p&gt;A page might be missing references to the relevant legal copy for that page. &lt;br&gt;
A citation might be incorrect. &lt;br&gt;
The footer might be missing references to the legal pages.&lt;/p&gt;

&lt;h2&gt;
  
  
  NOT AGREE
&lt;/h2&gt;

&lt;p&gt;Find paths that allow users to NOT AGREE to the terms and conditions or the privacy policy (for example) when signing up for the product, or signing into the platform, or buying a new service. &lt;/p&gt;

&lt;p&gt;If the site is using checkboxes, is it possible to go to the next screen without ticking the relevant checkbox?&lt;/p&gt;

&lt;p&gt;If the site is saying, "if you click accept, you accept these terms", can you go to the next screen without accepting? Or maybe if you go backward and forward you can remove the acceptance and continue on? &lt;/p&gt;

</description>
      <category>testing</category>
    </item>
    <item>
      <title>Applying security principles to avoid getting pickpocketed</title>
      <dc:creator>ashleygraf_</dc:creator>
      <pubDate>Fri, 10 May 2024 22:08:30 +0000</pubDate>
      <link>https://forem.com/ashleygraf_/attenzione-borseggiatrici-how-i-tested-my-way-to-avoid-getting-pickpocketed-in-my-travels-so-far-3m9f</link>
      <guid>https://forem.com/ashleygraf_/attenzione-borseggiatrici-how-i-tested-my-way-to-avoid-getting-pickpocketed-in-my-travels-so-far-3m9f</guid>
      <description>&lt;p&gt;I've been travelling for just about 6 months in Europe, including some of the world's major pickpocket hotspots, and I have some thoughts. Of course, I couldn't help but take a security mindset with me. So what does it look like applying information security principles to physical objects?&lt;/p&gt;

&lt;p&gt;I have been lucky as well, but I am sure these steps also played a part in avoiding getting pick-pocketed. I'll also share some techniques I didn't use. &lt;/p&gt;

&lt;p&gt;If you're interested in anti-theft, there are companies that have already done the work for you, and you could sort through the best of those. If you're not interested in looking like a hiker or a business traveller (sometimes they blend in better with the locals, sometimes they don't, depending on where you are), there's a bit more research to do. &lt;/p&gt;

&lt;p&gt;So what gives a "fashionable" bag anti-theft properties?&lt;/p&gt;

&lt;p&gt;The aim of the game here is to make yourself as difficult to target as possible. You are using the Swiss cheese model. &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;When you are wearing it, are there any exposed zips? In a backpack, Zips should be hidden between the straps or on the side closest to your body. here are some examples: &lt;a href="https://www.tuscanyleather.it/it/zaini-in-pelle/shanghai-zaino-in-pelle-morbida-cognac-tl140963"&gt;https://www.tuscanyleather.it/it/zaini-in-pelle/shanghai-zaino-in-pelle-morbida-cognac-tl140963&lt;/a&gt;. &lt;a href="https://www.tuscanyleather.it/it/borse-a-mano-in-pelle/tl-bag-pochette-in-pelle-verde-tl141990"&gt;https://www.tuscanyleather.it/it/borse-a-mano-in-pelle/tl-bag-pochette-in-pelle-verde-tl141990&lt;/a&gt;?&lt;/li&gt;
&lt;li&gt;If the zips are exposed, how close does someone have to get to you to be able to unzip the bag?&lt;/li&gt;
&lt;li&gt;Can a stranger open your bag while you are wearing it? &lt;/li&gt;
&lt;li&gt;If they can, how long does it take them to work out how to? &lt;/li&gt;
&lt;li&gt;Can you lock the zips?&lt;/li&gt;
&lt;li&gt;How easy it is to lock the zips? &lt;/li&gt;
&lt;li&gt;Does the opening use a two-way zipper? &lt;/li&gt;
&lt;li&gt;Can you put a lock through both zips? 
Two-way zippers are a feature more common on backpacks and suitcases than handbags. If you can lock these exposed zips,  how far the bag can be easily opened is far reduced. &lt;/li&gt;
&lt;li&gt;Are all openings sealed and water-tight when the bag is fully closed?&lt;/li&gt;
&lt;li&gt;How visible are the zips? The less visible or hidden, the better. &lt;/li&gt;
&lt;li&gt;Don't forget that you must also keep the bag physically close to you at all times when outside your accommodation. So your bag should be comfortable to wear in front of your body, where you can always put a hand in front of it when you are out-and-about.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I am always mentioning bags here because at no point should you leave anything in your pockets, especially if they don't have zips. Wallets stay in your zipped up bag when you are not using them. &lt;/p&gt;

&lt;p&gt;Preferable, you usually wouldn't even take your cards around with you. Just leave it at your accomodation. When you can't pay with your phone, you pay with cash. You shouldn't need to take out your card except at the ATM or the money exchange to withdraw cash.&lt;/p&gt;

&lt;p&gt;In airports, major train stations, tourist hot-spots, restaurants, I would always wear my phone on a leash and my bags on my lap with an arm through my smaller daily backpack, or a leg through my larger backpacking backpack (get bags with adjustable length straps). &lt;/p&gt;

&lt;p&gt;I also tested how easy it would be to un-clasp the phone leash. How long would it take to wear out and just fall? &lt;/p&gt;

&lt;p&gt;If I was considering a replacement I would always compare how easy it was to unclasp the new leash versus my current one, and if it was easier, I would always pass on it. So in crowds, the leash is made shorter (get a phone leash with adjustable length leash) to make it more of a hassle to cut. I then place my phone under my shirt with the strap still shortened when I am not using it. You can get phone cases where the strap cannot be unclasped from both big phone repair stores in "Europe". However, the straps that come with can be easily cut. You may want to replace it with another fabric. Security alone is not enough, though. It is nicer to get the leash in a comfortable fabric that is not too heavy, and flat and wide, to remove the temptation to not use it. it should not strain your neck when wearing it. &lt;/p&gt;

&lt;p&gt;Tote bags are an easy target. Deep ones with small straps are probably less easy to steal from as they have less surface area to dig into. I do not put anything irreplaceable in there. They are for food and to store clothing for when the weather changes. &lt;/p&gt;

&lt;p&gt;In public places like airports and major train stations, wear your important documents under your clothing. In Berlin, you can buy utilitarian leather bags at the markets for specifically this purpose. Or you could get a jacket with internal pockets - generally suit jackets and hiking jackets will have these, and wear them zipped up with your documents inside. (And another layer of clothing on top of that jacket). &lt;/p&gt;

&lt;p&gt;A tote bag with a prominently exposed zip is very popular in Western Europe, and they always wear it in front of their body. In this case, in close quarters, you always have your hand in front of your bag so it cannot be unzipped. &lt;/p&gt;

</description>
      <category>security</category>
      <category>cybersecurity</category>
    </item>
    <item>
      <title>Workarounds for inconsistently formatted logs in Splunk</title>
      <dc:creator>ashleygraf_</dc:creator>
      <pubDate>Sun, 23 Jul 2023 12:25:56 +0000</pubDate>
      <link>https://forem.com/ashleygraf_/workarounds-for-non-ideally-formatted-logs-in-splunk-29m1</link>
      <guid>https://forem.com/ashleygraf_/workarounds-for-non-ideally-formatted-logs-in-splunk-29m1</guid>
      <description>&lt;p&gt;Over the past year and a half as I've learned to use Splunk to hunt down root causes, create sequence diagrams, make reports, and generate statistics, there's a few features I keep returning to, to make inconsistently formatted logs easier to work with. &lt;/p&gt;

&lt;p&gt;If your logs are any combination of fully parsed JSON that you can use directly, JSON blobs, or straight-up just text with predictable patterns, this may come in handy.&lt;/p&gt;

&lt;p&gt;They are the below&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;rex (regular expressions)&lt;/li&gt;
&lt;li&gt;rename (renaming fields)&lt;/li&gt;
&lt;li&gt;coalesce (combining fields)&lt;/li&gt;
&lt;li&gt;joins (like SQL, on fields with matching names [hence why you need rename])&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Regex
&lt;/h2&gt;

&lt;p&gt;Yes that's right, the tool everyone loves to hate. Regular expressions. I use regular expressions in two key ways&lt;br&gt;
1) to remove any unique identifiers that would match a pattern, and replace it with text representing that pattern. This is particularly useful for creating statistics, if you don't have URI as a field. This enables you to make it a field. &lt;/p&gt;

&lt;p&gt;For this purpose, I've found it generally unnecessary to learn complex regex. Don't overcomplicate it. You will start off needing to know 5 symbols.&lt;/p&gt;

&lt;p&gt;words &lt;code&gt;\S&lt;/code&gt;&lt;br&gt;
numbers &lt;code&gt;\D&lt;/code&gt;&lt;br&gt;
more than 1 character until you meet the next symbol or anchor &lt;code&gt;+&lt;/code&gt;&lt;br&gt;
number of characters &lt;code&gt;[n]&lt;/code&gt;&lt;br&gt;
all characters until the next symbol or anchor &lt;code&gt;.*&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;and then whatever flag you need for sed mode. I find &lt;code&gt;g&lt;/code&gt; for global suffices for most searches.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;rex field=&amp;lt;field&amp;gt; mode=sed "s/&amp;lt;regex&amp;gt;/&amp;lt;replacement&amp;gt;/&amp;lt;flags&amp;gt;"
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;2) to find text that matches a pattern, and collect it for further use.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;rex field=&amp;lt;field&amp;gt; "anchor(?&amp;lt;new_field_name&amp;gt;\S)anchor"
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Don't name the new field the same as an existing field if you are planning to use it in a coalesce. &lt;/p&gt;

&lt;p&gt;Do name the new field the same as an existing field if you are planning to use it in a join. &lt;/p&gt;

&lt;p&gt;If you need to combine data and join two searches, coalesce first, then join. &lt;/p&gt;

&lt;h2&gt;
  
  
  Rename
&lt;/h2&gt;

&lt;p&gt;Once you are done retrieving your new field out of the ordered text, you can rename it so it looks nicer for your report or chart, or so that you can use it for joins. If you rename before you try to coalesce, you cannot coalesce them, as they have the same name.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;rename &amp;lt;field_name&amp;gt; as &amp;lt;new_field_name&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Coalesce
&lt;/h2&gt;

&lt;p&gt;This is useful to combine the values you have just created out of regex-ed values with the data you already have from the fully parsed logs. If your field used to have a name, but now it has a different one due to reasons, this comes in handy. You can compare with historical data.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;eval &amp;lt;field_name&amp;gt;=coalesce(&amp;lt;new_field&amp;gt;,&amp;lt;existing_field)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Joins
&lt;/h2&gt;

&lt;p&gt;This is useful to combine the results of two searches. You might use it to connect a field to match it to another field that is missing on some logs but not on others with a field that it does have in common.&lt;/p&gt;

&lt;p&gt;There are two joins in Splunk - left (or outer) and inner, and this is how you do them.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;index="index" "phrase" | ...... | table ..... | join type=outer field [search index="index" "phrase" | ....... | rename ..... | table ..... ]
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;index="index" "phrase" | ...... | table ..... | join type=inner field [search index="index" "phrase" | ....... | rename ..... | table ..... ]
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



</description>
      <category>tutorial</category>
      <category>testing</category>
      <category>devops</category>
      <category>operations</category>
    </item>
    <item>
      <title>Onboarding onto a new team</title>
      <dc:creator>ashleygraf_</dc:creator>
      <pubDate>Sat, 27 Aug 2022 06:49:40 +0000</pubDate>
      <link>https://forem.com/ashleygraf_/how-i-onboarded-to-my-new-role-in-less-than-2-months-38ce</link>
      <guid>https://forem.com/ashleygraf_/how-i-onboarded-to-my-new-role-in-less-than-2-months-38ce</guid>
      <description>&lt;p&gt;I had previously worked at a development agency, and many many many small companies. This taught me how to hit the ground running with at least a basic understanding of the product I was working on within several weeks or even days.&lt;/p&gt;

&lt;p&gt;Here's how I do it. &lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Make a buddy with an established team member. Ask them questions I don't need to ask my manager.&lt;/li&gt;
&lt;li&gt;Get set up on the shared &amp;amp; local test environments ASAP.&lt;/li&gt;
&lt;li&gt;Learn how to create and use test data.&lt;/li&gt;
&lt;li&gt;Get set up the VPN &amp;amp; HTTP/S proxy.&lt;/li&gt;
&lt;li&gt;Learn the little bureaucratic processes and rules around getting access.&lt;/li&gt;
&lt;li&gt;Mosey around the code, the databases, the logs, and the user interface, etc.&lt;/li&gt;
&lt;li&gt;Read through the Requirements, wireframes, UI designs and flows, and key tickets for the project.&lt;/li&gt;
&lt;li&gt;Search Github for frequently used keywords to see how the functions &amp;amp; services connect together. &lt;/li&gt;
&lt;li&gt;Have short video call sessions with at least 1 member of each team - backend, frontend, mobile, and so on, to get to know them as a person &amp;amp; build rapport.&lt;/li&gt;
&lt;li&gt;Ask the people who've been on the team for the longest if they have any special tricks for navigating around the organisation you work for, and any productivity tips they might have. &lt;/li&gt;
&lt;li&gt;Do some ad-hoc testing. Try stuff out on the user interface or postman, and observe the UI &amp;amp; logs &amp;amp; the DB &amp;amp; the proxy to see what happens. &lt;/li&gt;
&lt;li&gt;Preference 'hanging out' in the office to 'doing work' in the office. You learn more about the team and product by talking to team members about how they do their work, and asking to see what they're working on, than sitting in a corner working on your ticket for the day.&lt;/li&gt;
&lt;/ol&gt;

</description>
      <category>productivity</category>
      <category>career</category>
    </item>
    <item>
      <title>Why code review is an underrated skill in testing</title>
      <dc:creator>ashleygraf_</dc:creator>
      <pubDate>Sun, 27 Mar 2022 01:46:49 +0000</pubDate>
      <link>https://forem.com/ashleygraf_/why-code-review-is-a-underrated-skill-in-testing-2gam</link>
      <guid>https://forem.com/ashleygraf_/why-code-review-is-a-underrated-skill-in-testing-2gam</guid>
      <description>&lt;p&gt;&lt;strong&gt;NOTE: This was written as part of the Ministry of Testing's Blogger's Club challenge. If you are interested in learning testing, I encourage you to check out MOT.&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  What is code review?
&lt;/h2&gt;

&lt;p&gt;It's both looking over the code personally, and letting the linter - with rules decided as a team - inspect the code. &lt;/p&gt;

&lt;h2&gt;
  
  
  Why code review?
&lt;/h2&gt;

&lt;p&gt;Code review is the first step after the development is 'ready for testing'. It's the first step of post development testing - you've scoped out the work, analysed the requirements, had a session with the developer and designer to discuss. This is the last chance to catch bugs without intense 'traditional testing', as it were.&lt;/p&gt;

&lt;p&gt;I like it to be the first step I take before I start testing. I may not comment, but I definitely read it. I too often regret when I don’t.&lt;/p&gt;

&lt;p&gt;It's a place to catch issues you would take a longer time to find when testing with other methods - security flaws, small but important business rule mis-interpretations, commented out code, code that could be tested with integration and unit tests that aren't - and issues you can't find when testing with other methods that can lead to product quality issues down the line, like hard to understand code, unclear names, de-standardisation of naming styles.&lt;/p&gt;

&lt;p&gt;It helps you learn how to code. That is useful for the inevitable programming you'll end up doing - whether it is fixing minor bugs, creating testing tools, using testing tools, or test automation. You see examples of different patterns and when they should it shouldn’t be used, out in the wild.&lt;/p&gt;

&lt;p&gt;It helps defect replications later - you understand the code, and therefore the most prominent scenarios that the code fixes are referring to just by reading the code. If fix tickets are ever lacking the required details, or they assume knowledge you don't yet have, you can reverse engineer the intent, and then talk to the engineers and product manager when they are available to fill in the blanks. &lt;/p&gt;

&lt;p&gt;This makes doing code reviews both a potential workaround to organisational issues, and a skill enhancer. &lt;/p&gt;

&lt;p&gt;Ultimately, it helps you refine your questioning skills - which is ultimately what we are doing as testers. Making and recording observations and asking questions. You practice asking questions, while both broadcasting your assumptions, and assuming that you may be missing context that the developers have. This improves your communication skills. &lt;/p&gt;

</description>
      <category>agile</category>
    </item>
    <item>
      <title>16 ways software testability can assist manual testing</title>
      <dc:creator>ashleygraf_</dc:creator>
      <pubDate>Mon, 21 Feb 2022 10:34:47 +0000</pubDate>
      <link>https://forem.com/ashleygraf_/16-ways-software-testability-can-assist-manual-testing-4plf</link>
      <guid>https://forem.com/ashleygraf_/16-ways-software-testability-can-assist-manual-testing-4plf</guid>
      <description>&lt;p&gt;It's just not what you're thinking right now. &lt;/p&gt;

&lt;p&gt;I’m not, or not just referring to the existence of good test automation streamlining manual testing by reducing repetitive and tedious work, as well as the potential for error, here, which is what you may assume! &lt;/p&gt;

&lt;p&gt;Most see testability as the ease of test automation suite creation. This concept of testability makes improving UI, API, and integration testing relatively easy to define and research. It gives a name to the process, and thus easy-to-find references on how to improve it. However, we don’t often discuss testability for what the testing industry likes to refer to as ‘manual testing’. Unless you hang around the Ministry of Testing and a few other select corners of the web, you find that most of the focus and the material is on assisting test automation. So I wanted to add to the literature outside test automation, and talk about software testability in the context of ‘manual testing’, and I do think it should use the same term, because just like for automation, it makes the testing easier. &lt;/p&gt;

&lt;p&gt;I suppose we do call them testing tools. They are both the judicious use of tools already out there, as well as ones you make/program yourself from scratch.&lt;/p&gt;

&lt;p&gt;Predominantly, they come in 5 categories:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;they separate concerns (where possible)&lt;/li&gt;
&lt;li&gt;they enhance the team's skills&lt;/li&gt;
&lt;li&gt;they generate test data (easily)&lt;/li&gt;
&lt;li&gt;they change the system's state (easily)&lt;/li&gt;
&lt;li&gt;they search already available test data (with precision)&lt;/li&gt;
&lt;li&gt;they search the logs &amp;amp; db of test envs (in detail)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The ease is what enhances a software’s testability, and overall, they increase a team’s capacity.&lt;/p&gt;

&lt;p&gt;I think we should call this manual test assistance ‘software testability’ more often. It’s part and parcel of making software easier to test. But what does this ‘manual testing assistance’ look like? What does this aspect of testability entail? &lt;/p&gt;

&lt;p&gt;Here are some ideas.&lt;/p&gt;

&lt;p&gt;This is not dogmatic. It’s more of a pick-and-mix box, a buffet, or even an encyclopaedia if you will. It’s a set of ideas you can pick up and try, according to your product’s needs. And in this article I am referring to only the most simple organisational or personal aspects of you or your team. Predominantly, it’s code that you can slot in to make testing easier. &lt;/p&gt;

&lt;p&gt;It is also a living document. If you have some ideas, any useful things you've seen and done, you are welcome to share it here.&lt;/p&gt;

&lt;p&gt;If you’ve read Ash Winter’s Testability Advocacy Canvas you may think of this article as like a set of visits to local companies to see how they do it.&lt;/p&gt;

&lt;p&gt;I would like to acknowledge Ady Stokes for a few contributions, and editing, as well as Sam Connelly and Alan Giles for reviewing the frame. And now, a few ideas for software testability. &lt;/p&gt;

&lt;p&gt;View this &lt;a href="https://docs.google.com/document/d/16Gy2onE7nqiVjI8eUiHk8w4CQd5EpXI8tRGPNaCkcKc/edit"&gt;summary document&lt;/a&gt; of my TestBash World 2022 talk on Testability. &lt;/p&gt;

&lt;h1&gt;
  
  
  In-depth logging
&lt;/h1&gt;

&lt;p&gt;&lt;strong&gt;What&lt;/strong&gt;&lt;br&gt;
Everyone who tests the software - testers, product team, and developers alike - could have read-only access to the Terminal log in AWS and read-only access to the code in your repository software of choice so they can run it locally, enabling them to run more destructive tests that aren’t necessarily cybersecurity-related without heavy planning and coordination or potential chaos. &lt;br&gt;
Within what is displayed on the Dev Tools Console log, display as much useful custom logging as you can when the code is in pre-prod mode.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why&lt;/strong&gt;&lt;br&gt;
It’s more direct to read than a stack trace. Of course, you want both. Combined, you know the cause, and where you look in the code to fix it. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How&lt;/strong&gt;&lt;br&gt;
Tools like &lt;a href="https://github.com/"&gt;Github&lt;/a&gt; give read-only access to the code as a matter of course, the natural consequence of giving someone access to a private repo, so it doesn’t have to be a big step.&lt;br&gt;
Instrumentation, like &lt;a href="https://www.honeycomb.io/what-is-observability/"&gt;Honeycomb&lt;/a&gt;, and monitoring, like &lt;a href="https://www.datadoghq.com/product/"&gt;DataDog&lt;/a&gt;, that adds it for you, automatically notifying you of some types of anomalies and making it easier to set up the rest&lt;/p&gt;

&lt;h1&gt;
  
  
  Showing everyone how to read multipage JSON requests and responses
&lt;/h1&gt;

&lt;p&gt;&lt;strong&gt;What&lt;/strong&gt;&lt;br&gt;
JSON is a major method used in API requests, having taken over from XML. It's important for all testers to be able to understand how to read it.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why&lt;/strong&gt;&lt;br&gt;
When JSON payloads and requests become multi-pagers, they can be draining to read! That can be unavoidable, so let’s make it easier!&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How&lt;/strong&gt;&lt;br&gt;
Explain to your team that they can be &lt;a href="https://csvjson.com/json2csv"&gt;converted into CSVs&lt;/a&gt;, and prettified with JSON prettifier &lt;a href="http://jsonprettyprint.net/"&gt;websites&lt;/a&gt; and programs, so it’s easier to read when they go on for a bit.&lt;/p&gt;

&lt;h1&gt;
  
  
  Clear error messages
&lt;/h1&gt;

&lt;p&gt;&lt;strong&gt;What&lt;/strong&gt;&lt;br&gt;
Clear error messages make software easier to use for everyone. &lt;a href="https://www.nngroup.com/articles/error-message-guidelines/"&gt;What makes a clear error message?&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why&lt;/strong&gt;&lt;br&gt;
They’re just as useful an indicator to testers as users, to what has ‘gone wrong’.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How&lt;/strong&gt;&lt;br&gt;
Clear error messages are sent out by the error handlers when the code is in pre-prod mode. Some understandably have to be obfuscated from the API for security reasons, and the rest should be clear anyway for a good user experience. When they do have to be obfuscated, Ady Stokes points out that another approach is to hide them behind a debug menu and make them accessible in any pre-prod environment. The debug menu has to be hard to find, and protected (by a passcode, for example) but it can work really well to see the whole picture. &lt;/p&gt;

&lt;h1&gt;
  
  
  Reduce silent failures
&lt;/h1&gt;

&lt;p&gt;&lt;strong&gt;Why&lt;/strong&gt;&lt;br&gt;
Silent failures can make testing frustrating. It’s the reason behind the bug reports or messages in Slack that are just like ‘I can’t go any further here’ and then you pull up the Network tab and there’s a 500 error. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How&lt;/strong&gt;&lt;br&gt;
Every 500 could show an alert UI element and be added to the debug log as per above in pre-prod mode. &lt;/p&gt;

&lt;h1&gt;
  
  
  Display all entity database records and make entity model values editable
&lt;/h1&gt;

&lt;p&gt;&lt;strong&gt;What&lt;/strong&gt;&lt;br&gt;
Database records are all the information we have on users and related entities. It’s where it’s stored and it is what it is.  &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why&lt;/strong&gt;&lt;br&gt;
Displaying the output of the program, in the information created and generated by the entities that use it, where the admins can see everything all users see, in a way easily by all who test the software. Database records. All of them. This is typically an administrative section with different levels of permissions for different levels of users. &lt;br&gt;
Making entity model values that influence their treatment by the software changeable in Admin where reasonable. For example, from basic elements like whether they are active or inactive, up to like the ‘age’ of the account. But perhaps you would exclude ‘has sent a message’ and reserve sending messages for the user platform, and then check if the user has sent a message on the Admin platform. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How&lt;/strong&gt;&lt;br&gt;
Give ‘super admins’ access to edit all entity model values. You can turn off everything that won’t be needed or wanted in production with feature flags.&lt;/p&gt;

&lt;p&gt;Did you know?&lt;br&gt;
Some systems have these viewing capabilities built into admin UIs complete with change history for audit purposes, particularly in highly regulated environments. &lt;/p&gt;

&lt;h1&gt;
  
  
  Read-only access to the Database
&lt;/h1&gt;

&lt;p&gt;&lt;strong&gt;What&lt;/strong&gt;&lt;br&gt;
You can view, and search, but you can’t modify the database, with read-only access. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why&lt;/strong&gt;&lt;br&gt;
Cut through all the time and red tape of adding it all to the admin interface. Useful in cases where there just isn’t a need for one and it truly would take up unnecessary, unavailable developer or SDET time.  &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How&lt;/strong&gt;&lt;br&gt;
You might like to use tools like &lt;a href="https://redash.io/"&gt;Redash&lt;/a&gt; as it is just for viewing and querying data, and you don’t have to navigate through the rest of a platform like AWS to find it, which can be intimidating &lt;/p&gt;

&lt;h1&gt;
  
  
  Regular error alerts
&lt;/h1&gt;

&lt;p&gt;&lt;strong&gt;What&lt;/strong&gt;&lt;br&gt;
Know when errors are happening, when they happen. You might get an alert immediately, or receive a summary of alerts for the day, or be able to ping a service to see if it’s still up, but probably some combination of the above. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why&lt;/strong&gt;&lt;br&gt;
In particular for integrations with external software. Whose software failed? Yours or theirs? Is it important for the end-user to know who? Or just that it failed? It sure is important for the development team to know. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How&lt;/strong&gt;&lt;br&gt;
For example, it comes plugged into AWS, You have to set it up to react to certain events though.&lt;/p&gt;

&lt;h1&gt;
  
  
  Controlling variables and settings placed in Config files
&lt;/h1&gt;

&lt;p&gt;&lt;strong&gt;What&lt;/strong&gt;&lt;br&gt;
Config files can place controlling variables, settings and API keys in a central location&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why&lt;/strong&gt;&lt;br&gt;
This makes it easier for everyone who tests to modify system-wide settings without needing in-depth knowledge of programming, and you can change the system without needing a full re-deploy. This can be a blessing and a curse. You’ll need to have a stringent .gitignore file to make sure no unintended changes go through. You can find plenty of base .gitignore files for different projects to start you off.  &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How&lt;/strong&gt;&lt;br&gt;
Store the base config files in source control. &lt;br&gt;
NOTE: Some API keys should not be saved to version control, for security reasons. There is instead a reference to them in the file, and they are stored as program arguments instead after the keys are retrieved elsewhere. &lt;br&gt;
Creating and managing this system is part of what is known as Infrastructure as Code.  &lt;/p&gt;

&lt;h1&gt;
  
  
  Anonymising production data
&lt;/h1&gt;

&lt;p&gt;&lt;strong&gt;What&lt;/strong&gt;&lt;br&gt;
This is placing (a subset of) anonymised production data into your pre-prod environments&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why&lt;/strong&gt;&lt;br&gt;
You can’t get any more realistic than production data, and so it enables more realistic testing. Anonymising production data allows you to load production data onto your test systems, if you have the legal restriction of GDPR, and it’s just generally good practice regardless. Or as I always say, email is always production. If that’s someone’s real email address, that email is getting seen, and that use of your email send quota is real. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How&lt;/strong&gt;&lt;br&gt;
A script that anonymises the data, so you reduce the likelihood of compromising the privacy of users. Simple anonymisation is likely not to be enough, and you may have to add randomisation to it. You will likely also have to do a few random manual checks to check that all values have been anonymised in a sensical way.&lt;/p&gt;

&lt;h1&gt;
  
  
  Testing features and their crontabs separately
&lt;/h1&gt;

&lt;p&gt;&lt;strong&gt;What&lt;/strong&gt;&lt;br&gt;
Cron tabs set off functions to run at set intervals, typically when they detect a change in the ‘status’ of an entity.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why&lt;/strong&gt;&lt;br&gt;
If you change the ‘status’ of an entity, it’s handy to be able if the functions behind the crontab are set up correctly, and will go off appropriately, right after you have made the change. You would test that the set intervals are set correctly separately. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How&lt;/strong&gt;&lt;br&gt;
Set each crontab up so they can be set off manually by clicking a button on a hidden screen in admin. For this, you remove the cron, and effectively, what you are doing is saying 'run the function that uses this cronjob'.&lt;br&gt;
Put crontabs in the config file so they can be easily changed to run on a frequent basis and you don't feel the need to set up a button to set the function off. The issue with this, is that while it is more efficient in the short run it can clutter the terminal log, making it more difficult to debug issues you find locally.&lt;/p&gt;

&lt;h1&gt;
  
  
  Making copies of raw and processed files downloadable (from the same place)
&lt;/h1&gt;

&lt;p&gt;&lt;strong&gt;What&lt;/strong&gt;&lt;br&gt;
Is uploading and processing files one of the key functions of the software? Have copies of files before they are processed by the software, and after they are processed by the software&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why&lt;/strong&gt;&lt;br&gt;
The changes may be something you didn’t expect. Raw files enable you to immediately see the difference. There’s a unix utility called diff derived from different. But if you don’t have access to that, you can copy the content from the raw (text) files you now have access to into &lt;a href="https://www.diffchecker.com/"&gt;Diffchecker&lt;/a&gt; for example, and it will run a comparison for you.  &lt;/p&gt;

&lt;h1&gt;
  
  
  Downloads of aggregated data
&lt;/h1&gt;

&lt;p&gt;&lt;strong&gt;What&lt;/strong&gt;&lt;br&gt;
Have bulk downloads of all the data that goes in, so you can analyse it with other software, and see if it matches the results from your software &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why&lt;/strong&gt;&lt;br&gt;
If you need to analyse user/entity data to check the internal statistics engine is running correctly. &lt;/p&gt;

&lt;h1&gt;
  
  
  Sped-up individual user creation
&lt;/h1&gt;

&lt;p&gt;&lt;strong&gt;What&lt;/strong&gt;&lt;br&gt;
Creating users, but in Admin/Swagger/Postman, because it's more efficient, and gives you fresh new users faster. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why&lt;/strong&gt;&lt;br&gt;
Chances are it’s probably faster than generating it as a user. If you need a fresh user and you’re not testing the registration process, and you’ve already tested that there are no differences between a user created on the user platform and the admin portal, it may be a better option in a hurry.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How&lt;/strong&gt;&lt;br&gt;
Your own custom setup in Admin. Running a single API request Swagger or Postman, or a set in Postman with a Runner, if that is what is required. &lt;/p&gt;

&lt;h1&gt;
  
  
  Bulk user generation
&lt;/h1&gt;

&lt;p&gt;&lt;strong&gt;What&lt;/strong&gt;&lt;br&gt;
Bulk test user creation is more than being able to create individual users in Admin. Although you should be able to do that too.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why&lt;/strong&gt;&lt;br&gt;
You have just created many test user accounts to use later for testing, and you can use them later for load testing as well (assuming you aren’t also testing registration and verification in the test)&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How&lt;/strong&gt;&lt;br&gt;
Bulk upload of users through uploading a CSV file in Organisation-level Administration or central Administration&lt;br&gt;
User generation through adding number of users through an API request ‘served’ through Swagger, the Admin section or even a shared Postman collection&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Tip&lt;/strong&gt;&lt;br&gt;
One of the pitfalls here is you do have to have put in a little extra work to make the users realistic, or it has the potential to mess up your load testing later. You will also get better results when testing if you base these auto-generated users on your personas. &lt;/p&gt;

&lt;h1&gt;
  
  
  Size of change
&lt;/h1&gt;

&lt;p&gt;Let’s think a little more conceptually yet again. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What&lt;/strong&gt;&lt;br&gt;
Smaller releases to staging before each bout of testing&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why&lt;/strong&gt;&lt;br&gt;
Smaller releases to staging make it easier for testers to understand the impact of each change, and give the testers more time to test in general, enabling more exploration.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How&lt;/strong&gt;&lt;br&gt;
The developers release their code to the pre-prod environments more often. This requires the developers to release more often. This eventually requires the automation of build pipelines. &lt;/p&gt;

&lt;h1&gt;
  
  
  Mocks and stubs
&lt;/h1&gt;

&lt;p&gt;&lt;strong&gt;What&lt;/strong&gt;&lt;br&gt;
If you’ve worked on any e-commerce projects, or projects with payments, you’ve already used this. All the payment APIs have test cards that test various transaction and validation states. &lt;br&gt;
But you can also use it in other scenarios. For example, to simulate users. For example, if a user with a particular email address make a purchase, they are treated like a frequent purchaser and sent an email giving a special offer for spending $500 in the last 3 months. This is added through the API request for purchasing which lives in the production code, so pick obscure email addresses (or from your own domains) and hide that section of the code with a feature flag in prod, just in case.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why&lt;/strong&gt;&lt;br&gt;
If you or your testers are unable to interact with the database directly, this gives you a way to set up your project so that it interacts with the database for you. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How&lt;/strong&gt;&lt;br&gt;
Add predetermined responses to certain inputs. Within say the ‘registration API’ you could say ‘if the user has email address x then act as if they are a new customer, or a frequent customer, or a customer with an expired membership, and so on’. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Example&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A set of accounts are set up to show different account personas &lt;/li&gt;
&lt;li&gt;Card payments give responses based on the expiry date used &lt;/li&gt;
&lt;/ul&gt;

&lt;h1&gt;
  
  
  Default One Time Password Responses
&lt;/h1&gt;

&lt;p&gt;&lt;strong&gt;What&lt;/strong&gt;&lt;br&gt;
This is for projects that have 2FA. You can hardcode the same phone number and password. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why&lt;/strong&gt;&lt;br&gt;
It saves time diving for the phone, and you don't end up with any important test accounts tied to individual employees through their mobile number.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How&lt;/strong&gt;&lt;br&gt;
&lt;a href="https://cloud.google.com/identity-platform/docs/test-phone-numbers#javascript"&gt;Registering test phone numbers - Google Cloud &lt;/a&gt;&lt;br&gt;
&lt;a href="https://www.twilio.com/blog/2018/04/twilio-test-credentials-magic-numbers.html"&gt;How To Use Twilio Test Credentials with Magic Phone Numbers&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Coming soon
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Feature flags&lt;/li&gt;
&lt;li&gt;Feature flag overrides&lt;/li&gt;
&lt;li&gt;Using  HTTP proxies / HTTP monitors / Reverse Proxies&lt;/li&gt;
&lt;li&gt;Using mock servers&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  What can high ‘manual’ software testability do for you?
&lt;/h2&gt;

&lt;p&gt;A better understanding of the system you are working with enables better testing and support.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Better bug reports while in testing&lt;/em&gt;&lt;br&gt;
If all those who do testing know how to write strong bug reports, and there’s a mandatory template for bug reports. You could even have different templates for different classes of bugs. Either way, it gives you all the information you could possibly access or need. &lt;/p&gt;

&lt;p&gt;&lt;em&gt;Faster chasing down bugs in production&lt;/em&gt;&lt;br&gt;
It’s easier to work backwards when you have a more detailed trail leading back to the cause(s) of the issue.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;It could make exploratory testing easier&lt;/em&gt;&lt;br&gt;
Improved manual testability typically makes more variables alterable at the click of a button or some writing in a text field or the changing of some numbers or a date-field or the send of an API request. Although remember to test your shortcuts first!&lt;/p&gt;

&lt;p&gt;Altogether, it could make the quality of ‘manual testing’ performed by your company itself easier to improve. &lt;/p&gt;

&lt;h2&gt;
  
  
  Who improves software testability?
&lt;/h2&gt;

&lt;p&gt;Your developers and testers. It grows and evolves alongside the production code&lt;/p&gt;

&lt;p&gt;This could require&lt;br&gt;
&lt;em&gt;Access to source control&lt;/em&gt;&lt;br&gt;
You’ll notice some of this software testability access entail giving wider, if read-only access to Terminal logs and production code, to everyone who tests, potentially the entire team. &lt;/p&gt;

&lt;p&gt;&lt;em&gt;An all-access Platform Administrative section&lt;/em&gt;&lt;br&gt;
That’s where you add the more easily changeable levers. &lt;/p&gt;

&lt;p&gt;&lt;em&gt;Education&lt;/em&gt;&lt;br&gt;
This is teaching your team enough to feel comfortable setting up and navigating their local environment. You’ll probably need a fully kitted out user guide, and a more robust README.MD set-up file alongside allocating a buddy to help out when team members get stuck. &lt;/p&gt;

&lt;p&gt;&lt;em&gt;Coordination with your DevOps team&lt;/em&gt;&lt;br&gt;
Whoever issues permissions for all the various services will probably end up with more work for a while. You can streamline this a tad by issuing a ticket to them with the exact details on how much access a new starter or team or level needs, so there is less back-and-forth setting up. &lt;/p&gt;

&lt;p&gt;&lt;em&gt;A list&lt;/em&gt;&lt;br&gt;
Recording your progress and plans for testability will keep you on track. &lt;/p&gt;

&lt;h2&gt;
  
  
  Resources
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://linuxize.com/post/scheduling-cron-jobs-with-crontab/"&gt;Scheduling Cron job with Crontabs&lt;/a&gt;&lt;br&gt;
&lt;a href="https://leanpub.com/softwaretestability"&gt;Team Guide to Testability&lt;/a&gt; by Rob Meaney and Ash Winter&lt;br&gt;
&lt;a href="https://diagramindustries.com/2021/12/15/testability-advocacy-canvas/"&gt;Testability Advocacy Canvas&lt;/a&gt; by Ash Winter&lt;br&gt;
&lt;a href="https://developer.paypal.com/api/nvp-soap/payflow/payflow-pro/payflow-pro-testing/"&gt;PayPal Payflow Pro Test Cards&lt;/a&gt;&lt;br&gt;
&lt;a href="https://developer.assemblypayments.com/docs/test-data"&gt;Assembly Payments Test Data&lt;/a&gt;&lt;br&gt;
&lt;a href="https://blog.redash.io/postgres-readonly/"&gt;Redash.io&lt;/a&gt;&lt;br&gt;
&lt;a href="https://corporatefinanceinstitute.com/resources/knowledge/other/data-anonymization/"&gt;Data Anonymization Techniques&lt;/a&gt;&lt;/p&gt;

</description>
      <category>testing</category>
      <category>productivity</category>
      <category>devops</category>
      <category>leadership</category>
    </item>
    <item>
      <title>Testability and the DB record</title>
      <dc:creator>ashleygraf_</dc:creator>
      <pubDate>Sun, 09 Jan 2022 11:07:52 +0000</pubDate>
      <link>https://forem.com/ashleygraf_/finding-missing-records-4cpi</link>
      <guid>https://forem.com/ashleygraf_/finding-missing-records-4cpi</guid>
      <description>&lt;p&gt;In her &lt;a href="https://www.youtube.com/watch?v=9FKY1Is0lgs&amp;amp;ab_channel=ElisabethHendrickson"&gt;Explore It? Explore It!&lt;/a&gt; video, Elisabeth Hendrickson, author of the awesome book &lt;a href="https://www.booktopia.com.au/explore-it--elisabeth-hendrickson/book/9781937785024.html?"&gt;Explore It!&lt;/a&gt; talks about observation, and how quality observation requires using all your resources from multiple sources to find out what actually happened. &lt;/p&gt;

&lt;p&gt;She lists the below as some of the places you would look to observe changes&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Access to internal storage&lt;/li&gt;
&lt;li&gt;Application telemetry [which prints out to the Network and Console tab on Dev Tools for example. Is it appropriately detailed for the tester?]&lt;/li&gt;
&lt;li&gt;Diagnostic tools&lt;/li&gt;
&lt;li&gt;Consoles&lt;/li&gt;
&lt;li&gt;Logs [for example the Terminal]&lt;/li&gt;
&lt;li&gt;Monitoring tools (OS, Network, etc)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I want to talk about database records - or specifically, making them as easy for non-devs to view as the devs. It requires a little dev work, but you can just splash it up there first, and then make it pretty later. The easier to read, the easier to work with! &lt;/p&gt;

&lt;p&gt;In particular, I find looking at the records of each individual entity on the administrative interface of platforms I've worked on helpful. Database records are created when a website is closed, so it's neat to be able to track the creation on a nice UI.&lt;/p&gt;

&lt;p&gt;When I do 'manual testing', I'm using basically one user at a time, and so, that's the view I need. Combined with the Console Network tabs of the Dev Tools, the Terminal tab, and the user view(s), you start to get a holistic view of what's actually happening. &lt;/p&gt;

&lt;p&gt;I think it's an aspect of testability, to have records (nearly) as easily viewable by testers, and product/project people as they are by developers.&lt;/p&gt;

&lt;p&gt;Back in Level 1 Tech Support, I relied on this record view heavily, and I find it just as helpful now.&lt;/p&gt;

&lt;p&gt;Although it only works if the relationships are recorded in an up-to-date display.&lt;/p&gt;

&lt;p&gt;So how do you find records shown on the user view that might be missing on the admin view? Open up a user view, and check off entities as you find them that are also on the admin view. Don't forgot to check that it's linked to the most recent version of each entity, if there have been updates, as may happen if there have been major changes to the application.&lt;/p&gt;

&lt;p&gt;This can make testing more efficient over time, while maintaining accuracy. &lt;/p&gt;

</description>
      <category>testing</category>
    </item>
    <item>
      <title>Avoiding false alarms</title>
      <dc:creator>ashleygraf_</dc:creator>
      <pubDate>Thu, 21 Oct 2021 06:23:00 +0000</pubDate>
      <link>https://forem.com/ashleygraf_/avoiding-false-alarms-4h5</link>
      <guid>https://forem.com/ashleygraf_/avoiding-false-alarms-4h5</guid>
      <description>&lt;p&gt;During my first year as a tester, I had a false-alarm rate I wasn't proud of until I adopted a routine, some borrowed from my mentor Alan Giles, and some borrowed from the team at Digital Purpose, and some I found for myself. A high false-alarm rate decreases trust between yourself and the team, so it's important to get it down. This is what I do. &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Don't panic. Consider all the possibilities. Are you missing something? What are you assuming? &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Is your test environment set up properly?&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Are you using the correct build?&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Is the replicator using the correct build?&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;are you using the test user you think you’re using?&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Check the server is refreshed. Your team might have alerts connected to your deployment pipeline of choice. This comes in handy. &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Hard refresh your browser tab. That is Ctrl+F5 or Ctrl+Shift+R on Windows. &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Re-test sequences that find bugs to check you saw what you think you saw. The issue here is not to re-test so many times you run out of time to fix issues. I've heard of people that record all their testing efforts to make back-tracking easier. &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;However, don't go too quickly. Accuracy &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; Speed. Or, it's not speedy if it's wrong and you have to do it again.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Test with accounts created before and after the change - Does the feature / bug fix need to work retrospectively? If it's for a green-field release, probably not. If it isn't, probably. It may also be best to just always test with a fresh account. &lt;br&gt;
Account set-up can be speeded up with a Postman API request, or even a set of them, with the Runner hooked up to the Auth details of the new user (first step done manually to fetch this).&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Confirm the requirements with the rest of the team. Does it qualify as a requirement, written or un-written?&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Check your test data is set up properly. Are you testing what you think you're testing, or it is another scenario? &lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
    </item>
    <item>
      <title>Test techniques mapped to types of features</title>
      <dc:creator>ashleygraf_</dc:creator>
      <pubDate>Mon, 13 Sep 2021 06:38:24 +0000</pubDate>
      <link>https://forem.com/ashleygraf_/test-techniques-mapped-to-types-of-features-4n82</link>
      <guid>https://forem.com/ashleygraf_/test-techniques-mapped-to-types-of-features-4n82</guid>
      <description>&lt;p&gt;(in progress)&lt;/p&gt;

&lt;p&gt;Test technique -&amp;gt; Type of feature&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Boundary Value Analysis&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;a little too little, just enough, too much - blocking someone &lt;/p&gt;

&lt;p&gt;&lt;em&gt;Equivalence partitioning&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;State transition testing&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;if the user does this, their status changes to that. &lt;/p&gt;

&lt;p&gt;&lt;em&gt;Decision table testing&lt;/em&gt; &lt;/p&gt;

&lt;p&gt;This is for forms. this is especially for complex forms with logic. if this response is made, this question or content is shown. &lt;/p&gt;

&lt;p&gt;&lt;em&gt;Graph based testing&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Error guessing technique&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;For anything used frequently or just key features. Might be used to see all the ways a chart COULD be manipulated. &lt;/p&gt;

</description>
    </item>
  </channel>
</rss>
