goal of software engineering
The goal of software engineering is to produce high-quality programs.
Software engineering qualities
This topic is about the qualities in the software engineering domain. The goal of software engineering is to produce high quality program. Then the development process
itself has to meet certain quality requirements. The stakeholders are interested in different qualities. For example, the end user wants the software to be fast, robust, and easy to use. However, the developer wants the software to be maintainable, reusable, and portable. Lastly, the manager wants the process
to be productive and easy to use. As you can see, we have different qualities here in this slide. Efficiency, robustness, user friendliness, maintainability, portability,
reusability, and productivity. The required qualities depend on the application you are developing. For example, if you are developing again,
then the response time
is an important quality
as this application relies
heavily on user interactions. Now, if you are developing a distributed system, then portability is a very important quality.
Another example is financial system, like a banking system, where security is extremely important. It seems, according to software engineering findings,
performance, safety,
and maintainability are
the most expensive qualities to achieve.
The software engineering qualities are divided into two main categories,
software qualities and process qualities. We have qualities for the software, for example, performance, and qualities for the process, for example, productivity. Regarding the software, we split the qualities into external and internal groups. External qualities are visible to the end users, that means they can be verified during run time. Internal qualities concern the developer.
We have one metric
defined for both the process and software,
which is the usability as seen previously. We have internal software qualities
which concern the developer. We have external software qualities
which concerns the end user. We also have qualities
for the process which concerns the manager.
12 qualities
correctness: also called functional accuracy. A program is correct if it
captures exactly the functional requirements. any deviation from the functional requirement list
will make the program incorrect. We evaluate correctness when we are running and testing the program. We can improve the correctness by using well defined components,
including algorithms, and commercial of the shelf,
which are usable components that have been developed for
specific application domains. All these reusable components were well designed, well implemented, and well tested. We can trust them and reuse them in our programs.
Reusability - new programs are usually produced by
composing existing software component. It was estimated that over 80% of
code was obtained by using available component. We can increase the code usability by using object oriented paradigms such
as metaization and inheritance. By developing
libraries for programming languages. By developing the commercial of the shelf that we can reuse large number of projects. No wasting time to design and implement from Scrash, we just reuse those well defined pieces of code by implementing graphical user interfaces that development can reuse in the programs. As graphical user interfaces are difficult to design and implement, reusability is an important tool for reducing the development time. Of course, reuse is less expensive and faster than developing from crash.
But at the same time,
implementing the composition of multiple component, it’s not straightforward. Reusability doesn’t happen only at the code level, but also at other documents such as specifications, architectures,
design patterns, and test cases. Reusability is a quality of the software,
but also of the process,
which means we can only use an existing process model or an existing design methodology for a similar project.
Portability: A software is portable if it can be transferred from one environment to another
with a minimum effort.
Environment is defined in
terms of the processor.
The main processor companies are Intel for PC, AMD, Sun. Hp environment is defined also in terms of
the operating system such as Windows, Linux Solar,
and the mobile operating systems such as Android and I. One way to increase
the code portability is to use the Java language,
because this language can generate the byte code which can run on an ECPU.
Today, we are trying to beat
compilers of programming languages to generate the Java byte code so that your program is portable.
maintainability: A software or a program is maintainable if it is easy to
modify existing functionality and qualities
extend with new features and adapt to new environments and technologies. The changes are done with a limited amount of work. We have seen previously that maintainability is
supported thanks to the software architecture styles. For example, the three layer architecture.
The design patterns that are used in the low level design and design principles such as loose capling, strong cohesion,
information hiding, and abstraction. The job of a manager is to increase the productivity of the process.
Productivity: quality of
the process which measures the efficiency in terms of low budget and short timeliness. We can increase the productivity
by using the case tools to assist the developers in
their task to automate some development activity.
For example, code generation from the design specification document.
Timeliness: quality of the process, which means the ability to deliver a product on time. Or another definition is that we have enough good result when the software is needed.
We have seen in topic number one that the lack of timeliness led to the birth of software engineering. It is a very important quality
because software are always late. Timeliness requires an accurate scheduling and planning.
However, it is difficult to achieve because of
changing requirement and other risk. However, we can use the incremental delivery of software to achieve this quality
visibility: also called transparency. Most managers are not aware of
the exact status of the project because the process is not visible.
A process is visible if all its phases are clearly documented, available, and as accessible for examination. The manager needs well defined document to be able to monitor and evaluate the progress of the project.
There are other four important qualities. Four, tolerance is the ability of a software to continue working even when some process has failed. Scalability is the ability of
a software to handle a large volume of data. Or another definition is the ability to handle a large number of users. Throughput measures the number of statement a software can process in a given time period. Lastly, the interoperability is
the ability of a system to work and interact with other systems.
Key software quality in each application area:
Information Systems;
Real-time Systems;
Critical Systems; Distributed Systems; Embedded Systems
Information Systems;
The role of these systems is to store a vast amount of information of any type,
including complex data,
like for example, multimedia data. With the information system, we manage information
including their organization, their retrieval, and their maintenance.
Information systems serve many users with different roles. Databases are an example of information systems where information are organized in the form of tables. It provided here three examples of information systems.
We have the Enterprise
Information Systems to manage the external and internal information across the whole organization.
The second example are
the geographical information systems, known as GIS, to manage all types of geographical data like maps. We have also expert systems that are designed to solve complex problems.
Gradually by following the expertise of users. We have three important qualities
of information systems integrity, security and availability of information.
We have already discussed data security. Since data access is open through the Internet, managing data security has become a very challenging task. We need to protect data from accidental or intentional threats. All part of the system must be secured.
The information system itself, the network, the operating system, and
also the building in which
the IS server resides.
We have several ways to increase the data security through authentication,
authorization, encryption,
cryptography, and biometric technologies.
Data integrity means that data must provide accurate information and must
reflect the true state of the application. We can achieve data integrity by implementing control functions that accept only the permissible values of
data regarding the last quality data availability,
which means data are
accessible and available anytime. To this end, we can provide facilities such as copying the entire information system
and recording all the
transactions and updates.
Real time systems
Real time systems must respond to event within a predefined time constraint.
Indeed, the response time
must be at the right time.
Well, a response that comes too early may be as
incorrect as a response that comes too late. The real time system should process the real time event by making decisions without human interaction.
It is clear that the most important quality for those systems are time efficiency.
Example of real time systems are factory automation, surveillance systems, patient monitoring, defense systems, games. We have many other examples.
I provided here two examples of real time systems. The first one is about real time operating systems. For example, in Windows, clicking the mouse is your real time event. Windows can react in two different ways to the mouse click, the selection of the file, or the opening of the file. How Windows will decide is by measuring the length of time between the two clicks. The second example is about the factory monitoring system.
The system should respond to the temperature increase by sitting some switches or sounding an alarm. The reaction should be done in less than 2 secs.
Critical systems
Critical systems have a direct impact on the human life or the environment or the economy. Example of such systems are business systems, financial systems,
telecommunication systems, electricity generation, and dist systems, and so on. One subset of critical systems are called Safety Critical System because their malfunction may cause
harm directly to people.
Examples, airplane navigation, air traffic control, medical equipment, fire alarm, robotic surgery, amusement rides, X ray machines, airbag deployment, and so on.
It is clear that the most important quality for critical systems are safety.
distributed systems
Today, software systems are deployed on hundreds of servers. The different parts of the software are distributed on a platform where servers may have
different computer architectures and operating systems. Those part or subsystem are usually performed in parallel.
Thanks to the multi
thread programming and network technology we distributed system we can
improve greatly the performance, fort tolerance, and scalability of software system. The first distributed system is the client server model, which is a two tier architecture where the client submits
a request remotely to the server and the server provides the service to the client. Here, the most important quality for
distributed systems are portability.