Software
Engineering /Characteristics of Software Engineering:
Software
Engineering is about teams and it is about quality.
The problems to solve are so complex or large, that a single developer cannot
solve them anymore. Software engineering is also about communication on a team
and with internal and external stakeholders. Teams do not consist only of
developers, but also of quality assurance testers, systems architects,
system/platform engineers, customers, project managers and other stakeholders.
Implementation is no longer
just writing code, but it is also following guidelines, writing documentation
and also writing unit tests. But unit tests alone are not enough. The different
pieces have to fit together. And we have to be able to spot problematic areas
using metrics and improve the quality in those areas. The code should follow
certain standards to make it easier for a team to work together. Once we are
finished coding, that does not mean that we are finished with the project: for
large projects maintaining software and other maintenance can keep many people
busy for a long time.
Since there are so many
factors influencing the success or failure of a project, the book covers
project management skills. Software projects can be so large that we have to do
careful planning. We walk through the factors that cause a project to fail and
the success factors. Last but not least, a good software engineer, like any
engineer, needs tools, and in this book we cover good tools for everyday use on
large, and small, projects.
Software Engineering :
Software
is defined as a collection of programs, documentation and operating procedures.
The Institute of Electrical and
Electronic Engineers (IEEE) defines software as a 'collection
of computer programs,
procedures, rules and associated documentation and data.' It
possesses no mass, no volume, and no color, which makes it a non-degradable
entity over a long period. Software does not wear out or get tired.
Software
controls, integrates, and manages the hardware components of a computer system.
It also instructs the computer what needs to be done to perform a specific task
and how it is to be done. For example, software instructs the hardware how to
print a document, take input from the user, and display the output.
Computer works
only in response to instructions provided externally. Usually, the instructions
to perform some intended tasks are organized into a program using a programming
language like C, C++, Java,
etc., and submitted to computer. Computer interprets
and executes these instructions and provides response to the user accordingly.
A set of programs intended to provide users with a set of interrelated
functionalities is known as a software
package. For example, an accounting software package such as Tally
provides users the functionality to perform accounting-related activities.
Software
Characteristics:
Different
individuals judge software on different basis. This is because they are
involved with the software in different ways. For example, users want the
software to perform according to their requirements. Similarly, developers
involved in designing, coding, and maintenance of the software evaluate the
software by looking at its internal characteristics, before delivering it to
the user. Software characteristics are classified into six major components.
• Functionality: Refers
to the degree of performance of the software against its intended purpose.
• Reliability: Refers
to the ability of the software to provide desired functionality under the given
conditions.
•
Usability: Refers
to the extent to which the software can be used with ease.
• Efficiency: Refers
to the ability of the software to use system resources in the most effective
and efficient manner.
• Maintainability: 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.
• Portability: Refers
to the ease with which software developers can transfer software from one
platform to another, without (or with minimum) changes. In simple terms, it
refers to the ability of software to function properly on different hardware
and software platforms without making any changes in it.
In
addition to the above mentioned characteristics, robustness and integrity are
also important. Robustness refers
to the degree to which the software can keep on functioning in spite of being
provided with invalid data while integrity refers
to the degree to which unauthorized access to the software or data can be
prevented.
Classification of
Software:
Software
can be applied in countless fields such as business, education, social sector,
and other fields. It is designed to suit some specific goals such as data
processing, information sharing,
communication, and so on. It is classified according to the range of potential
of applications. These classifications are listed below.
•
System software:
This
class of software manages and controls the internal operations of a computer
system. It is a group of programs, which is responsible for using computer
resources efficiently and effectively. For example, an operating system is
a system software, which controls the hardware, manages memory and
multitasking functions, and acts as an interface between application programs
and the computer.
•
Real-time software:
This
class of software observes, analyzes, and controls real world events as they
occur. Generally, a real-time system guarantees a response to an external event
within a specified period of time. An example of real-time software is the
software used for weather forecasting that collects and processes parameters
like temperature and humidity from the external environment to forecast the
weather. Most of the defense organizations all over the world use real-time
software to control their military hardware.
•
Business software:
This
class of software is widely used in areas where management and control of
financial activities is of utmost importance. The fundamental component of a
business system comprises payroll, inventory, and accounting software that
permit the user to access relevant data from the database. These activities are
usually performed with the help of specialized business software that
facilitates efficient framework in business operations and in management
decisions.
•
Engineering and scientific
software:
This
class of software has emerged as a powerful tool in the research and
development of next generation technology. Applications such as the study of
celestial bodies, under-surface activities, and programming of an orbital path
for space shuttles are heavily dependent on engineering and scientific
software. This software is designed to perform precise calculations on complex
numerical data that are obtained during real time environment.
•
Artificial intelligence (AI)
software:
This
class of software is used where the problem-solving technique is
non-algorithmic in nature. The solutions of such problems are generally
non-agreeable to computation or straightforward analysis. Instead, these
problems require specific problem-solving strategies that include expert
system, pattern recognition, and game-playing techniques. In addition, they
involve different kinds of search techniques which include the use of
heuristics. The role of artificial intelligence software is to add certain
degrees of intelligence to the mechanical hardware in order to get the desired
work done in an agile manner.
•
Web-based software:
This
class of software acts as an interface between the user and the Internet. Data
on the Internet is in the form of text, audio, or video format, linked with
hyperlinks. Web browser is a software that retrieves web pages from the
Internet. The software incorporates executable instructions written in special
scripting languages such as CGI or
ASP. Apart from providing navigation on the Web, this software also supports
additional features that are useful while surfing the Internet.
•
Personal computer (PC)
software:
This
class of software is used for both official and personal use. The personal computer software
market has grown over in the last two decades from normal text editor to word
processor and from simple paintbrush to advanced image-editing software. This
software is used predominantly in almost every field, whether it is database management system,
financial accounting package, or multimedia-based software. It has emerged as a
versatile tool for routine applications.
Software
Engineering is about teams and it is about quality.
The problems to solve are so complex or large, that a single developer cannot
solve them anymore. Software engineering is also about communication on a team
and with internal and external stakeholders. Teams do not consist only of
developers, but also of quality assurance testers, systems architects,
system/platform engineers, customers, project managers and other stakeholders.
Implementation is no longer
just writing code, but it is also following guidelines, writing documentation
and also writing unit tests. But unit tests alone are not enough. The different
pieces have to fit together. And we have to be able to spot problematic areas
using metrics and improve the quality in those areas. The code should follow
certain standards to make it easier for a team to work together. Once we are
finished coding, that does not mean that we are finished with the project: for
large projects maintaining software and other maintenance can keep many people
busy for a long time.
Abstract:
We
present a general model and conceptual framework for specifying architectures
for incremental processing in dialogue systems, in particular with respect to
the topology of the network of modules that make up the system, the way
information flows through this network, how information increments are
‘packaged’, and how these increments are processed by the modules. This model
enables the precise specification of incremental systems and hence facilitates
detailed comparisons between systems, as well as giving guidance on designing
new systems
Introduction of incremental model:
Incremental model
in software engineering is a one which combines the elements of waterfall model
in an iterative manner. It delivers a series of releases called increments
which provide progressively more functionality for the client as each increment
is delivered.
In the incremental model of software
engineering, waterfall model is repeatedly applied in each
increment. The incremental model applies linear sequences in a required pattern
as calendar time passes. Each linear sequence produces an increment in the
work.
Diagram Of Incremental
Model
As from the diagram, you can see that there are 5 phases (tasks) which
are carried out in each increment. If you want to see what activity is carried
out in each phase, then check out this post: Phases
of waterfall model as
the phases are same?
The first increment is often a core product where the necessary requirements
are addressed, and the extra features are added in the next increments. The
core product is used and evaluated by the client. Once the customer assesses
the core product, there is plan development for the next increment. Thus in
every increment, the needs of the client are kept in mind, and more features
and functions are added, and the core product is updated. This process
continues till the complete product is produced.
The increments earlier to the main increment are called as “stripped down” versions of the final product. These
increases form a base for customer evaluation. On this basis, the client can
suggest new requirements if required.
If there are less number of employees to work on the project Incremental
development model is very useful to complete the project before the deadline.
In a project, early increments can be done with less number of people. In case
if the core product is well-defined and understood more employees could be
added if needed in the future increments.
One of the benefits of the Incremental process model is that it can be
planned to manage technical risks.
Let’s now see the advantages and disadvantages of the incremental model.
Application of Incremental Model :
·
Any difficulty in design,
coding and testing a modification should signal the need for redesign or
re-coding.
·
Modifications should fit
easily into isolated and easy-to-find modules. If they do not, some redesign is
possibly needed.
·
Modifications to tables
should be especially easy to make. If any table modification is not quickly and
easily done, redesign is indicated.
·
Modifications should
become easier to make as the iterations progress. If they are not, there is a
basic problem such as a design flaw or a proliferation of patches.
·
Patches should normally be
allowed to exist for only one or two iterations. Patches may be necessary to
avoid redesigning during an implementation phase.
·
The existing
implementation should be analyzed frequently to determine how well it measures
up to project goals.
·
Program analysis
facilities should be used whenever available to aid in the analysis of partial
implementations.
·
User reaction should be
solicited and analyzed for indications of deficiencies in the current
implementation.
Characteristics of Incremental Model:
·
System is broken down into many mini development projects.
·
Partial systems are built to produce the final system.
·
First tackled highest priority requirements.
·
The requirement of a portion is frozen once the incremented
portion is developed.
Advantages Of Incremental Model:
·
Initial
product delivery is faster.
·
Lower
initial delivery cost.
·
Core
product is developed first i.e. main functionality is added in the first
increment.
·
After
each iteration, regression testing should
be conducted. During this testing, faulty elements of the software can be
quickly identified because few changes are made within any single iteration.
·
It is
generally easier to test and debug than other methods of software development
because relatively smaller changes are made during each iteration. This allows
for more targeted and rigorous testing of each element within the overall
product.
·
With
each release a new feature is added to the product.
·
Customer
can respond to feature and review the product.
·
Risk of
changing requirement is reduced
·
Work
load is less.
Disadvantages of
Incremental Model:
·
Requires
good analysis.
·
Resulting
cost may exceed the cost of the organization.
·
Each
phase of an iteration is rigid and do not overlap each other.
·
As
additional functionality is added to the product, problems may arise related to
system architecture which was not evident in earlier prototypes.
Scope:
·
This model can be used when the requirements of the complete
system are clearly defined and understood.
·
Major requirements must be defined; however, some details can
evolve with time.
·
There is a need to get a product to the market early.
·
A new technology is being used
·
Resources with needed skill set are not available
·
There are some high risk features and goals.
Conclusion:
Thank
you for joining me in the final segment in the Iterative and Incremental
series. During yesterday’s segment, I discussed Iteration Planning,
and specifically how I planned my daily exercise (iteration) each morning by
assessing multiple factors, while following my overall Implementation plan.
As
I mentioned in yesterday’s blog, regardless of the type of exercise or how many
increment sets I decide to complete each day, I apply the 6 minute interval
sets and a time box approach. When the 6
minutes are up, I stop the interval, even if I have more to give, saving the
extra energy to apply to my next interval set.
Time boxes are used to
manage iterations. Once the pre-determined iteration duration is
reached – whether it is 2 weeks or 6 weeks or somewhere in between-- the
iteration is complete. Iteration group items (requirements) not
fully addressed, in relation to the iteration goal, are addressed in the next
iteration. This approach helps eliminate the “rolling deadline” and
better allows the project manager to assess the project progress earlier and
more frequently than in traditional approaches.
Not only do smaller, more
frequent milestones allow project managers to better assess potential schedule
risks and slips, but process improvement is encouraged. Even in my
simple example, I learned, after a few interval sets, not to sprint uphill! Now
I plan my route more efficiently to ensure that I sprint on a level surface to
reduce of the risk of not completing my increment.
Project managers have often
told me that they used an iterative and incremental approach long before
OUM. An effective project manager naturally organizes project
work consistent with this principle, but a key benefit of OUM is that it
formalizes this approach so it happens by design rather than by
chance.
I hope this series has
encouraged you to think about additional ways you can incorporate the iterative
and incremental principle into your daily and project life. I
further hope that you will share your thoughts and experiences with the rest of
us.
References :
Ø
www.google.co.in
Ø
Pressman, Roger (2010). Software Engineering:
A Practitioner's Approach. Boston: McGraw
Ø
Kim, Gene (22 January 2013). "DevOps distilled, Part 1: The three underlying
principles" .
Ø
www.softdevteam.com/
Incremental- lifecycle.asp
Ø
What
is Incremental model - advantages, disadvantages and when to use it
Ø Methodology::
Development Methods