0% found this document useful (0 votes)
524 views4 pages

The Software Engineering Discipline

The document discusses several key aspects of software engineering including its lack of standardized components and metrics compared to other engineering fields, the roles of practitioners and theoreticians, the importance of professional organizations and standards, the software development life cycle including development, use and maintenance phases, common software engineering methodologies like waterfall and incremental models, open-source development, agile methods, modularity, tools used for development and database design like data flow diagrams and entity relationship diagrams, quality assurance techniques like glass box and black box testing, the Pareto principle, documentation for users and developers, and design documents.
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
524 views4 pages

The Software Engineering Discipline

The document discusses several key aspects of software engineering including its lack of standardized components and metrics compared to other engineering fields, the roles of practitioners and theoreticians, the importance of professional organizations and standards, the software development life cycle including development, use and maintenance phases, common software engineering methodologies like waterfall and incremental models, open-source development, agile methods, modularity, tools used for development and database design like data flow diagrams and entity relationship diagrams, quality assurance techniques like glass box and black box testing, the Pareto principle, documentation for users and developers, and design documents.
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
You are on page 1/ 4

According to Robert C.

Martin an American software engineer

The Software Engineering Discipline

Lack of Prefabricated Components:


Unlike many other engineering fields where standardized components or materials often exist (e.g., in
civil engineering or mechanical engineering), software engineering typically involves building systems
from scratch. While there are libraries, frameworks, and reusable modules, there isn't the same level
of universally accepted, prefabricated components as in other engineering domains.

Lack of Universal Metrics:


Measuring success or quality in software engineering isn’t as straightforward as in other engineering
disciplines. While metrics like lines of code, code complexity, or defect density exist, they might not
universally indicate software quality or success. The dynamic nature of software and its dependency
on context often make defining standardized metrics challenging.

Practitioners versus Theoreticians:


There's a notable distinction between software engineering practitioners—those actively involved in
building software—and theoreticians who focus more on the theoretical aspects of software, such as
algorithm design or formal methods. Theoretical work often informs best practices, but practitioners
are responsible for implementing and applying these theories in real-world scenarios.

Professional Organizations and Standards:


Professional organizations like the Association for Computing Machinery (ACM) and the Institute of
Electrical and Electronics Engineers (IEEE) play significant roles in shaping the software engineering
discipline. They establish codes of professional ethics, promote best practices, and contribute to the
development of standards for software engineering methodologies, processes, and technologies.

The Software Life Cycle

Development
The Development Phase of the software life cycle involves the creation of the software itself, from
the initial idea or requirements gathering to the implementation and testing of the software
product.

The Use Phase


The Phase of the software life cycle involves the deployment, operation, and utilization of the
software in a live environment by end-users or customers. This phase encompasses activities
related to making the software available for its intended purpose and ensuring its smooth
functioning during regular operations:

Maintenance Phase
The Maintenance Phase in the software life cycle involves managing, updating, and enhancing the
software after it has been deployed and is in active use. This phase is essential for ensuring the
software remains effective, secure, and aligned with evolving user needs and technological
advancements.

Software Engineering Methodologies

Waterfall Model
 The Waterfall Model is one of the earliest and most straightforward process models used in
software development. It follows a sequential, linear approach where progress is seen as
flowing steadily downwards (like a waterfall) through several distinct phases. Each phase has
its own set of deliverables and goals that must be completed before moving on to the next
phase.

Incremental Model
 The Incremental Model is an iterative software development methodology that breaks down
the software development process into smaller, more manageable modules or increments.
Instead of delivering the entire system at once, it divides the project into smaller parts and
develops each part separately. These parts are developed and delivered incrementally in a
series of cycles or iterations.
 Certainly! In the context of the Incremental Model, Prototyping can be employed in two
primary ways:
Evolutionary Prototyping: Intended to evolve into the final product through iterative
improvements and continuous user involvement.The main goal is to build a prototype that evolves
into the final product through multiple iterations.
Throwaway Prototyping: Used for exploration, learning, and clarification of requirements, with
the prototype discarded after obtaining necessary insights.Aims to create a prototype to better
understand requirements or design solutions but is not intended to become part of the final
product.

Open-source development
Open-source development refers to the collaborative process of software development where the
source code of a software project is made publicly accessible, allowing anyone to view, modify, and
distribute it.
Agile Methods
Agile methods in software engineering refer to a set of iterative and flexible approaches to
software development that prioritize adaptability, collaboration, and customer satisfaction.

Modularity
is a fundamental principle in software design aimed at breaking down complex systems into
smaller, more manageable parts. Each part (module, function, object, or component) performs a
specific task, and when combined, they create the entire system's functionality. Different
programming paradigms utilize various techniques to achieve modularity:

Functions in Imperative Paradigm:


In imperative programming, functions play a key role in achieving modularity. These functions
encapsulate specific sets of operations, allowing for better organization, reuse, and readability of
code. Structure charts can visually represent the relationships between different functions, showing
how they interact and the hierarchy of their execution.

