0% found this document useful (0 votes)
178 views

Module-1 Introduction To Software Development

Copyright
© © All Rights Reserved
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
178 views

Module-1 Introduction To Software Development

Copyright
© © All Rights Reserved
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 18

Introduction to Software Development

What is software development?

Software development refers to a set of computer science activities dedicated to


the process of creating, designing, deploying and supporting software.

Software itself is the set of instructions or programs that tell a computer what to
do. It is independent of hardware and makes computers programmable. There
are three basic types:

System software to provide core functions such as operating systems, disk


management, utilities, hardware management and other operational necessities.

Programming software to give programmers tools such as text editors,


compilers, linkers, debuggers and other tools to create code.

Application software (applications or apps) to help users perform tasks. Office


productivity suites, data management software, media players and security
programs are examples. Applications also refers to web and mobile applications
like those used to shop on Amazon.com, socialize with Facebook or post
pictures to Instagram.1

A possible fourth type is embedded software. Embedded systems software is


used to control machines and devices not typically considered computers —
telecommunications networks, cars, industrial robots and more. These devices,
and their software, can be connected as part of the Internet of Things (IoT).2

Software development is primarily conducted by programmers, software


engineers and software developers. These roles interact and overlap, and the
dynamics between them vary greatly across development departments and
communities.

Programmers, or coders, write source code to program computers for specific


tasks like merging databases, processing online orders, routing communications,
conducting searches or displaying text and graphics. Programmers typically
interpret instructions from software developers and engineers and use
programming languages like C++ or Java to carry them out.

Software engineers apply engineering principles to build software and systems


to solve problems. They use modeling language and other tools to devise
solutions that can often be applied to problems in a general way, as opposed to
merely solving for a specific instance or client. Software engineering solutions
adhere to the scientific method and must work in the real world, as with bridges
or elevators. Their responsibility has grown as products have become
increasingly more intelligent with the addition of microprocessors, sensors and
software. Not only are more products relying on software for market
differentiation, but their software development must be coordinated with the
product’s mechanical and electrical development work.

Software developers have a less formal role than engineers and can be closely
involved with specific project areas — including writing code. At the same
time, they drive the overall software development lifecycle — including
working across functional teams to transform requirements into features,
managing development teams and processes, and conducting software testing
and maintenance.3
The work of software development isn’t confined to coders or development teams. Professionals
such as scientists, device fabricators and hardware makers also create software code even though
they are not primarily software developers. Nor is it confined to traditional information technology
industries such as software or semiconductor businesses. In fact, according to the Brookings Institute
(link resides outside of ibm.com), those businesses “account for less than half of the companies
performing software development.”

An important distinction is custom software development as opposed to


commercial software development. Custom software development is the process
of designing, creating, deploying and maintaining software for a specific set of
users, functions or organizations. In contrast, commercial off-the-shelf software
(COTS) is designed for a broad set of requirements, allowing it to be packaged
and commercially marketed and distributed.
Steps in the software development process

Developing software typically involves the following steps:

• Selecting a methodology to establish a framework in which the steps of


software development are applied. It describes an overall work process or
roadmap for the project. Methodologies can include Agile
development, DevOps, Rapid Application Development (RAD), Scaled
Agile Framework (SAFe), Waterfall and others. (See the glossary.)

• Gathering requirements to understand and document what is required


by users and other stakeholders.
• Choosing or building an architecture as the underlying structure within
which the software will operate.
• Developing a design around solutions to the problems presented by
requirements, often involving process models and storyboards.
• Building a model with a modeling tool that uses a modeling language
like SysML or UML to conduct early validation, prototyping and
simulation of the design.
• Constructing code in the appropriate programming language. Involves
peer and team review to eliminate problems early and produce quality
software faster.
• Testing with pre-planned scenarios as part of software design and coding
— and conducting performance testing to simulate load testing on the
application.
• Managing configuration and defects to understand all the software
artifacts (requirements, design, code, test) and build distinct versions of
the software. Establish quality assurance priorities and release criteria to
address and track defects.
• Deploying the software for use and responding to and resolving user
problems.
• Migrating data to the new or updated software from existing
applications or data sources if necessary.
• Managing and measuring the project to maintain quality and delivery
over the application lifecycle, and to evaluate the development process
with models such as the Capability Maturity Model (CMM).

