0% found this document useful (0 votes)
7 views

Software

Software Engineering

Uploaded by

greekcloud1234
Copyright
© © All Rights Reserved
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
7 views

Software

Software Engineering

Uploaded by

greekcloud1234
Copyright
© © All Rights Reserved
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 12

Software.

md 2024-09-17

Software Engineering
Challenges as the Project Grows

▶ Complexity Increases: More features requested.


▶ Exponential Growth in Cost and Effort
▶ Poor Quality and Maintainability
▶ Team Development Challenges

Transition to Structured Software Engineering Approaches

Recognizing the Need for Change


▶ Implementing structured phases: planning, design,
implementation, testing, and maintenance.

Introduction to Software Life Cycle Models

Waterfall, Agile, and Spiral, each suited to different types of projects.


The **Waterfall model** is a linear, sequential approach best for projects
with clear, unchanging requirements. The **Agile model** emphasizes
flexibility, iterative development, and frequent feedback, making it ideal
for projects with evolving requirements. The **Spiral model** combines
iterative development with risk management, making it suitable for large,
high-risk projects. These models help teams manage different aspects
of software development, ensuring projects are completed efficiently and
effectively.

Conclusion and Summary: The Solution for TechInspire Solutions

▶ From Chaos to Clarity: Transition from exploratory to


structured development.
▶ Improved project management, code quality, and client
satisfaction.
▶ The Path Forward: Delve deeper into software life cycle
models and UML in upcoming sessions.

Introduction to Human Cognition Mechanism

▶ Human memory is divided into short-term and long-term


memory.
▶ Short-term memory holds information temporarily.
▶ Long-term memory stores information for extended periods.
1 / 12
Software.md 2024-09-17

Understanding Short-Term Memory

▶ Short-term memory can hold a limited number of items.


▶ Information decays quickly or is replaced by new information.
▶ Items can be retained longer through rehearsal or repetition.

The Concept of Chunking

▶ Chunking: Grouping related items into a single unit.


▶ Helps in overcoming the limitations of short-term memory.
▶ Example: Remembering a complex number sequence by
grouping digits.

The Role of Software Engineering Principles

▶ Modularization: Breaking down a program into smaller


modules.
▶ Abstraction: Focusing on essential aspects, ignoring details.
▶ Documentation and Standards: Ensuring consistency and
clarity.
▶ Version Control: Managing changes and collaboration.

Machines vs. Human Cognitive Limitations

▶ Machines can handle large amounts of data without cognitive


limitations.
▶ Humans require structured methodologies to manage
complexity.
▶ Machines can process data linearly without memory
constraints.

Introduction to Abstraction and Decomposition

▶ Two key techniques: Abstraction and Decomposition.


▶ Essential for handling complexity in software development.
▶ Help to achieve linear scalability in time, cost, and effort.

Abstraction

2 / 12
Software.md 2024-09-17

▶ Focuses on essential aspects of a problem.


▶ Ignores irrelevant details.
▶ Also known as model building.

Decomposition

▶ Breaking down complex problems into smaller parts.


▶ Each part can be solved independently.
▶ Helps in understanding and managing complexity.

Benefits of Software Engineering Principles

▶ Skills to develop large programs


▶ Systematic techniques for:
▶ Specification
▶ Design
▶ User interface development
▶ Testing
▶ Project management
▶ Maintenance
▶ Higher productivity and better quality programs, even for small projects

Solving Complex Programming Problems

▶ Breaking large projects into smaller, manageable parts


▶ Using abstraction to focus on essential aspects
▶ Techniques for:
▶ Specification
▶ Design
▶ User interface development
▶ Testing
▶ Project management

Software Crisis

▶ Software products:
▶ Fail to meet user requirements.
▶ Frequently crash.
▶ Expensive.
▶ Difficult to alter, debug, and enhance.
▶ Often delivered late.
▶ Use resources non-optimally.

3 / 12
Software.md 2024-09-17

Factors Contributing to the Software Crisis

