Professional Documents
Culture Documents
Safety is concerned with the occurrence of accidents or mishaps, defined in terms of external
consequences (accidents happen). The difference of intentsgood things (services) must
happen vs. bad things (accidents) must not happengives rise to the following paradox: If the
services are specified incorrectly, a system can be dependable but unsafe; conversely, it is
possible for a system to be safe but undependable.
A system might be dependable but unsafe for example, an avionics systems that continues
to operate under adverse conditions yet directs the aircraft into a collision course. A system
might be safe but undependable for example, a railroad signaling system that always failsstops
6.1.2 Taxonomy The taxonomy for the safety attributes defines conditions of the system (hazards)
that might lead to undesirable consequences (mishaps); methods normally used to identify
hazards, evaluate the consequences of a hazard, and eliminate or reduce the possibility of
mishaps; and indicators of safety in the aggregate (system, environment, users and operators).
Security
is a measure of the system's ability to resist unauthorized usage while still providing
its services to legitimate users. An attempt to breach security is called an attack [1]
and can take a number of forms. It may be an unauthorized attempt to access data
or services or to modify data, or it may be intended to deny services to legitimate
users. [1] Some security experts use "threat" interchangeably with "attack." Attacks,
often occasions for wide media coverage, may range from theft of money by
electronic transfer to modification of sensitive data, from theft of credit card
numbers to destruction of files on computer systems, or to denial-of-service attacks
carried out by worms or viruses. Still, the elements of a security general scenario are
the same as the elements of our other general scenariosa stimulus and its source,
an environment, the target under attack, the desired response of the system, and
the measure of this response. Security can be characterized as a system providing
nonrepudiation, confidentiality, integrity, assurance, availability, and auditing. For
each term, we provide a definition and an example. 1. Nonrepudiation is the
property that a transaction (access to or modification of data or services) cannot be
denied by any of the parties to it. This means you cannot deny that you ordered that
item over the Internet if, in fact, you did. 2. Confidentiality is the property that data
or services are protected from unauthorized access. This means that a hacker
cannot access your income tax returns on a government computer. 3. Integrity is the
property that data or services are being delivered as intended. This means that your
grade has not been changed since your instructor assigned it. 4. Assurance is the
property that the parties to a transaction are who they purport to be. This means
that, when a customer sends a credit card number to an Internet merchant, the
merchant is who the customer thinks they are. 5. Availability is the property that the
system will be available for legitimate use. This means that a denial-of-service
attack won't prevent your ordering this book. 6. Auditing is the property that the
system tracks activities within it at levels sufficient to reconstruct them. This means
that, if you transfer money out of one account to another account, in Switzerland,
the system will maintain a record of that transfer.
Testability
Testability is a measure of how well system or components allow you to create test criteria
and execute tests to determine if the criteria are met. Testability allows faults in a system to
be isolated in a timely and effective manner. The key issues for testability are:
Complex applications with many processing permutations are not tested consistently,
perhaps because automated or granular testing cannot be performed if the
application has a monolithic design. Design systems to be modular to support testing.
Provide instrumentation or implement probes for testing, mechanisms to debug
output, and ways to specify inputs easily. Design components that have high cohesion
and low coupling to allow testability of components in isolation from the rest of the
system.
Lack of test planning. Start testing early during the development life cycle. Use mock
objects during testing, and construct simple, structured test solutions.
Poor test coverage, for both manual and automated tests. Consider how you can
automate user interaction tests, and how you can maximize test and code coverage.
Input and output inconsistencies; for the same input, the output is not the same and
the output does not fully cover the output domain even when all known variations of
input are provided. Consider how to make it easy to specify and understand system
inputs and outputs to facilitate the construction of test cases.
Effort required testing a program to ensure that it performs its intended function. Testability
can be calcluated as
= (Time spent in testing the functionality) / (Total development time) * 100
Reliability
Reliability is the ability of a system to continue operating in the expected way over time.
Reliability is measured as the probability that a system will not fail and that it will perform its
intended function for a specified time interval. The key issues for reliability are:
The system crashes or becomes unresponsive. Identify ways to detect failures and
automatically initiate a failover, or redirect load to a spare or backup system. Also,
consider implementing code that uses alternative systems when it detects a specific
number of failed requests to an existing system.
The system fails due to unavailability of other externalities such as systems, networks,
and databases. Identify ways to handle unreliable external systems, failed
communications, and failed transactions. Consider how you can take the system offline
but still queue pending requests. Implement store and forward or cached message-based
communication systems that allow requests to be stored when the target system is
unavailable, and replayed when it is online. Consider using Windows Message Queuing
or BizTalk Server to provide a reliable once-only delivery mechanism for asynchronous
requests.
Extent to which a program can be expected to perform its intended function with required
Usability
USABILITY Usability is concerned with how easy it is for the user to accomplish
a desired task and the kind of user support the system provides. It can be
broken down into the following areas: l
Using a system efficiently. What can the system do to make the user more
efficient in its operation? l
Minimizing the impact of errors. What can the system do so that a user error
has minimal impact?
l Adapting the system to user needs. How can the user (or the system itself)
adapt to make the user's task easier? L
Increasing confidence and satisfaction. What does the system do to give the
user confidence that the correct action is being taken?
In the last five years, our understanding of the relation between usability and
software architecture has deepened (see the sidebar Usability Mea Culpa).
The normal development process detects usability problems through building
prototypes and user testing. The later a problem is discovered and the deeper
into the architecture its repair must be made, the more the repair is
threatened by time and budget pressures.
Reusability
Reusability is the probability that a component will be used in other components or scenarios
to add new functionality with little or no change. Reusability minimizes the duplication of
components and the implementation time. Identifying the common attributes between
various components is the first step in building small reusable components for use in a larger
system. The key issues for reusability are:
The use of different code or components to achieve the same result in different
places; for example, duplication of similar logic in multiple components, and
duplication of similar logic in multiple layers or subsystems. Examine the application
design to identify common functionality, and implement this functionality in separate
components that you can reuse. Examine the application design to identify
crosscutting concerns such as validation, logging, and authentication, and implement
these functions as separate components.
The use of multiple similar methods to implement tasks that have only slight
variation. Instead, use parameters to vary the behavior of a single method.
Using several systems to implement the same feature or function instead of sharing
or reusing functionality in another system, across multiple systems, or across different
subsystems within an application. Consider exposing functionality from components,
layers, and subsystems through service interfaces that other layers and systems can
use. Use platform agnostic data types and structures that can be accessed and
understood on different platforms.
Extent to which a program can be used in other applications. It is related to the packaging and
in the input, or in the hardware, in relation to a given application, are inversely proportional to the
probability of the occurrence of this error in the given application.
- Frequent errors (e.g. erroneous commands, typing errors) must be handled with particular care.
- Less frequent errors (e.g. power failure) can be handled more laxly, but still must not lead to
irreversible consequences.
Modularity
Modularity is the measure of the extent to which software is composed of
separate, interchangeable components, each of which accomplishes one
function and contains everything necessary to accomplish this. Modularity
increases cohesion and reduces coupling and makes it easier to extend the
functionality and maintain the code.
UNDERSTANDABILITY
Software systems tend to depart more and more from the principle of simplicity and
become increasingly complex. The increase in size and complexity of software
drastically affects several quality attributes, especially understandability and
maintainability. Software developers and maintainers need to read and understand
source programs and other documents of software. The significance of
understandability is very obvious that can be perceived as If we can't learn
something, we won't understand it. If we can't understand something, we can't use
it - at least not well enough to avoid creating a money pit. We can't maintain a
system that we don't understand - at least not easily. And we can't make changes to
our system if we can't understand how the system as a whole will work once the
changes are made [16]. Understandability of software documents is thus important
as the better we know what the thing is supposed to do, the better we can test for
it. Despite the fact that understandability is vital and highly significant to the
software development process, it is poorly managed [1]. The fundamental reality of
measurement we cannot control what we cannot measure highlights the
importance and significance of good measure of software understandability [13].
There are some aspects of software artifacts that either directly or indirectly affects
understandability of software. Classes that are huge and complex are hard to
understand by humans, especially if the class is of low cohesion. A good software
design with manageable complexity usually provides proper data abstraction; it
reduces coupling while increasing cohesion that make them easily understandable.
Researchers and Practitioners advocated that understandability aspect of software is
highly desirable and significant for developing quality software. Literature survey
reveals that there are various aspects of software, including understandability factor
that either directly or indirectly influence testability of software [6], [7], [15].
Aforementioned facts reveal that understandability is a key factor to testability.
Complexity
The extent to understand and comprehend the internal and external structure of
classes and their relationships at a level of difficulty
Adaptability
https://www.researchgate.net/publication/228668019_Adaptability_Evaluation_at_Software_Architectu
re_Level