CSE 201 Unit1 122914
CSE 201 Unit1 122914
FACULTY OF COMPUTING
DEPARTMENT OF SOFTWARE ENGINEERING
CSE 201: INTRODUCTION TO SOFTWARE ENGINEERING
LECTURE NOTE
What is a Software?
Software can define as:
Instruction – executed provide desire features, function & performance.
Data structure – to adequately manipulate operation.
Documentations – operation and use of the program
Engineering on the other hand, is all about developing products, using well-defined, scientific principles and methods. SE is the process
of developing, testing and deploying computer applications to solve real-world problems by adhering to a set of engineering principles
and best practices
IEEE defines software engineering as:
(1) The application of a systematic disciplined, quantifiable approach to the development, operation and maintenance of software;
that is, the application of engineering to software.
(2) Friedrich Ludwig "Fritz" Bauer: Software engineering is the establishment and use of sound engineering principles in order
to obtain economically software that is reliable and work efficiently on real machines.
Software is considered to be collection of executable programming code, associated libraries and documentations
Characteristics of software: Different between s/w and h/w
• Software is developed or engineered; it is not manufactured.
• Software does not “wear out” but it does deteriorate.
• Software continues to be custom built, as industry is moving toward component based construction.
Hardware Software
Manufacture Developed/engineer
System software
• System software is a collection of programs written to service other programs.
• It is characterized by heavy interaction with computer hardware; heavy usage by multiple users; concurrent operation that
requires scheduling, resource sharing, and sophisticated process management; complex data structures; and multiple external
interfaces.
Ex. Compilers, operating system, drivers etc.
Application Software :
• Application software consists of standalone programs that solve a specific business need.
• Application software is used to control the business function in real-time.
Engineering /Scientific software:
• Characterized by "number crunching" algorithms.
• Applications range from astronomy to volcano logy, from automotive stress analysis to space shuttle orbital dynamics, and
from molecular biology to automated manufacturing.
Ex. Computer Aided Design (CAD), system stimulation etc.
Embedded Software:
• It resides in read-only memory and is used to control products and systems
• Embedded software can perform limited and esoteric functions.
Ex. keypad control for a microwave oven.
Product line software:
• Designed to provide a specific capability for use by many different customers, product line software can focus on a limited and
esoteric marketplace.
Ex. Word processing, spreadsheet, CG, multimedia, etc.
Web Applications:
• Web apps can be little more than a set of linked hypertext files.
• It evolving into sophisticated computing environments that not only provide standalone features, functions but also integrated
with corporate database and business applications.
Artificial Intelligence software
• AI software makes use of non-numerical algorithms to solve complex problems that are not amenable to computation or
straightforward analysis
Ex. Robotics, expert system, game playing
Characteristics of good software
A software product can be judged by what it offers and how well it can be used. This software must satisfy on the following grounds:
Operational
Transitional
Maintenance
• Operational • Transitional
This tells us how well the software works in operations. It • This aspect is important when the software is moved
can be measured on: from one platform to another:
• Budget, Usability, Efficiency, Correctness, Functionality, Portability, Interoperability, Reusability, Adaptabili
Dependability, Security and Safety • Maintenance
This aspect briefs about how well the software has
the capabilities to maintain
itself in the ever-changing environment:
• Modularity, Maintainability, Flexibility, Scalability
Friedrich Ludwig "Fritz" Bauer: Software engineering is the establishment and use of sound engineering principles in order to obtain
economically software that is reliable and work efficiently on real machines
Origin of Software Engineering:
Though the original use of the term is uncertain, the term "software engineering" first appeared in the late 1950s and early 1960s, with
the NATO Science Committee sponsoring two conferences on the topic in 1968 and 1969, marking a significant boost for the field. the
first software engineering (the conference was held and sponsored by NATO in 1968 precisely). the rise of complex software projects
that often failed to meet deadlines, budgets, and quality expectations. This led to a recognition that software development needed a
more rigorous approach, similar to other engineering disciplines. Margaret Hamilton coined the term "software engineering" to give
legitimacy to the software development efforts, recognizing that software developers deserved the same level of recognition as hardware
engineers.
Even though a software engineer usually manages many coding projects, software engineering entails more than just writing code for
the software. In reality, software engineering encompasses every phase of the software development lifecycle (SDLC), from planning
the budget to analysis, design, development, software testing, integration, quality and retirement.
Most software engineering tasks can be broken into the following three categories:
Operational software engineering. It includes all decisions and tasks pertaining to how the software will perform within a computer
system. This may include anything related to the software budget, the way teams and users will interact with the software and any
potential risks such as those associated with defective and outdated software.
Transitional software engineering. This type of software engineering entails duties related to the software's adaptability and
scalability when it's moved outside of its initial setting.
Software engineering maintenance. It entails activities connected to enhancing and debugging current software to account for
environmental changes, new technologies, bugs and risk factors that might have been disregarded during a previous development
cycle. Over time, retirement takes over as maintenance of certain software is gradually reduced.
Challenge for Software Engineers is to produce high quality software with finite amount of
resources & within a predicted schedule
It varies depending on their position.
The responsibilities and roles of a software engineer can vary depending on their position. Typically, the following day-to-day tasks
are included
5. Consultation with customers, engineers, security experts and other parties involved.
Large software - It is easier to build a wall than to a house or building, likewise, as the size of software become large engineering
has to step to give it a scientific process.
Scalability- If the software process were not based on scientific and engineering concepts, it would be easier to re-create new
software than to scale an existing one.
Cost- As hardware industry has shown its skills and huge manufacturing has lower down he price of computer and electronic
hardware. But the cost of software remains high if proper process is not adapted.
Dynamic Nature- The always growing and adapting nature of software hugely depends upon the environment in which user
works. If the nature of software is always changing, new enhancements need to be done in the existing one. This is where software
engineering plays a good role.
Rapidly changing technology. Due to the rapid introduction of new technologies such as machine learning, artificial
intelligence and deep learning, software engineers are always under scrutiny to differentiate themselves from the competition
and create new computer software products that reflect the changing trends. In order to keep up with technology advancements,
they must also continually update their skill sets.
Time limitations. Time constraints can be a major obstacle for software engineers. If the engineers are pressed on time, they are
unable to develop a product that satisfies quality requirements.
Changing requirements. For software engineers, changing requirements during the development process can present
unforeseen difficulties. If they're not able to adapt to shifting requirements quickly, the outcome of the project could be impacted.
Data privacy. The Health Insurance Portability and Accountability Act (HIPAA), the California Consumer Privacy Act (CCPA)
and the General Data Protection Regulation (GDPR) of the European Union are just a few of the many privacy laws that apply
to businesses today. Regulations can occasionally restrict software engineering teams on how they use data to build products and
are subject to frequent adjustment.
Unclear customer requirements. Customers occasionally lack clarity on their software needs. As a result, software engineers
might not be aware of the extensive list of features that consumers frequently require in the program and issues can arise once
the software is executed.
Risk of software failure. A software with bugs or issues can sometimes have serious repercussions. For instance, the cost of
software failure can be enormous for safety-critical industries such as space, aviation and nuclear power plants.
Reading Assignment: Questions About Software Haven't Changed Over the Decades
• Why can't we find all errors before we give the software to our customers?
• Why do we continue to have difficulty in measuring progress as software is being developed and maintained?
Software Evolution
The process of developing a software product using software engineering principles and methods is referred to as Software Evolution.
This includes the initial development of software and its maintenance and updates, till desired software product is developed,
which satisfies the expected requirements. Evolution starts from the requirement gathering process. After which developers create a
prototype of the intended software and show it to the users to get their feedback at the early stage of the software product development.
The users suggest changes, on which several consecutive updates and maintenance keep on changing too. This process changes to
the original software, till the desired
software is accomplished.
Software Paradigms
Software paradigms refer to the methods and steps, which are taken while designing the software. There are many methods proposed
and are in work today, but we need to see where in the software engineering these paradigms stand. These can be combined into various
categories, though each of them is contained in one another:
• engineering work.
• Software models provide stability, control, and organization to a process that if not managed can easily get out of control
• Software process models are adapted to meet the needs of software engineers and managers for a specific project.
Waterfall model
• It is also called the classic life cycle or the waterfall model, the linear sequential model suggests a systematic, sequential approach
to software development that begins at the system level and progresses through anSoftware Process models are not perfect, but
provide roadmap for software analysis, design, coding, testing, and support. The sequential nature of model does not allow us to
go back and undo or redo our actions and the waterfall model can be use where the project is short and requirements are very
well known, clear and fixed.
It has following activities.
• Software requirements analysis.
• Design
• Code Generation
• Testing
• Support
• Requirement gathering
• To understand the nature of the program(s) to be built , The team holds discussions with various stakeholders from problem
domain and tries to bring out as much information as possible on their requirements. The requirements are contemplated
and segregated into user requirements, system requirements and functional requirements. The requirements are collected
using a number of practices as like studying the existing or obsolete system and software, conducting interviews of users and
developers, referring to the database or collecting answers from the questionnaires.
• Feasibility Study
• After requirement gathering, the team comes up with a rough plan of software and the process. At this step the team
analyzes if a software can be designed to fulfill all requirements of the user, and if there is any possibility of software being no
more useful. It is also analyzed if the project is financially, practically, and technologically feasible for the organization
to take up. There are many algorithms available, which help the developers to conclude the feasibility of a software
project.
• The design process translates requirements into a representation of the software that can be assessed for quality before coding
begins.
• Software Design
• Next step is to bring down whole knowledge of requirements and analysis on the desk and design the software product. The
inputs from users and information gathered in requirement gathering phase are the inputs of this step. The output of this step
comes in the form of two designs; logical design, and physical design. Engineers produce meta-data and data dictionaries,
logical diagrams, data-flow diagrams, and in some cases pseudo codes.
• Coding
• This step is also known as programming phase. The implementation of software design starts in terms of writing program
code in the suitable programming language and developing error-free executable programs efficiently.
• Testing
• An estimate says that 50% of whole software development process should be tested. Errors may ruin the software from critical
level to its own removal. Software testing is done while coding by the developers and thorough testing is conducted by testing
experts at various levels of code such as module testing, program testing, product testing.
Advantages • Once an application is in the testing stage, it is very
• Simple and easy to understand and use. difficult to go back and change something that was not
• Easy to manage due to the rigidity of the model – each well-thought out in the concept stage.
phase has specific deliverables and a review process. • No working software is produced until late during the
• Phases are processed and completed one at a time. life cycle.
• Works well for smaller projects where requirements are • High amounts of risk and uncertainty.
very well understood. • Not a good model for complex and object-oriented
• A schedule can be set with deadlines for each stage of projects.
development and a product can proceed through the • Not suitable for the projects where requirements are at a
development process moderate to high risk of changing. -Poor model for long
• t does not allow for much reflection or revision. and ongoing projects
• Dis Advantages
Prototype Model
• Prototype methodology is defined as a Software Development model in which a prototype is built, test, and then reworked when
needed until an acceptable prototype is achieved.
• Software prototyping model works best in scenarios where the project's requirement are not known. It is an iterative, trial, and
error method which take place between the developer and the client.
• It begins with requirements gathering. Developer and customer meet and define the overall objectives for the software.
• Iteration occurs as the prototype is tuned to satisfy the needs of the customer, while at the same time enabling the developer to
better understand what needs to be done.
• The prototype serves as a mechanism for identifying software requirement.
• Prototyping is well suited for projects where requirements are hard to determine and the confidence in the stated requirements is
low.
• Prototyping is often not used, as it is feared that development costs may become large.
• However, in some situations, the cost of software development without prototyping may be more than with prototyping
• First, the experience of developing the prototype might reduce the cost of the later phases when the actual software development
is done.
• Overall, in projects where requirements are not properly understood in the beginning, using the prototyping process model can
be the most effective method for developing the software.
• It is an excellent technique for reducing some types of risks associated with a project.
• prototype some time can be problamatic because the customer sees what appears to be a working version of the software, unaware
that in the rush to get it working no one has considered overall software quality or long-term maintainability.
The incremental model
• The incremental model combines elements of the linear sequential model (applied repetitively) with the iterative philosophy
of prototyping. When an incremental model is used, the first increment is often a core product.
• The core product is used by the customer (or undergoes detailed review).
• As a result of use and/or evaluation, a plan is developed for the next increment.
• The plan addresses the modification of the core product to better meet the needs of the customer and the delivery of additional
features and functionality.
• This process is repeated following the delivery of each increment, until the complete product is produced.
• Unlike prototyping, the incremental model focuses on the delivery of an operational product with each increment.
Spiral model
• The spiral model, is an evolutionary software process model that couples the iterative nature of prototyping with the controlled
and systematic aspects of the linear sequential model.
• This model considers risk, which often goes un-noticed by most other models. The model starts with determining objectives
and constraints of the software at the start of one iteration. Next phase is of prototyping the software. This includes risk
analysis. Then one standard SDLC model is used to build the software. In the fourth phase of the plan of next iteration
is prepared