Whenever a new application is in development, unit testing is a vital part of the process and is typically performed by the developer. During this process, sections of code are isolated at a time and are systematically checked to ensure correctness, efficiency, and quality. There are numerous benefits to unit testing, several of which are outlined below.
1. Maximizing Agile Programming and Refactoring
During the coding process, a programmer has to keep in mind a myriad of factors to ensure that the final product correct and as lightweight, as is possible for it to be. However, the programmer also needs to make certain that if changes become necessary, refactoring can be safely and easily done.
Unit testing is the simplest way to assist in making for agile programming and refactoring because the isolated sections of code have already been tested for accuracy and help to minimize refactoring risks.
2. Find and Eliminate Any Bugs Early in the Process
Ultimately, the goal is to find no bugs and no issues to correct, right? But unit testing is there to ensure that any existing bugs are found early on so that they can be addressed and corrected before additional coding is layered on. While it might not feel like a positive thing to have a unit test reveal a problem, it’s good that it’s catching the issue now so that the bug doesn’t affect the final product.
3. Document Any and All Changes
Unit testing provides documentation for each section of coding that has been separated, allowing those who haven’t already directly worked with the code to locate and understand each individual section as necessary. This is invaluable in helping developers understand unit APIs without too much hassle.
4. Reduce Development Costs
As one can imagine, fixing problems after the product is complete is both time-consuming and costly. Not only do you have to sort back through a fully coded application’s worth of material, any bugs which may have been compounded and repeated throughout the application. Unit testing helps not only limit the amount of work that needs to be done after the application is completed it also reduces the time it takes to fix errors because it prevents developers from having to fix the same problem more than once.
5. Assists in Planning
Thanks to the documentation aspect of unit testing, developers are forced to think through the design of each individual section of code so that its function is determined before it’s written. This can prevent redundancies, incomplete sections, and nonsensical functions because it encourages better planning. Developers who implement unit testing in their applications will ultimately improve their creative and coding abilities thanks to this aspect of the process.
Unit testing is absolutely vital to the development process. It streamlines the debugging process and makes it more efficient, saves on time and costs for the developers, and even helps developers and programmers improve their craft through strategic planning. Without unit testing, people would inevitably wind up spending far more time on correcting problems within the code, which is both inefficient and incredibly frustrating. Using unit tests is a must in the development of any application.
The denodo catalog provides the data governance and self-service capabilities to supplement the denodo Virtual DataPort (VDP) core capabilities. Six roles provide the ability to assign or deny capabilities with the denodo data catalog and supplement the database, row, and column security and permissions of denodo Virtual DataPort (VDP).
The Tasks The Roles Can Perform
Denodo Data Catalog Role Name
Assign categories, tags and custom properties groups to views and web services.
Edit views, web services, and databases. Create, edit and delete tags, categories, custom properties groups, and custom properties.
Can do the same as a user with the roles “data_catalog_editor” and “data_catalog_classifier”.
Configure personalization options and content search.
This role can perform any action of all the other data catalog roles.
The exporter role can export the results of a query from the Denodo Data Catalog.
denodo > User Manuals > Denodo Platform New Features Guide
In denodo associations follow the same concept as modeling
tools, which can be described as an ‘on-demand join.’
Should Associations Be Created In the Denodo Model?
You don’t necessarily need to define an Association at every
level; usually, the best practice is to apply associations at the following
On final views published for data consumers,
indicating relationships between related views; Especially, on published web
On the component views below, any derived view
that brings together disparate (dissimilar) data sources. The associations should be defined as
Referential Constraints whenever appropriate to aid the optimization engine.
On the component views below, any derived view
that joins a “Base View from Query” with standard views, since Base
Views from Query cannot be rewritten by the denodo optimization engine. Often Base Views from Query create
These best practices should cover the majority scenarios;
beyond these guidelines, it is best to take an ad-hoc approach to create
Associations when you see a specific performance/optimization.
Are Associations important in Denodo?
In a nutshell, associations performance and the efficiency
of the denodo execution optimizer along with other model metadata, such as:
A coworker recently asked a question as to whether denodo
generated joins automatically from source RDBMS database schema. After searching, a few snippets of
information became obvious. First, that
the subject of inheriting join properties was broader than joins and needed to
in modeling associations (joins on demand). Second, that there were some denodo
design best practices to be considered to optimize associations.
Denodo Automatically Generate Joins From the Source System?
After some research, the short answer is no.
Denodo Inherit Accusations From A Logical Model?
The short answer is yes.
Denodo bridges allow models to be passed to and from other
modeling tools, it is possible to have the association build automatically,
using the top-down approach design approach and importing a model, at the
Interface View level, which is the topmost level of the top-down design
However, below the Interface view level, associations and or joins are created manually by the developer.
Personas and roles are
user modeling approaches that are applied in the early stages of system
development or redesign. They drive the design decision and allows programmers
and designers to place everyday user needs at the forefront of their system
development journey in a user-centered design approach.
Personas and user roles
help improve the quality of user experience when working with products that
require a significant amount of user interaction. But there is a distinct
difference between technology personas vs. roles. What then exactly is a
persona? What are user roles in system development? And, how does persona
differ from user roles?
Let’s see how these two
distinct, yet often confused, user models fit in a holistic user-centered
design process and how you can leverage them to identify valuable product
Vs. Roles – The Most Relevant Way to Describe Users
In software development,
a user role describes the relationship between a user type and a software tool.
It is generally the user’s responsibility when using a system or the specific
behavior of a user who is participating in a business process. Think of roles
as the umbrella, homogeneous constructs of the users of a particular system.
For instance, in an accounting system, you can have roles such as accountant,
cashier, and so forth.
However, by merely using
roles, system developers, designers, and testers do not have sufficient
information to conclusively make critical UX decisions that would make the
software more user-centric, and more appealing to its target users.
This lack of
understanding of the user community has led to the need for teams to move
beyond role-based requirements and focus more on subsets of the system users.
User roles can be refined further by creating “user stand-ins,” known as
personas. By using personas, developers and designers can move closer to the
needs and preferences of the user in a more profound manner than they would by
merely relying on user roles.
In product development,
user personas are an archetype of a fictitious user that represents a specific
group of your typical everyday users. First introduced by Alan Cooper, personas
help the development team to clearly understand the context in which the ideal
customer interacts with a software/system and helps guide the design decision
provide team members with a name, a face, and a description for each user role.
By using personas, you’re typically personalizing the user roles, and by so
doing, you end up creating a lasting impression on the entire team. Through
personas, team members can ask questions about the users.
The Benefits of
Persona development has
several benefits, including:
They help team members
have a consistent understanding of the user group.
stakeholders with an opportunity to discuss the critical features of a system
Personas help designers
to develop user-centric products that have functions and features that the
market already demands.
A persona helps to
create more empathy and a better understanding of the person that will be using
the end product. This way, the developers can design the product with the
actual user needs in mind.
Personas can help
predict the needs, behaviors, and possible reactions of the users to the
What Makes Up a
Once you’ve identified
user roles that are relevant to your product, you’ll need to create personas
for each. A well-defined persona should ideally take into consideration the
needs, goals, and observed behaviors of your target audience. This will
influence the features and design elements you choose for your system.
The user persona should
encompass all the critical details about your ideal user and should be
presented in a memorable way that everyone in the team can identify with and
understand. It should contain four critical pieces of information.
1. The header
The header aid in
improving memorability and creating a connection between the design team and
the user. The header should include:
A fictional name
An image, avatar or a
description/quote that best describes the persona as it relates to the product.
Unlike the name and
image, which might be fictitious, the demographic profile includes factual
details about the ideal user. The demographic profile includes:
Age, gender, education, ethnicity, persona group, and family status
Occupation, work experience, and income level.
User environment. It
represents the social, physical, and technological context of the user. It
answers questions like: What devices do the user have? Do they interact with
other people? How do they spend their time?
Attitudes, motivations, interests, and user pain points.
3. End Goal(s)
End goals help answer
the questions: What problems or needs will the product solution to the user?
What are the motivating factors that inspire the user’s actions?
This is a narrative that
describes how the ideal user would interact with your product in real-life to
achieve their end goals. It should explain the when, the where, and the how.
For a truly successful
user-centered design approach, system development teams should use personas to
provide simple descriptions of key user roles. While a distinct difference
exists in technology personas vs. roles, design teams should use the two
user-centered design tools throughout the project to decide and evaluate the
functionality of their end product. This way, they can deliver a useful and
usable solution to their target market.
denodo 7.0 saves some manual coding when building the ‘Base Views’ by performing some initial data type conversions from ANSI SQL type to denodo Virtual DataPort data types. So, where is a quick reference mapping to show to what the denodo Virtual DataPort Data Type mappings are:
ANSI SQL types To Virtual DataPort Data types Mapping
ANSI SQL Type
Virtual DataPort Type
BIT VARYING (n)
CHARACTER VARYING (n)
DECIMAL (n, m)
NUMERIC (n, m)
TIMESTAMP WITH TIME ZONE
VARCHAR ( MAX )
ANSI SQL Type Conversion Notes
The function CAST truncates the output when converting a value to a text, when these two conditions are met:
You specify a SQL type with a length for the target data type. E.g. VARCHAR(20).
And, this length is lower than the length of the input value.
When casting a boolean to an integer, true is mapped to 1 and false to 0.
Chances are you’ve
participated in changing or upgrading software or application. While the idea
is to push new features to customers or end-users, there have been significant
changes over the years in how dev teams build and deliver applications. This
shift has been necessitated by the growing need for agility in businesses.
Today, enterprises are
pushing their teams to deliver new product features, more often, more rapidly, and
with minimal interruptions to the end-user experience. Ultimately, this has led
to Shorter deployment cycles that translates to:
Quicker customer to
the production team, leading to faster fixes on bugs and faster iterations on
More value to
customers within shorter times
between the development, test, and release teams.
But what has changed
over the years, really? In this article, we’ll talk about the shift in
deployment strategies from traditional deployment approaches to the newer and
more agile deployment methods and the pros and cons of each of the strategy.
Let’s dive in, shall
Deployment Strategies. The “one-and-done” Approach.
strategy required dev teams to update large parts of an application and
sometimes the entire application in one swoop. The implementation happened in
one instance, and all users moved to the newer system immediately on a rollout.
This deployment model
required businesses to conduct extensive and sometimes difficult development
and testing of the monolithic systems before releasing the final application to
on-site installations, the end-users relied on plug-and-install to get the
latest versions of an application. Since the new application updates were
delivered as a whole new package, the user’s hardware and infrastructure had to
be compatible with the software or system for it to run smoothly. Also, the
end-user needed hours of training on critical updates and how to make use of
of Traditional Deployment Strategies
Low operational costs:
Traditional deployment models had lower operating expenses since all
departments were replaced on a single day. Also, since most of the applications
were vendor-packaged solutions like desktop apps or non-production systems,
there were minimal maintenance expenses needed after installation.
requirements. This means that teams would just start coding without tons of
requirements and specification documents.
They worked well for
small projects with small teams.
Faster Return on
Investment since the changes occurred site-wide for all user hence better
returns across the departments
of Traditional Deployments
strategies presented myriad challenges, including:
It was extremely risky
to roll back to the older version in case of severe bugs and errors.
Since this model had no formal planning, no formal leadership, or even standard
coding practices, the model was prone to costly mistakes down the line that
would cost the enterprise money, reputation, and even loss of customers.
It needed a lot of
time and manpower to test.
It was too basic for
modular, complex projects.
It needed separate
teams of developers, testers, and operations. Such huge teams were slow and
High user disruptions
and major downtimes. Due to the roll-over, organizations would experience a
“catch-up” period that had low productivity effect as users tried to adapt to
the new system.
As seen above,
traditional deployment methodologies were rigorous and sometimes had a lot of
repetitive tasks that consumed staggering amounts of coding hours and resources
that could otherwise have been used in working on core application features.
This kind of deployment approach would not just cut it in today’s fast-paced
economies where enterprises are looking for lean, highly-effective teams that
can quickly deliver high-quality apps to the market.
The solution was to
come up with deployment strategies that allowed enterprises to release and
update different components frequently and seamlessly. These deployments
sometimes happen very fast to meet the increasing end-user needs. For instance,
a mobile app can have several deployments within a day for optimum UX needs.
This is made possible with the adoption of more agile approaches such as
Blue-Green or Red-Black deployments.
Is “Blue-Green” Vs. “Red-Black” Deployments?
Blue-green and red-black
deployments are fail-safe, immutable deployment processes for cloud-native
applications and virtualized or containerized services — ideally,
Blue-Green” Vs. “Red-Black” Deployments are identical and are
designed to reduce application downtime and minimize risks by running 2
identical production environments.
Unlike the traditional
approach where engineers fix the failed features by deploying an older stable
version of the application, the Blue-green or the red-black deployment approach
is super-agile, more scalable, and is highly automated so that bugs and updates
are done seamlessly.
“Blue-Green” Vs. “Red-Black”. What’s
Both Blue-Green and
Red-Black deployments represent similar concepts in the sense that they both
apply to the automatable cloud or containerized services such as a web service
or SaaS Systems. Ideally, once the dev team has made an update or an upgrade,
the release team will create two mirror production environments with identical
sets of hardware and route traffic to one of the environments while they test
the other idle environment.
what is the difference between the two?
The only difference
lies in the amount of traffic routed to the live and idle environments.
redeployment, the new release is deployed to the red-environment while
maintaining the traffic to the black-environment. All smoke test for
functionality and performance can be run on the black environment without
affecting how the end-user is using the system. When the new updates have been
confirmed to be working properly, and the black version is fully operational,
the traffic is then moved to the new environment by simply changing the router
configuration from red to black. This ensures near-zero downtime with the
This is similar to
blue-green deployments. Only that, with blue/green deployments, it is possible
for both environments to get requests at the same time temporarily through
load-balancing, unlike the red/black deployment, where only one version can get
traffic at any given time. This means that in blue-green deployments,
enterprises can release the new version of the application to a select group of
users to test and give feedback before the system goes live for all users.
“Blue-Green” Or “Red-Black” Deployments
You can roll back the
traffic to the still-operating environment seamlessly and with near-zero user
Allows teams to test
their disaster recovery procedures in a live production environment
Less Risky since test
teams can run full regression testing before releasing the new versions
Since the two codes
are already loaded on the mirror environments and traffic to the live site is
unaffected, test and release teams have no time pressures to push the release
of the new code.
Blue-Green and Red-Black Deployments
infrastructure to carry out Blue-Green deployments.
It can lead to
significant downtime if you’re running hybrid microservice apps and some
traditional apps together.
Database migrations are sometimes tricky and would need to be migrated
alongside the app deployment