Quality assurance
the need to explicitly define the criteria on which the quality of the product will be judged
putting in place management processes to ensure that quality criteria will be met
an ongoing process throughout development to ensure the quality criteria will be met
Questions that you could ask (and answer) when considering QA:
1. What attributes make a piece of software a quality product?
2. How can you assure the quality of your software product?
3. List the documentation and procedures you need to add to your project to ensure its quality.
Quality assurance is the process of ensuring that the software meets or exceeds expected standards of quality such as fuctionality, usability, reliability, performance and supportability.
There are standard organisations (such as ASA and ISO) that can provide descriptions of how to produce quality software and these organisations can audit the software development team / organisation to ensure they are following a standard set of procedures which ensure that a quality product is produce.
The business can then apply for and be award an accreditation (certificate ) which can be used for advertising to potential clients.
What make quality software?
Functionality: The software performs its function correctly.
These usually represent the main product features that are familiar within the business domain (type of business e.g.: banking) of the solution being developed. The functional requirements can also be very technically oriented. Significant system-wide functional requirements may include auditing, licensing, localization, mail, online help, printing, reporting, security, system management, or workflow. Each of these may represent functionality of the system being developed and they are each a system-wide functional requirement.
Usability
Usability includes looking at, capturing, and stating requirements based around user interface issues, things such as accessibility, interface aesthetics, and consistency within the user interface.
Reliability
Reliability includes aspects such as availability, accuracy, and recoverability, of the system from shut-down failure.
Performance
Performance involves things such as throughput of information through the system, system response time (which also relates to usability), recovery time, and startup time.
Supportability
Requirements such as testability, adaptability, maintainability, compatibility, configurability, installability, scalability, localisability, and so on.
Testing these characteristics should be done by the (testing team).
the need to explicitly define the criteria on which the quality of the product will be judged
The success (or otherwise) of a project needs to be based on a series of predetermined factors, including:
Code efficiency
Data Integrity
System reliability
Product usability
Data (and information) accuracy
Ease of system maintenance (including testing)
System portability (reusing components elsewhere)
putting in place management processes to ensure that quality criteria will be met
SQA (Software Quality Assurance)...
Will ensure all facets of the product work as they are supposed...
...and will ensure all facets of the program that don’t work as they are supposed will be updated.
an ongoing process throughout development to ensure the quality criteria will be met
identify a range of criteria on which the quality of the product will be judged
identify relevant processes for a given criterion that will result in a quality product
The quality and efficiency of code go hand in hand, for both runtimes and readability:
In terms of runtime, the code cannot be redundant as duplicating code is a huge area of code inefficiency. Using better systems such as multiple classes and calling upon them or referencing into them can have better efficiency of the code and reduce duplication of data.
Ensuring there are no endless ‘for’ loops which will reduce a programs efficiency by a long shot. Some programs, such as Google Chrome can reduce a broken for loop to a tab which won't crash the whole program, which is achieved through modular, contained program sections and the program’s ability to recover sections of code that has crashed. Apple’s MacOS and iOS operating systems also heavily feature this modular code design. This also explains why Apple computers and Chrome browsers don’t allow for unsigned code to be run easily. Both systems expect their code to be sources from their own sources (the Chrome app store or Apple App store)
Coding efficiency can be achieved through compartmentalising and separations of the different parts of the program. For example having your menu run as a separate component rather than menu on top of your main screen can increase efficiency due to the sole focus of the processing on one part. This also allows for that section of code to be repaired or rebooted without needing to restart the entire system.
The section of readability is important for debugging as programmers we use formatting such as the colouring of certain keywords and actions within the code. This differs IDE to IDE but as a whole they all colour code words such as variables types and function return types.
Another large help is indenting the code to show the hierarchy of ‘if’ statements and functions. This allows the reader to know the order of the code and which lines fall under which function. Visual studios allows drop down boxes to close these hierarchy close code which is not in focus.
Code comments are a no brainer, coding uses certain syntax which after many years of experience can be interpreted on the fly, but for the most part reading english explanations is far easier to understand than interpreting code. Additionally when many lines are written to achieve one single goal such as changing scene, simple commenting “these lines will change the scene” allows a developer to skim through the code and find what they are looking for easier. Code comments can have little detail which give a larger overview as well as in detail explanations of the logic of the code.
All these concepts in conjunction ensure the highest efficiency code in all programs
Data integrity refers to the reliability and dependability of the data throughout its lifecycle. It can describe the state of your data whether it is valid or invalid.
Imagine making an extremely important business decision hanging on data that is entirely, or even partially, inaccurate. Organizations routinely make data-driven business decisions, and data without integrity leads to wrongful decisions, which can have a dramatic effect on the company’s bottom line goals. Imagine an investment company with million if not billions of dollars investing in companies based off incorrect and inaccurate data.
Common threats that can alter the state of data integrity include:
Human error
Unintended transfer errors
Misconfigurations and security errors
Malware, insider threats, and cyberattacks
Retrievability and accessibility – It’s important to have accurate data in the proper locations where the data is safely secured, meaning there aren't any nefarious technologies which can damage data or prevent data access or allow data access when it is not supposed to. this means your data is only accessed when it’s needed to as well as accessed by the appropriate users
Traceability –Today's technological world allows us to trace almost anything digital, the use of data points can check data validity and where its coming in from and going to. Many data points are required any way, in order to organise a data’s previous and future locations. For example, modern internet modems have to organise where the data packet is going to. Developers simply add a data point which stores the information on locations and allows for futures reference to determine a trace.
System reliability refers to the probability that a system will satisfactorily perform the intended tasks. This mean that the hardware and software both function as designed and are free from bugs and other anomalies.
Further reading: https://users.ece.cmu.edu/~koopman/des_s99/sw_reliability/#definition
Product usability is the extent to which a product, or software can be used by specified users to achieve specific goals with effectiveness, efficiency, and satisfaction in a specified context of use.
According to codecademy there are 5 factors that contribute to the usability of a product.
Well-designed products, in theory, are easy for a new user to learn how to use. Other products, however, might be more complicated for a new user to learn how to use, like this complicated stock market as a mobile app. In fact, users may never thoroughly learn how to use the product correctly.
A product with strong memorability is one in which learners have no trouble re-engaging and using the product after not having used it for some time.
Minimizing the number of errors a user can make with a product and allowing them to recover quickly from errors is central to product usability.
It’s possible that a website, for example, may be easy to learn, efficient to use, have strong memorability, and be error-free, but if the overall experience is not enjoyable, then the impact of the previous usability components is minimised.
In quality assurance, product usability is an integral aspect as it essentially determines the value of the product.
Data accuracy is one of the components of data quality because misleading and often incorrect information is common on the internet. It refers to whether the data values stored for an object are the correct values. Data values must be the right value and must be represented in a consistent and unambiguous form.
Ease of maintenance is “the simple or easy way of maintaining electrical devices and getting rid of the faults”.
In electrical engineering, the following tasks are necessary to maintain electrical devices in proper manner,
1. If any fault occurred in a system, isolate the faulty section as early as possible to avoid damage of the system.
2. Rectify the faults as soon as possible and replace the faulty parts with adequate parts.
3. Control the sudden variations in the loads, since it leads to quick faults in the system which damages the entire system.
4. Increase the reliability and efficiency, and improve the system performance.
5. Increase the lifespan of the system.
6. Control the system adaptively.
7. Monitor the system regularly and get it serviced when required.
These are the few essential tasks for easy maintenance.
Maintenance involves functional checks, servicing, repairing or replacing of necessary devices, equipment, machinery, building infrastructure, and supporting utilities in industrial, business, governmental, and residential installations. Over time, this has come to include multiple wordings that describe various cost-effective practices to keep equipment operational; these activities take place either before or after a failure.
Maintaining is the process of preserving a condition or situation or the state of being preserved. This involves functional checks, servicing, repairing or replacing of necessary devices, equipment, machinery, building infrastructure, and supporting utilities in industrial, business, governmental, and residential installations. Over time, this has come to include multiple wordings that describe various cost-effective practices to keep equipment operational; these activities take place either before or after a failure.
Portability, in relation to software, is a measure of how easily an application can be transferred from one computer environment to another. A computer software application is considered portable to a new environment if the effort required to adapt it to the new environment is within reasonable limits.
It refers to the ability of an application to move across environments, not just across platforms. To clarify, a computer platform generally refers to the operating system and computer hardware only. A computer environment is much broader and may include the hardware, the operating system and the interfaces with other software, users and programmers.
Further Reading: https://www.tutorialspoint.com/Types-of-Computing-Environments