▶ Larger problems
▶ Lack of adequate training in software engineering
▶ Increasing skill shortage
▶ Low productivity improvements

Factors Causing the Software Crisis

▶ Larger Problems:
▶ The complexity and size of software projects have grown
significantly, making them harder to manage.
▶ Lack of Adequate Training in Software Engineering:
▶ Many developers lack formal training in software engineering
principles and methodologies.
▶ Increasing Skill Shortage:
▶ There is a shortage of skilled software engineers to manage
complex software projects.
▶ Low Productivity Improvements:
▶ Despite advancements in hardware, software development
productivity has not seen similar improvements.

Solutions to the Software Crisis

▶ Development of Software Engineering:


▶ Establishment of software engineering as a discipline to provide
systematic, disciplined, and quantifiable approaches to software
development.
▶ Adoption of Methodologies:
▶ Use of various software development methodologies such as
Waterfall, Agile, and Scrum to provide structured approaches
to managing software projects.
▶ Improved Tools and Techniques:
▶ Advances in programming languages, development
environments, and tools for version control, testing, and
debugging.
▶ Focus on Quality and Maintenance:
▶ Emphasis on ensuring software quality through practices like
code reviews, automated testing, and continuous integration.
▶ Human Factors and Team Management:
▶ Techniques for better requirement gathering, project planning,
and risk management to address team dynamics and
communication issues.

Types of Software Projects

4 / 12
Software.md 2024-09-17

▶ Product Development Projects (Generic Software Development Projects):

▶ Packaged software available to a wide range of users.


▶ Includes horizontal and vertical market products.
▶ Services Projects (Custom Software Development):
▶ Tailored software solutions for specific customers.
▶ Includes outsourced projects.

Issues in Product Development and Services Projects

▶ Product Development Projects:


▶ Packaged software available for purchase by anyone.
▶ Two types:
▶ Horizontal Products: Meet the needs of many companies
and individuals (e.g., word processors, operating systems).
▶ Vertical Products: Focus on specific industries (e.g., telecom
software, banking software).

▶ Services Projects:
▶ Custom software tailored for specific clients.
▶ Often built upon generic versions and customized for different
customers.

Difference Between Programs and Software Products

Types of Software Projects

▶ Software Products:
▶ Packaged software for a wide audience.
▶ Includes horizontal and vertical products.
▶ Outsourced Projects:
▶ Custom software development outsourced to specialized
companies.
▶ Indian companies have focused heavily on outsourced projects.
5 / 12
Software.md 2024-09-17

Schematic Model of Computer Systems Engineering

This schematic model represents the stages in computer systems engineer-


ing:

• Requirements Analysis: Understanding what the system needs to


achieve.
• Specifications: Detailed description of the system’s requirements.
• System Design: Planning the architecture of both hardware and
software.
• Hardware Development: Creating the physical components of the
system.
• Software Development: Writing the code that will run on the
hardware.
• Integration: Combining hardware and software components.
• System Testing: Ensuring that the integrated system functions
correctly.

Control Flow-Based Design (late 60s)

▶ Program size increased, making exploratory style insufficient. ▶ Focus on control flow became essential. ▶
Control structure defines the sequence of program execution. ▶ Flowcharting technique was developed to
represent control structure.

The goto statement can be avoided by using a flag variable to


control the flow of the program. This approach maintains
structured programming principles and makes the code more
readable and maintainable.

▶ Introduction of a Flag Variable:


▶ Conditionally Controlling the Outer Loop:
▶ Setting the Flag Inside the Inner Loop:
▶ Maintains Structured Programming:
▶ Readability
▶ Maintainability:
▶ Predictability:
▶ Complex Control Flow:
▶ Difficult to Maintain:
▶ Unstructured Programming:
▶ Unclear Exit Points:
▶ Better Alternatives:
▶ Error-Prone:

NOTE: The use of goto statements is highly discouraged or avoided in


any programming language because it makes it difficult to trace the
6 / 12
Software.md 2024-09-17

control flow of a program to fellow programmers, making the program