Objects in Object-Oriented Paradigm:


Object-oriented programming (OOP) takes modularity a step further by organizing code into
objects that contain both data and behavior. Collaboration diagrams or class diagrams are
commonly used to illustrate how objects interact with each other through method calls,
encapsulating functionality and data within these objects.

Components in Component Architecture:


Component-based development emphasizes creating software using reusable and interchangeable
parts called components. These components encapsulate specific functionality and can be
assembled or replaced within a system. Component architecture focuses on creating independent
and reusable units that communicate through well-defined interfaces.

Tools of the Trade


Absolutely, these tools are essential for various stages of software development and database
design:
Data Flow Diagram (DFD):
Purpose: Illustrates the flow of data within a system.
Components: Shows processes, data stores, data flow, and external entities.
Use: Helps in understanding how data moves through a system and how it's processed or
transformed at various stages.
Entity-Relationship Diagram (ERD):
Purpose: Models the relationships between entities in a database.
Types of Relations:
One-to-One: One instance of an entity is related to only one instance of another entity.
One-to-Many: One instance of an entity is related to multiple instances of another entity.
Many-to-Many: Multiple instances of an entity are related to multiple instances of another entity.
Use: Helps in designing a database schema, defining tables, and understanding how different
entities relate to each other.
Data Dictionary:
Purpose: Serves as a centralized repository of information about data such as definitions,
structures, formats, and data elements.
Use: Helps in maintaining consistency and clarity regarding data definitions and their usage
throughout the system or project.

Quality assurance
involves various techniques and methodologies to ensure that software meets specified
requirements and functions correctly. Here's a breakdown of some testing methods commonly
used in quality assurance:

Glass-box Testing:
Pareto Principle: Also known as the 80/20 rule, this principle suggests that roughly 80% of the
effects come from 20% of the causes. In software testing, it implies that a large majority of issues
(80%) may be caused by a smaller portion (20%) of the features or functionalities. Hence, focusing
on fixing these critical 20% can resolve a significant portion of the problems.

Basis Path Testing: This technique involves testing all possible paths through the code to ensure
that the program logic is correctly implemented. It helps in identifying independent paths and
ensures that each one is executed at least once during testing.

Black-box Testing:
Boundary Value Analysis: This technique involves testing boundaries between valid and invalid
input conditions. Test cases are designed to evaluate how the system behaves at the edges or
limits of acceptable ranges. For instance, testing a function with the minimum and maximum input
values or just beyond those limits.

Redundancy Testing: Aims at identifying and eliminating redundant or unnecessary elements


within the software. This includes duplicate code, redundant functionalities, or data that doesn't
contribute to the software's purpose. Eliminating redundancy can enhance efficiency and reduce
errors.

Beta Testing: Involves releasing a version of the software to a select group of external users for
real-world testing in a live environment. This helps in identifying issues not found during earlier
testing phases and collects user feedback for further improvements.

Documentation
Certainly! Documentation serves various purposes and comes in different forms, tailored for
different audiences and needs in the software development and usage cycle:

User Documentation:
Printed Book for All Customers: This type of documentation offers a comprehensive guide or
manual in a physical format, providing step-by-step instructions, explanations, and usage
guidelines for end-users.

On-line Help Modules: These are interactive and context-sensitive guides integrated within the
software. They offer immediate assistance to users by providing relevant information based on the
user's current actions or queries within the application.

System Documentation:
Source Code: This technical documentation includes comments, annotations, and explanations
within the code itself. It helps developers understand the logic, functionality, and structure of the
software components.

Design Documents: System design documents detail the architecture, components, relationships,
and interfaces within the software. They provide a high-level understanding of how the system
works and its intended structure.

Technical Documentation:
Installation, Customization, Updating, etc.: This documentation provides technical details and
instructions for tasks like installation procedures, configuration options, customization guides, and
steps to update or maintain the software. It aims to assist administrators or technical users in
managing the software effectively.

Human-machine interface (HMI)


Absolutely, the human-machine interface (HMI) focuses on creating software systems that are
user-friendly, intuitive, and cater to the needs and capabilities of human users. Here's how various
aspects come into play:

Ergonomics:
Physical Abilities of Humans: Designing interfaces that consider human physical capabilities, such
as reach, vision, and dexterity, to ensure comfortable and efficient interaction.
Cognetics:
Mental Abilities of Humans: Understanding human mental processes and capabilities to create
interfaces that align with cognitive functions.

Habits: Leveraging users' established habits and mental models to design interfaces that are
familiar and easy to navigate. For example, using common symbols for actions (like a trash can for
delete) to capitalize on users' pre-existing associations.

Attention: Recognizing the limitations of human attention and designing interfaces that prioritize
information and actions. Minimizing cognitive overload by presenting information in a clear,
organized manner.

You might also like