What Is Software?
What Is Software?
and engineering
What is Software?
“ Software is a set of instructions to acquire inputs and to manipulate them to produce the
desired output in terms of functions and performance as determined by the user of the
software. It also include a set of documents, such as the software manual , meant for users
to understand the software system.”
OR
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.
Classes of Software:
Software is classified into two classes:
1. Generic Software:
designed for broad customer market whose requirements are very
common, fairly stable and well understood by the software engineer.
2. Customized Software:
is developed for a customer where domain , environment and
requirements are being unique to that customer and cannot be satisfied
by generic products.
What is Good Software?
Major Goals:
- To increase software productivity and quality.
- To effectively control software schedule and planning.
- To reduce the cost of software development.
- To meet the customers’ needs and requirements.
- To enhance the conduction of software engineering process.
- To improve the current software engineering practice.
- To support the engineers’ activities in a systematic and
efficient manner.
Difference between Software Engineering process and
Conventional Engineering Process
Programs
Documentations
Operating
Process
Operating
Procedures
System Administration
Guide
Operating
Manuals
Installation Guide
Software Processes
The term software specifies to the set of computer programs, procedures and associated
documents (Flowcharts, manuals, etc.) that describe the program and how they are to be used.
A software process is the set of activities and associated outcome that produce a software
product. Software engineers mostly carry out these activities. These are four key process
activities, which are common to all software processes. These activities are:
1.Software specifications: The functionality of the software and constraints on its operation
must be defined.
2.Software development: The software to meet the requirement must be produced.
3.Software validation: The software must be validated to ensure that it does what the
customer wants.
4.Software evolution: The software must evolve to meet changing client needs.
The Software Process Model
A software process model is a specified definition of a software process, which is presented from a particular perspective.
Models, by their nature, are a simplification, so a software process model is an abstraction of the actual process, which is
being described. Process models may contain activities, which are part of the software process, software product, and the
roles of people involved in software engineering. Some examples of the types of software process models that may be
produced are:
1.A workflow model: This shows the series of activities in the process along with their inputs, outputs and dependencies.
The activities in this model perform human actions.
2.A dataflow or activity model: This represents the process as a set of activities, each of which carries out some data
transformations. It shows how the input to the process, such as a specification is converted to an output such as a design.
The activities here may be at a lower level than activities in a workflow model. They may perform transformations carried
out by people or by computers.
3.A role/action model: This means the roles of the people involved in the software process and the activities for which
they are responsible.
Software Crisis
Software Crisis is a term used in computer science for the difficulty of writing useful and
efficient computer programs in the required time .
software crisis was due to using same workforce, same methods, same tools even though
rapidly increasing in software demand, complexity of software and software challenges.
With increase in the complexity of software, many software problems arise because
existing methods were insufficient.
If we will use same workforce, same methods and same tools after fast increasing in
software demand, software complexity and software challenges, then there arise some
problems like software budget problem, software efficiency problem, software quality
problem, software managing and delivering problem etc. This condition is called software
crisis.
Software Crisis
1.Size: Software is becoming more expensive and more complex with the growing
complexity and expectation out of software. For example, the code in the consumer
product is doubling every couple of years.
2.Quality: Many software products have poor quality, i.e., the software products defects
after putting into use due to ineffective testing technique. For example,
Software testing typically finds 25 errors per 1000 lines of code.
3.Cost: Software development is costly i.e. in terms of time taken to develop and the
money involved. For example, Development of the FAA's Advanced Automation
System cost over $700 per lines of code.
4.Delayed Delivery: Serious schedule overruns are common. Very often the software
takes longer than the estimated time to develop, which in turn leads
to cost shooting up. For example, one in four large-scale
development projects is never completed.
Causes of Software Crisis:
•The cost of owning and maintaining software was as expensive as developing
the software
•At that time Projects was running over-time
•At that time Software was very inefficient
•The quality of software was low quality
•Software often did not meet requirements
•The average software project overshoots its schedule by half
•At that time Software was never delivered
Solution of Software Crisis:
There is no single solution to the crisis.one possible solution of
software crisis is Software Engineering because software engineering
is a systematic, disciplined and quantifiable approach. For preventing
software crisis, there are some guidelines:
•Reduction in software over-budget
•The quality of software must be high
•Less time needed for software project
•Experience working team member on software project
•Software must be delivered
Software Quality Attributes in Software Architecture
1). Usability: is one of the most essential attributes, because, unlike in cases with other attributes, users can see
directly how well this attribute of the system is worked out. One of the critical problems of usability is too much
interaction or too many actions necessary to accomplish a task. Incorrect sequences of steps in multistage
interfaces are also a problem of usability. Data elements and controls may be designed not according to the
accepted patterns of user experience, which also complicates the interaction.
Examples of important indicators for this attribute are:
•List of supported devices, OS versions, screen resolutions, and browsers and their versions.
•Elements that accelerate user interaction, such as “hotkeys,” “lists of suggestions,” and so on.
•The average time a user needs to perform individual actions.
•Support of accessibility for people with disabilities.
2) Reliability
Reliability is an attribute of the system responsible for the ability to continue to operate under predefined conditions. Most
often, the system fails due to the inaccessibility of external elements, such as databases, systems, and network connections.
Software Quality Attributes in Software Architecture
You have to do prioritize these system quality attributes based on your project needs.
3) Availability
Availability is part of reliability and is expressed as the ratio of the available system time to the total working
time. Important indicators for this attribute are:
• Availability.
• Planned downtime.
• The time needed to update the software, and so on.
4) Portability
It is the ability of a software application to run on numerous platforms such as data portability, hosting,
viewing, etc.,
5) Testability shows how well the system allows performing tests, according to predefined criteria. In
addition to testing performance, testability makes it possible to effectively divide the system into
subsystems.
The main indicators for this attribute are:
•Percentage of coverage with modular, integration, or unit tests.
•The final list of required test environments as well as the final list of used approaches to testing
(manual/automatic, regression, integration, etc.).
6).Scalability is the ability of the system to handle load increases without decreasing performance, or the
possibility to rapidly increase the load.
There are two ways to improve scalability:
•Vertical: To increase, we add more resources, such as memory, disks, or processors into one system.
•Horizontal: We increase the number of computing units and divide the load.
The key indicators for measuring this attribute are:
•If the system allows for horizontal scaling.
•The time needed to increase scaling, in seconds.
•Scaling limitations: the number of servers or the network capacity.
•Possibility to scale: the increase in the number of transactions or the amount of content.
7. Performance : shows the response of the system to performing certain actions for a certain period.
There are two ways how to measure performance:
•Latency: Time spent on responding to an event
•Channel capacity. The number of events that occur at a certain point in time.
In practice, the possible performance indicators include, for example:
•Average/maximum number of system users per time unit.
•Average page load time.
•Average method execution time.
8. Interoperability: is an attribute of the system or part of the system that is responsible for its operation
and the transmission of data and its exchange with other external systems. A well-designed system
facilitates integration with third-party systems. To improve the interoperability, you can use well-designed
external interfaces, standardization systems, etc.
9. Security: is responsible for the ability of the system to reduce the likelihood of malicious or accidental
actions as well as the possibility of theft or loss of information. Several measures are used to protect systems:
authentication, encryption, audit, and others.
Examples of this attribute in the work of the system are:
•Restrictions of user access by authentication/authorization.
•Prevention of SQL injection.
•Encryption of passwords and content.
•Secure connection.
10. Maintainability: is the ability of the system to support changes. Changes can be related to new business
requirements or the correction of old errors and affect system components or separate methods. Also,
maintainability affects the time needed to restore the system after a failure. Excessive dependencies between
components have a very negative effect on maintainability
11. Reusability: is a chance of using a component or system in other components/systems with small or no change.
Segregation of responsibilities, modularization, decreasing of copy-paste are all about reusability. Copying code, or
worse, using different components for the same result in different modules, is one of the biggest problems of
reusability.
12. Supportability: is the ability of the system to provide useful information for identifying and solving problems.
The main issues in ensuring supportability can be addressed with the following means:
•No diagnosis: How the activity and performance of the system are controlled. It includes various types of
logging.
•No tools for troubleshooting: This includes backups, various systems for creating snapshots of the system,
and tools for auditing the system. When the system fails, it is always more pleasant to wait for an automatic
restart than to solve the issue manually.
•No health checking: This includes a variety of systems for measuring compilation time, deployment time,
database size, or mobile application size.
Software Development Life Cycle
SDLC is a systematic process for building software that ensures the quality and correctness of the software built.
SDLC process aims to produce high-quality software that meets customer expectations. The system development
should be complete in the pre-defined time frame and cost. SDLC consists of a detailed plan which explains how
to plan, build, and maintain specific software. Every phase of the SDLC life Cycle has its own process and
deliverables that feed into the next phase. SDLC stands for Software Development Life Cycle and is also referred
to as the Application
Why SDLC?
Here, are prime reasons why SDLC is important for developing a software system.
•It offers a basis for project planning, scheduling, and estimating
•Provides a framework for a standard set of activities and deliverables
•It is a mechanism for project tracking and control
•Increases visibility of project planning to all involved stakeholders of the development process
•Increased and enhance development speed
•Improved client relations
•Helps you to decrease project risk and project management plan overhead
SDLC Phases
The entire SDLC process divided into the following stages:
Requirement Feasibility
Analysis Study Design Coding Testing Install Deploy Maintenance
Phase 1: Requirement collection and analysis:
The requirement is the first stage in the SDLC process. It is conducted by the senior team members with inputs
from all the stakeholders and domain experts in the industry. Planning for the quality assurance requirements and
recognization of the risks involved is also done at this stage.
This stage gives a clearer picture of the scope of the entire project and the anticipated issues, opportunities, and
directives which triggered the project.
Phase 6: Installation/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.
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
•Upgrade - Upgrading the application to the newer versions of the Software
•Enhancement - Adding some new features into the existing software
The main focus of this SDLC phase is to ensure that needs continue to be met and that the system continues to
perform as per the specification mentioned in the first phase.
Requirement Analysis
What is The
Feasibility Study
Waterfall Model?
Software Design
Software
• WATERFALL MODEL is a Implementation
sequential model that divides
software development into pre- Software Testing
defined phases. Each phase Software
must be completed before the Development
next phase can begin with no Software
overlap between the phases. Maintenance
Each phase is designed for
performing specific activity
during the SDLC phase. It was
introduced in 1970 by Winston
Royce.
Different Phases of Waterfall Model in Software Engineering
Requirement Gathering •During this phase, detailed requirements of the software system to be developed are
stage gathered from client
Design Stage •Plan the programming language, for Example Java, PHP, .net
•or database like Oracle, MySQL, etc.
•Or other high-level technical details of the project
Built Stage •After design stage, it is built stage, that is nothing but coding the software
Test Stage •In this phase, you test the software to verify that it is built as per the specifications
given by the client.
The disadvantage of waterfall development is that it does not allow much reflection or revision.
Once an application is in the testing stage, it is very difficult to go back and change something
that was not well-documented or thought upon in the concept stage.
The major disadvantages of the Waterfall Model are as follows −
•No working software is produced until late during the life cycle.
•High amounts of risk and uncertainty.
•Not a good model for complex and object-oriented projects.
•Poor model for long and ongoing projects.
•Not suitable for the projects where requirements are at a moderate to high risk of changing. So,
risk and uncertainty is high with this process model.
•It is difficult to measure progress within stages.
•Cannot accommodate changing requirements.
•Adjusting scope during the life cycle can end a project.
•Integration is done as a "big-bang. at the very end, which doesn't allow identifying any
technological or business bottleneck or challenges early.
Iterative Model
• An iterative life cycle model does not attempt to start with a full specification
of requirements. Instead, development begins by specifying and implementing
just part of the software, which can then be reviewed in order to identify further
requirements. This process is then repeated, producing a new version of the
software for each cycle of the model.
OR
The iterative process model is the implementation of the software development life cycle in
which the initial development is started based on the initial requirements and more features
are added to the base software product with the ongoing iterations until the final system is
created.
• The Iterative Model allows the
accessing earlier phases, in which the
variations made respectively. The final Feasibility Study
output of the project renewed at the end
of the Software Development Life Cycle Requirement Analysis
(SDLC) process. and Specification
Design
The various phases of Iterative model
Coding and unit
are as follows:
testing
1. Requirement gathering &
analysis: In this phase, requirements are Integration and
gathered from customers and check by an system testing
analyst whether requirements will fulfil or Deployment
not. Analyst checks that need will achieve
within budget or not. After all of this, the
software team skips to the next phase. Maintenance
2. Design: In the design phase, team design
the software by the different diagrams like
Data Flow diagram, activity diagram, class
diagram, state transition diagram, etc.
3. Implementation: In the implementation, requirements are written in the coding language and transformed into computer
programmes which are called Software.
4. Testing: After completing the coding phase, software testing starts using different test methods. There are many test
methods, but the most common are white box, black box, and grey box test methods.
5. Deployment: After completing all the phases, software is deployed to its work environment.
6. Review: In this phase, after the product deployment, review phase is performed to check the behaviour and validity of the
developed product. And if there are any error found then the process starts again from the requirement gathering.
7. Maintenance: In the maintenance phase, after deployment of the software in the working environment there may be some
bugs, some errors or new updates are required. Maintenance involves debugging and new addition options.
Evolutionary model is also referred to as the successive versions model and sometimes as the incremental
model. In Evolutionary model, the software requirement is first broken down into several modules (or functional
units) that can be incrementally constructed and delivered (see Figure ).
V1
V1
V1 V2
V2 V3
In evolutionary development model or evolutionary life cycle model, each of the version (V1, V2, V3) as shown
in the diagram will be released with new functionality or functionalities and added to the previous version(s).
For example, Version V2 will have more functional capability or capabilities as compared to its previous version
V1 but will exhibit less capability in terms of functionality from V3. With the incremental pattern of new version
release, the software product is built over the period of time to exhibit the functionality of fully developed
system.
Important points on Evolutionary model
Given below are some of the important points on software evolutionary model:
•In sdlc evolutionary development model the requirement is broken down into different functional units.
•These functional units can also be referred to as module.
•These modules can be incrementally built and delivered.
•Here at the beginning the core module of the software product is developed.
•New functionality is built, added to existing one and released as new version.
•Each successive version is capable of performing more functions in comparision to its previous versions.
Planning •It includes estimating the cost, schedule and resources for
the iteration. It also involves understanding the system
requirements for continuous communication between the
system analyst and the customer
•Cost estimation becomes easy as the prototype building is done in •Spiral development works best for large projects only also demands
small fragments risk assessment expertise
•Continuous or repeated development helps in risk management •For its smooth operation spiral model protocol needs to be followed
strictly
•Development is fast and features are added in a systematic way in •Documentation is more as it has intermediate phases
Spiral development
•There is always a space for customer feedback •Spiral software development is not advisable for smaller project, it
might cost them a lot