0% found this document useful (0 votes)
4 views47 pages

CPE221-Introduction To Software Engineering

Software engineering is the systematic application of tools and techniques for developing computer-based applications, emphasizing good programming practices derived from research and experience. It involves principles like abstraction and decomposition to manage complexity and is essential for developing large, reliable software products. The document also discusses the evolution of software engineering, quality factors, ethical considerations, and various development tools and methodologies.
Copyright
© All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
4 views47 pages

CPE221-Introduction To Software Engineering

Software engineering is the systematic application of tools and techniques for developing computer-based applications, emphasizing good programming practices derived from research and experience. It involves principles like abstraction and decomposition to manage complexity and is essential for developing large, reliable software products. The document also discusses the evolution of software engineering, quality factors, ethical considerations, and various development tools and methodologies.
Copyright
© All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd

What is Software Engineering?

• the systematic application of tools and techniques in the development of


computer-based applications
• “A systematic collection of good program development practices and
techniques”.

• Good program development techniques have resulted from research


innovations as well as from the lessons learnt by programmers through years
of programming experiences.
Is software engineering a science or an art?
SOFTWARE DEVELOPMENT
PROJECTS
• Programs versus Products
Products
Programs • Developed by professional teams
•Developed by individuals (e.g., students, • Large, complex, and systematically designed
hobbyists) • Multiple users
•Small size, limited functionality
•Sole user: author themselves Includes:
•Often lacks: Good user interface
• Good user interface Detailed documentation (requirements specification,
• Proper documentation (no user design, test documents, user manuals)
manuals, design, or test documents) Thorough testing
• Maintainability, efficiency, reliability
Characteristics: Characteristics:
Toy software High reliability
Poor documentation Good maintainability
Low maintainability Conclusion
SOFTWARE DEVELOPMENT
PROJECTS

“CAR Hoare [1994] observed that rigorously using software


engineering principles to develop toy programs is very much
like employing civil and architectural engineering principles
to build sand castles for children to play.”
Principles Deployed by Software
Engineering to Overcome
Human Cognitive Limitations
Abstraction - refers to construction of a simpler version of a
problem by ignoring the details. The principle of constructing
an abstraction is popularly known as modelling (or model
construction ).

Decomposition - is another important principle that is


available in the repertoire of a software engineer to handle
problem complexity. This principle is profusely made use by
several software engineering techniques to contain the
exponential growth of the perceived problem complexity. The
decomposition principle is popularly known as the divide and
conquer principle
Why study software engineering?

• The skill to participate in development of large software. You can


meaningfully participate in a team effort to develop a large software
only after learning the systematic techniques that are being used in
the industry.
• You would learn how to effectively handle complexity in a software
development problem. In particular, you would learn how to apply
the principles of abstraction and decomposition to handle complexity
during various stages in software development such as
specification, design, construction, and testing
EMERGENCE OF
SOFTWARE ENGINEERING
Early Computer Programming - programmers wrote programs without formulating
any proper solution strategy, plan, or design a jump to the terminal and start coding
immediately on hearing out the problem. They then went on fixing any problems that
they observed until they had a program that worked reasonably well. We have already
designated this style of programming as the build and fix (or the exploratory
programming ) style.

High-Level Language Programming - Writing each high-level programming


construct in effect enables the programmer to write several machine instructions. Also,
the machine details (registers, flags, etc.) are abstracted from the programmer. At this
time, high-level languages such as FORTRAN, ALGOL, and COBOL were introduced.
EMERGENCE OF
SOFTWARE ENGINEERING
Control Flow-based Design- As the size and complexity of programs kept on increasing, the
exploratory programming style proved to be insufficient. Programmers found it increasingly
difficult not only to write cost-effective and correct programs, but also to understand and
maintain programs written by others. To cope up with this problem, experienced programmers
advised other programmers to pay particular attention to the design of a program’s control flow
structure. A program’s control flow structure indicates the sequence in which the program’s
instructions are executed. In order to help develop programs having good control flow structures,
the flow charting technique was developed.
EMERGENCE OF
SOFTWARE ENGINEERING
Structured programming—a logical extension
- A program is called structured when it uses only the sequence, selection, and iteration types of
constructs and is modular. Structured programs avoid unstructured control flows by restricting the
use of GO TO statements. Structured programming is facilitated, if the programming language
being used supports single-entry, single-exit program constructs such as if-then-else, do-while, etc.
Thus, an important feature of structured programs is the design of good control structures. Besides
the control structure aspects, the term structured program is being used to denote a couple of other
program features as well. A structured program should be modular. A modular program is one which
is decomposed into a set of modules1 such that the modules should have low interdependency
among each other.

