SEN Important Question: 1) Describe The Layered Technology Approach of Software Engineering
SEN Important Question: 1) Describe The Layered Technology Approach of Software Engineering
SEN Important Question: 1) Describe The Layered Technology Approach of Software Engineering
Chapter 1
A quality focus:
Software engineering is a layered technology. Referring to the figure, any engineering
approach (including software engineering) must rest on an organizational commitment to
quality. The bedrock that supports software engineering is a quality focus.
Process:
The foundation for software engineering is the process layer. The software engineering
process is the glue that holds the technology layers together and enables rational and timely
development of computer software. Process defines a framework that must be established
for effective delivery of software engineering technology.
The software process forms the basis for management control of software projects and
establishes the context in which technical methods are applied, work products (models,
documents, data, reports, forms, etc.) are produced, milestones are established, quality is
ensured, and change is properly managed.
Methods:
Software engineering methods provide the technical how-to’s for building software.
Methods encompass a broad array of tasks that include communication, requirements
analysis, design modeling, program construction, testing, and support. Software engineering
methods rely on a set of basic principles that govern each area of the technology and include
modeling activities and other descriptive techniques.
Tools:
Software engineering tools provide automated or semi-automated support for the process
and the methods. When tools are integrated so that information created by one tool can be
used by another, a system for the support of software development, called computer-aided
software engineering, is established.
2) Explain the basic process framework activities
A process framework establishes the foundation for a complete
software process by identifying a small number of framework
activities that are applicable to all software projects, regardless of
their size or complexity.
In fig each framework activity is populated by a set of software
engineering actions. A collection of related tasks that produces a
major software engineering work product.
Each action in process framework is populated with individual work
tasks that accomplish some part of the work implied by the action.
1. Communication:
Communication framework activity involves heavy
communication and collaboration with the customer,
encompasses requirements gathering, data gathering and other
related activities.
2. Planning:
Planning activity establishes a plan for software engineering work
that follows. Planning describes the technical tasks to be
conducted, the resources that will be required, schedule, and the
risks that are likely in the work products to be produced.
3. Modeling:
Modeling activity encompasses the creation of models that allow
the developer and the customer to better understand software
requirements specifications and the design that will achieve those
requirements.
There are two types of modeling i.e. analysis modeling and design
modeling.
4. Construction:
Construction activity combines code generation and the testing.
5. Deployment:
The software is delivered to the customers who evaluates the
delivered product and provides feedback based on the evaluation.
3) Explain waterfall model
The waterfall model, sometimes called the classic life cycle, suggests a systematic,
sequential approach6 to software development that begins with customer specification of
requirements and progresses through planning, modeling, construction, and deployment,
culminating in ongoing support of the completed software.
The RAD model approach is applicable, if the business application requirements are
modularized as function to be completed by individual teams and finally to integrate into a
complete system.
As such compared to waterfall model the team will be of larger size to function with proper
coordination.
Rapid application Development (RAD) is a modern software process model that emphasizes
a short development cycle. The RAD Model is a ―high-speed- adaptation of the waterfall
model, in which rapid development is achieved by using a component based construction
approach.
If requirements are well understood and project scope is considered, the RAD process
enables a development team to create a Fully Functional System within a very short period
of time (e.g. 60 to 90 days). One of the distinct features of RAD model is the possibility of
cross life cycle activities which will be assigned to teams, teams #1 to team #n leading to
each module getting developed almost simultaneously.
Advantages:
1. Changing requirements can be accommodated and progress can be measured.
2. Powerful RAD tools can reduce development time.
3. Productivity with small team in short development time and quick reviews risk control
increases reusability of components, better quality.
4. Risk of new approach only modularized systems are recommended through RAD.
5. Suitable for scalable component based systems.
Limitations:
1. RAD model success depends on strong technical team expertise and skills.
2. Highly skilled developers needed with modeling skills.
3. User involvement throughout life cycle. If developers & customers are not committed to
the rapid fire activities necessary to complete the System in a much-abbreviated time
frame, RAD projects will fail.
4. May not be appropriate for very large scale systems where the technical risks are high.
9) Types of software
System software
It is collection of programs written to service other programs. Some system software (e.g.,
compilers,
editors, and file management utilities) processes complex, but determinate, information
structures.
Other systems applications (e.g., operating system components, drivers, networking
software,
telecommunications processors) process largely indeterminate data.
Application software
Stand-alone programs that solve a specific business need.
Applications in this area process business or technical data in a way that facilitates business
operations
or management/technical decision making
Engineering/scientific software
Applications range from astronomy to volcanology, from automotive stress analysis to
space shuttle
orbital dynamics, and from molecular biology to automated manufacturing
E.g.: CAD software.
Embedded software
Resides within a product or system and is used to implement and control features and
functions for the
end user and for the system itself.
Embedded software can perform limited functions (e.g., key pad control for a microwave
oven) or
provide significant function and control capability (e.g., digital functions in an automobile
such as fuel
control, dashboard displays, and braking systems).
E.g. Control buttons of washing machine.
Product-line software
Designed to provide a specific capability for use by many different customers.
Product-line software can focus on a limited marketplace (e.g., inventory control products)
or address
mass consumer markets (e.g., word processing, spreadsheets, computer graphics, multimedia,
entertainment, database management, and personal and business financial applications).
Web applications
Called “WebApps,” this network-centric software category spans a wide array of
applications.
In their simplest form, WebApps can be little more than a set of linked hypertext files that
present
information using text and limited graphics.
Artificial intelligence software
Makes use of non-numerical algorithms to solve complex problems that are not amenable to
computation or straightforward analysis.
Applications within this area include robotics, expert systems, pattern recognition (image
and voice),
artificial neural networks, theorem proving, and game playing
10) Failure curve for software
Definition of Software
Software is:
1. Instructions (computer programs) that when executed provide desired features, function,
and performance;
2. Data structures that enable the programs to adequately manipulate information, and
3. Descriptive information (documents) in both hard copy and virtual forms that describes
the operation and
use of the programs.
Characteristics of software
Software is developed or engineered; it is not manufactured in the classical sense.
The two activities (software development and hardware manufacturing) are fundamentally
different. In both activities, high quality is achieved through good design, but the
manufacturing phase for hardware
can introduce quality problems.
Software doesn’t “wear out.” But it does deteriorate!
Software is not susceptible to the environmental maladies that cause hardware to wear out. In
theory,
therefore, the failure rate curve for software should take the form of the “idealized curve”
shown in Figure
This seeming contradiction can best be explained by considering the actual curve in Figure
1.2. During its
life, software will undergo change. As changes are made, it is likely that errors will be
introduced, causing
the failure rate curve to spike as shown in the “actual curve” .Before the curve can return to
the original
steady-state failure rate, another change is requested, causing the curve to spike again.
Slowly, the
minimum failure rate level begins to rise—the software is deteriorating due to change.
Although the industry is moving toward component-based construction, most software
continues to
be custom built. Definition of Software
Software is:
1. Instructions (computer programs) that when executed provide desired features, function,
and performance;
2. Data structures that enable the programs to adequately manipulate information, and
3. Descriptive information (documents) in both hard copy and virtual forms that describes
the operation and
use of the programs.
Characteristics of software
Software is developed or engineered; it is not manufactured in the classical sense.
The two activities (software development and hardware manufacturing) are fundamentally
different. In
both activities, high quality is achieved through good design, but the manufacturing phase for
hardware
can introduce quality problems.
Software doesn’t “wear out.” But it does deteriorate!
Software is not susceptible to the environmental maladies that cause hardware to wear out. In
theory,
therefore, the failure rate curve for software should take the form of the “idealized curve”
shown in Figure
This seeming contradiction can best be explained by considering the actual curve in Figure
1.2. During its
life, software will undergo change. As changes are made, it is likely that errors will be
introduced, causing
the failure rate curve to spike as shown in the “actual curve” .Before the curve can return to
the original
steady-state failure rate, another change is requested, causing the curve to spike again.
Slowly, the
minimum failure rate level begins to rise—the software is deteriorating due to change.
Although the industry is moving toward component-based construction, most software
continues to
be custom built.
Chapter 2
1) Explain the core principles of software engineering in details
The First Principle: The Reason It All Exists
A software system exists for one reason: to provide value to its users. All decisions should
be made with this in mind.
Before specifying a system requirement, system functionality, before determining the
hardware platforms, first determine, whether it adds value to the system.
The Second Principle: KISS (Keep It Simple, Stupid!)
All design should be as simple as possible, but no simpler. This facilitates having a more
easily understood and easily maintained system.
It doesn’t mean that features should be discarded in the name of simplicity.
Simple also does not mean “quick and dirty.” In fact, it often takes a lot of thought and work
over multiple iterations to simplify.
The Third Principle: Maintain the Vision
A clear vision is essential to the success of a software project.
If you make compromise in the architectural vision of a software system, it will weaken and
will eventually break even the well-designed systems.
Having a powerful architect who can hold the vision helps to ensure a very successful
software project.
The Fourth Principle: What You Produce, Others Will Consume
Always specify, design, and implement by keeping in mind that someone else will have to
understand what you are doing.
The audience for any product of software development is potentially large.
Design (make design), keeping the implementers (programmers) in mind. Code (program)
with concern for those who will maintain and extend the system.
Someone may have to debug the code you write, and that makes them a user of your code.
The Fifth Principle: Be Open to the Future
A system with a long lifetime has more value.
True “industrial-strength” software systems must last for longer.
To do this successfully, these systems must be ready to adapt changes.
Always ask “what if,” and prepare for all possible answers by creating systems that solve the
general problem.
The Sixth Principle: Plan Ahead for Reuse
Reuse saves time and effort.
The reuse of code and designs has a major benefit of using object-oriented technologies.
Planning ahead for reuse reduces the cost and increases the value of both the reusable
components and the systems into which they are incorporated.
The Seventh principle: Think!
Placing clear, complete thought before action almost always produces better results.
When you think about something, you are more likely to do it right. You also gain knowledge
about how to do it right again.
If you do think about something and still do it wrong, it becomes a valuable experience.
2) Communication Principle
Principle 1 Listen:
Try to focus on the speaker‘s words, rather than formulating your response to those
words.
Ask for clarification if something is unclear, but avoid constant interruptions.
Never become contentious in your words or actions (e.g., rolling your eyes or shaking
your head) as a person is talking.
Principle 2 Prepare before you communicate:
Spend the time to understand the problem before you meet with others. If necessary,
perform some research to understand business domain.
If you have responsibility for conducting a meeting, prepare an agenda in advance of the
meeting.
Principle 3 someone should facilitate the activity:
Every communication meeting should have a leader (a facilitator)
(1) To keep the conversation moving in a productive direction,
(2) To mediate any conflict that does occur, and
(3) To ensure that other principles are followed.
Principle 4 Face-to-face communication is best:
It usually works better when some other representation of the relevant information is
present.
For example, a participant may create a drawing /document that serve as a focus for
discussion.
Principle 5 Take notes and document decisions:
Someone participating in the communication should serve as a recorder and write down
all important points and decisions.
Principle 6 Strive for collaboration:
Collaboration occurs when the collective knowledge of members of the team is used to
describe product or system functions or features.
Each small collaboration builds trust among team members and creates a common goal
for the team.
Principle 7 Stay focused; modularize your discussion:
The more people involved in any communication, the more likely that discussion will
bounce from one topic to the next.
The facilitator should keep the conversation modular; leaving one topic only after it has
been resolved.
Principle 8 if something is unclear, draw a picture:
Verbal communication goes only so far.
A sketch or drawing can often provide clarity when words fail to do the job.
Principle 9
(a) Once you agree to something, move on.
(b) If you can’t agree to something, move on.
(c) If a feature or function is unclear and cannot be clarified at the moment, move
on.
The people who participate in communication should recognize that many topics require
discussion and that moving on is sometimes the best way to achieve communication agility.
Principle 10 Negotiation is not a contest or a game: It works best when both parties win.
There are many instances in which you and other stakeholders must negotiate functions
and features, priorities, and delivery dates.
If the team has collaborated well, all parties have a common goal. Still, negotiation will
demand compromise from all parties.
3) Construction Principle
The construction activity encompasses a set of coding and testing tasks that lead to
operational software that is ready for delivery to the customer or end user.
Coding Principles
In modern software engineering work, coding may be
(1) The direct creation of programming language source code (e.g., Java),
(2) The automatic generation of source code using an intermediate design-like representation of
the component to be built (e.g. Microsoft front end where code is automatically generated), or
(3) The automatic generation of executable code using a “fourth-generation programming
language” (e.g., Visual C++).
Preparation principles: Before you write one line of code, be sure you
Understand of the problem you’re trying to solve.
Understand basic design principles and concepts.
Pick a programming language that meets the needs of the software to be built and the
environment in which it will operate.
Select a programming environment that provides tools that will make your work easier.
(E.g. TC, JRE etc.).
Create a set of unit tests that will be applied once the component you code is completed.
Validation Principles: After you’ve completed your first coding pass, be sure you
Conduct a code walkthrough when appropriate.
Perform unit tests and correct errors you’ve uncovered.
Refactor the code.
4) Deployment Principle
Principle 1: Customer expectations for the software must be managed.
Software engineer must be careful about sending the customer conflicting messages (e.g.,
promising more than you can reasonably deliver in the time frame provided or delivering
more than you promise for one software increment and then less than promised for the
next).
Principle 2: A complete delivery package should be assembled and tested.
A CD-ROM or other media (including Web-based downloads) containing all executable
software, support data files, support documents, and other relevant information should be
assembled and thoroughly beta-tested with actual users.
All installation scripts and other operational features should be thoroughly exercised.
Principle 3: A support regime must be established before the software is delivered.
When a problem or question arises at end user’s side, he/she expects responsiveness and
accurate information. If support is ad hoc or nonexistent, the customer will become
dissatisfied immediately. Support should be planned, support materials should be
prepared, and appropriate recordkeeping mechanisms should be established so that the
software team can conduct an assessment of the kinds of support requested.
Principle 4: Appropriate instructional materials must be provided to end users.
The software team delivers more than the software itself.
Appropriate training aids (if required) should be developed; troubleshooting guidelines
should be provided
Principle 5: Buggy software should be fixed first, delivered later.
Under time pressure, some software organizations deliver low-quality increments with a
warning to the customer that bugs “will be fixed in the next release.” Customer gets
disappointed by this.
Hence it is necessary to fix the bug before the product is delivered to the customer.
5) Requirements engineering task
Need/Importance of SRS:
It establishes the basis for agreement between the customers and the suppliers on what the
software product is to do.
The complete description of the functions performed by the software specified in the SRS will
assist the users to determine if the software meets their needs.
Reduces the development effort.
The preparation of the SRS forces the concerned groups to consider all of the requirements before
design begins and reduces later redesign, recoding, and retesting.
Provide a basis for estimating cost and schedules.
The description of the product to be developed given in SRS is a realistic basis for estimating
project costs and prices.
Provide a baseline for verification and validation.
Organizations can develop their validation and verification plans much more productively from a
good SRS.
Facilitate Transfer.
The SRS makes it easier to transfer the software product to new users or new machines.
Serve as basis for enhancement.
Because the SRS discusses the product but not just the project that is developed, the SRS serves
as a basis for later enhancement of the finished product.
Chapter 3
Software design sits at the technical kernel of software engineering and is applied
regardless of the software process model that is used. Beginning once software
requirements have been analyzed and specified, software design is the first of three
technical activities—design, code generation, and test—that are required to build and
verify the software. Each activity transforms information in a manner that ultimately
results in validated computer software. Each of the elements of the analysis model
provides information that is necessary to create the four design models required for a
complete specification of design.
The flow of information during software design is illustrated in above figure. Software
requirements, manifested by the data, functional, and behavioral models, feed the design
task. Using one of a number of design methods, the design task produces a data design, an
architectural design, an interface design, and a component design.
The data design transforms the information domain model created during analysis into the
data structures that will be required to implement the software. The data objects and
relationships defined in the entity relationship diagram and the detailed data content
depicted in the data dictionary provide the basis for the data design activity. Part of data
design may occur in conjunction with the design of software architecture. More detailed
data design occurs as each software component is designed. The architectural design
defines the relationship between major structural elements of the software, the ―design
patterns‖ that can be used to achieve the requirements that have been defined for the
system, and the constraints that affect the way in which architectural design patterns can
be applied The architectural design representation the framework of a computer-based
system—can be derived from the system specification, the analysis model, and the
interaction of subsystems defined within the analysis model. The interface design
describes how the software communicates within itself, with systems that interoperate with
it, and with humans who use it. An interface implies a flow of information (e.g., data
and/or control) and a specific type of behavior. Therefore, data and control flow diagrams
provide much of the information required for interface design. The component-level
design transforms structural elements of the software architecture into a procedural
description of software components. Information obtained from the PSPEC, CSPEC, and
STD serve as the basis for component design.
Chapter 4
(a) Unit Testing is a level of the software testing process where individual units/components of a
software/system are tested.
(b) The purpose is to validate that each unit of the software performs as designed.
Recovery testing:
Is a system test that forces the software to fail in a variety of ways and verifies that recovery is
properly performed.
If recovery is automatic, re-initialization check pointing mechanisms/ data recovery and restart are
evaluated for correctness.
If recovery requires human intervention, the mean time to repair is evaluated to determine
whether it
is within acceptable limits
Security testing:
It verifies that protection mechanisms built into a system will in fact protect it from proper
penetration.
Stress testing:
It executes a system in a manner that demands resources in abnormal quantity frequency of
volume.
Performance testing:
It is designed to test the run time performance of software within the context of an
integrated system.
Software project scheduling is an activity that distributes estimated effort across the
planned
project duration by allocating the effort to specific software engineering tasks. It is
important to note, however, that the schedule evolves over time. During early stages of
project planning, a
macroscopic schedule is developed. This type of schedule identifies all major software
engineering activities and the product functions to which they are applied. As the project
gets
under way, each entry on the macroscopic schedule is refined into a detailed schedule.
Here,
specific software tasks (required to accomplish an activity) are identified and scheduled.
4) Types of risk ?
5) Risk refinement
During early stages of project planning, a risk may be stated quite generally. As time passes
and
more is learned about the project and the risk, it may be possible to refine the risk into a set
of
more detailed risks, each somewhat easier to mitigate, monitor, and manage. One way to
do this
is to represent the risk in condition-transition-consequence (CTC) format. That is, the risk is
stated
in the following form: Given that <condition> then there is concern that (possibly)
<consequence>. Using the CTC format for the reuse risk one could write:
Given that all reusable software components must conform to specific design standards and
that
some do not conform, then there is concern that (possibly) only 70 percent of the planned
reusable modules may actually be integrated into the as-built system, resulting in the need
to
custom engineer the remaining 30 percent of components. This general condition can be
refined
in the following manner:
Version Control
Combines procedures and tools to manage the different versions of configuration objects
created during the software process
An entity is composed of objects at the same revision level
A variant is a different set of objects at the same revision level and coexists with other
variants
A new version is defined when major changes have been made to one or more objects
Change Control
Change request is submitted and evaluated to assess technical merit and impact on the
other configuration objects and budget
Change report contains the results of the evaluation
Change control authority (CCA) makes the final decision on the status and priority of the
change based on the change report.
The People
The people factor is so important that the Software Engineering Institute has developed a
people management capability maturity model (PM-CMM), to enhance the readiness of
software organizations to undertake increasingly complex applications by helping to attract,
grow, motivate, deploy, and retain the talent needed to improve their software development
capability. The people management maturity model defines the following key practice areas
for software people: recruiting, selection, performance management, training, compensation,
career development, organization and work design, and team/culture development.
Organizations that achieve high levels of maturity in the people management area have a
higher likelihood of implementing effective software engineering practices. The PM-CMM
is a companion to the software capability maturity model that guides organizations in the
creation of a mature software process.
Following are the various categories of people associated with the project.
The Stakeholders: - This include Senior managers, Project (technical) managers,
Practitioners,
Customers, End user
Team Leaders: - Leaders of various teams associated with the project
The Software Team: - Entire software team
Agile Teams: - Temporary teams associated with software
Coordination and Communication Issues
Chapter 6
1) What are SQA activities
SQA activities
These activities are performed (or facilitated) by an independent SQA group that:
1. Prepares an SQA plan for a project.
The plan identifies evaluations to be performed, audits and reviews to be conducted,
standards that
are applicable to the project, procedures for error reporting and tracking, work products that
are
produced by the SQA group, and feedback that will be provided to the software team.
2. Participates in the development of the project’s software process description.
The software team selects a process for the work to be performed. The SQA group reviews
the
process description for compliance with organizational policy, internal software standards,
externally
imposed standards
3. Reviews software engineering activities to verify compliance with the defined
software process.
The SQA group identifies, documents, and tracks deviations from the process and verifies
that
corrections have been made.
4. Audits designated software work products to verify compliance with those defined as
part of
the software process.
The SQA group reviews selected work products; identifies, documents, and tracks deviations;
verifies
that corrections have been made; and periodically reports the results of its work to the project
manager.
5. Ensures that deviations in software work and work products are documented and
handled
according to a documented procedure.
Deviations may be encountered in the project plan, process description, applicable standards,
or
software engineering work products.
6. Records any noncompliance and reports to senior management.
Noncompliance items are tracked until they are resolved.
2) Explain DMAIC and DMADV of six sigma strategy.
DMAIC
The DMAIC project methodology has five phases:
Define the system, the voice of the customer and their requirements, and the project goals,
specifically.
Measure key aspects of the current process and collect relevant data.
Analyze the data to investigate and verify cause-and-effect relationships. Determine what
the relationships are, and attempt to ensure that all factors have been considered. Seek out
root cause of the defect under investigation.
Improve or optimize the current process based upon data analysis using techniques such as
design of experiments or mistake proofing, and standard work to create a new, future state
process. Set up pilot runs to establish process capability. Control the future state process to
ensure that any deviations from target are corrected before they result in defects.
Implement control systems such as statistical process control, production boards, visual
workplaces, and continuously monitor the process.
Some organizations add a Recognize step at the beginning, which is to recognize the right
problem to work on, thus yielding an RDMAIC methodology.
DMADV or DFSS
The DMADV project methodology, known as DFSS ("Design For Six Sigma"), features
five phases:
Define design goals that are consistent with customer demands and the enterprise strategy.
Measure and identify CTQs (characteristics that are Critical To Quality), product
capabilities, production process capability, and risks.
Analyze to develop and design alternatives
Design an improved alternative, best suited per analysis in the previous step
Verify the design, set up pilot runs, implement the production process and hand it over to
the process owner(s).
McCall’s software quality factors, shown in figure above, focus on three important aspects
of a
software product:
o its operational characteristics,
o its ability to undergo change,
o its adaptability to new environments.
The factors/attributes include:
o Correctness: The extent to which a program satisfies its specification and fulfills the
customer’s
mission objectives.
o Reliability: The extent to which a program can be expected to perform its intended
function with
required precision
o Efficiency: The amount of computing resources and code required by a program to
perform its
function.
o Integrity: Extent to which access to software or data by unauthorized persons can be
controlled.
o Usability: Effort required to learn, operate, prepare input for, and interpret
o Maintainability: Effort required to locate and fix an error in a program.
o Flexibility: Effort required to modify an operational program.
o Testability: Effort required to test a program to ensure that it performs its intended
function.
o Portability: Effort required to transfer the program from one hardware and/or software
system
environment to another.
o Reusability: Extent to which a program [or parts of a program] can be reused in other
applications—related to the packaging and scope of the functions that the program performs.
o Interoperability: Effort required to couple one system to another.
5) Explain CMMI with neat diagram
Capability Maturity Model Integration (CMMI) is a process improvement approach that helps
organizations improves their performance.
CMMI (Capability Maturity Model Integration) is a proven industry framework to improve product
quality and development efficiency for both hardware and software
Objectives of CMMI:
Specific Objectives
a. Establish Estimates
b. Develop a Project Plan
c. Obtain Commitment to the Plan
Generic Objectives:
a. Achieve Specific Goals
b. Institutionalize a Managed Process
c. Institutionalize a Defined Process
d. Institutionalize a Quantitatively Managed Process
e. Institutionalize an Optimizing Process
CMMI maturity levels:
Level 1: Initial. The software process is characterized as ad hoc and occasionally even
chaotic. Few processes are defined, and success depends on individual effort.
Level 2: Repeatable. Basic project management processes are established to track cost,
schedule, and functionality. The necessary process discipline is in place to repeat earlier
successes on projects with similar applications.
Level 3: Defined. The software process for both management and engineering activities is
documented, standardized, and integrated into an organization wide software process. All
projects use a documented and approved version of the organization's process for developing
and supporting software. This level includes all characteristics defined for level
Level 4: Managed. Detailed measures of the software process and product quality are
collected. Both the software process and products are quantitatively understood and controlled
using detailed measures. This level includes all characteristics defined for level
Level 5: Optimizing. Continuous process improvement is enabled by quantitative feedback
from the process and from testing innovative ideas and technologies. This level includes all
characteristics defined for level 4.