Unit 1 - Oose
Unit 1 - Oose
Software development:
Web Development
Mobile Development
Software Tool Development
Application Development
API Development
Data Management Software Development
Security Software Development
Embedded Systems Development
Cloud Computing Software Development
Software Developer :
The Creative minds who are behind this software development or those people
who are involved in the complete software development process and finally
bring amazing software applications/products are the Software Developers. In
simple, we can say the person who develops the computer software is called a
1
Software Developer.
Page
1
Different types of software developers –
Web Developer
Mobile App Developer
Desktop Developer
Graphics Developer
Game Developer
Big Data Developer
Embedded Developer
Security Developer
There are several different types. They can be grouped into four basic
categories:
Here is the list of some top challenges every Software Product Developer
faces –
2
Providing complete Security to the software applications is a major
challenge for developers as hackers are trying each moment there to hack
the software applications and steal the data.
Getting Defects or Errors in the product during its last stage creates an
unwanted challenge for the software developers.
In last, most software developer’s face this problem if they don’t get the
required support from the Project Manager/Leader, and sometimes it
gets difficult to handle the relationship between colleagues and managers
3
3
10 Most Common Software Development Challenges & How to Solve Them
One more solution for this problem is not to request too many
features or enhancements at once. The project teams should also seek out
areas where they can cut costs and save time and use those funds and
hours on other aspects of the project.
4
One useful way to address this problem is by holding discussions
with customers or clients when there are any questions or unclear
requirements during the project cycle.
To address this challenge, developers need to understand the system they are
working on clearly. complexity of projects is another common challenge that
developers commonly face. This is often due to a large number of
dependencies and interactions between different.
5
To overcome this challenge, companies need to be more proactive in their
search for talent. They should identify the skills they need and target
candidates who have those skills.
Last but not least, testing and debugging is one of the major challenges in
software development that software testing teams often encounter. This
usually involves identifying and fixing the errors in the code.
6
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
applicatio.
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.
3. Maintaining the vision of the project is the most important thing throughout
complete development process for the success of a software project. A clear
7
vision of the project leads to the development of the project in the right
Page
7
way.
8. When other developers work with another’s code they should not be
surprised and should not waste their time in getting code. So providing
better Documentation at required steps is a good way of developing
software projects.
10. The developers should develop the project in such a way that it should
satisfy the principle of Generality means it should not be limited or
restricted to some of cases/functions rather it should be free from unnatural
restrictions and should be able to provide service to customers what
actually they need or general needs in an extensive manner.
Object Orientation :
In the object-oriented approach, the focus is on capturing the structure and
behavior of information systems into small modules that combines both data
8
and process. The main aim of Object Oriented Design (OOD) is to improve the
Page
8
quality and productivity of system analysis and design by making it more
usable.
In analysis phase, OO models are used to fill the gap between problem and
solution. It performs well in situation where systems are undergoing continuous
design, adaption, and maintenance. It identifies the objects in problem domain,
classifying them in terms of data and behavior.
The OO model is beneficial in the following ways −
It facilitates changes in the system at low cost.
It promotes the reuse of components.
It simplifies the problem of integrating components to configure large
system.
It simplifies the design of distributed systems.
the system and available only through the services of the class. It allows
Page
9
improvement or modification of methods used by objects without affecting
other parts of a system.
Abstraction
It is a process of taking or selecting necessary method and attributes to specify
the object. It focuses on essential characteristics of an object relative to
perspective of user.
Relationships
All the classes in the system are related with each other. The objects do not exist
in isolation, they exist in relationship with other objects.
There are three types of object relationships −
Aggregation − It indicates relationship between a whole and its parts.
Association − In this, two classes are related or connected in some way
such as one class works with another to perform a task or one class acts
upon other class.
Generalization − The child class is based on parent class. It indicates that
two classes are similar but have some differences.
Inheritance
Inheritance is a great feature that allows to create sub-classes from an
existing class by inheriting the attributes and/or operations of existing
classes.
Polymorphism and Dynamic Binding
Polymorphism is the ability to take on many different forms. It applies to
both objects and operations. A polymorphic object is one who true type
hides within a super or parent class.
In polymorphic operation, the operation may be carried out differently by
different classes of objects. It allows us to manipulate objects of different
classes by knowing only their common properties.
10
SDLC is a framework defining tasks performed at each step in the
software development process.
ISO/IEC 12207 is an international standard for software life-cycle
processes. It aims to be the standard that defines all the tasks required for
developing and maintaining software.
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. It also captures the structure in which these methods are to
be undertaken.
In other words, a life cycle model maps the various activities performed on a
software product from its inception to retirement. Different life cycle models
may plan the necessary development activities to phases in different ways.
Thus, no element which life cycle model is followed, the essential activities are
contained in all life cycle models though the action may be carried out in
distinct orders in different life cycle models. During any life cycle stage, more
than one activity may also be carried out.
Need of SDLC
The development team must determine a suitable life cycle model for a
particular plan and then observe to it.
Without using an exact life cycle model, the development of a software product
would not be in a systematic and disciplined manner. When a team is
developing a software product, there must be a clear understanding among team
representative about when and what to do. Otherwise, it would point to chaos
and project failure. This problem can be defined by using an example. Suppose
a software development issue is divided into various parts and the parts are
assigned to the team members. From then on, suppose the team representative is
allowed the freedom to develop the roles assigned to them in whatever way they
like. It is possible that one representative might start writing the code for his
part, another might choose to prepare the test documents first, and some other
engineer might begin with the design phase of the roles assigned to him. This
would be one of the perfect methods for project failure.
11
Page
11
The stages of SDLC are as follows:
The senior members of the team perform it with inputs from all the stakeholders
and domain experts or SMEs in the industry.
Planning for the quality assurance requirements and identifications of the risks
associated with the projects is also done at this stage.
Business analyst and Project organizer set up a meeting with the client to gather
all the data like what the customer wants to build, who will be the end user,
what is the objective of the product. Before creating a product, a core
understanding or knowledge of the product is very necessary.
Once the required function is done, an analysis is complete with auditing the
feasibility of the growth of a product. In case of any ambiguity, a signal is set up
for further discussion.
this document and also should be reviewed by the customer for future reference.
12
Stage2: Defining Requirements
Once the requirement analysis is done, the next stage is to certainly represent
and document the software requirements and get them accepted from the project
stakeholders.
The next phase is about to bring down all the knowledge of requirements,
analysis, and design of the software project. This phase is the product of the last
two, like inputs from the customer and requirement gathering.
In this phase of SDLC, the actual development begins, and the programming is
built. The implementation of design begins concerning writing code.
Developers have to follow the coding guidelines described by their management
and programming tools like compilers, interpreters, debuggers, etc. are used to
develop and implement the code.
Stage5: Testing
After the code is generated, it is tested against the requirements to make sure
that the products are solving the needs addressed and gathered during the
requirements stage.
During this stage, unit testing, integration testing, system testing, acceptance
testing are done.
Stage6: Deployment
Once the software is certified, and no bugs or errors are stated, then it is
deployed.
Stage7: Maintenance
Page
13
Once when the client starts using the developed systems, then the real issues
come up and requirements to be solved from time to time.
This procedure where the care is taken for the developed product is known as
maintenance.
Waterfall model:
Winston Royce introduced the Waterfall Model in 1970.This model has five
phases: Requirements analysis and specification, design, implementation, and
unit testing, integration and system testing, and operation and maintenance. The
steps always follow in this order and do not overlap. The developer must
complete every phase before the next phase begins. This model is named
"Waterfall Model", because its diagrammatic representation resembles a
cascade of waterfalls.
14
language. It defines the overall software architecture together with high level
14
and detailed design. All this work is documented as a Software Design
Document (SDD).
During testing, the code is thoroughly examined and modified. Small modules
are tested in isolation initially. After that these modules are tested by writing
some overhead code to check the interaction between these modules and the
flow of intermediate output.
4. Integration and System Testing: This phase is highly crucial as the quality
of the end product is determined by the effectiveness of the testing carried out.
The better output will lead to satisfied customers, lower maintenance costs, and
accurate results. Unit testing determines the efficiency of individual modules.
However, in this phase, the modules are tested for their interactions with each
other and with the system.
Some Circumstances where the use of the Waterfall model is most suited are:
o This model is simple to implement also the number of resources that are
required for it is minimal.
o The requirements are simple and explicitly declared; they remain
15
15
o The start and end points for each phase is fixed, which makes it easy to
cover progress.
o The release date for the complete product, as well as its final cost, can be
determined before development.
o It gives easy to control and clarity for the customer due to a strict
reporting system.
o In this model, the risk factor is higher, so this model is not suitable for
more significant and complex projects.
o This model cannot accept the changes in requirements during
development.
o It becomes tough to go back to the phase. For example, if the application
has now shifted to the coding phase, and there is a change in requirement,
It becomes tough to go back and change it.
o Since the testing done at a later stage, it does not allow identifying the
challenges and risks in the earlier phase, so the risk reduction strategy is
difficult to prepare.
Spiral Model:
16
Each cycle in the spiral is divided into four parts:
Objective setting: Each cycle in the spiral starts with the identification of
purpose for that cycle, the various alternatives that are possible for achieving the
targets, and the constraints that exists.
Risk Assessment and reduction: The next phase in the cycle is to calculate
these various alternatives based on the goals and constraints. The focus of
evaluation in this stage is located on the risk perception for the project.
Planning: Finally, the next step is planned. The project is reviewed, and a
choice made whether to continue with a further period of the spiral. If it is
determined to keep, plans are drawn up for the next step of the project.
17
The risk-driven feature of the spiral model allows it to accommodate any
mixture of a specification-oriented, prototype-oriented, simulation-oriented, or
another type of approach. An essential element of the model is that each period
of the spiral is completed by a review that includes all the products developed
during that cycle, including plans for the next cycle. The spiral model works for
development as well as enhancement projects.
Advantages
Disadvantages
Incremental Model:
18
The various phases of incremental model are as follows:
3. Testing: In the incremental model, the testing phase checks the performance
of each existing function as well as additional functionality. In the testing phase,
the various methods are used to test the behavior of each task.
completion of this phase, the number of the product working is enhanced and
Page
19
When we use the Incremental Model?
Iterative Model:
In this Model, you can start with some of the software specifications and
develop the first version of the software. After the first version if there is a need
to change the software, then a new version of the software is created with a new
iteration. Every release of the Iterative Model finishes in an exact and fixed
period that is called iteration.
The Iterative Model allows the accessing earlier phases, in which the variations
made respectively. The final output of the project renewed at the end of the
Software Development Life Cycle (SDLC) process.
20
Page
20
The various phases of Iterative model are as follows:
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.
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.
performed to check the behaviour and validity of the developed product. And if
21
there are any error found then the process starts again from the requirement
gathering.
V-Model:
V-Model also referred to as the Verification and Validation Model. In this, each
phase of SDLC must complete before the next phase starts. It follows a
sequential design process same as the waterfall model. Testing of the device is
planned in parallel with a corresponding stage of development.
22
Page
22
Verification: It involves a static analysis method (review) done without
executing code. It is the process of evaluation of the product development
process to find whether specified requirements meet.
23
3. Architecture Design: The baseline in selecting the architecture is that it
should understand all which typically consists of the list of modules, brief
functionality of each module, their interface relationships, dependencies,
database tables, architecture diagrams, technology detail, etc. The
integration testing model is carried out in a particular phase.
4. Module Design: In the module design phase, the system breaks down
into small modules. The detailed design of the modules is specified,
which is known as Low-Level Design
5. Coding Phase: After designing, the coding phase is started. Based on the
requirements, a suitable programming language is decided. There are
some guidelines and standards for coding. Before checking in the
repository, the final build is optimized for better performance, and the
code goes through many code reviews to check the performance.
1. Unit Testing: In the V-Model, Unit Test Plans (UTPs) are developed
during the module design phase. These UTPs are executed to eliminate
errors at code level or unit level. A unit is the smallest entity which can
independently exist, e.g., a program module. Unit testing verifies that the
smallest entity can function correctly when isolated from the rest of the
codes/ units.
2. Integration Testing: Integration Test Plans are developed during the
Architectural Design Phase. These tests verify that groups created and
tested independently can coexist and communicate among themselves.
3. System Testing: System Tests Plans are developed during System
Design Phase. Unlike Unit and Integration Test Plans, System Tests Plans
are composed by the client?s business team. System Test ensures that
expectations from an application developer are met.
4. Acceptance Testing: Acceptance testing is related to the business
requirement analysis part. It includes testing the software product in user
atmosphere. Acceptance tests reveal the compatibility problems with the
different systems, which is available within the user atmosphere. It
conjointly discovers the non-functional problems like load and
performance defects within the real user atmosphere.
24
Page
24
o When the requirement is well defined and not ambiguous.
o The V-shaped model should be used for small to medium-sized projects
where requirements are clearly defined and fixed.
o The V-shaped model should be chosen when sample technical resources
are available with essential technical expertise.
1. Easy to Understand.
2. Testing Methods like planning, test designing happens well before
coding.
3. This saves a lot of time. Hence a higher chance of success over the
waterfall model.
4. Avoids the downward flow of the defects.
5. Works well for small plans where requirements are easily understood.
25
o The re-use of software components
o A rigidly paced schedule that refers design improvements to the next
product version
o Less formality in reviews and other team communication
2. Data Modelling: The data collected from business modeling is refined into a
set of data objects (entities) that are needed to support the business. The
attributes (character of each entity) are identified, and the relation between these
data objects (entities) is defined.
26
5. Testing & Turnover: Many of the programming components have already
been tested since RAD emphasis reuse. This reduces the overall testing time.
But the new part must be tested, and all interfaces must be fully exercised.
o When the system should need to create the project that modularizes in a
short span time (2-3 months).
o When the requirements are well-known.
o When the technical risk is limited.
o When there's a necessity to make a system, which modularized in 2-3
months of period.
o It should be used only if the budget allows the use of automatic code
generating tools.
******************
27
Page
27