Software Design and Architecture
Structured Systems Design Model
It is the process of deciding which components, and interconnection between them, are needed to solve a well-specified problem.
Data Design
Transforms the information field model, created during analysis, into data structures that will be required to implement the software.
Structural Design
Defines the relationships between the main structural elements of the program. The main objective of structural design is to develop a modular program structure and represent the control relationships between modules.
Procedural Design
Transforms the structural elements into a procedural description of the software. The procedural design is performed after the program structure and data have been established. It defines the necessary processing algorithms.
The Importance of Software Design
The importance of software design can be summarized in one word: quality. Design is the process that underlies the quality of software development. The design produces representations of software that can be evaluated for quality.
Structured Design
Structured design tends to transform software development from a traditional practice to an engineering discipline, focusing on efficiency, maintainability, modifiability, flexibility, governance, and utility.
System Design
System design is the high-level strategy to solve problems and build a solution. It involves making the following decisions:
- Organize the system into subsystems
- Identify the competition inherent in the problem
- Assign subsystems to processors and tasks
- Manage access to global resources
- Select the deployment of control software
- Manage the boundary conditions and compensation
- Establish priorities
Modeling and Object-Oriented Design
Modeling and object-oriented design is based on thinking about problems to be solved using models that have been organized based on real-world concepts.
Object Model
Describes the data structure of objects and their relationships.
Dynamic Model
Describes the behavioral aspects of a system and how they change over time.
Component
A component is a prepackaged piece of code that encapsulates some functionality exposed through standard interfaces.
Advantages of Using Object-Oriented Paradigm
- Reuse of Software: It leads to an increased level of software reuse.
- Simplifies Testing: It allows tests to be performed by testing each of the components before testing the full set of assembled components.
- Simplifies System Maintenance: With weak coupling between components, developers are free to update and/or add components as needed, without affecting other parts of the system.
- Higher Quality: Since a component can be built and then continuously improved by an expert or organization, the quality of component-based applications will improve over time.
Software Architecture
Software architecture is the fundamental organization of a system formed by its components, their relationships, and the context in which it is implemented, along with the principles guiding its design and evolution.
Goal
To provide elements that help in decision-making and at the same time provide a common language and concepts that allow communication between the teams participating in a project.
Models or Views
- Static View: Describes the architecture’s components.
- Functional View: Describes what each component does.
- Dynamic View: Describes how the components behave over time and how they interact.
Common Architectures
- Monolithic Structure: Where the software is a single unit with attached functional groups.
- Client-Server: Where the software shares its computational burden in two separate parts but without a clear assignment of roles.
- Three-Tier Architecture: A specialization in client-server architecture where the load is divided into three parts (or layers) with a clear division of functions for the presentation layer (user interface), one for the calculation (where the business modeling occurs), and one for storage (persistence). A layer only relates to the next.
User Interface Design
User interface design is the design of applications, machines, mobile communication devices, software applications, and websites focused on user experience and interaction.
Database Design
Database design can be somewhat complex, but with some simple rules, it becomes much easier to create a perfect database for your next project.
Design and Process Controls
Adequate preparation of the data or basic elements of information and processing them through rules and procedures to perform various operations (calculations).
Control
Testing, inspection, audit, management control, and regulation of some phenomenon (process, activity).
Metrics
A metric is an instrument that quantifies a criterion. They help us understand both the technical process used to develop a product, as well as the product itself.
Indirect Measures
These include functionality, quality, complexity, efficiency, reliability, ease of maintenance, etc.
Software Metrics
These are associated with the development of software functionality, complexity, and efficiency.
Technical Metrics
Focus on the characteristics of software. They measure the system’s structure and how it’s made.
Quality Metrics
Provide an indication of how the software adjusts to the implicit and explicit requirements of the customer.
Productivity Metrics
They focus on the performance of the software engineering process. That is, how productive the software that is being designed will be.
Person-Oriented Metrics
Measure and provide information on how people develop computer software and especially the human point of view of the effectiveness of the tools and methods. These are measures that will be taken of the staff who will make the system.
Size-Oriented Metrics
These are used to know when the software will be finished and how many people are needed. They are direct measures of the software and the process by which it develops, assuming a software organization maintains simple records.
Function-Oriented Metrics
These are indirect measures of the software and the process by which it develops. Instead of calculating lines of code, function-oriented metrics focus on the functionality or usability of the program.
Disadvantages of Metrics
One disadvantage is that there is no generally accepted criteria scheme.