{"id":22871695,"url":"https://github.com/qainsights/do-not-say-non-functional","last_synced_at":"2026-02-09T23:02:44.052Z","repository":{"id":94104173,"uuid":"547873115","full_name":"QAInsights/Do-Not-Say-Non-Functional","owner":"QAInsights","description":"Do Not Say Non-Functional","archived":false,"fork":false,"pushed_at":"2022-10-18T20:10:39.000Z","size":32,"stargazers_count":7,"open_issues_count":0,"forks_count":5,"subscribers_count":2,"default_branch":"main","last_synced_at":"2025-08-09T19:41:48.424Z","etag":null,"topics":["accessbility-testing","performance-testing","quality-assurance","security-testing","software-testing","testing"],"latest_commit_sha":null,"homepage":"","language":null,"has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/QAInsights.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2022-10-08T13:16:47.000Z","updated_at":"2023-10-05T18:41:10.000Z","dependencies_parsed_at":"2023-03-03T15:30:46.858Z","dependency_job_id":null,"html_url":"https://github.com/QAInsights/Do-Not-Say-Non-Functional","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/QAInsights/Do-Not-Say-Non-Functional","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/QAInsights%2FDo-Not-Say-Non-Functional","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/QAInsights%2FDo-Not-Say-Non-Functional/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/QAInsights%2FDo-Not-Say-Non-Functional/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/QAInsights%2FDo-Not-Say-Non-Functional/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/QAInsights","download_url":"https://codeload.github.com/QAInsights/Do-Not-Say-Non-Functional/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/QAInsights%2FDo-Not-Say-Non-Functional/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29284741,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-09T21:57:15.303Z","status":"ssl_error","status_checked_at":"2026-02-09T21:57:11.537Z","response_time":56,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["accessbility-testing","performance-testing","quality-assurance","security-testing","software-testing","testing"],"created_at":"2024-12-13T13:21:14.798Z","updated_at":"2026-02-09T23:02:39.035Z","avatar_url":"https://github.com/QAInsights.png","language":null,"funding_links":[],"categories":[],"sub_categories":[],"readme":"# Do Not Say Non-Functional in QA\n\u003c!-- ALL-CONTRIBUTORS-BADGE:START - Do not remove or modify this section --\u003e\n[![All Contributors](https://img.shields.io/badge/all_contributors-2-orange.svg?style=flat-square)](#contributors-)\n\u003c!-- ALL-CONTRIBUTORS-BADGE:END --\u003e\n\nMerriam Dictionary's definition of `non-functional`: \n\u003e having no function : serving or performing no useful purpose\n\n## Background\n\"Functional\" is relative to the goal you're trying to achieve. If your software product is a standalone desktop application, then performance testing might not be \"functional\" for that purpose, but for a SaaS application running in the cloud serving thousands if not millions of clients simultaneously, then performance becomes critical, not only functional. In the same sense that Selenium tests are not functional for a CLI tool or a web-server etc.\n\nTherefore, the categorization of Selenium tests being \"functional\" while performance testing is \"non-functional\" is somewhat arbitrary and creates a lot of confusion.\n\n## Rationale\n\nQA professionals, especially those working in `Performance Engineering and Testing` negates the term `Non-Functional`. The rationale behind is: the term `performance` is `functional` for any application. Similarly for [`Accessibility Testing`](https://web.dev/accessible/), [`Security Testing`](https://owasp.org/www-project-top-ten/), and more.\n\n![image](https://user-images.githubusercontent.com/2826376/193952008-7fd668db-fc00-4d68-92ef-76d1b6848306.png)\n\nAFAIK, there is no official term for `Non-Functional Testing` or `Non-Functional Requirements`. Industry leaders James Bach, Cem Kaner, Alexander Podelko and more agrees that the term misrepresents the testing objective.\n\n## Alternative Terms (in alphabetical order by Term)\n\n\n| Term          | Definition    | Author        |\n| ------------- | ------------- | ------------- | \n| Extra Functional, Quasi-Functional |            | James Bach    |\n| Functional Testing Extended |               | NaveenKumar Namachivayam |\n| Para-Functional | | Cem Kaner |\n| Specialized Functional, Advance Functional, Functional Performance |  | Sameer Kanguri |\n\n\n## Testing Categorization\n\n### Individualist vs Collectivist\n\nAn `Individualist` test would evaluate the effect of a single user on the software, e.g.:\n\n- Unit testing\n- API testing\n- UI testing\n- Security testing\n- Accessibility testing\n- Single user performance testing ( e.g. Google's Lighthouse)\n\nA `collectivist` test would evaluate the effect of a large number of dispersed users on the software, and this is almost exclusive to the various types of performance tests:\n\n- Stress testing\n- Load testing\n- Soak testing\n- Endurance testing\n- Volume testing\n- Chaos testing\n\n### User Requirements vs Operational Requirements\n\n`User Requirements` are a type of requirements intended to meet the user expectations e.g. if I try to login with a valid user, the dashboard page should come up with the correct user name.\n\nExamples of such testing realms:\n\n- Unit testing\n- API testing\n- UI testing\n\n`Operation Requirements` are a type of requirements referring to industry standards, with the intention to keep the software viable.\n\nExamples:\n\n- Security testing\n- Accessibility testing\n- Single user performance testing\n- Load testing\n- Endurance testing\n- Soak testing\n- Volume testing\n- Chaos testing\n\n### Assertion based vs Metrics based\n\nAssertions typically validates binary conditions and they provide a quick `go or `no-go` feedback e.g.:\n\n- Unit testing\n- API testing\n- UI testing\n- Accessibility testing\n- Single user performance testing\n\nMetrics are numerical features (response time, CPU usage, memory usage, reset count, etc...) which should be analyzed as a whole after test execution has been completed.\n\n- Load testing\n- Endurance testing\n- Soak testing\n- Volume testing\n- Chaos testing\n\n## Contributors\n\n\u003c!-- ALL-CONTRIBUTORS-LIST:START - Do not remove or modify this section --\u003e\n\u003c!-- prettier-ignore-start --\u003e\n\u003c!-- markdownlint-disable --\u003e\n\u003ctable\u003e\n  \u003ctbody\u003e\n    \u003ctr\u003e\n      \u003ctd align=\"center\"\u003e\u003ca href=\"https://medium.com/@eldadu1985\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/55621402?v=4?s=100\" width=\"100px;\" alt=\"Eldad Uzman\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eEldad Uzman\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/QAInsights/Do-Not-Say-Non-Functional/commits?author=eldaduzman\" title=\"Documentation\"\u003e📖\u003c/a\u003e\u003c/td\u003e\n      \u003ctd align=\"center\"\u003e\u003ca href=\"https://github.com/sambgm\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/75112035?v=4?s=100\" width=\"100px;\" alt=\"sambgm\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003esambgm\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"#content-sambgm\" title=\"Content\"\u003e🖋\u003c/a\u003e\u003c/td\u003e\n    \u003c/tr\u003e\n  \u003c/tbody\u003e\n\u003c/table\u003e\n\n\u003c!-- markdownlint-restore --\u003e\n\u003c!-- prettier-ignore-end --\u003e\n\n\u003c!-- ALL-CONTRIBUTORS-LIST:END --\u003e\n\u003c!-- prettier-ignore-start --\u003e\n\u003c!-- markdownlint-disable --\u003e\n\n\u003c!-- markdownlint-restore --\u003e\n\u003c!-- prettier-ignore-end --\u003e\n\n\u003c!-- ALL-CONTRIBUTORS-LIST:END --\u003e\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fqainsights%2Fdo-not-say-non-functional","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fqainsights%2Fdo-not-say-non-functional","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fqainsights%2Fdo-not-say-non-functional/lists"}