The steps of the software development process fit into application lifecycle
management (ALM). The IBM Engineering Management solution is a superset
of ALM that enables the management of parallel mechanical, electrical and
software development.

• Requirements analysis and specification


• Design and development
• Testing
• Deployment
• Maintenance and support
Software development process steps can be grouped into the phases of the
lifecycle, but the importance of the lifecycle is that it recycles to enable
continuous improvement. For example, user issues that surface in the
maintenance and support phase can become requirements at the beginning of
the next cycle.

Why is software development important?

Software development is also important because it is pervasive. As IBM vice


president and blogger Dibbe Edwards points out: “Software has emerged as a
key differentiator in many products — from cars to washing machines to
thermostats — with a growing Internet of Things connecting them.”

A few examples:
• Soul Machines (link resides outside of ibm.com) uses software to create
artificial online advisors that improve customer service and efficiency.
The advisors have human faces, expressions and voices that react
intelligently, empathetically and efficiently to customer questions and
needs. They can answer over 40 percent of customer inquiries without
human intervention — and they learn from their interactions to improve
over time. Using IBM Watson Assistant to incorporate artificial
intelligence (AI) capabilities into the development process, Soul
Machines can create and roll out an artificial advisor in about 8 to 12
weeks.
• “This is a race,” says Erik Bak-Mikkelsen. “We have to keep up with
what’s happening in the market.” Bak-Mikkelsen is head of cloud
operations at car2go (link resides outside of ibm.com). He understands
that delivering new features and functions to car2go’s ride-sharing apps
and vehicles is key to getting and staying ahead. To do so, car2go moved
its development operations to a managed-services cloud and adopted a
DevOps development model. The result is accelerated development
cycles, faster time to market and the capability to scale for future growth.
• Working with electrical power lines can be deadly. To stay safe engineers
set electrical “lockouts” using physical tags and padlocks to divert power
from work locations. French energy company Enedis (link resides outside
of ibm.com) worked with IBM Garage for Cloud to develop software
that instruments these locks and tags and ties them into a shared network.
Tags and locks detect each time they are removed from an engineer’s van
and communicate the time and geo-location. As the engineer attaches the
locks, their location is recorded on a digital map. All stakeholders share a
view of the map to ensure safety, reduce downtime and facilitate repairs.
The IBM Cloud Garage collaborative development approach enabled
Enedis to develop field-ready prototypes in three months.
Key features of effective software development

Using software development to differentiate brands and gain competitive


advantage requires proficiency with the techniques and technologies that can
accelerate software deployment, quality and efficacy.

• Artificial intelligence (AI): AI enables software to emulate human


decision-making and learning. Neural networks, machine learning,
natural language processing and cognitive capabilities present developers
and businesses with the opportunity to offer products and services that
disrupt marketplaces and leap ahead of the competition. IBM
Watson offers developers a way to connect with and use artificial
intelligence services as part of their applications through application
programming interfaces or APIs. You can also use IBM Watson to
improve your product requirements by checking for ambiguity, unclear
actors, compound or negative requirements, missing units or tolerances,
incomplete requirements, and unspecific quantities.
• Cloud-native development: Cloud-native development is a way of
building applications to exploit cloud environments. A cloud-native
application consists of discrete, reusable components known as
microservices that are designed to integrate into any cloud environment.
These microservices act as building blocks and are often packaged
in containers. Because of this architecture, cloud-native applications can
use cloud environments to improve application performance, flexibility
and extensibility.
• Cloud-based development: Just as IT organizations look to the cloud to
improve resource management and cut costs, so do software development
organizations. In this way, the cloud can be used as a fast, flexible and
cost-efficient integrated development environment (IDE) or
development Platform as a Service (PaaS). Cloud-based development
environments can support coding, design, integration, testing and other
development functions. They can also offer access to APIs,
microservices, DevOps and other development tools, services and
expertise.
• Blockchain: Blockchain is a secure, digitally linked ledger that
eliminates cost and vulnerability introduced by parties like banks,
regulatory bodies and other intermediaries. It is transforming businesses
by freeing capital, accelerating processes, lowering transaction costs and
more. Blockchain presents a tremendous opportunity for software
development. Developers are working with distributed ledgers and open
source Hyperledger (link resides outside of ibm.com) technology to
change how businesses operate.
• Low code: Forrester defines low code as: “Products and/or cloud services
for application development that employ visual, declarative techniques
instead of programming and are available to customers at low- or no-cost
in money and training ...” 4 In short, it’s a development practice that
reduces the need for coding and enables non-coders or citizen developers
to build or help build applications quickly and at lower cost.
• Analytics: Annual demand for data scientists, data developers, and data
engineers will reach nearly 700,000 openings by 2020. The demand
signifies how critical it is for companies to gain insight and value from
the explosion of data. Accordingly, software developers are integrating
advanced analytics capabilities into their applications. Cloud-based
services and APIs make it simpler to guide data exploration, automate
predictive analytics and create dashboards that deliver new insights and
improve decision making.
• Model Based Systems Engineering (MBSE): In MBSE, software
modeling languages are used to perform early prototyping, simulation and
analysis of software designs for early validation. Building designs in
MBSE helps you to analyze and elaborate project requirements and move
rapidly from design to implementation.
• Mobile: A key capability for software developers is creating mobile apps
with deep connections to data that enriches and elevates user
experiences. Forrester has found that “deeply integrating digital/mobile
customer data has a strong effect on how customers interact with brands.”

