Learning Goal: I’m working on a writing discussion question and need a sample draft to help me learn.
200 word response to each
response 1
Software quality attributes are a form of non-functional requirements that test the fitness
of a system. It goes to play a role in defining architectural decisions made by the software architect.
Like non-functional requirements, quality attributes can be hard to test because they are not easily
quantifiable. This is why it is important to define the most common software quality attributes and
define rules and tests to check their fitness for the system.
Quality attributes can commonly be broken down into six separate components;
maintainability, usability, availability, portability, interoperability, and testability. A brief
description and examples of each can be found below (Ingeno, 2019):
Maintainability – the ease in which software can be maintained:
Corrective maintenance – Analyzing and fixed defects within the system
Perfective maintenance – The quality in how the software can be enhanced or updated.
Adaptive maintenance – The quality in how the software adapts to changes of its
environment.
Preventative maintenance – The quality in how the software can prevent future problems
Usability – the ease in which the software can be used.
Learnability – The ease of learning how to effectively use the software.
Accessibility – The quality in features that are provided for people with disabilities or
impairments.
Appeal of visual design – the quality in the design or visual appearance of the system.
Availability – the availability and reliability of the software when it is needed.
Detecting faults – The ability in which a system is able to detect a faultOvercoming faults – the ability in which a system is able to recover from faults
Preventing faults – the ability in which a system is able to prevent faults
Portability – the transferability of a software from one environment to another.
Adaptability = the ease in how software can adapt to different environments
Installability – the ease in how software can be installed or uninstalled.
Replaceability = the ease in how a software can replace another system for the same
purpose
Interoperability – the degree in which a software system can exchange information with another
software system.
Semantic interoperability – the ability to interpret information exchanged in a
meaningful and correct way.
Syntactic interoperability – the capability of two ore more systems communicating with
each other.
Testability – the degree in which software systems support testing.
Controllability – the level of control for the units being tested.
Observability – the level of observability in a component being tested.
Isoability – the degree in which a component can be isolated.
Automatability – the degree in which a process can be automated.
Complexity – the degree in which complexity of testing can be decreased.
Quality attributes can also be defined as external or internal. Internal qualities can be
measured by the software system and are visible to the development team. These attributes directly reflect the complexity of the system and consequently affect external attributes of the system. Therefore, a greater quality of internal attributes often leads to a greater quality of external attributes. Examples of internal quality attributes are lines of code, quality of code, modifiability of components, etc. (Ingeno, 2019). In contrast, external qualities are externallyvisible, they are qualities that are most notable to the end users of the system. It is measured on how well the software works in its environment, so naturally, the software must be deployable and usable in order for it to be properly tested.Examples of external quality attributes are the performance, reliability, availability, and usability of the system (Ingeno,2019).
response 2
Software development process’s rooted in Agile philosophy focus on incremental
development. Incremental development interleaves the traditional development approach
activities: specification, development, and validation (Sommerville, 2018). The premise of
incremental development is that each iteration of a system should produce a fully functional
product that meets the customer’s business, functional, and non-functional requirements (Ingeno,
2018). A requirement is an attribute of a system that outlines a capability, characteristic, or
quality factor of a system in order for it to have any value to the customer (Young, 2003).
Software Architects work with all members of a development team during the software
engineering process. The primary goal of an architect is to ensure that the construction of the
system has compliant quality attributes that were outlined in a phase of the software engineering
process known as elicitation. A quality attribute is a non-function requirement (Ingeno, 2018).
Non-functional requirements are measurable attributes or characteristics of a system that fall into
six categories: Maintainability, Usability, Availability, Portability, Interoperability, and
Testability. These attributes work together to produce some level of software quality as far as the
customer is concerned.
Some quality attributes are inversely related, as such it is important for architects to be
conscientious of design patterns that offer the greatest level of compromise with customer
requirements. Maintainability is comprised of corrective, perfective, adaptive, and preventative
maintenance. The components rely heavily on the software implementation leveraging the five
object-oriented design principles outlined by Robert C. Martin: S.O.L.I.D (Oloruntoba, 2020).
Usability defines user experience and is highly dependent on how learnable a system is, its built-3 in troubleshooting features, its aesthetics, and its accessibility features. The availability of a system outlines the up-time of a system based on some level of assuredness. A common measureof this is the mean time between failure rates. Portability in effect describes how transportable a software system is from one operating system architecture to another. It is further described by the software’s adaptability, “installability”, replicability, and localization. Interoperability defines a system’s ability to integrate with other systems. It is comprised of a systems information exchangeability, as well as its communication protocol modernization compliance.
Finally, testability outlines the software’s compliance with test-driven development practices and
consists of its controllability, observability, “isolability”, and automatability (Ingeno, 2018).
Quality Attributes: Internal & External
Quality attributes are both internal and external to a software system. Internal attributes
are comprised of the design patterns and test cases compiled into an application. Such attributes
are only visible to developers. These design patterns are influenced by the level of cohesion
between modules, the readability and ease of refactoring, and the level of coupling between
classes (Ingeno, 2018). External quality attributes are therefore properties of the application that
influence the user end. Maintainability and testability all fall into the internal attribute domain.
Meanwhile, usability is more of an external attribute, leaving availability, interoperability, and
portability somewhere in between.
During elicitation, great care must be taken to negotiate requirements that are realistic
and attainable. Conflicts can arise when determining the level of quality attribute completeness
that is able to be balanced into a software solution. For example, as a system scales the
maintainability of a codebase can decrease if the domain-driven design is not reanalyzed at the 4 end of an iteration. This may delay the usability of a codebase and encourage accumulating technical debt in order to satisfy requirements. However, as technical debt increases, all other internal quality attributes degrade with maintainability considering it acts as a foundational quality of internal requirements. Less technical examples may be a situation in which a security feature interferes with the availability of a system.
Summary
The elicitation phase of requirements engineering enables the realization of business,
non-functional, and functional requirements. Non-functional requirements impact a software
architect’s design pattern choice which in turn affects the level of fulfillment of the requirements.
Quality attributes define non-functional requirements and consist of maintainability, usability,
availability, portability, interoperability, and testability. See figure 1 of this document for an
outline of the topics presented in this paper.