%% date:: [[2023-01-20]], [[2023-09-07]] %% # [[Operational testing]] ## What is operational testing? Operational testing, traditionally called nonfunctional testing, is a methodical approach to ensuring software quality in aspects that extend beyond the intended features of an application. Operational testing sometimes involves more qualitative or subjective concerns that may only arise in certain situations. Operational tests are more experimental in nature than functional tests because to some degree, they seek to prepare an application for not just normal but extraordinary use cases. ## "Nonfunctional" is inaccurate I was talking to [[Paul Bruce]] about testing when he mentioned that the term "nonfunctional testing" is inaccurate. The more I thought about it, the more I agreed with him. Testing types usually considered to be "nonfunctional" are no less functional than other testing types, and should in fact be considered essential parts of software testing. Paul suggests the term "Operational" instead. ## Types of operational testing %%[[Map of operational testing]]%% ![[map-of-operational-testing.png]] ### [[Accessibility Testing|Accessibility]] ### [[Usability Testing|Usability]] ### [[Localization Testing|Localization]] ### [[Security Testing|Security]] ### [[Performance Testing|Performance]] Performance testing seeks to subject an application to a variety of situations ranging from normal to extraordinary in an attempt to make the application more scalable, elastic, available, reliable, and responsive. #### [[Frontend performance testing]] ##### [[Performance profiling]] ##### [[Real User Monitoring]] ##### [[Browser-based testing]] #### [[Backend performance testing]] ##### [[Scalability]] Scalability is the ease with which an application can cope with increased demand ##### [[Elasticity]] Elasticity is the ability to adapt to circumstances, including scaling down when possible ##### [[Availability]] Availability involves a system's uptime and resilience against outages. ##### [[Reliability]] Reliability is the consistency of an application's behavior, especially when handling environmental and application-level failures. ##### [[Load Testing]] or responsiveness The responsiveness of an application is how quickly it processes requests and returns the processed output to a user. ###### [[Browser-based testing]] ###### [[Protocol-based load testing]] ###### [[Hybrid load testing]] ### [[Infrastructure testing]] ## [[Chaos Engineering]] Chaos engineering is very emphatically _not_ a type of testing according to most literature, but I'm including it here because I think it actually _is_, despite the difference in terminology. Or, at least, it should be. Chaos engineering is concerned with scalability, performance, elasticity, availability, and reliability testing types above, but brings a subtle difference in attitude. While most testing disciplines seek to verify an expected result, chaos engineering seeks to disprove it. [[Chaos engineering is a testing discipline]] ## References