Chapter One
Chapter One
1
OUTLINE
2
Introduction
What is SE?
• An engineering branch associated with the development
of software product using well-defined scientific
principles, methods and procedures.
• Without using software engineering principles, it would be
difficult to develop large programs
• Software engineering helps to reduce this programming
complexity by using different techniques:
• The outcome of SE is to have a good software product
3
Introduction
• Characteristics of good software
Operational- budget wise, deliverable, usability,
efficiency, correctness, functionality, security,
Safety…
Transitional- portability, reusability, adaptability…
Maintenance- modularity, maintainability,
flexibility, scalability…
4
Introduction
• Types of software
Purpose: System Software or Application Software
Platform: Native software (designed for a specific operating system) or Cross-
platform software (designed to run on multiple operating systems)
Deployment: Installed software (installed on the user’s device) or Cloud-based
software (hosted on remote servers and accessed via the internet)
License: Proprietary software ( owned by a single entity) or Open-source software
Size: Small-scale software or enterprise software ( available for free with the source
code accessible to the public)
5
introduction
• General phases/ Stages in software development
• Requirement
• Gathering, analysis, SRS
• Feasibility study
• Operational, technical, schedule, economic, societal, even political
• Design
• Data, user interface, architecture, component
• Coding/Implementation
• Testing
• Unit, system, integration
• Documentation
• User manual
• Deployment /Installation /Configuration
• Maintenance
• Proactive, predictive, corrective
6
Software Design
• What is design?
• a process to transform user requirements into some suitable form,
which helps the programmer in software coding and
implementation
• The output of this process can directly be used into
implementation in programming languages
• Software design moves the concentration from problem domain to
solution domain
• So good to stress on this phase for a better software
development , next to the requirement
7
Software design
• So, What to design?
• Data can be designed-
• database design
• User interfaces can be designed-
• front ends design
• Architecture of the software can be designed-
• A blue print, how does it work
• Components/ sub divisions can be designed individually
• functional modules with own tasks
8
Introduction
10
Key Characteristics of Software Components:
11
Component-Based Design Principles:
Modularity: Divide your software into smaller, manageable modules
or components, each responsible for a specific task or feature.
• Improves maintainability, reusability, and understandability of the
code.
High Cohesion: Components should contain related and closely
related functionalities. High cohesion reduces complexity and
enhances maintainability.
Loose Coupling: Minimize the dependencies between components.
This makes it easier to replace or upgrade components.
12
Software Component Types:
13
• Component Life Cycle: Components typically have a life cycle that
includes creation, initialization, use, and destruction phases.
Managing the life cycle of components is crucial for their proper
functioning and resource management.
• Component Repositories: To facilitate component reuse,
organizations often maintain repositories or libraries of pre-built
components that developers can leverage in their projects.
• Design Patterns for Component-Based Development: Various design
patterns, such as the Factory, Singleton, Observer, and Adapter
patterns, can be applied to component design to address common
design challenges and improve component reusability.
14
• Effective software component design can significantly
improve the maintainability, scalability, and overall quality of
software systems.
• It allows developers to focus on building specific
functionalities in isolation and encourages code reuse, which
can lead to faster development and fewer bugs.
15
Component-Based Software
Engineering (CBSE)
• Is a process that focuses on the design and
development of computer-based systems with the use
of reusable software components.
• CBSE promotes the reuse of existing components to
accelerate development, improve maintainability, and
reduce overall costs.
16
Benefits of …
Component-Based Software Engineering (CBSE) offers numerous
benefits, which contribute to the efficiency and quality of software
development.
Here are some of the key advantages of using a component-based
approach in software engineering:
1) Reusability: Components are designed to be reusable, meaning that
once created and tested, they can be used in various projects and
applications. This reduces redundant development effort and accelerates
project timelines.
2) Modularity: Components promote modularity by breaking down
complex systems into smaller, manageable pieces. This makes it easier to
understand, develop, and maintain software systems.
17
• Improved Quality: Components are typically thoroughly tested and
validated. Reusing well-tested components reduces the likelihood of
defects and ensures higher software quality.
• Efficiency: By reusing existing components, developers can save time
and effort. This efficiency can result in faster development cycles and
cost savings.
• Maintenance: Since components are self-contained and
encapsulated, making changes or updates to a specific component is
less likely to impact other parts of the system, simplifying
maintenance and reducing the risk of introducing new bugs.
18
• In summary, component-based software engineering offers a
structured and efficient approach to software development,
enhancing productivity, quality, and maintainability while
reducing development costs and risks.
• By leveraging reusable components, software development
teams can build complex systems more effectively and adapt
to changing requirements with ease.
19
Component-Based Software Engineering (CBSE) is a versatile
approach that finds applications in various domains and
industries. Here are some of the key application areas of CBSE:
• Enterprise Software Development: CBSE is commonly used in the
development of large-scale enterprise applications, such as Customer
Relationship Management (CRM) systems, Enterprise Resource
Planning (ERP) systems, and Human Resources Management (HRM)
systems.
• Web Development: In web development, CBSE is used to create
reusable web components, such as user interface widgets,
authentication modules, and data processing components, which can
be integrated into different web applications.
20
• Embedded Systems: CBSE is applied to embedded systems
development, where it is essential to create efficient and reliable
components for use in devices like IoT devices, automotive control
systems, and consumer electronics.
• Financial Software: Financial institutions use CBSE to build trading
platforms, risk assessment tools, and financial modeling software.
Reusable components can accelerate the development of these
complex systems.
• Healthcare Software: CBSE is employed in healthcare software for
creating electronic health records (EHR) systems, medical imaging
applications, and telemedicine solutions, which require reusable
components like data storage and communication modules.
21
Proces ses involved during component design
22
• Requirements Analysis:
• Understand the functional and non-functional requirements for the
component, including its inputs, outputs, and expected behavior.
• Define the component's interfaces and interactions with other components or
systems.
• Component Identification:
• Identify the specific functionality or feature that the component will provide
within the overall system.
• Consider reusability by evaluating if the component could be used in other
projects or parts of the system.
23
Cont..
Specification:
• Create a detailed specification for the component, outlining its
purpose, inputs, outputs, and behavior.
• Define the component methods, parameters, and data structures.
Design Decomposition:
• Break down the component into smaller, manageable sub-
components or modules, if necessary.
• Determine the structure and relationships between these sub-
components, if applicable.
24
Cont..
Data Design:
• Define the data structures and data flows within the component,
including how data is processed and stored.
• Address issues related to data validation, storage, and access.
Algorithm Design:
• Specify the algorithms and logic that the component will use to
perform its functions.
• Consider performance optimization and algorithmic efficiency.
25
Cont..
User Interface (UI) Design:
• If the component has a user interface, design the UI elements, layout,
and user interactions.
• Ensure the UI is intuitive and user-friendly.
Security Design:
• Consider security aspects, including data protection, access control,
and prevention of security vulnerabilities.
• Implement encryption, authentication, and authorization
mechanisms, if required.
26
Individual Assignment(5 %)
Deadline:
22/11/2023
• Discuss the advantages and challenges of adopting a component-
based approach in software engineering.
• Share examples of how component-based development can enhance
software reuse and maintainability.
• Additionally, consider potential drawbacks or obstacles that teams
might face when implementing component-based systems.
• How can these challenges be mitigated, and what strategies can be
employed to maximize the benefits of component-based software
engineering?“
27