Very soon several languages such as PASCAL, MODULA, C, etc., became available which were
specifically designed to support structured programming.
EMERGENCE OF
SOFTWARE ENGINEERING
Data Structure-oriented Design - It was soon discovered that while developing a program, it is
much more important to pay attention to the design of the important data structures of the
program than to the design of its control structure. Using data structure-oriented design
techniques, first a program’s data structures are designed. The code structure is designed based
on the data structure. An example of a data structure-oriented design technique is the Jackson’s
Structured Programming (JSP) technique developed by Michael Jackson [1975]

In JSP methodology, a program’s data structure is first designed using the notations for
sequence, selection, and iteration. The JSP methodology provides an interesting technique to
derive the program structure from its data structure representation.
EMERGENCE OF
SOFTWARE ENGINEERING
Data Flow-oriented Design - As computers became still faster and more powerful with the introduction of very large
scale integrated (VLSI) Circuits and some new architectural concepts, more complex and sophisticated software
were needed to solve further challenging problems. Therefore, software developers looked out for more effective
techniques for designing software and soon data flow-oriented techniques were proposed. The data flow-oriented
techniques advocate that the major data items handled by a system must be identified and the processing required
on these data items to produce the desired outputs should be determined. The functions (also called as processes )
and the data items that are exchanged between the different functions are represented in a diagram known as a
data flow diagram (DFD). The program structure can be designed from the DFD representation of the problem
EMERGENCE OF
SOFTWARE ENGINEERING
Object-oriented Design - Object-oriented design technique is an intuitively appealing approach,
where the natural objects (such as employees, pay-roll-register, etc.) relevant to a problem a re first
identified and then the relationships among the objects such as composition, reference, and
inheritance are determined. Each object essentially acts as a data hiding (also known as data
abstraction ) entity. Object-oriented techniques have gained wide spread acceptance because of their
simplicity, the scope for code and design reuse, promise of lower development time, lower
development cost, more robust code, and easier maintenance.
EMERGENCE OF
SOFTWARE ENGINEERING
Fundamental Skills of Software Engineers

1. How to identify, evaluate, choose, and implement an appropriate


methodology and CASE tools
2. How and when to use prototyping
3. How and when to select hardware, software, and languages
4. How to manage activities associated with configuration management,
planning, and control of the development process
5. How to select computer languages and develop computer programs
6. How and which project testing techniques to apply
7. How to choose and use software maintenance techniques.
8. How to evaluate and decide when to retire applications
Quality Software
Engineering Product
• on time
• within budget
• functional, i.e., does what it is supposed to do
• friendly to users
• error free
• flexible
• adaptable
McCall's Quality Factors
[Link] [Link]
2. Integrity 7. Testability
3. Reliability 8. Flexibility
4. Usability 9. Interface facility
5. Accuracy [Link]-usability
[Link]

Source:

[Link] resources/wwwresources/site/wp content/uploads/2012/11/Software-quality


[Link]
Applications
An application is the set of programs that automate some
business task.

3 Dimensions of Applications
•Characteristics
•Responsiveness
•Type
Applications Responsiveness

• Refers to how long it takes the system to act on and


respond to user actions

• Batch-oriented, on-line, or real-time