A quick glossary
• Agile development breaks requirements into consumable functions and
delivers rapidly on those functions through incremental development. A
feedback loop helps find and fix defects as functionality continues to
deploy.
• Capability Maturity Model (CMM) assesses the proficiency of
software development processes. It tracks progress from ad hoc actions to
defined steps to measured results and optimized processes.
• DevOps, a combination of development and operations, is an agile-based
approach that brings software development and IT operations together in
the design, development, deployment and support of software.

• Rapid application development (RAD) is a non-linear approach that


condenses design and code construction into one interconnected step.

• Scaled Agile Framework (SAFe) provides a way to scale agile


methodology to a larger software development team or organization.

• Waterfall, often considered the traditional software development


methodology, is a set of cascading linear steps from planning and
requirements gathering through deployment and maintenance.
Software Development Life Cycle: A Detailed Explanation
What is SDLC?
Software Development Life Cycle (SDLC) aims to produce a high-quality
system that meets or exceeds customer expectations, works effectively and
efficiently in the current and planned information technology infrastructure, and
is inexpensive to maintain and cost-effective to enhance.

Detailed Explanation (What is SDLC)


A process followed in software projects is SDLC. Each phase of SDLC
produces deliverables required by the next phase in the life cycle. Requirements
are translated into design. Code is produced according to the
design. Testing should be done on a developed product based on the
requirement. The deployment should be done once the testing was completed. It
aims to produce a high-quality system that meets or exceeds customer
expectations, works effectively and efficiently in the current and planned
information technology infrastructure, and is inexpensive to maintain and cost-
effective to enhance.

What is SDLC Process


SDLC is a process which follows in Software Projects to develop a product in a
systematic way and to deliver a high-quality product. By following proper
SDLC process, Software companies can react well to the market pressure and
release high-quality software. This process involves different stages of SDLC
right from the requirement stage to deployment and maintenance phase. These
SDLC phases we will see later section of this post.

Why SDLC?
Some of the reasons why SDLC is important in Software Development are as
follows.

• It provides visibility of a project plan to all the involved stakeholders


• It helps us to avoid project risks
• It allows us to track and control the project
• It doesn’t conclude until all the requirements have been achieved

What are the 7 Phases of SDLC (Software Development Life Cycle Phases)
Seven Phases of Software Development Life Cycle (SDLC Phases) are as
following:

