220 likes | 266 Views
SOFTWARE ENGINEERING “SOFTWARE PRODUCT QUALITY”. Today: - Software quality - Quality Components - ”Good” software properties. SOFTWARE ENGINEERING SOFTWARE QUALITY. Today we talk about quality - but what is quality? ”Suitable” ”Fulfills requirements” ”Customer is satisfied”
E N D
SOFTWARE ENGINEERING “SOFTWARE PRODUCT QUALITY” • Today:- Software quality - Quality Components - ”Good” software properties
SOFTWARE ENGINEERINGSOFTWARE QUALITY • Today we talk about quality - but what is quality? • ”Suitable” • ”Fulfills requirements” • ”Customer is satisfied” • ”Other attributes than price” • ”Superiority, excellence” • ”Has required and expected features” • It seems difficult to find a ”perfect” single definition.
SOFTWARE QUALITY -QUALITY COMPONENTS • Objective quality component: properties that can be measured or approximated objectively • Subjective quality component: customer satisfaction (”What does the product feel like?”) • Other: features which can not be (even subjectively) evaluated at the time. This is related with future events which can not be predicted - unexpected circumstances, changes, etc.
SOFTWARE PROPERTIES -EXTERNAL AND INTERNAL • External properties are the ones that are visible to the users. • Internal properties are the ones the ones that are visible to the software developers. • Users are (understandably) primarily interested in the external properties. • The internal properties are used to achieve the external ones.
SOFTWARE QUALITIES -PRODUCT AND PROCESS • Product quality - the quality of the software product (including user and technical documentation). • Process quality - the quality of the software engineering process used to produce the product. • Users are (understandably) primarily interested in the product qualities. • The process qualities are used to achieve the product ones.
QUALITY COMPONENTS - Correctness • A program is functionally correct if it behaves according to the functional specifications. • The functional specifications may not always be available. • The functional specification may be very informal. • The functional specifications may contain ambiguities. • Sometimes it is evident what is expected - is it fair to compare the software with general expectations or its own help? • Do we assume that the specifications are correct?
QUALITY COMPONENTS - Reliability • A program is reliable, if the user can rely on the software. • For reliability, the statistical approach could be used: What is the probability that the software fails with a given task? • The program may be reliable in a user’s point of view even if it is not correct.
QUALITY COMPONENTS - Robustness • A program is robust, if it behaves reasonably (?) well even in unexpected circumstances - i.e. it tolerates unexpected difficulties. • Dealing with errors? E.g. program input is often different from what is expected. • The program may be reliable in a user’s point of view even if it is not correct. • A crucial property in some applications.
QUALITY COMPONENTS - Performance • Performance = efficiency. • Efficiency: memory management, disk management, CPU usage, ... • Asymptotic behaviour: what happens when inputs grow larger? • Transaction processing systems:- Throughput = how many transactions can be processed in a given time slice (average or min)- Response time = the time (max or average) needed to process a transaction.
QUALITY COMPONENTS - User friendliness • A software system is user friendly if the users find it easy to use. • A subjective quality. • Incorrect, inefficient, and unreliable systems are not very user friendly. • A non-robust system may be user friendly.
QUALITY COMPONENTS - Verifiability • A software system is verifiable, if its properties can be verified easily. • The software properties can be verified using testing or formal analysis.
QUALITY COMPONENTS - Maintainability • A software system is maintainable, if it is easy to maintain. • Corrective maintenance - removing errors (repairability) • Adaptive maintenance - adapting the software to new or changing environments (evolvability). • Perfective maintenance - improving other software qualities (evolvability).
QUALITY COMPONENTS - Evolvability • A software system is evolvable, if it is easy to add new functions or change old ones. • Adding new functions or changing the old ones usually ”eats up” some of the evolvability - after the change the software is usually less evolvable.
QUALITY COMPONENTS - Reusability • A software system is reusable, if it can be used to produce another software system. • Reusability is rare in practice. • In addition to the program code, also other parts of the software product, such as designs and documentation, can be reusable.
QUALITY COMPONENTS - Portability • A software system is portable, if it can be run (or it can be made to run) in different environments. • Portability across different hardware architectures. • Portability across different operating systems. • Portability across different hardware configurations.
QUALITY COMPONENTS - Understandability • How easy is it to understand the system’s structure and how it works? • Some tasks are more complex: it is easier to understand an ordinary text editor than an operating system. • There is internal and external understandability.
QUALITY COMPONENTS - Interoperability • is the ability to co-operate with other systems. • Exchange of data using data files. • Exchange of data using some kind of a clipboard. • Exchange of data using network. • Standard interfaces • Open system - open interfaces
QUALITY COMPONENTS - Productivity • The efficiency of the software production process (internal). • Huge differences between teams and individuals (starting from the fact that some teams or individuals may not be able to complete some tasks at all). • In producing new software one individual can easily be 2-4 times more productive than another. • In maintaining old software one individual can in extreme cases be 20-40 (or even more) times more productive than another.
QUALITY COMPONENTS - Timeliness • The ability to deliver a product in time. • Does not happen too often. • Result: Alpha versions, Beta versions, ”Early pre-prototype test versions”, ... • Which is better: to deliver a defective product in time orto deliver a better product late?(Ok, this depends on the situation.)
QUALITY COMPONENTS - Visibility • The software development process is visible, if it is easy to see what has been done and what has happened. • If all know what the state of the process is, it is easier to know when to do what. • When personnel changes (and in long projects it does), visibility is very valuable.
Correctness Reliability Robustness Performance User Friendliness Verifiability Maintainability Reusability Portability Understandability Interoperability Productivity Timeliness Visibility QUALITY COMPONENTS