Software Architecture and Design Assignment #3: University of Lahore, Sargodha Campus
Software Architecture and Design Assignment #3: University of Lahore, Sargodha Campus
Software Architecture and Design Assignment #3: University of Lahore, Sargodha Campus
ASSIGNMENT #3
That doesn’t mean that there aren’t managers. It means that teams have the ability to figure out how
they’re going to approach things on their own.
It means that those teams are cross-functional. Those teams don’t have to have specific roles
involved so much as that when you get the team together, you make sure that you have all the right
skill sets on the team.
There still is a place for managers. Managers make sure team members have, or obtain, the right skill
sets. Managers provide the environment that allows the team to be successful. Managers mostly step
back and let their team figure out how they are going to deliver products, but they step in when the
teams try but are unable to resolve issues.
When most teams and organizations start doing Agile development, they focus on the practices that
help with collaboration and organizing the work, which is great. However, another key set of practices
that are not as frequently followed but should be are specific technical practices that directly deal with
developing software in a way that helps your team deal with uncertainty. Those technical practices are
essential and something you shouldn’t overlook.
Methodologies Of Agile:
A methodology is the set of conventions that a team agrees to follow. That means that each team will have its
own methodology, which will be different in either small or large ways from every other team’s methodology.
So Agile methodologies are the conventions that a team chooses to follow in a way that follows Agile values
and principles.
“Wait,” you’re probably saying, “I thought Scrum and XP were Agile methodologies.” Alistair applied the term
framework to those concepts. They certainly were born from a single team’s methodology, but they became
frameworks when they were generalized to be used by other teams. Those frameworks help inform where a
team starts with their methodology, but they shouldn’t be the team’s methodology. The team will always need
to adapt its use of a framework to fit properly in its context.
Agile Process
Check below Agile process model to deliver successful systems quickly
The agile process is broken into individual The design process is not broken into an
models that designers work on individual models
Development process is iterative, and the The development process is phased, and
project is executed in short (2-4) weeks the phase is much bigger than iteration.
iterations. Planning is very less. Every phase ends with the detailed
description of the next phase.
At the end of every sprint, user Testers work separately from developers
acceptance is performed
Agile metrics:
Metrics that can be collected for effective usage of Agile is:
Drag Factor
o Effort in hours which do not contribute to sprint goal
o Drag factor can be improved by reducing number of shared resources, reducing the
amount of non-contributing work
o New estimates can be increased by percentage of drag factor -New estimate = (Old
estimate+drag factor)
Velocity
o Amount of backlog(user stories) converted to shippable functionality of sprint
No of Unit Tests added
Time interval taken to complete daily build
Bugs detected in an iteration or in previous iterations
Production defect leakage
MINDSET OF AGILE:
Ultimately, Agile is a mindset informed by the Agile Manifesto’s values and principles. Those values and
principles provide guidance on how to create and respond to change and how to deal with uncertainty.
You could say that the first sentence of the Agile Manifesto encapsulates the whole idea: “We are uncovering
better ways of developing software by doing it and helping others do it.”
When you face uncertainty, try something you think might work, get feedback, and adjust accordingly.
Keep the values and principles in mind when you do this. Let your context guide which frameworks, practices,
and techniques you use to collaborate with your team and deliver value to your customers.
Business Analysis:
As Agile Software Development became more popular, people involved with software development activities
but who didn’t personally develop software looked for some way to figure out how these Agile ideas applied in
their line of work.
The Agile Manifesto and the 12 Principles were written by a group of software developers (and a tester) to
address issues that software developers faced. When you think of Agile as a mindset, that mindset can be
applied to other activities.
When you do that, Agile becomes an adjective. It describes how you perform some activity. It does not create
a new methodology for the reasons explained above.
When you want to understand Agile project management, ask “How might we perform project management in
a way that allows us to create and respond to change and deal with uncertainty?” Agile Alliance and Project
Management Institute (PMI) explored this question through a joint effort to create the Agile Practice
Guide (Available to Agile Alliance Members).
When you want to understand Agile business analysis, ask “How might we perform business analysis in a way
that allows us to create and respond to change and deal with uncertainty?” Agile Alliance and International
Institute of Business Analysis (IIBA) explored this question through a joint effort to create the Agile Extension
to the Business Analysis Body of Knowledge (Available to Agile Alliance Members).
The two concepts noted above are examples of an attempt to move Agile “outside of software.” Those efforts
have resulted recently in the Business Agility movement.
If you extend the idea of Agile as a mindset, then people seeking Business Agility ask themselves, “How might
we structure and operate our organization in a way that allows us to create and respond to change and deal
with uncertainty?”
You might say that business agility is a recognition that in order for people in an organization to operate with an
Agile mindset, the entire organization needs to support that mindset. Agile software development was never
truly Agile until the organization changed its structure and operations to work in an uncertain environment.
Below are a few key Agile concepts. You can see more in our glossary section.
User Stories: In consultation with the customer or product owner, the team divides up the work to be
done into functional increments called “user stories.” Each user story is expected to yield a
contribution to the value of the overall product. (see more)
Daily Meeting: Each day at the same time, the team meets so as to bring everyone up to date on the
information that is vital for coordination: each team members briefly describes any “completed”
contributions and any obstacles that stand in their way. (see more)
Incremental Development: Nearly all Agile teams favor an incremental development strategy; in an
Agile context, this means that each successive version of the product is usable, and each builds upon
the previous version by adding user-visible functionality. (see more)
Iterative Development: Agile projects are iterative insofar as they intentionally allow for “repeating”
software development activities, and for potentially “revisiting” the same work products. (see more)
Team: A “team” in the Agile sense is a small group of people, assigned to the same project or effort,
nearly all of them on a full-time basis. A small minority of team members may be part-time
contributors, or may have competing responsibilities. (see more)
Milestone Retrospective: Once a project has been underway for some time, or at the end of the
project, all of the team’s permanent members (not just the developers) invests from one to three days
in a detailed analysis of the project’s significant events. (see more)
Personas: When the project calls for it – for instance when user experience is a major factor in project
outcomes – the team crafts detailed, synthetic biographies of fictitious users of the future product:
these are called “personas.” (see more)
Design Patterns:
In software engineering, a design pattern is a general repeatable solution to a commonly occurring
problem in software design. A design pattern isn't a finished design that can be transformed directly into
code. It is a description or template for how to solve a problem that can be used in many different
situations.
Often, people only understand how to apply certain software design techniques to certain problems.
These techniques are difficult to apply to a broader range of problems. Design patterns provide general
solutions, documented in a format that doesn't require specifics tied to a particular problem.
In addition, patterns allow developers to communicate using well-known, well understood names for
software interactions. Common design patterns can be improved over time, making them more robust
than ad-hoc designs.
Abstract Factory
Creates an instance of several families of classes
Builder
Separates object construction from its representation
Factory Method
Creates an instance of several derived classes
Object Pool
Avoid expensive acquisition and release of resources by recycling objects that are no longer in
use
Prototype
A fully initialized instance to be copied or cloned
Singleton
A class of which only a single instance can exist
Adapter
Match interfaces of different classes
Bridge
Separates an object’s interface from its implementation
Composite
A tree structure of simple and composite objects
Decorator
Add responsibilities to objects dynamically
Facade
A single class that represents an entire subsystem
Flyweight
A fine-grained instance used for efficient sharing
Private Class Data
Restricts accessor/mutator access
Proxy
An object representing another object
Chain of responsibility
A way of passing a request between a chain of objects
Command
Encapsulate a command request as an object
Interpreter
A way to include language elements in a program
Iterator
Sequentially access the elements of a collection
Mediator
Defines simplified communication between classes
Memento
Capture and restore an object's internal state
Null Object
Designed to act as a default value of an object
Observer
A way of notifying change to a number of classe
State
Alter an object's behavior when its state changes
Strategy
Encapsulates an algorithm inside a class
Template method
Defer the exact steps of an algorithm to a subclass
Visitor
Defines a new operation to a class without change
Exploring Inheritance
Inheritance can be tired two ways: by subclassing existing classes and by executing
interfacing. The major objective of inheritance is reuse, but the two approaches accomplish
this objective in numerous ways.
Inheritance is a characteristic offered by many class/object-oriented languages and allows
you to "inherit" some/all of the functionalities from a "parent" object or class.
The object that inherits those functionalities can eventually alter some of them but for the rest
behave as the inherited class.
There are following types of inheritance: -
• Single Inheritance
• Multiple Inheritance
• Multilevel Inheritance
• Hierarchical Inheritance
• Hybrid Inheritance
• Multipart Inheritance
Single Inheritance: It contains one Base Class and one Derived Class. Contents of the Parent
Class is Inherited into the Derived Class
Multiple Inheritance: Two or more base class inherited into a single derived class.
Hierarchical Inheritance: is straight opposite to Multiple Inheritance. One Parent Class is Inherited
into more than Derived Class.
Multilevel Inheritance: different form of inheritance. Base class inherited by another derived
class changes into base class and then inherited into derived class.
Hybrid Inheritance: the complex type of Inheritance. Parent Class is Inherited to Child Class and
the Child Class changes to Base or parent Class and once again Inherited to Child Class.
Multipart Inheritance: it is possible to have a single Base Class and that Base Class is Inherited
into a collection of Derived Class in any Part or direction.
MVC Architecture:
MVC is an architectural pattern which means it rules the whole architecture of the applications. Even
though often it is known as design pattern but we may be wrong if we refer it only as a design pattern
because design patterns are used to solve a specific technical problem, whereas architecture pattern is
used for solving architectural problems, so it affects the entire architecture of our application.
-Model
-View
-Controller
MVC Architecture:
The main reasons why MVC is used are: First, it doesn't allow us to repeat ourselves and second, it help to
create a solid structure of our web applications.
Model
It is known as the lowest level which means it is responsible for maintaining data. Handle data
logically so it basically deals with data. The model is actually connected to the database so
anything you do with data. Adding or retrieving data is done in the model component. It responds
to the controller requests because the controller never talks to the database by itself. The model
talks to the database back and forth and then it gives the needed data to the controller. Note: the
for the user. So at web applications when you think of the view component just think the Html/CSS
part. Views are created by the data which is collected by the model component but these data
aren’t taken directly but through the controller, so the view only speaks to the controller.
Controller
It’s known as the main man because the controller is the component that enables the interconnection
between the views and the model so it acts as an intermediary. The controller doesn’t have to worry about
handling data logic, it just tells the model what to do. After receiving data from the model it processes it and
then it takes all that information it sends it to the view and explains how to represent to the user. Note:
Advantages of MVC
- MVC architecture will separate the user interface from business logic and business logic
- Easy o maintain.
- Different components of the application in MVC can be independently deployed and maintained.
Disadvantages of MVC
Conclusion
So MVC is not that easy to understand, it’s really hard actually, but not impossible to learn and every
developer needs to keep it in mind when developing an application. Just keep in mind that MVC is an
architecture that divides your software into smaller components. The model deals with data and the logic of
your system. The view only displays data and the controller maintains the connection between the model
and the view. This ‘division’ enables readability and modularity as well it easier the testing part.
Software reuse:
Software reuse is a term used for developing the software by using the existing software components.
Some of the components that can be reuse are as follows;
Source code
Design and interfaces
User manuals
Software Documentation
Software requirement specifications and many more
Less effort: Software reuse requires less effort because many components use in the system
are ready made components.
Time-saving: Re-using the ready made components is time saving for the software team.
Reduce cost: Less effort, and time saving leads to the overall cost reduction.
Increase software productivity: when you are provided with ready made components, then you
can focus on the new components that are not available just like ready made components.
Utilize fewer resources: Software reuse save many sources just like effort, time, money etc.
Leads to a better quality software: Software reuse save our time and we can consume our
more time on maintaining software quality and assurance.