Requirement Phase
Requirement gathering and analysis is the most important phase in the software
development lifecycle. Requirement phase is the first step of the SDLC.
Business Analyst collects the requirement from the Customer/Client as per the
clients business needs and documents the requirements in the Business
Requirement Specification (document name varies depends upon the
Organization. Some examples are Customer Requirement Specification (CRS),
Business Specification (BS), etc., and provides the same to Development Team.

Analysis Phase
Once the requirement gathering and analysis is done the next step is to define
and document the product requirements and get them approved by the customer.
This is done through the SRS (Software Requirement Specification) document.
SRS consists of all the product requirements to be designed and developed
during the project life cycle. Key people involved in this phase are Project
Manager, Business Analyst and Senior members of the Team. The outcome of
this phase is the Software Requirement Specification.

Design Phase
It has two steps:
HLD – High-Level Design – It gives the architecture of the software product to
be developed and is done by architects and senior developers
LLD – Low-Level Design – It is done by senior developers. It describes how
each and every feature in the product should work and how every component
should work. Here, only the design will be there and not the code
The outcome from this phase is High-Level Document and Low-Level
Document which works as an input to the next phase

Development Phase
Developers of all levels (seniors, juniors, freshers) involved in this phase. This
is the phase where we start building the software and start writing the code for
the product. The outcome from this phase is Source Code Document (SCD) and
the developed product.

Testing Phase
When the software is ready, it is sent to the testing department where Test team
tests it thoroughly for different defects. They either test the software manually
or using automated testing tools depends on the process defined in STLC
(Software Testing Life Cycle) and ensure that each and every component of the
software works fine. Once the QA makes sure that the software is error-free, it
goes to the next stage, which is Implementation. The outcome of this phase is
the Quality Product and the Testing Artifacts.

Deployment & Maintenance Phase


After successful testing, the product is delivered/deployed to the customer for
their use. Deployment is done by the Deployment/Implementation engineers.
Once when the customers start using the developed system then the actual
problems will come up and needs to be solved from time to time. Fixing the
issues found by the customer comes in the maintenance phase. 100% testing is
not possible – because, the way testers test the product is different from the way
customers use the product. Maintenance should be done as per SLA (Service
Level Agreement)
Types of SDLC models

Waterfall

Through all development stages (analysis, design, coding, testing, deployment),


the process moves in a cascade mode. Each stage has concrete deliverables and
is strictly documented. The next stage cannot start before the previous one is
fully completed. Thus, for example, software requirements cannot be re-
evaluated further in development. There is also no ability to see and try software
until the last development stage is finished, which results in high project risks
and unpredictable project results. Testing is often rushed, and errors are costly
to fix.
Use cases:

• Simple small or mid-sized projects with clearly defined and unchanging


requirements (small company website development).
• Projects with the need for stricter control, predictable budget and
timelines (e.g., governmental projects).
• Projects that must adhere to multiple rules and regulations (healthcare
projects).
• Projects where a well-known technology stack and tools are used.
V-model (Validation and Verification model)

The V-model is another linear model with each stage having a corresponding
testing activity. Such workflow organization implies exceptional quality control,
but at the same time, it makes the V-model one of the most expensive and time-
consuming models. Moreover, even though mistakes in requirements
specifications, code and architecture errors can be detected early, changes
during development are still expensive and difficult to implement. As in the
Waterfall case, all requirements are gathered at the start and cannot be changed.
Use cases:

• Projects where failures and downtimes are unacceptable (e.g., medical


software, aviation fleet management software).
Incremental and Iterative model

The development process based on the Incremental model is split into several
iterations (“Lego-style” modular software design is required!). New software
modules are added in each iteration with no or little change in earlier added
modules. The development process can go either sequentially or in parallel.
Parallel development adds to the speed of delivery, while many repeated cycles
of sequential development can make the project long and costly.
With Iterative development software changes on each iteration, evolves and
grows. As each iteration builds on the previous one, software design remains
consistent.
As software is delivered in parts, there is no need for a full specification from
the project’s start and small changes to requirements are possible in the course
of the development process. However, the requirements can’t change radically –
major ones must be defined in the beginning, especially those for system design
in case of Incremental development as further integration of the delivered
software parts can become an issue.
This SDLC model typically entails some customer involvement because of the
possible need in small requirements amendments during the development
process.
Use cases:

• Large, mission-critical enterprise applications that preferably consist of


loosely coupled parts, such as microservices or web services.

Spiral model
The Spiral model puts focus on thorough risk assessment. Thus, to reap the
benefits of the model to the fullest, you’ll need to engage people with a strong
background in risk evaluation. A typical Spiral iteration lasts around 6 months
and starts with 4 important activities - thorough planning, risk analysis,
prototypes creation, and evaluation of the previously delivered part. Repeated
spiral cycles seriously extend project timeframes.
This is the model where intensive customer involvement appears. They can be
involved in the exploration and review stages of each cycle. At the development
stage, the customer’s amendments are not acceptable.
Use cases:

• Projects with unclear business needs or too ambitious/innovative


requirements.
• Projects that are large and complicated.
• Research and development (R&D) activity or the introduction of a new
service or a product.

The Rational Unified Process (RUP)

The Rational Unified Process (RUP) is also a combination of linear and iterative
frameworks. The model divides the software development process into 4 phases
– inception, elaboration, construction, and transition. Each phase but Inception
is usually done in several iterations. All basic activities (requirements, design,
etc.) of the development process are done in parallel across these 4 RUP phases,
though with different intensity.
RUP helps to build stable and, at the same time, flexible solutions, but still, this
model is not as quick and adaptable as the pure Agile group (Scrum, Kanban,
XP, etc.). The degree of customer involvement, documentation intensity, and
iteration length may vary depending on the project needs.
Use cases:

• Large and high-risk projects, especially, use-case based development and


fast development of high-quality software.
The Agile group
The rest of the SDLC models we’ve chosen fall under the umbrella of Agile.
Nowadays, more than 70% of organizations employ this or that Agile approach
in their IT projects. In general, at the heart of Agile are iterative development,
intensive communication, and early customer feedback.
Each Agile iteration usually takes several weeks and delivers a complete
working software version. The models of this group put more focus on
delivering a functioning part of the application quickly. They pay less attention
to detailed software documentation (detailed requirement specification, detailed
architecture description), and more to software testing activities. This fosters
quick development but considerably prolongs software transfer to the support
team as well as makes its maintenance more complicated as more time is spent
to find the problem when there's no detailed software description.
Agile is about working in close collaboration both across the team and with the
customers. At the end of each iteration, stakeholders review the development
progress and re-evaluate the priority of tasks for the future iteration to increase
the return on investment (ROI) and ensure alignment with user needs and
business goals.
Accordingly, frequent releases are characteristic to the Agile models. They also
allow for continuous software improvement with easy fixes and changes, quick
updates, and feature addition, and help to deliver applications that satisfy users’
needs better. However, the lack of detailed planning and openness to changes
make it difficult to accurately estimate budget, time and people required for the
project.
Use cases:

• Practically any startup initiatives, when end users’ early feedback is


required.
• Most of mid-sized projects in custom software development where
business requirements cannot be confidently translated to detailed
software requirements.
• Large projects that are easy to divide into small functional parts and can
be developed incrementally over each iteration.
Agile comes in different flavors. Today, its most common subtypes are Scrum,
Extreme Programming, and Kanban.

Scrum

Scrum is probably the most popular Agile model. The iterations (‘sprints’) are
usually 2-4 weeks long, and they are preceded with thorough planning and
previous sprint assessment. No changes are allowed after the sprint activities
have been defined.
Extreme Programming (XP)

With Extreme Programming (XP), a typical iteration lasts 1-2 weeks. The
model allows changes to be introduced even after the iteration’s launch if the
team hasn’t started to work with the relevant software piece yet. Such flexibility
significantly complicates the delivery of quality software. To mitigate the
problem, XP requires the use of pair programming, test-driven development and
test automation, continuous integration (CI), small releases, simple software
design and prescribes to follow the coding standards.
Kanban

As for Kanban, its key distinguishing feature is the absence of pronounced


iterations. If used, they are kept extremely short (‘daily sprints’). Instead,
the emphasis is placed on plan visualization. The team uses the Kanban
Board tool that provides a clear representation of all project activities, their
number, responsible persons, and progress. Such increased transparency helps
to estimate the most urgent tasks more accurately. Also, the model has no
separate planning stage, so a new change request can be introduced at any time.
Communication with the customer is ongoing, they can check the work results
whenever they like, and the meetings with the project team can happen even
daily. Due to its nature, the model is frequently used in projects on software
support and evolution.

You might also like