SE UNIT-1
SE UNIT-1
ON
Software Engineering
(24ALMC00102T)
I MCA I Semester (R24)
Prepared by
T.Syamala
Assistant Professor
UNIT-I
INTRODUCTION
Computers were very slow in the initial years and lacked sophistication. If similar improvements could
have occurred to aircrafts, now personal mini-airplanes should have become available, costing as much as a
bicycle, and flying at over 1000 times the speed of the supersonic jets. The more powerful a computer is, the
more sophisticated programs can it run. Therefore, with every increase in the raw computing capabilities of
computers, software engineers have been called upon to solve increasingly larger and complex problems, and
that too in cost-effective and efficient ways. Software engineers have coped up with this challenge by innovating
and building upon their past programming experiences.
Software engineering is a systematic and cost-effective technique for software development. These
techniques help develop software using an engineering approach. The innovations and past experiences
towards writing good quality programs cost- effectively, have contributed to the emergence of the software
engineering discipline.
For example: If someone wants to travel from Punjab to Delhi. There are two approaches one can
follow to achieve the same result:
1. The normal approach is just to go out and catch the bus/train that is available.
2. A systematic approach is constructed as Firstly check on Google Maps about distance and after
analyzing the timing of trains and buses online and after that, match user’s preference suppose user have
some work till 4:00 PM and trains slot are: 1:00 PM, 6:00 PM then the user will choose 6:00 PM time
slot and reach Delhi.
From the above situation, one can easily analyze that Creating a systematic Approach is more optimal
and time and cost-effective as compared to a normal approach. This will same occur while designing Software.
So in Software Engineering working on an Engineering or a Systematic approach is more beneficial.
What is software engineering?
Software engineering an engineering branch Associated with development of software product using well
defined Scientific principles,,methods and procedures. The outcome of software engineering is an efficient
and effective software product.
Abstraction:
In software engineering and computer science, abstraction is a technique for arranging complexity of
computer systems. Abstraction means displaying only essential information and hiding the details. It works by
establishing a level of simplicity on which a person interacts with the system, suppressing the more complex
details below the current level. Data abstraction refers to providing only essential information about the data to
the outside world, hiding the background details or implementation. Consider a real life example of a man
driving a car.
Decomposition:
It 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.The decomposition principle advocates decomposing the problem into many
small independent parts. The small parts are then taken up one by one and solved separately. The idea is that
each small part would be easy to grasp and understand and can be easily solved. The full problem is solved when
all the parts are solved.
1. Early Computer Programming: Early commercial computers were very slow and too elementary as
compared to today’s standards. Even simple processing tasks took considerable computation time on those
computers. No wonder that programs at that time were very small in size and lacked sophistication. Those
programs were usually written in assembly languages.
Program lengths were typically limited to about a few hundreds of lines of monolithic assembly code.
Every programmer developed his own individualistic style of writing programs according to his intuition and
used this style ad hoc while writing different programs.
2. High-level Language Programming: Computers became faster with the introduction of semiconductor
technology in the early 1960s. Faster semiconductor transistors replaced the prevalent vacuum tube-based
circuits in a computer. With the availability of more powerful computers, it became possible to solve larger
and more complex problems.
At this time, high-level languages such as FORTRAN, ALGOL, and COBOL were introduced. This
considerably reduced the effort required to develop software and helped programmers to write larger
programs.Writing each high-level programming construct in effect enables the programmer to write several
machine instructions. However, the programmers were still using the exploratory style of software
development.
3. Control Flow-based Design: 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 flowcharting technique was developed. Even today, the flowcharting technique is being used to represent
and design algorithms.
4. Data Structure-oriented Design: Computers became even more powerful with the advent of
Integrated Circuits (ICs) in the early 1970s. These could now be used to solve more complex problems.
Software developers were tasked to develop larger and more complicated software. which often required
writing in excess of several tens of thousands of lines of source code.
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. Design techniques based on this principle are called Data
Structure-oriented Design.
Example: 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.
5. 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 Data Flow-Oriented Design techniques
were proposed.
The functions are also called as processes and the data items that are exchanged between the different functions
are represented in a diagram is known as a Data Flow Diagram (DFD).
6. Object-oriented Design: Object-oriented design technique is an intuitively appealing approach, where
the natural objects (such as employees, etc.) relevant to a problem are 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 is also known as data abstraction.
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.
Software life cycle: It is well known that all living organisms undergo a life cycle. For example when a seed
is planted,It germinates, grows into a full tree,and finally dies.Based on this concept of a biological life
cycle,the term 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.
• Phase 2: Design
• Phase 3: Implementation/Coding
• Phase 4: Testing
• Phase 5 : Deployement
• Phase 6: Maintenace
Phase 2: Design:
In this phase, the system and software design documents are prepared as per the requirement
specification document.
There are two kinds of design documents developed in this phase:
Low-Level Design(LLD)
Phase 4: Implementation/Coding:
Once the system design phase is over, the next phase is coding.
It is conducted by programmers and software developers
In this phase, developers start build the entire system by writing code using the chosen
programming language ( php,c,c++,html,python,Java)
In the coding phase, tasks are divided into units or modules and assigned to the various developers.
It is the longest phase of the Software Development Life Cycle process.
They also need to use programming tools like compiler, interpreters, debugger to generate and
implement the code.
Phase 5: Testing:
Phase 6: Deployment:
Once the software testing phase is over and no bugs or errors left in the system then the final
deployment process starts.
Based on the feedback given by the project manager, the final software is released and checked for
deployment issues if any changing ,modifying & updating software to keep it up with customer
needs.
Phase 7: Maintenance:
Once the system is deployed, and customers start using the developed system, following 3 activities occur
• Bug fixing - bugs are reported because of some scenarios which are not tested at all
SDLC MODELS:
1) waterfall model
2) Prototype model
3) Iterative model
4) Spiral model
5) Incremental model
6) RAD (Rapid application development) model
7) Agile Model
8) Evolutionary Model
1.waterfall model:
• Requirement Gathering and analysis − All possible requirements of the system to be developed are
captured in this phase and documented in a requirement specification document.
• System Design − The requirement specifications from first phase are studied in this phase and the
system design is prepared. This system design helps in specifying hardware and system requirements
and helps in defining the overall system architecture.
• Implementation − With inputs from the system design, the system is first developed in small
programs called units, which are integrated in the next phase. Each unit is developed and tested for its
functionality, which is referred to as Unit Testing.
• Integration and Testing − All the units developed in the implementation phase are integrated into a
system after testing of each unit. Post integration the entire system is tested for any faults and failures.
• Deployment of system − Once the functional and non-functional testing is done; the product is
deployed in the customer environment or released into the market.
• Maintenance − There are some issues which come up in the client environment. To fix those issues,
patches are released. Also to enhance the product some better versions are released. Maintenance is
done to deliver these changes in the customer environment.
Before the next phase of development, each Error can be fixed only during the phase
phase must be completed
Suited for smaller projects where It is not desirable for complex project where
requirements are well defined requirement changes frequently
2.Prototyping Model:
Prototyping Model is a software development model in which prototype is built, tested, and reworked
until an acceptable prototype is achieved.
Prototype model type is not a complete product it is just functional a replica of any idea
Advantages:
Communicate effectively
This is useful when requirement are changing rapidly
Disadvantages:
It is impossible to know how long it will take prototype tools are expensive
Costly with respect to time and money
There is a lot of Client or customer feedback
Step 1: Requirements gathering and analysis
A prototyping model starts with requirement analysis. In this phase, the requirements of the system are defined
in detail. During the process, the users of the system are interviewed to know what is their expectation from
the system.
4.Incremental Model:
It is a process of software development where requirements divided into multiple standalone modules of
the software development cycle. In this model, each module goes through the requirements, design,
implementation and testing phases. Every subsequent release of the module adds function to the previous
release. The process continues until the complete system achieved.
The various phases of incremental model are as follows:
1. Requirement analysis: In the first phase of the incremental model, the product analysis expertise
identifies the requirements. And the system functional requirements are understood by the requirement
analysis team. To develop the software under the incremental model, this phase performs a crucial role.
2. Design & Development: In this phase of the Incremental model of SDLC, the design of the system
functionality and the development method are finished with success. When software develops new
practicality, the incremental model uses style and development phase.
3. Testing: In the incremental model, the testing phase checks the performance of each existing function
as well as additional functionality. In the testing phase, the various methods are used to test the behavior
of each task.
Advertisement
4. Implementation: Implementation phase enables the coding phase of the development system. It
involves the final coding that design in the designing and development phase and tests the functionality in
the testing phase. After completion of this phase, the number of the product working is enhanced and
upgraded up to the final system product
Advantage of Incremental Model
o Errors are easy to be recognized.
o Easier to test and debug
o More flexible.
o Simple to manage risk because it handled during its iteration.
o The Client gets important functionality early.
Disadvantage of Incremental Model
o Need for good planning
o Total Cost is high.
o Well defined module interfaces are needed.
5.Spiral Model :
The spiral model, initially proposed by Boehm, is an evolutionary software process model that couples
the iterative feature of prototyping with the controlled and systematic aspects of the linear sequential
model.
Disadvantages
o Can be a costly model to use.
o Risk analysis needed highly particular expertise
o Doesn't work well for smaller projects.
Advantage :
o This model is flexible for change.
o In this model, changes are adoptable.
Disadvantage
o It required highly skilled designers.
7.Agile model:
The meaning of Agile is swift or versatile."Agile process model" refers to a software development approach
based on iterative development. Agile methods break tasks into smaller iterations, or parts do not directly
involve long term planning. It is combination of an incremental and Iterative process of software development
1. Requirements gathering: In this phase, you must define the requirements. You should explain business
opportunities and plan the time and effort needed to build the project. Based on this information, you can
evaluate technical and economic feasibility.
2. Design the requirements: When you have identified the project, work with stakeholders to define
requirements. You can use the user flow diagram or the high-level UML diagram to show the work of new
features and show how it will apply to your existing system.
3. Construction/ iteration: When the team defines the requirements, the work begins. Designers and
developers start working on their project, which aims to deploy a working product. The product will undergo
various stages of improvement, so it includes simple, minimal functionality.
4. Testing: In this phase, the Quality Assurance team examines the product's performance and looks for the
bug.
5. Deployment: In this phase, the team issues a product for the user's work environment.
6. Feedback: After releasing the product, the last step is feedback. In this, the team receives feedback about
the product and works through the feedback.
Advantages(Pros) :
1. Frequent Delivery
2. Face-to-Face Communication with clients.
3. Efficient design and fulfils the business requirement.
4. Anytime changes are acceptable.
8.Evolutionary Model:
The evolutionary model is also known as successive versions or incremental models. The main aim of
this evolutionary model is to deliver the products in total processes over time. It also combines the
iterative and collective model of the software development life cycle (SDLC).
It is also called successive versions model or incremental model. At first, a simple working model is
built. Subsequently it undergoes functional improvements & we keep on adding new functions till the
desired system is built.
1. Time
2. Cost
3. Quality
There are many activities of software project management : They are
1) Project Planning
2) Project Scheduling
3) Project Cost Estimation
4) COCOMO
5) Project Risk Management
6) Project Configuration Management
7) Project Communication Management
8) Staffing
Project planning:
Once a project is found to be feasible, software project managers undertake project planning. Project
planning is undertaken and completed even before any development activity starts. Project planning consists
of the following essential activities:
Project size: What will be problem complexity in terms of the effort and time required to develop the product?
Cost: How much is it going to cost to develop the project?
Duration: How long is it going to take to complete development?
Project schedule:
simply means a mechanism that is used to communicate and know about that tasks are needed and has to be
done or performed and which organizational resources will be given or allocated to these tasks and in what
time duration or time frame work is needed to be performed. Effective project scheduling leads to success of
project, reduced cost, and increased customer satisfaction. Scheduling in project management means to list
out activities, deliverables, and milestones within a project that are delivered. It contains more notes than
your average weekly planner notes. The most common and important form of project schedule is Gantt chart.
Software tools
Location
Duration
Experts Judgement and cost estimation
COCOMO
COCOMO (Constructive Cost Estimation Model) was proposed by Boehm [1981].
The necessary steps in this model are:
1. Get an initial estimate of the development effort from evaluation of thousands of delivered lines of
source code (KDLOC).
2. Determine a set of 15 multiplying factors from various attributes of the project.
3. Calculate the effort estimate by multiplying the initial estimate with all the multiplying factors i.e.,
multiply the values in step1 and step2.
The initial estimate (also called nominal estimate) is determined by an equation of the form used in the static
single variable models, using KDLOC as the measure of the size. To determine the initial effort E i in person-
months the equation used is of the type is shown below
Ei=a*(KDLOC)b
Or
E=a+b(s)c
E=Effort
S=Software Development Time
What is Risk?
A risk is a probable problem; it might happen, or it might not. There are main two characteristics of risk.
Uncertainty: the risk may or may not happen which means there are no 100% risks.
Loss: If the risk occurs in reality, undesirable results or losses will occur.
Risk Management
A software project can be concerned with a large variety of risks. In order to be adept to systematically identify
the significant risks which might affect a software project, it is essential to classify risks into different classes.
The project manager can then check which risks from each class are relevant to the project.
There are three main classifications of risks which can affect a software project:
1. Project risks
2. Technical risks
3. Business risks
1. Project risks: Project risks concern differ forms of budgetary, schedule, personnel, resource, and customer-
related problems. A vital project risk is schedule slippage. Since the software is intangible, it is very tough to
monitor and control a software project. It is very tough to control something which cannot be identified. For
any manufacturing program, such as the manufacturing of cars, the plan executive can recognize the product
taking shape.
2. Technical risks: Technical risks concern potential method, implementation, interfacing, testing, and
maintenance issue. It also consists of an ambiguous specification, incomplete specification, changing
specification, technical uncertainty, and technical obsolescence. Most technical risks appear due to the
development team's insufficient knowledge about the project.
Advertisement
3. Business risks: This type of risks contain risks of building an excellent product that no one need, losing
budgetary or personnel commitments, etc.
Other risk categories
1. 1. Known risks: Those risks that can be uncovered after careful assessment of the project program,
the business and technical environment in which the plan is being developed, and more reliable data
sources (e.g., unrealistic delivery date)
2. 2. Predictable risks: Those risks that are hypothesized from previous project experience (e.g., past
turnover)
3. 3. Unpredictable risks: Those risks that can and do occur, but are extremely tough to identify in
advance.
Principle of Risk Management
1. Global Perspective: In this, we review the bigger system description, design, and implementation. We
look at the chance and the impact the risk is going to have.
2. Take a forward-looking view: Consider the threat which may appear in the future and create future
plans for directing the next events.
3. Open Communication: This is to allow the free flow of communications between the client and the
team members so that they have certainty about the risks.
4. Integrated management: In this method risk management is made an integral part of project
management.
5. Continuous process: In this phase, the risks are tracked continuously throughout the risk management
paradigm.
Project Configuration Management:
It is practical in controlling and managing the access to various SCIs e.g., by preventing the two members of a
team for checking out the same component for modification at the same time.
Or
It is about to controll the changes in software like requirements,design and development of a product
Project Communication Management :
Communication is an essential factor in the success of the project.It is a bridge between client and
organization,Team members and hardware suppliers.The communication must be clear and
understood.Miscommunication can create a big problem in the project.
There are 4 types of Communication Methods:
Formal Verbal Communication
Informal verbal communication
Formal Written Communication
Informal Written Communication
Halstead’s Software Science – An Analytical Technique
Halstead’s software science is an analytical technique to measure size, development effort, and
development cost of software products. Halstead used a few primitive program parameters to develop the
expressions for over all program length, potential minimum value, actual volume, effort, and development time.
For a given program, let:
η1 be the number of unique operators used in the program,
η2 be the number of unique operands used in the program, N1 be the total number of
operators used in the program, N2 be the total number of operands used in the program.
Operators and Operands for the ANSI C language
The following is a suggested list of operators for the ANSI C language:
Operands are those variables and constants which are being used with operators in expressions. Note that
variable names appearing in declarations are not considered as operands.
Example :The function name in a function definition is not counted as an operator.
int func ( int a, int b ) { . .
.
}
For the above example code, the operators are: {}, ( ) We do not consider func, a, and b as
operands, since these are part of the function definition.
ORGANISATION AND TEAM STRUCTURES
Usually every software development organisation handles several projects at any time. Software
organisations assign different teams of developers to handle different software projects. With regard to staff
organisation, there are two important issues—How is the organisation as a whole structured? And, how are the
individual project teams structured? There are a few standard ways in which software organisations and teams
can be structured.
Functional format
In the functional format, the development staff are divided based on the specific functional group to which they
belong to. This format has schematically.
The different projects borrow developers from various functional groups for specific phases of the
project and return them to the functional group upon the completion of the phase. As a result, different teams
of programmers from different functional groups perform different phases of a project. For example, one team
might do the requirements specification, another do the design, and so on. The partially completed product
passes from one team to another as the product evolves
Project format
In the project format, the development staff are divided based on the project for which they work.A set
of developers is assigned to every project at the start of the project, and remain with the project till the
completion of the project. Thus, the same team carries out all the life cycle activities. An advantage of the
project format is that it provides job rotation. That is, every developer undertakes different life cycle activities
in a project. However, it results in poor manpower utilisation, since the full project team is formed
Figure: Schematic representation of the functional and project organisation.
Matrix format
A matrix organisation is intended to provide the advantages of both functional and project structures.
In a matrix organisation, the pool of functional specialists are assigned to different projects as needed.
STAFFING
Software project managers usually take the responsibility of choosing their team. Therefore, they need
to identify good software developers for the success of the project. A common misconception held by managers
as evidenced in their staffing, planning and scheduling practices, is the assumption that one software engineer
is as productive as another. H owever, experiments have revealed that there exists a large variability of
productivity between the worst and the best software developers in a scale of 1 to 30. In fact, the worst
developers may sometimes even reduce the overall productivity of the team, and thus in effect exhibit negative
productivity. Therefore, choosing good software developers is crucial to the success of a project.