1/95
Looks like no tags are added yet.
Name | Mastery | Learn | Test | Matching | Spaced |
---|
No study sessions yet.
SOFTWARE
Computer programs and associated documentation
Software products
may be developed for a particular customer or may be developed for a general market
Generic
developed to be sold to a range of different customers
Bespoke
developed for a single customer according to their specification
Software engineering
is an engineering discipline which is concerned with all aspects of software production
System engineering
concerned with all aspects of computer-based systems development including: hardware, software , and process engineering
Software Process
A set of activities whose goal is the development or evolution of software
Specification
what the system should do and its development constraints
Development
production of the software system
Validation
checking that the software is what the customer wants
Evolution
changing the software in response to changing demands
Software Process Model
A simplified representation of a software process, presented from a specific perspective
CASE
Computer-Aided Software Engineering
CASE
Software systems which are intended to provide automated support for software process activities, such as requirements analysis, system modelling, debugging and testing
Upper-CASE
Tools to support the early process activities of requirements and design
Lower-CASE
Tools to support later activities such as programming, debugging and testing
Maintainability
Software must evolve to meet changing needs
Dependability
Software must be trustworthy
Efficiency
Software should not make wasteful use of system resources
Usability
Software must be usable by the users for which it was designed
Legacy systems
Old, valuable systems must be maintained and updated
Heterogeneity
Systems are distributed and include a mix of hardware and software
Delivery
There is increasing pressure for faster delivery of software
Software
is built to meet a certain functional goal and satisfy certain qualities
Software engineering (SE)
is an intellectual activity and thus human-intensive
Software qualities
sometimes referred to as “ilities”
Intangible
difficult to describe and evaluate
Intangible
something that can be touched or felt. (hardware)
Malleable
easily influenced or controlled by other people. (software)
Human Intensive
needs a lot of people to do the work involved. (peopleware)
Maintainability
How easily the software can be maintained, modified, or extended without introducing errors. This includes aspects like code readability, modularity, and documentation.
Flexibility
The ability of the software to adapt to changing requirements or environments without extensive modifications. This often relates to the architecture and design choices made during development.
Scalability
The ability of the software to handle increasing amounts of work or users without sacrificing performance. Scalability is often a concern for large-scale systems.
Performance
How efficiently the software executes its tasks, including factors like speed, responsiveness, and resource utilization
Reliability
The degree to which the software performs its intended functions consistently and accurately under varying conditions.
Security
The measures taken to protect the software from unauthorized access, data breaches, and other security threats.
Testability
How easily the software can be tested to ensure that it behaves as expected and meets its requirements. This includes aspects like the presence of automated tests and the ease of setting up test environments.
Usability
The ease with which users can interact with the software to achieve their goals. This includes factors like intuitiveness, learnability, and efficiency of use.
Accessibility
The degree to which the software can be used by people with disabilities, including considerations for factors like screen readers, keyboard navigation, and color contrast.
Performance
While performance is also an internal quality, it's worth mentioning here as it directly affects the user experience. External performance refers to how responsive and fast the software feels to users.
Reliability
Similarly, external reliability relates to how consistently the software performs for end-users, without crashes, errors, or unexpected behavior
Compatibility
The ability of the software to work seamlessly with other systems, platforms, or devices, ensuring a smooth experience for users regardless of their environment.
Portability
How easily the software can be transferred or deployed across different environments, platforms, or devices, without significant modifications.
Aesthetics
The visual design and appeal of the software, including aspects like layout, typography, color scheme, and graphical elements.
Functional Requirements
Software correctness starts with meeting its functional requirements.
Functional Requirements
These are the specific behaviors and capabilities that the software is supposed to exhibit.
Functional Requirements
Ensuring that the software accurately implements these requirements is fundamental to its correctness.
Validation and Verification
Both processes involve testing the software through various methods such as unit testing, integration testing, system testing, and acceptance testing to identify and correct errors.
Boundary and Error Handling
Correct software should handle both normal and exceptional conditions effectively. It should gracefully handle boundary cases and edge conditions without crashing or producing incorrect results. Proper error handling ensures that unexpected inputs or situations are managed appropriately, preventing the software from entering an inconsistent or erroneous state
Consistency and Data Integrity
Software correctness also involves maintaining consistency and integrity of data throughout its lifecycle.
Consistency and Data Integrity
This includes proper handling of data validation, storage, retrieval, and manipulation to ensure that data remains accurate and reliable.
Concurrency and Multithreading
In multi-threaded or concurrent systems, correctness involves ensuring that shared resources are accessed and modified safely and that race conditions, deadlocks, and other concurrency-related issues are avoided or mitigated effectively
Regression Testing
As software evolves through updates and enhancements, it's essential to conduct regression testing to ensure that existing functionality remains correct after changes are made.
Regression Testing
helps detect unintended side effects or regressions introduced by new code.
Documentation and Compliance
Comprehensive documentation helps ensure that developers, testers, and other stakeholders have a clear understanding of the software's intended behavior and how it should be used. Compliance with relevant standards, regulations, and best practices also contributes to the correctness of software, particularly in safety-critical or regulated domains.
Reliability
can be defined mathematically as “probability of absence of failures for a certain time period”
Robustness
refers to its ability to remain stable and functional even under unfavorable conditions, such as unexpected inputs, errors, or adverse environments.
Robustness
software behaves “reasonably” even in unforeseen circumstances (e.g., incorrect input, hardware failure)
Error Handling
Robust software includes comprehensive error handling mechanisms to detect and manage unexpected situations.
Error Handling
This involves catching errors, exceptions, or faults and responding to them appropriately, such as logging the error, providing informative error messages, and taking corrective actions to recover from the error state.
Input Validation
Robust software validates input data to ensure that it meets expected criteria and does not cause unexpected behavior or vulnerabilities.
Input Validation
This includes checking for data type mismatches, boundary conditions, format compliance, and potential security risks such as injection attacks or buffer overflows.
Graceful Degradation
Robust software gracefully handles degradation in performance or functionality under adverse conditions, such as high load, network failures, or resource constraints.
Graceful Degradation
It may prioritize critical operations, throttle requests, or provide alternative functionality to maintain essential services even in degraded states.
Resilience to External Dependencies
Software often relies on external dependencies such as libraries, APIs, or services.
Resilience to External Dependencies
Robust software minimizes the impact of failures or changes in these dependencies by implementing fallback mechanisms, retry strategies, caching, or alternative providers to maintain continuity of operation.
Security Measures
Robust software incorporates security measures to protect against malicious attacks, unauthorized access, and data breaches.
Security Measures
This includes implementing encryption, access controls, authentication mechanisms, and security patches to mitigate vulnerabilities and threats.
Concurrency and Multithreading
In concurrent or multi-threaded systems, robustness involves managing shared resources and synchronization effectively to prevent race conditions, deadlocks, and other concurrency-related issues.
Concurrency and Multithreading
Proper thread management, locking strategies, and synchronization primitives help maintain system integrity and stability.
Fault Tolerance
Robust software designs include provisions for fault tolerance, allowing the system to continue functioning even in the presence of hardware failures, software bugs, or other faults.
Fault Tolerance
This may involve redundancy, replication, failover mechanisms, and distributed architectures to ensure uninterrupted operation and data integrity.
Testing and Quality Assurance
Robust software undergoes rigorous testing and quality assurance processes to identify and address vulnerabilities, bugs, and edge cases that could compromise its stability and functionality.
Testing and Quality Assurance
This includes unit testing, integration testing, system testing, and user acceptance testing to validate robustness across different levels and scenarios.
Usability
Expected users find the system easy to use
Usability
Rather subjective, difficult to evaluate
Usability
Affected mostly by user interface
Verifiability
How easy it is to verify properties
Maintainability
Can be decomposed as – Repairability and Evolvability
Repairability
ability to correct defects in reasonable time
Evolvability
ability to adapt sw to environment changes and to improve it in reasonable time
Reusability
Existing product (or components) used (with minor modifications) to build another product
Portability
Software can run on different hw platforms or sw environments
Portability
Remains relevant as new platforms and environments are introduced (e.g. digital assistants)
Portability
Relevant when downloading software in a heterogeneous network environment
Interoperability
Ability of a system to coexist and cooperate with other systems
Productivity
denotes its efficiency and performance
Timeliness
ability to deliver a product on time
Visibility
all of its steps and current status are documented clearly
Timeliness
Often the development process does not follow the evolution of user requirements
Timeliness
A mismatch occurs between user requirements and status of the product