Types of Applications
• Transaction-oriented Applications/ Transaction Processing System
• Data Analysis Applications
• Decision Support Applications (DSS)
• Expert Systems Applications
ACM’s Code of Ethics
1. The developer shall act with integrity at all times.
a. The developer shall qualify an opinion out side his or her area of
competence.
b. The developer shall not falsify his or her qualifications.
c. The developer shall not knowingly issue false statements about the present or
expected status of a system.
d. The developer shall not misuse confidential or proprietary information.
e. The developer will remain sensitive to and will reveal potential conflicts of
interest.
ACM’s Code of Ethics
2. The developer should constantly strive to increase his or her
competence in the profession.
a. A developer will diligently attempt to develop systems that perform
their intended functions and satisfy the organization's needs.
b. A developer will help his or her colleagues develop professionally
ACM’s Code of Ethics
3. A developer shall accept only assignments for which there is
reasonable expectation of meeting the goals of the system.
4. A developer should use his or her special knowledge to advance the
health, privacy, and general welfare of the public and society.
a. A developer should always consider the individual's right to privacy when
working with data.
b. A developer should refrain from participating in a project in which he or she
feels there will be undesirable consequences for individuals,norganization, or
society as a whole.
Software Life Cycle
has been defined to imply the different stages (or phases) over which a
software evolves from an initial customer request for it, to a fully
developed software, and finally to a stage where it is no longer useful to
any user, and then it is discarded.

The life cycle of a software represents the series of identifiable stages


through which it evolves during its life time.
Software Development Cycle
(SDLC)
A software development life cycle (SDLC) model (also called software
life cycle model and software development process model ) describes the
different activities that need to be carried out for the software to evolve in
its life cycle.

An SDLC is represented graphically by drawing various stages of the life


cycle and showing the transitions among the phases. This graphical
model is usually accompanied by a textual description of various activities
that need to be carried out during a phase before that phase can be
considered to be complete.
Software Development Cycle
(SDLC)
Process versus methodology
-A process usually describes all the activities starting from the
inception of a software to its maintenance and retirement stages,
or at least a chunk of activities in the life cycle. It also
recommends specific methodologies for carrying out each
activity. A methodology, in contrast, describes the steps to carry
out only a single or at best a few individual activities.
Software Development Cycle
(SDLC)
Software development organizations have realized that adherence to a suitable life
cycle model helps to produce good quality software and that helps minimize the
chances of time and cost overruns.

Programming-in-the-small refers to development of a toy program by a single


programmer. Whereas programming-in-the-large refers to development of a
professional software through team effort. While development of a software of the
former type could succeed even while an individual programmer uses a build and fix
style of development, use of a suitable SDLC is essential for a professional software
development project involving team effort to succeed.
WATERFALL MODEL AND
ITS EXTENSIONS
WATERFALL MODEL AND
ITS EXTENSIONS
Prototyping
Selecting an Appropriate Life
Cycle Model for a Project

• Characteristics of the software to be developed

• Characteristics of the development team

• Characteristics of the customer


Software Development Tools
Software developer tools are specialized software or applications to help the
developers.

Why Should We Use Software Development Tools?

• Efficiency and Productivity • Automated Testing


• Code Quality • Continuous Integration
• Collaboration • Code Reusability
• Version Control • Performance Optimization
• Debugging and Testing • Documentation

[Link]
Software Development Tools
Integrated Development
Environments (IDEs)
-software development tools
developers use to simplify their
programming and design
experience. IDEs come with an
integrated user interface that
combines everything a developer
needs to write codes conveniently.
Software Development Tools
Integrated Development Environments (IDEs)
• Standard features of an IDE
• Text editor
Almost all IDEs will offer a text editor made specifically for writing and
modifying source code. While some tools may allow users to drag and drop
front-end elements visually, the majority offers a straightforward user interface
that emphasizes language-specific syntax.
• Debugger
Debugging tools help developers identify and correct source code mistakes.
Before the application is published, programmers and software engineers can
test the various code parts and find issues.
Software Development Tools
Integrated Development Environments (IDEs)
• Standard features of an IDE
• Compiler
• The compiler feature in IDE assists programmers in translating programming
languages into machine-readable languages such as binary code. The
compiler also helps to ensure the accuracy of these machine languages by
analyzing and optimizing them.
• Code completion
• This feature helps developers to intelligently and automatically complete
common code components. This process helps developers to save time and
reduces bugs that come from typos.
Software Development Tools
Integrated Development Environments (IDEs)
• Standard features of an IDE
• Programming language support
• Although some IDEs are pre-configured to support one programming
language, others offer multi-programming language support. Most times, in
choosing an IDE, users have to figure out which programming languages
they will be coding in and pick an IDE accordingly.
• Integrations and plugins
• Integration capability is one feature that makes an IDE stand out. IDEs
support the integration of other development tools through plugins to
enhance productivity.
Software Development Tools

