Software Engineering
Software Engineering
Internship Report
Submitted in fulfillment of
the requirements for the
Degree of Bachelor of Technology
Under BijuPattnaik University of Technology
.
Submitted By
Rhythm Bhaumik Roll No. ECE_201910286
2022-2023
ABSTRACT
Python is a modern, easy-to-learn, object-oriented programming language. It has a
powerful set of built-in data types and easy-to-use control constructs. Since Python
is an interpreted language, it is most easily reviewed by simply looking at and
describing interactive sessions. It is used in vast number of applications due to the
various standard libraries that come along with it and its capacity to integrate with
other languages and use their features. Python can be used for scripting, web
scraping, and creating data sets. It’s popular in the scientific community for scientific
computing; there are libraries that make it easy to share academic code projects in
Python. Python is a web programming language, so it interfaces with the internet. It
knows how to receive and send web requests and talk to databases. This paper
describes the main features of Python programming, loops and control statements in
python then discusses applications of Python programming.
ACKNOWLEDGEMENT
It is my privilege to epitomize my deepest sense of gratitude and indebtedness to my advisor
Prof. Sukanti Pal, Internship Coordinator for her valuable guidance, keen and sustained
interest, and intuitive support. I would like to extend our sincere thanks to her for giving me
his valuable time for the completion of our project.
I acknowledge with immense pleasure the sustained interest, encouraging attitude and
constant inspiration rendered by Dr. Sukant K. Mohapatra (Chairman), Dr. Priyadarshi
Tripathy (Principal) and Prof. M. Suresh(HoD, Dept. of ECE) N.I.S.T. Their continued
drive for better quality in everything that happens at N.I.S.T. and selfless inspiration has
always helped us to move ahead
Rhythm Bhaumik
TABLE OF CONTENTS
ABSTRACT...............................................................................................................................i
ACKNOWLEDGEMENT.......................................................................................................ii
TABLE OF CONTENTS.......................................................................................................iii
LIST OF FIGURES................................................................................................................iv
1. INTRODUCTION................................................................................................................1
2. EVOLUTION OF SOFTWARE………………………………………………………….2
3. SOFTWARE CRISIS……………………………………………………………………...4
4.CHARACTERISTICS OF SOFTWARE………………………………………………...6
4.1 Functionality……………………………………………………………………………6
4.2 Reliability:………………………………………………………………………………6
4.3 Efficiency………………………………………………………………………………..6
4.4 Usability…………………………………………………………………………………7
4.5 Maintainability…………………………………………………………………………7
4.6 Portability………………………………………………………………………………7
5. SOFTWARE DEVELOPMENT LIFE CYCLE………………………………………...8
6. MODEL OF SOFTWARE ENGINEERING…………………………………………..10
6.1 Waterfall Model……………………………………………………………………….10
6.2 Evolutionary Model…………………………………………………………………...12
6.3 Spiral Model…………………………………………………………………………...13
6.4 Prototype Model………………………………………………………………………14
7.CONCLUSION……………………………………………………………………………16
REFERENCES…………………………………………………………………………………..17
LIST OF FIGURES
Fig.1 Software Evolution……………………………………………………………………...2
Fig. 2 Software Crisis…………………………………………………………………….........4
Fig 3. Characteristics of Software……………………………………………………………..6
Fig 4. Software Development Life……………………………………………………….........8
1. INTRODUCTION
2. EVOLUTION OF SOFTWARE
Python's features include:
• Easy-to-learn: Python has few keywords, simple structure, and a clearly defined
syntax. This allows the student to pick up the language quickly.
• Easy-to-read: Python code is more clearly defined and visible to the eyes.
• Easy-to-maintain: Python's source code is fairly easy-to-maintain.
• A broad standard library: Python's bulk of the library is very portable and cross-
platform compatible on UNIX, Windows, and Macintosh.
• Interactive Mode: Python has support for an interactive mode which allows
interactive testing and debugging of snippets of code.
• Portable: Python can run on a wide variety of hardware platforms and has the
same interface on all platforms.
• Extendable: You can add low-level modules to the Python interpreter. These
modules enable programmers to add to or customize their tools to be more
efficient. • Databases: Python provides interfaces to all major commercial
databases.
• GUI Programming: Python supports GUI applications that can be created and
ported to many system calls, libraries and windows systems, such as Windows
MFC, Macintosh, and the X Window system of Unix.
• Scalable: Python provides a better structure and support for large programs than
shell scripting.
Python has a big list of good features:
• It supports functional and structured programming methods as well as OOP.
• It can be used as a scripting language or can be compiled to byte-code for
building large applications.
• It provides very high-level dynamic data types and supports dynamic type
checking.
• IT supports automatic garbage collection.
• It can be easily integrated with C, C++, COM, ActiveX, CORBA, and Java.
2. ARITHMETIC OPERATORS
Operator Description Example
There is no single solution to the crisis. One possible solution to a software crisis is
Software Engineering because software engineering is a systematic, disciplined, and
quantifiable approach. For preventing software crises, there are some guidelines:
4. CHARACTERISTICS OF SOFTWARE
Software is defined as a collection of computer programs, procedures, rules, and
data. Software Characteristics are classified into six major components:
4.2 Reliability:
A set of attributes that bears on the capability of software to maintain its level of
performance under the given condition for a stated period of time.
Required functions are:
4.3 Efficiency:
It refers to the ability of the software to use system resources in the most effective
and efficient manner. The software should make effective use of storage space and
executive command as per desired timing requirements.
Required functions are:
4.4 Usability:
It refers to the extent to which the software can be used with ease. the amount of
effort or time required to learn how to use the software.
Required functions are:
4.5 Maintainability:
It refers to the ease with which the modifications can be made in a software system
to extend its functionality, improve its performance, or correct errors.
Required functions are:
4.6 Portability:
A set of attributes that bears on the ability of software to be transferred from one
environment to another, without or minimum changes.
Required functions are:
The classical waterfall model is the basic software development life cycle model. It is
very simple but idealistic. Earlier this model was very popular but nowadays it is not
used. But it is very important because all the other software development life cycle
models are based on the classical waterfall model. The classical waterfall model
divides the life cycle into a set of phases. This model considers that one phase can
be started after the completion of the previous phase. That is the output of one
phase will be the input to the next phase. Thus, the development process can be
considered as a sequential flow in the waterfall. Here the phases do not overlap with
each other.
Feasibility Study: The main goal of this phase is to determine whether it would be
financially and technically feasible to develop the software. The feasibility study
involves understanding the problem and then determining the various possible
strategies to solve the problem. These different identified solutions are analysed
based on their benefits and drawbacks, The best solution is chosen and all the other
phases are carried out as per this solution strategy.
Requirements analysis and specification: The aim of the requirement analysis
and specification phase is to understand the exact requirements of the customer and
document them properly. This phase consists of two different activities.
Requirement gathering and analysis:Firstly, all the requirements regarding the
software are gathered from the customer and then the gathered requirements are
analysed. The goal of the analysis part is to remove incompleteness (an incomplete
requirement is one in which some parts of the actual requirements have been
omitted) and inconsistencies (an inconsistent requirement is one in which some part
of the requirement contradicts some other part).
Requirement specification: These analyzed requirements are documented in a
software requirement specification (SRS) document. SRS document serves as a
contract between the development team and customers. Any future dispute between
the customers and the developers can be settled by examining the SRS document.
Design: The goal of this phase is to convert the requirements acquired in the SRS
into a format that can be coded in a programming language. It includes high-level
and detailed design as well as the overall software architecture. A Software Design
Document is used to document all of this effort (SDD)
Coding and Unit testing: In the coding phase software design is translated into
source code using any suitable programming language. Thus each designed module
is coded. The aim of the unit testing phase is to check whether each module is
working properly or not.
Integration and System testing: Integration of different modules are undertaken
soon after they have been coded and unit tested. Integration of various modules is
carried out incrementally over a number of steps. During each integration step,
previously planned modules are added to the partially integrated system and the
resultant system is tested. Finally, after all the modules have been successfully
integrated and tested, the full working system is obtained and system testing is
carried out on this. System testing consists of three different kinds of testing activities
as described below:
Alpha testing: Alpha testing is the system testing performed by the
development team.
Beta testing: Beta testing is the system testing performed by a friendly set of
customers.
Acceptance testing: After the software has been delivered, the customer
performed acceptance testing to determine whether to accept the delivered
software or reject it.
Maintenance: Maintenance is the most important phase of a software life cycle. The
effort spent on maintenance is 60% of the total effort spent to develop a full software.
There are basically three types of maintenance:
Corrective Maintenance: This type of maintenance is carried out to correct
errors that were not discovered during the product development phase.
Perfective Maintenance: This type of maintenance is carried out to enhance
the functionalities of the system based on the customer’s request.
Adaptive Maintenance: Adaptive maintenance is usually required for porting
the software to work in a new environment such as working on a new
computer platform or with a new operating system.
Evolutionary model suggests breaking down of work into smaller chunks, prioritizing
them and then delivering those chunks to the customer one by one. The number of
chunks is huge and is the number of deliveries made to the customer. The main
advantage is that the customer’s confidence increases as he constantly gets
quantifiable goods or services from the beginning of the project to verify and validate
his requirements.The model allows for changing requirements as well as all work in
broken down into maintainable work chunks. Application of Evolutionary Model:
It is used in large projects where you can easily find modules for incremental
implementation. Evolutionary model is commonly used when the customer
wants to start using the core features instead of waiting for the full software.
Evolutionary model is also used in object-oriented software development
because the system can be easily portioned into units in terms of objects.
Each phase of the Spiral Model is divided into four quadrants as shown in the above
figure. The functions of these four quadrants are discussed below-
Objectives determination and identify alternative solutions: Requirements are
gathered from the customers and the objectives are identified, elaborated,
and analysed at the start of every phase. Then alternative solutions possible
for the phase are proposed in this quadrant.
Identify and resolve Risks: During the second quadrant, all the possible
solutions are evaluated to select the best possible solution. Then the risks
associated with that solution are identified and the risks are resolved using the
best possible strategy. At the end of this quadrant, the Prototype is built for
the best possible solution.
Develop next version of the Product: During the third quadrant, the identified
features are developed and verified through testing. At the end of the third
quadrant, the next version of the software is available.
Review and plan for the next Phase: In the fourth quadrant, the Customers
evaluate the so far developed version of the software. In the end, planning for
the next phase is started.
In this process model, the system is partially implemented before or during the
analysis phase thereby giving the customers an opportunity to see the product early
in the life cycle. The process starts by interviewing the customers and developing the
incomplete high-level paper model. This document is used to build the initial
prototype supporting only the basic functionality as desired by the customer. Once
the customer figures out the problems, the prototype is further refined to eliminate
them. The process continues until the user approves the prototype and finds the
working model to be satisfactory.
There are four types of models available:
A) Rapid Throwaway Prototyping –
This technique offers a useful method of exploring ideas and getting customer
feedback for each of them. In this method, a developed prototype need not
necessarily be a part of the ultimately accepted prototype. Customer feedback
helps in preventing unnecessary design faults and hence, the final prototype
developed is of better quality.
B) Evolutionary Prototyping –
In this method, the prototype developed initially is incrementally refined on the
basis of customer feedback till it finally gets accepted. In comparison to Rapid
Throwaway Prototyping, it offers a better approach which saves time as well as
effort. This is because developing a prototype from scratch for every iteration of
the process can sometimes be very frustrating for the developers.
C) Incremental Prototyping –
In this type of incremental Prototyping, the final expected product is broken into
different small pieces of prototypes and being developed individually. In the end,
when all individual pieces are properly developed, then the different prototypes
are collectively merged into a single final product in their predefined order. It’s a
very efficient approach that reduces the complexity of the development process,
where the goal is divided into sub-parts and each sub-part is developed
individually. The time interval between the project’s beginning and final delivery is
substantially reduced because all parts of the system are prototyped and tested
simultaneously. Of course, there might be the possibility that the pieces just do
not fit together due to some lack of ness in the development phase – this can
only be fixed by careful and complete plotting of the entire system before
prototyping starts.
D) Extreme Prototyping – This method is mainly used for web development. It is
consists of three sequential independent phases:
D.1) In this phase a basic prototype with all the existing static pages are
presented in the HTML format.
D.2) In the 2nd phase, Functional screens are made with a simulated data
process using a prototype services layer.
D.3) This is the final step where all the services are implemented and associated
with the final prototype.
7. CONCLUSION
Software engineering is 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 reliable software product.
Software project management has wider scope than software engineering process
as it involves communication, pre- and post-delivery support etc.
Softwareengineering is a branch of computer Science, which uses well-defined
engineering concepts required to produced
Efficient
Durable
Scalable
in budget and on time software products.
REFERENCES
[1] https://www.cisco.com/in-en/industries/natural-resources-index
[2] Materials provided by Accenture.
[3] https://www.geeksforgeeks.org/software-engineering/
[4] https://en.wikipedia.org/wiki/Software_engineering