hard to understand and hard to modify or manipulate. Any program
which uses goto can be modified to avoid goto statements. These are
also called ‘Jump Statements’. It is used to transfer the control to a
predefined label. However, its use is avoided since it causes confusion for
fellow programmers in understanding the code. The goto statement is
preferable when we need to break multiple loops using a single
statement at the same time.

The goto statement is generally considered harmful because it can

Control Flow-Based Design (late 60s)


▶ Program size increased, making exploratory style insufficient. ▶ Focus on
control flow became essential. ▶ Control structure defines the sequence of
program execution. ▶ Flowcharting technique was developed to represent control
structure.

2024-08-12
Emergence of Software Engineering
Control Flow-Based Design (late 60s)

In the late 1960s, as program size increased, the exploratory style of pro-
gramming became insufficient. Attention to control flow became essential,

as the control structure defines the sequence of program execution, includ-


ing decisions and loops. The flowcharting technique was developed to

represent the control structure, helping programmers understand and de-


sign programs more effectively.

lead to ”spaghetti code,” where the program’s control flow


becomes complex and difficult to follow. This makes the code less
readable and harder to maintain.
Modern programming practices encourage structured
programming, where the control flow of the program is clear and
easy to understand. This can typically be achieved using loops,
conditionals, and function calls instead of goto statements. By
avoiding goto, you help ensure that your code is more
maintainable and understandable by others.

Structured Programming

▶ Dijkstra’s article ”Goto Statement Considered Harmful”


highlighted the problems of GO TO statements.
▶ Three constructs are sufficient to express any programming
logic:
▶ Sequence (e.g., a=0; b=5;)
▶ Selection (e.g., if(c==true) k=5; else m=5;)

7 / 12
Software.md 2024-09-17

▶ Iteration (e.g., while(k>0) k=j-k;)


▶ Structured programming methodology was developed.

Acceptance of Structured Programming

▶ It is possible to solve any programming problem without using


GO TO statements.
▶ Structured programming methodology became widely
accepted.
▶ Emphasizes clarity, simplicity, and ease of debugging.

Introduction to Structured Programming

▶ A program is called structured when it uses only three types


of constructs:
▶ Sequence: One statement after the other (e.g., one arithmetic
statement followed by another).
▶ Selection: Constructs like if, then, else, switch.
▶ Iteration: Constructs like for loop, while loop, do loop.
▶ Unstructured control flows are avoided.
▶ Consists of a neat set of modules.
▶ Uses single-entry, single-exit program constructs.

Exceptions to Structured Programming

▶ Sometimes, GO TO statements are used for practical reasons:


▶ Break
▶ Premature loop exit
▶ Exceptions
▶ Modern languages minimize the need for GO TO statements.

Advantages of Structured Programming

Structured programming offers several advantages:


• It has a good control structure because it does not use GO TO
statements and has only a few paths.
• It is simple, making it easy to read, understand, and maintain.
• It requires less effort and time for development and is less buggy.
• Non-structured programs may have bugs in paths that were not
anticipated.

Introduction to Data Structure-Oriented Design

8 / 12
Software.md 2024-09-17

▶ Emerged in early 1970s as control structure alone was


insufficient.
▶ Focus on careful design of data structures for large programs.
▶ Data structure design is used to derive program structure.
▶ Techniques like Jackson’s Structured Programming (JSP) and
Warnier-Orr Methodology became popular.

Jackson’s Structured Programming (JSP)

▶ Program code structure should correspond to data structure.


▶ Data structures are designed using notations for sequence,
selection, and iteration.
▶ Data structure design is then used to derive the program
structure.

Warnier-Orr Methodology

▶ Another popular data structure-oriented design technique.


▶ Focuses on deriving program structure from data flow and
structure.
▶ Emphasizes the importance of understanding data flows
through the program.

Data Flow Diagram (DFD)

▶ Represents the flow of data through a program.


▶ Used to model the working of a system.
▶ Starting from input, represents processing stations/functions
until output is generated.
▶ Simple and effective technique for system modeling.

