Analysis, Design Concepts and Principles -Module3[1]
Analysis, Design Concepts and Principles -Module3[1]
SYSTEMS ENGINEERING
The term ‘system’ is one that is universally used. We talk about computer systems, operating systems,
payment systems, the education system, the system of government, and so on. These are all obviously
quite different uses of the word ‘system’, although they share the characteristic that, somehow, the
system is more than simply the sum of its parts. Abstract systems, such as the system of government,
are outside the scope. Rather, focus on systems that include computers and that have some specific
purpose such as to enable communication, support navigation, or compute salaries. A useful working
definition of these types of systems is as follows:
A system is a purposeful collection of interrelated components, of different kinds, which work together
to achieve some objective
Systems engineering encompasses all of the activities involved in procuring, specifying, designing,
implementing, validating, deploying, operating, and maintaining sociotechnical systems. Systems
engineers are not just concerned with software but also with hardware and the system’s interactions
with users and its environment. They must think about the services that the system provides, the
constraints under which the system must be built and operated, and the ways in which the system is
used to fulfil its purpose or purposes.
1. Procurement or acquisition During this stage, the purpose of a system is decided; high-level
system requirements are established; decisions are made on how functionality will be
distributed across hardware, software, and people; and the components that will make up the
system are purchased.
2. Development During this stage, the system is developed. Development processes include all of
the activities involved in system development such as requirements definition, system design,
hardware and software engineering, system integration, and testing. Operational processes are
defined and the training courses for system users are designed.
3. Operation At this stage, the system is deployed, users are trained, and the system is brought
into use. The planned operational processes usually then have to change to reflect the real working
environment where the system is used. Over time, the system evolves as new requirements are
identified. Eventually, the system declines in value and it is decommissioned and replaced.
Professional disciplines involved in systems engineering
1. Different disciplines use the same words to mean different things. Misunderstandings are
common in discussions between engineers from different backgrounds. If these are not
discovered and resolved during system development, they can lead to errors in delivered
systems. For example, an electronic engineer who may know a little bit about C# programming
may not understand that a method in Java is comparable to a function in C.
2. Each discipline makes assumptions about what can or can’t be done by other disciplines. These
are often based on an inadequate understanding of what is actually possible. For example, a
user interface designer may propose a graphical UI for an embedded system that requires a
great deal of processing and so overloads the processor in the system.
3. Disciplines try to protect their professional boundaries and may argue for certain design
decisions because these decisions will call for their professional expertise. Therefore, a
software engineer may argue for a software-based door locking system in a building, although
a mechanical, key-based system may be more reliable.
System procurement
The goals of the system development process are to develop or acquire all of the
components of a system and then to integrate these components to create the final
system. The requirements are the bridge between the procurement and the
development processes. During procurement, business and high-level functional and
nonfunctional system requirements are defined:
1. Requirements development the high-level and business requirements identified
during the procurement process have to be developed in more detail. Requirements
may have to be allocated to hardware, software, or processes and prioritized for
implementation.
2. System design This process overlaps significantly with the requirements development
process. It involves establishing the overall architecture of the system, identifying the
different system components and understanding the relationships between them.
3. Subsystem engineering This stage involves developing the software components of the
system; configuring off-the-shelf hardware and software, designing, if necessary,
special-purpose hardware; defining the operational processes for the system; and
redesigning essential business processes.
4. System integration During this stage, the components are put together to create a new
system. Only then do the emergent system properties become apparent.
5. System testing This is usually an extensive, prolonged activity where problems are
discovered. The subsystem engineering and system integration phases are re-entered
to repair these problems, tune the performance of the system, and implement new
requirements. System testing may involve both testing by the system developer and
acceptance/user testing by the organization that has procured the system.
6. System deployment This is the process of making the system available to its users,
transferring data from existing systems, and establishing communications with other
systems in the environment. The process culminates with a ‘go live’ after which users
start to use the system to support their work.
Although the overall process is plan driven, the processes of requirements
development and system design are inextricably linked. The requirements and the
high-level design are developed concurrently. Constraints posed by existing systems
may limit design choices and these choices may be specified in the requirements. You
may have to do some initial design to structure and organize the requirements
engineering process. As the design process continues, you may discover problems with
existing requirements and new requirements may emerge.
The spiral reflects the reality that requirements affect design decisions and vice versa,
and so it makes sense to interleave these processes. Starting in the center, each round
of the spiral may add detail to the requirements and the design. Some rounds may
focus on requirements, and some on design. Sometimes new knowledge collected
during the requirements and design process means that the problem statement
itself has to be changed.
System operation
Operational processes are the processes that are involved in using the system for its
defined purpose. For example, operators of an air traffic control system follow specific
processes when aircraft enter and leave airspace, when they have to change height or
speed, when an emergency occurs, and so on. For new systems, these operational
processes have to be defined and documented during the system development
process. Operators may have to be trained and other work processes adapted to make
effective use of the new system. Undetected problems may arise at this stage because
the system specification may contain errors or omissions. Although the system may
perform to specification, its functions may not meet the real operational needs.
Consequently, the operators may not use the system as its designers intended. The key
benefit of having system operators is that people have a unique capability of being
able to respond effectively to unexpected situations, even when they have never had
direct experience of these situations. Therefore, when things go wrong, the operators
can often recover the situation although this may sometimes mean that the defined
process is violated. Operators also use their local knowledge to adapt and improve
processes. Normally, the actual operational processes are different from those
anticipated by the system designers.
System evolution
Large, complex systems have a very long lifetime. During their life, they are changed
to correct errors in the original system requirements and to implement new
requirements that have emerged. The system’s computers are likely to be replaced
with new, faster machines. The organization that uses the system may reorganize itself
and hence use the system in a different way. The external environment of the system
may change, forcing changes to the system. Hence evolution, where the system
changes to accommodate environmental change, is a process that runs alongside
normal system operational processes. System evolution involves re-entering the
development process to make changes and extensions to the system’s hardware,
software, and operational processes.
System evolution, like software evolution , is inherently
costly for several reasons:
1. Proposed changes have to be analysed very carefully from a business and a technical
perspective. Changes have to contribute to the goals of the system and should not
simply be technically motivated.
2. Because subsystems are never completely independent, changes to one subsystem
may adversely affect the performance or behaviour of other subsystems. Consequent
changes to these subsystems may therefore be needed.
3. The reasons for original design decisions are often unrecorded. Those responsible
for the system evolution have to work out why particular design decisions were made.
4. As systems age, their structure typically becomes corrupted by change so the
costs of making further changes increases.
Modular Design
Definition of Modules:
Reusability: Modules can be reused in different parts of the software or even in other
projects, reducing development time and effort.
Scalability: It allows for easy expansion or modification of the software by adding or
replacing modules as needed.
Maintenance: Modules can be maintained and updated independently, minimizing
the risk of introducing errors in other parts of the software.
Collaboration: Teams can work on different modules concurrently, promoting parallel
development and collaboration.
Testing: Smaller modules are easier to test thoroughly, leading to higher software
quality.
Understanding: Modular design enhances code readability and comprehension by
breaking down complex logic into manageable pieces.
High Cohesion: Modules should have a clear, single responsibility, and all the elements
within the module should be closely related to that responsibility.
Low Coupling: Modules should have minimal dependencies on other modules,
reducing the impact of changes in one module on others.
Abstraction: Modules should hide internal details and provide a clear, well-defined
interface for interaction.
Independence: Each module should be designed to operate independently without
relying on the internal workings of other modules.
Design Principles:
Single Responsibility Principle (SRP): Each module should have one and only one
reason to change, i.e., it should have a single responsibility.
Open-Closed Principle (OCP): Modules should be open for extension but closed for
modification, allowing new features to be added without changing existing code.
Liskov Substitution Principle (LSP): Subtypes should be substitutable for their base
types, ensuring that modules can be interchanged without affecting the correctness of
the program.
Interface Segregation Principle (ISP): Clients should not be forced to depend on
interfaces they do not use, promoting smaller, more focused interfaces.
Module Communication:
• Version control systems (e.g., Git) help manage and coordinate changes across
modules.
• Automated testing frameworks assist in verifying the correctness of individual
modules.
• Documentation is crucial for describing module interfaces and usage.
•
In summary, modular design in software engineering is about breaking down complex
systems into manageable, independent modules with clear responsibilities and
interfaces. It promotes reusability, maintainability, and collaboration while adhering to
key design principles.
Architectural design
Architectural views
It is impossible to represent all relevant information about a system’s architecture in a single
architectural model, as each model only shows one view or perspective of the system. It might
show how a system is decomposed into modules, how the run-time processes interact, or the
different ways in which system components are distributed across a network. All of these are
useful at different times so, for both design and documentation, you usually need to present
multiple views of the software architecture.
There are different opinions as to what views are required. Krutchen (1995), in his well-known
4+1 view model of software architecture, suggests that there should be four fundamental
architectural views, which are related using use cases or scenarios.
The views that he suggests are:
1. A logical view, which shows the key abstractions in the system as objects or object
classes. It should be possible to relate the system requirements to entities in this
logical view.
2. A process view, which shows how, at run-time, the system is composed of interacting
processes. This view is useful for making judgments about nonfunctional system
characteristics such as performance and availability.
3. A development view, which shows how the software is decomposed for development,
that is, it shows the breakdown of the software into components that are implemented by
a single developer or development team. This view is useful for software managers and
programmers.
4. A physical view, which shows the system hardware and how software components are
distributed across the processors in the system. This view is useful for systems engineers
planning a system deployment.
Architectural patterns
The idea of patterns as a way of presenting, sharing, and reusing knowledge about
software systems are now widely used. The trigger for this was the publication of
a book on object-oriented design patterns, which prompted the development of
other types of patterns, such as patterns for organizational design, usability
patterns, interaction, configuration management
LAYERED ARCHITECTURE
A generic layered architecture
Repository architecture
Application architectures
User Interface (UI) design in software engineering plays a critical role in ensuring
that software applications are user-friendly, intuitive, and efficient to use. Here are
some important notes on User Interface Design:
UI is the point of interaction between the user and the software system.It
encompasses all elements that users see, touch, and interact with, including
screens, buttons, menus, and forms.
Importance of UI Design:
Principles of UI Design:
Visibility: Important elements and options should be easily visible and accessible.
Consistency: UI elements should behave predictably and have a uniform design.
Feedback: Users should receive feedback for their actions, such as button clicks or
form submissions.
Simplicity: Keep the UI simple and uncluttered to avoid overwhelming users.
Efficiency: Design the UI to allow users to complete tasks quickly and with minimal
steps.
Error Prevention and Handling: Anticipate and prevent errors where possible, and
provide clear error messages when they occur.
Responsive Design:
Designing UIs that are accessible to individuals with disabilities, including those
who use screen readers or have mobility impairments. Compliance with
accessibility standards such as WCAG (Web Content Accessibility Guidelines) is
essential.
Prototyping and Wireframing:
User Testing:
Conducting usability testing with real users to gather feedback and make iterative
improvements to the UI. User feedback is invaluable for identifying usability issues
and optimizing the UI.
UI Design Tools:
Popular UI design tools include Adobe XD, Sketch, Figma, and Invision, which
facilitate the creation of high-fidelity mock-ups and prototypes.
Internationalization (I18N) and Localization (L10N):
Continuous Improvement: