Sa Assingment
Sa Assingment
Assignment –I
1. Explain Software development methodology.
Ans :- Software development methodology implies dividing the workload into
specific segments for its faster management. It also describes management methods
used to increase the delivery efficiency, cooperation between development, design,
testing, and other teams, as well as the product owner. Methodologies also regulate
the participation of involved parties outside of the team, like clients and
stakeholders. Project participants know how and when to control the project without
interfering with the team.
Waterfall Model
The Waterfall software development approach is one of the earliest ones, having
appeared in the 1950s and defined in the 1970s by Winston W. Royce. Waterfall
software development is characterized by a very straightforward approach that
follows a rigid series of steps. Each phase must be completed one by one, and there
is no going back to a previous step.
Stages of Waterfall development
The critical thing to remember is that the exact number and names of Waterfall
development stages vary with regards to the project needs and the team visions.
Here’s a list of typical phases of Waterfall development.
Gathering requirements: this is the stage where the team defines the product’s
functionality, interface, performance, checks its connection to business goals.
Design: software development teams pick tech stacks, determine the databases that
they prefer, and prepare the technology. UX and UI designers define user
personas and create the interface.
Build: developers write code for software functionality (user-end and server-end).
Deployment: the code is tested and uploaded to the server.
Maintenance: the team supports the final version of the application.
Advantages
The waterfall model is natural to measure and control: the workflow is organized in
clearly defined stages. Because there’s no switching back-and-forth, you can set the
timing precisely and plan the budget accordingly.
Management is easy: due to its definite structure, it’s perfect for small teams and
inexperienced managers;
Onboarding is faster: new developers can quickly get up to speed with the project
because all the stages logically follow each other.
Disadvantages
Lack of flexibility: the team can’t fix issues left over from the previous stage which
leads to piled up bugs and technical debt;
Collaboration issues: different teams do not work together. If something goes
wrong, developers, designers, and testers are likely to blame each other for the
failure.
Agile
Agile is a constant repetition of development and testing stages in software
development. The project is flexible because developers, designers, and testers
cooperate with each other and can perform tasks simultaneously.
Priority is given to individual interactions over tools and processes – people come
first;
Collaboration over negotiation: the team strives to find the compromise with the
product owner, not to negotiate the best one-sided contract;
Changes over planning: long-term goals are respected but pushed aside if needed.
Product over complete documentation: developers should spend more time writing
code than reports.
Advantages
Less control: you can’t estimate the project cost early on. Negotiations with product
owners become more complicated because the team can’t create a precise estimate
or give certain budget guarantees.
More commitment from the team: developers, testers, and designers should
communicate with each other and management.
Rapid application development (RAD)
RAD is similar to the Agile and prototype model. Like these software engineering
methodologies, it emphasizes the importance of building a minimum viable
product, but also, it prioritizes the speed of the delivery over other metrics.
Developers should quickly release new interactions of the product without being
overly perfectionist. The regular prototype model doesn’t impose such restrictions.
Developers are focused on creating the main functionality first, releasing the
product and then perfecting it;
Testing isn’t as important early on the project;
Flexibility is prioritized over planning, just like in Agile.
Advantages
Early feedback: users and stakeholders can evaluate the prototype early on and
contribute to the project with their opinions;
Flexibility: developers can change product requirements and deliverables anytime;
Quick results: having a done product is better than aiming to release a perfect one
without showing tangible results.
Disadvantages
The DSDM methodology looks at the product not as just a collection of features or
code files, but as a complex system. Each software is evaluated in terms of tangible
value that it brings to businesses. The key priority of the development team is to
understand how business works, define clear strategies and objectives, and reflect
these goals in the business logic of the application.
DSDM comprises five key stages: feasibility study, business research, functional
model ideation, system design, and implementation. As you can tell, the majority of
these stages fall in the first half of the product development process. DSDM
emphasizes on making sure that the product can bring expected benefits to the
company and market.
Advantages
Time-consuming initial stages: if your team implements DSDM, be ready that the
first research stage will take quite a lot of time;
Documentation: usually, DSDM software development approaches entail presenting
product owners with multiple reports and research documents;
Difficult to manage: not all development teams know how to analyze concepts and
control employee’s efficiency of performing such analytical tasks.
Extreme programming (XP)
It’s evident that extreme programming requires QA and development teams to run
thousands of tests every day. To make this work, the team has to adopt automated
testing. The priority should be to invest the time at early project stages to automate
functional, performance, and unit tests, and save time later on during the QA and
maintenance stages.
Time and cost-efficient: the team doesn’t waste time on rewriting functionality and
eliminating bugs or technical debt;
No need to refactor: the code is evaluated as it’s being written;
Better performances: users don’t see functionality or interface bugs in the ready
project;
Reduced risks: due to constant monitoring, the team minimizes the risk of sudden
system failures.
Disadvantages
In the software product line case study, separate groups were given responsibility
for building and maintaining individual portions of the organization's architecture
for a family of products. In any design undertaken by the organization at large,
these groups have a strong voice in the system's decomposition, pressuring for the
continued existence of the portions they control.
2. The architecture can affect the goals of the developing organization. A successful
system built from it can enable a company to establish a foothold in a particular
market area. The architecture can provide opportunities for the efficient
production and deployment of similar systems, and the organization may adjust its
goals to take advantage of its newfound expertise to plumb the market. This is
feedback from the system to the developing organization and the systems it builds.
3. The architecture can affect customer requirements for the next system by giving
the customer the opportunity to receive a system (based on the same architecture) in
a more reliable, timely, and economical manner than if the subsequent system were
to be built from scratch. The customer may be willing to relax some requirements to
gain these economies. Shrink-wrapped software has clearly affected people's
requirements by providing solutions that are not tailored to their precise needs but
are instead inexpensive and (in the best of all possible worlds) of high quality.
Product lines have the same effect on customers who cannot be so flexible with
their requirements. A Case Study in Product Line Development will show how a
product line architecture caused customers to happily compromise their
requirements because they could get high-quality software that fit their basic needs
quickly, reliably, and at lower cost.
4. The process of system building will affect the architect's experience with
subsequent systems by adding to the corporate experience base. A system that was
successfully built around a tool bus or .NET or encapsulated finite-state machines
will engender similar systems built the same way in the future. On the other hand,
architectures that fail are less likely to be chosen for future projects.
5. A few systems will influence and actually change the software engineering
culture, that is, the technical environment in which system builders operate and
learn. The first relational databases, compiler generators, and table-driven operating
systems had this effect in the 1960s and early 1970s; the first spreadsheets and
windowing systems, in the 1980s. The World Wide Web is the example for the
1990s. J2EE may be the example for the first decade of the twenty-first century.
When such pathfinder systems are constructed, subsequent systems are affected by
their legacy.
Software Architecture
Architecture serves as a blueprint for a system. It provides an
abstraction to manage the system complexity and establish a communication and
coordination mechanism among components.
It defines a structured solution to meet all the technical and operational
requirements, while optimizing the common quality attributes like
performance and security.
Further, it involves a set of significant decisions about the organization related
to software development and each of these decisions can have a considerable
impact on quality, maintainability, performance, and the overall success of the
final product. These decisions comprise of −
o Selection of structural elements and their interfaces by which the system
is composed.
o Behavior as specified in collaborations among those elements.
o Composition of these structural and behavioral elements into large
subsystem.
o Architectural decisions align with business objectives.
o Architectural styles guide the organization.
o
Software Design
Software design provides a design plan that describes the elements of a system, how
they fit, and work together to fulfill the requirement of the system. The objectives
of having a design plan are as follows
It comes before the detailed design, coding, integration, and testing and after the
domain analysis, requirements analysis, and risk analysis.
Software Connectors:
Connectors act as bridges between software components, facilitating communication
and interaction. We will define software connectors and explore different connector
types, such as procedural connectors, data connectors, and event-based connectors.
Understanding connectors is crucial for designing flexible and extensible software
systems.
Communication and Interaction in Software Systems:
Efficient communication and interaction are vital in software systems. We will
discuss synchronous and asynchronous communication, as well as various
interprocess communication mechanisms like message queues and remote procedure
calls. Additionally, we will introduce event-driven architecture and event-based
communication, which are gaining popularity in modern systems.
One of the most useful aspects of patterns is that they exhibit known quality
attributes. This is why the architect chooses a particular pattern and not one at
random. Some patterns represent known solutions to performance problems, others
lend themselves well to high-security systems, still others have been used
successfully in high-availability systems. Choosing an architectural pattern is often
the architect's first major design choice.
The term architectural style has also been widely used to describe the same
concept.
Layered Architecture
The most common architecture pattern is the layered architecture pattern, otherwise
known as the n-tier architecture pattern. This pattern is the de facto standard for
most Java EE applications and therefore is widely known by most architects,
designers, and developers. The layered architecture pattern closely matches the
traditional IT communication and organizational structures found in most
companies, making it a natural choice for most business application development
efforts.
Pattern Description
Components within the layered architecture pattern are organized into horizontal
layers, each layer performing a specific role within the application (e.g.,
presentation logic or business logic). Although the layered architecture pattern does
not specify the number and types of layers that must exist in the pattern, most
layered architectures consist of four standard layers: presentation, business,
persistence, and database (Figure 1-1). In some cases, the business layer and
persistence layer are combined into a single business layer, particularly when the
persistence logic (e.g., SQL or HSQL) is embedded within the business layer
components. Thus, smaller applications may have only three layers, whereas larger
and more complex business applications may contain five or more layers.
Each layer of the layered architecture pattern has a specific role and responsibility
within the application. For example, a presentation layer would be responsible for
handling all user interface and browser communication logic, whereas a business
layer would be responsible for executing specific business rules associated with the
request. Each layer in the architecture forms an abstraction around the work that
needs to be done to satisfy a particular business request. For example, the
presentation layer doesn’t need to know or worry about how to get customer data; it
only needs to display that information on a screen in particular format. Similarly,
the business layer doesn’t need to be concerned about how to format customer data
for display on a screen or even where the customer data is coming from; it only
needs to get the data from the persistence layer, perform business logic against the
data (e.g., calculate values or aggregate data), and pass that information up to the
presentation layer.
one of the powerful features of the layered architecture pattern is the separation of
concerns among components. Components within a specific layer deal only with logic
that pertains to that layer. For example, components in the presentation layer deal
only with presentation logic, whereas components residing in the business layer
deal only with business logic. This type of component classification makes it easy
to build effective roles and responsibility models into your architecture, and also
makes it easy to develop, test, govern, and maintain applications using this
architecture pattern due to well-defined component interfaces and limited
component scope.
Client-server architecture
Client-server architecture is a computing model in which the server hosts, delivers,
and manages most of the resources and services requested by the client. It is also
known as the networking computing model or client-server network as all requests
and services are delivered over a network. The client-server architecture or model
has other systems connected over a network where resources are shared among the
different computers.