Example - Car Assembly Unit

▶ Processing stations take parts (engine, chassis, etc.) and


assemble them.
▶ Represents data flow from input (e.g., engine) to output (e.g.,
assembled car).
▶ Each station performs a specific task (e.g., fixing engine to
chassis).
▶ Final design is obtained by representing data flow through all
stations.

9 / 12
Software.md 2024-09-17

Conclusion

▶ Data structure-oriented design techniques were crucial in the


1970s.
▶ They focused on aligning program structure with data
structure.
▶ Techniques like JSP and Warnier-Orr were instrumental in
improving software design.
▶ Understanding data flow is key to creating efficient and
maintainable programs.

Introduction to Object-Oriented Design

Object-Oriented Design (OOD) emerged in the 1980s as a powerful ap-


proach to modular software design. The main idea is to structure a program

around objects, which are entities that encapsulate both data and behavior.
This encapsulation allows objects to act as self-contained modules, hiding

their internal workings from the outside world. Relationships among ob-
jects, such as composition, reference, and inheritance, play a crucial role

in OOD, enabling the creation of complex systems that are both flexible
and maintainable.

Advantages of Object-Oriented Design

▶ Leads to a very good modular design.


▶ Simplifies understanding of large and complex systems.
▶ Facilitates code reuse, reducing development time and cost.
▶ Produces less buggy and easier to maintain code.

Example - Object Relationships

▶ Composition: A car object composed of engine, wheels, etc.


▶ Reference: A customer object referencing an order object.
▶ Inheritance: A vehicle class inherited by car and bike classes.

10 / 12
Software.md 2024-09-17

Conclusion

▶ Object-Oriented Design became popular in the 1980s.


▶ It promotes modularity, reusability, and maintainability.
▶ Key concepts include encapsulation, composition, reference,
and inheritance.
▶ OOD has had a lasting impact on modern software
development.

Evolution of Software Engineering Techniques

▶ Life Cycle Models: Structured approach to software


development.
▶ Project Management Techniques: Enhanced planning,
estimation, and monitoring.
▶ Testing Techniques: Shift from error correction to error
prevention.
▶ Debug Techniques: Improved methods for identifying and
resolving issues.
▶ Quality Assurance: Focus on producing high-quality,
maintainable code.
▶ CASE Tools: Automation and support for software
engineering processes.

Exploratory Style vs. Modern Practices

▶ Exploratory Style (1950s): Errors detected only during


testing.
▶ Modern Practices:
▶ Use of Life Cycle Models for systematic development.
▶ Focus on error prevention rather than just correction.
▶ Detection of errors as early as possible in the development
phase.

Modern Development Practices

▶ Emphasis on Requirements Specification: Thorough analysis


before coding begins.
▶ Distinct Design Phase: Adoption of standard design
techniques.
▶ Periodic Reviews: Continuous evaluation during development.
▶ Systematic Testing: Standardized testing techniques and
methodologies.
▶ Increased Visibility: Improved documentation and better
project management.

11 / 12
Software.md 2024-09-17

Documentation and Project Management

▶ Better Visibility: Production of consistent, high-quality


documents.
▶ Easier Fault Diagnosis and Maintenance: Thanks to improved
documentation.
▶ Use of Metrics: For project management, quality assurance,
and more.
▶ Thorough Planning: Estimation, scheduling, and monitoring
mechanisms are standard.

Conclusion

▶ Software design techniques have evolved significantly since the


1950s.
▶ Modern practices emphasize error prevention, systematic
development, and thorough documentation.
▶ The use of life cycle models, testing techniques, and project
management tools have transformed software engineering.

Summary I

▶ Software engineering represents the systematic accumulation


of programming knowledge and innovations developed over
decades.
▶ The adoption of a life cycle model is essential for the
development of any large software product. It ensures that
various development activities are conducted in a systematic
and disciplined manner.
▶ By adhering to a life cycle model, software development
becomes more manageable, and the likelihood of project
success increases significantly.

12 / 12

You might also like