Wa0003
Wa0003
Wa0003
SOFTWARE:
The term software engineering is composed of two words, software and engineering. Software is more
than just a program code. A program is an executable code, which serves some computational purpose.
Software is considered to be a collection of executable programming code, associated libraries and
documentations. Software, when made for a specific requirement is called software product.
ENGINEERING:
Engineering on the other hand, is all about developing products, using well-defined, scientific principles
and methods
So, we can define software engineering as an engineering branch associated with the development of
software product using well-defined scientific principles, methods and procedures. The outcome of
software engineering is an efficient and reliable software product.
The need of software engineering arises because of higher rate of change in user requirements and
environment on which the software is working.
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 the 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 the 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.
Quality Management- Better process of software development provides better and quality software
product.
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
Well-engineered and crafted software is expected to have the following characteristics: Operational This
tells us how well software works in operations. It can be measured on:
Budget
Usability
Efficiency
Correctness
Functionality
Dependability
Security
Safety
Transitional This aspect is important when the software is moved from one platform to another:
Portability
Interoperability
Reusability
Adaptability
Maintenance
This aspect briefs about how well a software has the capabilities to maintain itself in the everchanging
environment:
Modularity
Maintainability
Flexibility
Scalability
In short, Software engineering is a branch of computer science, which uses well-defined engineering
concepts required to produce efficient, durable, scalable, in-budget and on-time software products.
It is a product and, at the same time, the vehicle for delivering a product.
1. Product
2. Vehicle
As a product, it delivers the computing potential embodied by computer hardware or, more broadly, a
network of computers that are accessible by local hardware. Whether it resides within a cellular phone
or operates inside a mainframe computer, software is an information transformer—producing,
managing, acquiring, modifying, displaying, or transmitting information that can be as simple as a
single bit or as complex as a multimedia presentation.
As the vehicle used to deliver the product, software acts as the basis for the control of the computer
(operating systems), the communication of information (networks), and the creation and control of
other programs (software tools and environments).
Software delivers the most important product of our time—information. Software transforms personal
data (e.g., an individual’s financial transactions) so that the data can be more useful in a local context;
it manages business information to enhance competitiveness;
it provides a gateway to worldwide information networks (e.g., Internet) and provides the means for
acquiring information in all of its forms. The role of computer software has undergone significant change
over a time span of little more than 50 years.
The lone programmer of an earlier era has been replaced by a team of software specialists, each
focusing on one part of the technology required to deliver a complex application.
1. System Software
2. Application software
3. Engineering/scientific software
4. Embedded software
5. Product-line software
6. Web Application
7. Artificial intelligence software
System Software: It is a collection of programs written to service other programs. Some system
software are compilers, editors, file management utilities. They process complex but determinate
information structure. Other system applications can be operating system components, drivers,
networking software. They process largely indeterminate data. In either case the system software area
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 structure, and multiple external interfaces.
2. Application software: These consist of standalone programs that solve a specific business need.
Applications in this area process business or technical data in a way that facilitates business
operations or management/technical decision making. These are used to control business functions
in real time.
3.: Engineering/scientific software These software range from astronomy to volcanology, from
automotive stress analysis to space shuttle orbital dynamics and from molecular biology to automated
manufacturing.
4. Embedded software: These software resides within a product or system and is used to implement
and control features and functions for the end user and for the system itself. These software can
perform limited and esoteric functions or provide significant function and control capability.
Product-line software focus on a limited marketplace to address mass consumer market. (word
processing, graphics, database management)
Web Application: It is a client-server computer program which the client runs on the web browser. In
their simplest form, Web apps can be little more than a set of linked hypertext files that present
information using text and limited graphics. However, as e-commerce and B2B application grow in
importance. Web apps are evolving into a sophisticate computing environment that not only provides a
standalone feature, computing function, and content to the end user.
Artificial intelligence software- Artificial intelligence (AI) software makes use of nonnumeric algorithms
to solve complex problems. Application within this area include robotics, pattern recognition, game
playing
Umbrella activities:
Umbrella Activities are that take place during a software development process for
improved project management and tracking.
2. Plan a solution
Does the solution conform to the plan? Is source code traceable to the design model? Is each
component part of the solution provably correct? Has the design and code been reviewed, or better,
have correctness proofs been applied to algorithm?
1. Is it possible to test each component part of the solution? Has a reasonable testing
strategy been implemented?
2. produce results that conform to the data, functions, and Does the solution features that
are required?
3. Has the software been validated against all stakeholder requirements?
1) The Reason It All Exists- A software system exists for one reason: to provide value to its users. All
decisions should be made with this in mind. Before specifying a system requirement, before noting a
piece of system functionality, before determining the hardware platforms or development processes,
ask yourself questions such as: “Does this add real value to the system?” If the answer is “no,” don’t
do it.
2) The Second Principle: KISS (Keep It Simple, Stupid!) - All design should be as simple as possible, but
no simpler. This is not to say that features, even internal features, should be discarded in the name of
simplicity. Simple also does not mean “quick and dirty”.
3) The Third Principle: Maintain the Vision - A clear vision is essential to the success of a software
project. Without one, a project almost unfailingly ends up being “of two [or more] minds” about itself.
Without conceptual integrity, a system threatens to become a patch work of incompatible designs,
held together by the wrong kind of screws Compromising the architectural vision of a software
system
weakens and will eventually break even the well-designed systems. Having an empowered architect who
can hold the vision and enforce compliance helps ensure a very successful software project.
4) The Fourth Principle: What You Produce, Others Will Consume –In some way, someone else will use,
maintain, document, or otherwise depend on being able to understand your system. So, always specify,
design, and implement knowing someone else will have to understand what you are doing. Making user
job easier adds value to the system.
5) The Fifth Principle: Be Open to the Future - A system with a long lifetime has more value. In today’s
computing environments, where specifications change on a moment’s notice and hardware platforms
are obsolete just a few months old, software lifetimes are typically measured in months instead of
years. However, true “industrial-strength” software systems must endure far longer. To do this
successfully, these systems must be ready to adapt to these and other changes. Systems that do this
successfully are those that have been designed this way from the start. Never design yourself into a
corner. Always ask “what if,” and prepare for all possible answers by creating systems that solve the
general problem, not just the specific one. This could very possibly lead to the reuse of an entire
system.
6) The Sixth Principle: Plan Ahead for Reuse - Reuse saves time and effort. The reuse of code and
designs has been major benefit of using object-oriented technologies. However, the return on this
investment is not automatic. To leverage the reuse possibilities that object-oriented [or conventional]
programming provides requires forethought and planning. There are many techniques to realize
reuse at every level of the system development process Planning ahead for reuse reduces the
cost and
increases the value of both the reusable components and the systems into which they are incorporated.
7) The Seventh principle: Think! - Placing clear, complete thought before action almost always produces
better results. When you think about something, you are more likely to do it right. You also gain
knowledge about how to do it right again. If you do think about something and still do it wrong, it
becomes a valuable experience. A side effect of thinking is learning to recognize when you don’t know
something, at which point you can research the answer. When clear thought has gone into a system,
value comes out. If every software engineer and every software team simply followed Hooker’s seven
principles, many of the difficulties we experience in building complex computer based systems would be
eliminated.
Software Myths:
Most, experienced experts have seen myths or superstitions (false beliefs or interpretations) or
misleading attitudes (naked users) which creates major problems for management and technical
people. The types of software-related myths are listed below.
`Types of Software Myths
Generic Process Model is a definitive description of processes. Generic Processes are designed to run
outside a normal component or on an application processor. These processes are not specific to any
particular component, can be used in any number of applications. Generic Process Model consists of 5
activities which will be discussed in this article. The software process is a collection of various activities.
These activities include communication, planning, modeling, construction, and deployment. Each of
these activities includes a set of engineering actions and each action defines a set of tasks that
incorporate work products, project milestones, and SQA, Software Quality Assurance points. Let us dig
deeper into this Generic Process Model and will go through the working process, its advantages, and
disadvantages.
and also checks whether the flow of the code is correct or not.
complexity or the efforts, etc. For most of the software projects, these
software
in sequence form
Iterative Process flow: This flow repeats one or more activities
above in parallel with each other i.e. modeling for one aspect of
A software life cycle model (also termed process model) is a pictorial and diagrammatic representation
of the software life cycle. A life cycle model represents all the methods required to make a software
product transit through its life cycle stages
SDLC is a process followed for a software project, within a software organization. It consists of
a detailed plan describing how to develop, maintain, replace and alter or enhance specific
software. The life cycle defines a methodology for improving the quality of software and the
overall development process.
The following figure is a graphical representation of the various stages of a typical SDLC.
A typical Software Development Life Cycle consists of the following stages −
SDLC Models
There are various software development life cycle models defined and designed which are
followed during the software development process. These models are also referred as Software
Development Process Models". Each process model follows a Series of steps unique to its type
to ensure success in the process of software development.
Following are the most important and popular SDLC models followed in the industry −
Waterfall Model
Incremental process models
Evolutionary process model
Concurrent model
The Waterfall Model was the first Process Model to be introduced. It is also referred to
as a linear-sequential life cycle model. It is very simple to understand and use. In a
waterfall model, each phase must be completed before the next phase can begin and
there is no overlapping in the phases.
The Waterfall model is the earliest SDLC approach that was used for software
development.
Incremental Model
o More flexible.
o It should be used only if the budget allows the use of automatic code
generating tools.
Advantage of RAD Model
o In this model, changes are adoptable.
1. 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.
2. Evolutionary model is also used in object oriented software development
because the system can be easily portioned into units in terms of objects.
Advantages:
Disadvantages:
1. Communication
In this phase, developer and customer meet and discuss the overall objectives
of the software.
2. Quick design
NOTE: The description of the phases of the spiral model is same as that of the
process model.
• The communication activity has completed in the first iteration and exits in the awaiting changes state.
• The modeling activity completed its initial communication and then go to the underdevelopment
state.
• If the customer specifies the change in the requirement, then the modeling activity moves from the
under
• The concurrent process model activities moving from one state to another state.
• It needs better communication between the team members. This may not be achieved all the time.