Integrated Development Environments (IDEs)


Classifications of IDEs
• Multi-language IDE
• Mobile Development IDE
• Web/Cloud-based IDE
• Specific-Language IDE

The 12 Best IDEs for Programming | TechRepublic


Software Development Tools
Version Control Systems
Version control, also known as source
control, is the practice of tracking and
managing changes to software code.
Version control systems are software tools
that help software teams manage changes
to source code over time. Version control
software keeps track of every modification
to the code in a special kind of database
Version Control Systems - GeeksforGeeks
What is version control | Atlassian Git Tutorial
Software Development Tools
Version Control Systems
Use of Version Control
System:
• A repository
• Copy of Work
(sometimes called as
checkout)
• Working in a group:
Version Control Systems - GeeksforGeeks
What is version control | Atlassian Git Tutorial
Software Development Tools
Project Management Tools

Project management can be a significant


expense for some organizations, but when
software projects involve numerous
stakeholders, tasks, and teams — and the
results impact customers — the benefits
easily outweigh the risks. A project manager
can reduce overall expenses by streamlining
operations. A project manager has the power
to keep a project on time and within budget,
but, more importantly, they can create a
relationship between internal stakeholders Guide to Software Project Management | Smartsheet
and clients, improving communication and
visibility into projects
Software Development Tools
Software testing Tools
is the process of evaluating a software application
or system to identify defects, errors, or bugs. The
goal of software testing is to ensure that the
software meets the requirements of the
stakeholders, including functionality, performance,
reliability, and usability.

Software testing can be performed manually,


using human testers to execute test cases and
report issues, or it can be automated, using tools
to run tests automatically and generate reports.

Best 10 Software Testing Tools ([Link])


Software Development Tools
Build Automation Tools
Software utilities known as
“build tools” streamline the
transformation of source code
into deployable forms like
executable and libraries.

What is a Build Tool? (with Top 5 Build Tools) | BrowserStack


Software Development Tools
Collaboration Tools

is an application that
streamlines workflow and facilitates
communication and collaboration
between distributed DevOps team
members. It ensures everyone’s on the
same page and pulling together in the
right direction.

10 Best Collaboration Tools for Software Development in 2024 ([Link])


Software Development Tools
Design and Modelling Tools

Data modeling involves


devising a schema for data
storage within a database,
outlining the data elements and
their rules and relationships.

Top Data Modeling Tools for 2024: A Guide for Analysts & Engineers ([Link])
5 Software Architecture Tools and How to Use them Effectively ([Link])
Software Development Tools
Database Management Tools

are used to create and manage


databases with functions such as
storage, retrieval, and querying
Software Development Tools
Deployment Tools
Open source deployment tools
help enhance the process of deploying
code into various environments. They
are crucial in the DevOps and Agile
methodologies, where continuous
integration and continuous delivery.
These tools help automate the
deployment process, reducing the risk
of human error, and speeding up the
development cycle

Top 6 Open Source Deployment Tools for 2023 | Overview, Uses Cases, Examples ([Link])
References
•Conger, S. A. (1994). The new software engineering. Cambridge, MA: Course
Technology -I.T.P.

•Fitzpatrick, R. (1996). Software quality: definitions and strategic issues.


Retrieved from [Link]

• FUNDAMENTALS OF SOFTWARE ENGINEERING, Fourth Edition Rajib Mal

You might also like