<?xml version='1.0' encoding='UTF-8'?><rss xmlns:atom="http://www.w3.org/2005/Atom" xmlns:openSearch="http://a9.com/-/spec/opensearchrss/1.0/" xmlns:blogger="http://schemas.google.com/blogger/2008" xmlns:georss="http://www.georss.org/georss" xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr="http://purl.org/syndication/thread/1.0" version="2.0"><channel><atom:id>tag:blogger.com,1999:blog-1397999486493842391</atom:id><lastBuildDate>Thu, 03 Oct 2024 13:36:10 +0000</lastBuildDate><category>programming paradigm</category><category>TDD</category><category>code</category><category>programming</category><title>If, For and While</title><description>It doesn&#39;t get any deeper.</description><link>https://blog.keithfranklin.xyz/</link><managingEditor>noreply@blogger.com (Keith Franklin)</managingEditor><generator>Blogger</generator><openSearch:totalResults>7</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><item><guid isPermaLink="false">tag:blogger.com,1999:blog-1397999486493842391.post-8286083139313759596</guid><pubDate>Wed, 16 Sep 2020 17:56:00 +0000</pubDate><atom:updated>2020-09-16T10:56:40.232-07:00</atom:updated><title>&quot;That&#39;s not my job&quot;</title><description>&lt;p&gt;&lt;/p&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiK3bMF_gP5eSepYILJ3RDAJ0CZ4eYKicRojBKvHrKOCWf0pPu2_BUHN9WliKw_AnMwm05ybbpVrDjxXTVx74Tayjxm1qzKfzkaKpwznReklHPok_2AcT1R5F_OAfdH8r9aZ5Wemrswmuc/s1200/ao_themazewestworld.jpg&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;1200&quot; data-original-width=&quot;1200&quot; height=&quot;320&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiK3bMF_gP5eSepYILJ3RDAJ0CZ4eYKicRojBKvHrKOCWf0pPu2_BUHN9WliKw_AnMwm05ybbpVrDjxXTVx74Tayjxm1qzKfzkaKpwznReklHPok_2AcT1R5F_OAfdH8r9aZ5Wemrswmuc/s320/ao_themazewestworld.jpg&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;As an individual, I am a person always looking to change things quickly. The mundanity of repeating the same things over and over again gets me agitated to question the efficiency of the activity. With this naive outlook, and fueled by Pink Floyd&#39;s album &quot;Welcome to the machine&quot; I am trying to write this blog post about the changes I&#39;ve seen. Over the years I&#39;ve seen some changes that happen in an organization and this blog is more of a commentary on the things that I&#39;ve seen. Without question, this blogpost has a major TL;DR warning.&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: calc(var(--rem) * 1px * 1.0625); letter-spacing: 0px;&quot;&gt;Life in a corporate office might seem a little kafkaesque. &lt;/span&gt;Kafkaesque, A term associated with Frans Kafka generally is used to describe unnecessarily complicated and frustrating experiences, like being forced to navigate labyrinths of bureaucracy. The sort of complex, unclear processes in which no one individual ever really has a comprehensive grasp of the system or what is going on.&amp;nbsp;&lt;/p&gt;&lt;p&gt;In massive companies that are well established, they are driven by SOP&#39;s - Standard operating procedure -&amp;nbsp; after SOP. These companies are so entrenched in bureaucracy it takes eons before a decision is even taken. In my opinion, this is the main reason these companies lookout for vendors to get the job done, with the other factor of cost. With vendors, we get a rapid disruption of the process that existed. Usually, the vendors turn out to be smaller organizations with fewer levels of approvals. But this also acts like a self-terminating loop, as these smaller organizations are also subjected to growth with the amount of time they are in the market.&amp;nbsp; As they grow they bring in multiple layers to the organization constantly sifting through every decision.&amp;nbsp;&lt;/p&gt;&lt;p&gt;Bureaucracy is not all bad, if done right it creates a strong structure that ushers in a sense of equality among everyone involved in the system. It adds predictability, with the right set of checks and balances we can control the outcome of the process, as humanly possible at least. with all the roles and responsibilities defined&amp;nbsp;we get a centralized power dynamic in the organization,&amp;nbsp; we also get a well-defined chain of command.&amp;nbsp;&lt;/p&gt;&lt;p&gt;The key thing with all the red tape is that if it is not done right it adversely affects the motive with which it was put in place. generally, the SOP that was put in place may be too regressive and there is a high chance that the process might have worked in the past but with time being as volatile as it is the process might just be too outdated. With drawn-out SOP it creates an ecosystem that suffocates creative minds. For creative minds to thrive they need a liberalistic atmosphere.&amp;nbsp;&lt;/p&gt;&lt;p&gt;Compartmentalization is a common path taken to create scalability in terms of decision making and the structuring of organizations. In the blog&amp;nbsp;&lt;a href=&quot;https://hbr.org/2012/02/break-though-your-mental-burea.html&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;Break Through Your Mental Bureaucracy&lt;/a&gt;&amp;nbsp;- Ron Ashkenas talks about how compartmentalization is a form of &amp;nbsp;“mental bureaucracy”. Companies compartmentalize into blocks and predominantly the blocks used are segmented into marketing, development, HR, and finance.&lt;span style=&quot;color: #282828; font-family: Lava Std;&quot;&gt;&lt;span style=&quot;background-color: white; font-size: 19px; letter-spacing: -0.197917px;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;With a compartmentalized work environment, the teams involved start to have a diminished outlook on the deliverables and often have a game of finger-pointing with block constantly resonating the statement &quot; that is not part of my job&quot;. Different blocks are only concerned about their own propositions and as an outcome, nobody takes a decision when it does not concern their base. Teams oftentimes don&#39;t see the big picture as they are more focused on their own activities laid out by their respective blocks. It becomes an organization defined only by the KPI&#39;s they have to complete.&lt;/p&gt;&lt;p&gt;In closing, I&#39;ve observed creativity always takes a blow when we try to bring in a set of rules. Creativity is essential for human beings let alone organization, for without creativity we would all just be doing the same boring thing. A good explanation of creativity is, &quot;everyone knows the rules to a game, let&#39;s say like &lt;/p&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgcHL8SwceRGEDXDT0paj0REwOTyr0ExWJ3w4U0JZSbQHMrKy03n492twTwrxNYbGKSAKyPYHlMIvtk7lIj9OqxKphpQLOxlLsKkJgB9BTxyOyzvqd4uuwJpOfc2CfPIRN4yi1jc5KA6f0/s444/vini.gif&quot; imageanchor=&quot;1&quot; style=&quot;clear: right; float: right; margin-bottom: 1em; margin-left: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;250&quot; data-original-width=&quot;444&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgcHL8SwceRGEDXDT0paj0REwOTyr0ExWJ3w4U0JZSbQHMrKy03n492twTwrxNYbGKSAKyPYHlMIvtk7lIj9OqxKphpQLOxlLsKkJgB9BTxyOyzvqd4uuwJpOfc2CfPIRN4yi1jc5KA6f0/s320/vini.gif&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;football. It is creativity that gives you the Kompany or David silva of the game. If they all had just followed the rules and not been creative we would&#39;ve had a boring game to watch&quot;. The same applies to corporate lifestyles, if everyone in the organization is trying to stick to their own objectives and not look at the larger view of the organization the extent of growth becomes non-existent.&lt;p&gt;&lt;/p&gt;</description><link>https://blog.keithfranklin.xyz/2020/09/thats-not-my-job.html</link><author>noreply@blogger.com (Keith Franklin)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiK3bMF_gP5eSepYILJ3RDAJ0CZ4eYKicRojBKvHrKOCWf0pPu2_BUHN9WliKw_AnMwm05ybbpVrDjxXTVx74Tayjxm1qzKfzkaKpwznReklHPok_2AcT1R5F_OAfdH8r9aZ5Wemrswmuc/s72-c/ao_themazewestworld.jpg" height="72" width="72"/><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-1397999486493842391.post-4345977545328828023</guid><pubDate>Fri, 14 Aug 2020 21:13:00 +0000</pubDate><atom:updated>2020-09-22T01:51:16.550-07:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">code</category><category domain="http://www.blogger.com/atom/ns#">programming</category><title>Murmuration: A view into Artificial life.</title><description>&lt;div style=&quot;text-align: center;&quot;&gt;&lt;img alt=&quot;Murmuration simulation&quot; border=&quot;0&quot; data-original-height=&quot;302&quot; data-original-width=&quot;600&quot; height=&quot;322&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhaOJx2sAx1tJaJVxDUbg_efAbV2kkIIaNZhEZE8VDa_yvnurccLmS78xuj_-jQ0nMI-TizRNrbuamR36afUHRJQr9bW29QqJ9v2echPY1KkR1sIOcZTzN-CzWhEm1PFQ-2yWiXGyKoHpw/w640-h322/ezgif.com-video-to-gif.gif&quot; width=&quot;640&quot; /&gt;&lt;/div&gt;&lt;div&gt;Murmuration refers to the phenomenon that results when hundreds, sometimes thousands, of starlights(starlings) fly in swooping, intricately coordinated patterns through the sky. My introduction to the word, murmuration, was by the Jazz trio, GoGo penguins. Murmuration is the 5th piece they perform in one of their live performances: &lt;a href=&quot;https://www.youtube.com/embed/x7LmhOEnIs4&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;link&lt;/a&gt;. It is one of the most enthralling pieces of music I&#39;ve heard. I implore you to check them out:&amp;nbsp;&lt;a href=&quot;https://gogopenguin.bandcamp.com/&quot;&gt;https://gogopenguin.bandcamp.com/&lt;/a&gt;.&lt;div&gt;
&lt;br /&gt;  &lt;iframe allowfullscreen=&quot;&quot; frameborder=&quot;0&quot; height=&quot;270&quot; src=&quot;https://www.youtube.com/embed/x7LmhOEnIs4&quot; width=&quot;480&quot;&gt;&lt;/iframe&gt;
&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;When we observe these starlings fly we see a pattern that stands out. And when there&#39;s a pattern involved there is a strong possibility an algorithm exists to explain it and implement a computer simulation which helps me to segue into Boids algorithm.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Boids algorithm is an artificial life program, developed by Craig Reynolds. It simulates the flocking behavior of birds. Boid is a shortened version of Bird-oid, which refers to the bird-like object. Boids are an example of emergent behavior,i.e. the algorithm works because individual agents stick to a set of simple rules. Boids are driven by three rules.&lt;/div&gt;&lt;div&gt;&lt;ol style=&quot;text-align: left;&quot;&gt;&lt;li&gt;Separation: fly away to avoid a collision.&lt;br /&gt;&lt;br /&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj2MYFuXd7Yj7Ts_zMI56scyglkiozLMr1784VIApO5ylLtmcUZ8_FeuXPrgkkFiGw3z8GA3utzmutQMU4yDuXSaQcwO7ySQDZgl6TIY_8oBLFAAB_wTy8OXF2khRxU5A8UynepZjH-XlE/s217/separation.gif&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;145&quot; data-original-width=&quot;217&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj2MYFuXd7Yj7Ts_zMI56scyglkiozLMr1784VIApO5ylLtmcUZ8_FeuXPrgkkFiGw3z8GA3utzmutQMU4yDuXSaQcwO7ySQDZgl6TIY_8oBLFAAB_wTy8OXF2khRxU5A8UynepZjH-XlE/d/separation.gif&quot; title=&quot;separation&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;/li&gt;&lt;li&gt;Alignment: steer toward the average heading of nearest boids.&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjjHRX6dgBi-yfGLZqsRiaO8ZIQjkLRVbrEAKTkv8qzikmynbXypgsin9eWwic_WTjBDdIGg4bJWcW-FSK7nwng55Mr4m0Ur6SKb39ywNxAbz-Z2ni_akr-yIQ5VF4DFYe2sOBkQo90eZ4/s217/alignment.gif&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;145&quot; data-original-width=&quot;217&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjjHRX6dgBi-yfGLZqsRiaO8ZIQjkLRVbrEAKTkv8qzikmynbXypgsin9eWwic_WTjBDdIGg4bJWcW-FSK7nwng55Mr4m0Ur6SKb39ywNxAbz-Z2ni_akr-yIQ5VF4DFYe2sOBkQo90eZ4/s0/alignment.gif&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;/li&gt;&lt;li&gt;Cohesion: move toward the average position of the nearest boids.&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh5s019z1RYkr8Fhyphenhyphen1sZmxsNQE98raHnaBfNrJT0ROSGCynDUyhqXVTqlmmnXcXd630e876DKH9RNNqZh_ct-O6D_J0ji3ziPq1ZM6MwxZFO29QYQjLtAocYFSzU4yyhVYQxbHS3TXBZLA/s217/cohesion.gif&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;145&quot; data-original-width=&quot;217&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh5s019z1RYkr8Fhyphenhyphen1sZmxsNQE98raHnaBfNrJT0ROSGCynDUyhqXVTqlmmnXcXd630e876DKH9RNNqZh_ct-O6D_J0ji3ziPq1ZM6MwxZFO29QYQjLtAocYFSzU4yyhVYQxbHS3TXBZLA/s0/cohesion.gif&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;/li&gt;&lt;/ol&gt;&lt;/div&gt;&lt;div&gt;Boids algorithm has a vague similarity to human behavior as well.&amp;nbsp;&lt;i&gt;Gustave Le Bon&lt;/i&gt;, in his book &quot;The Crowd: A study of the popular mind&quot; explains crowd psychology and why people behave differently in groups. In the book, Le Bon highlights three causes as to why an individual behaves differently when they are a part of a crowd in contrast to when they are alone. These three causalities are:&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;ul style=&quot;text-align: left;&quot;&gt;&lt;li&gt;Anonymity: An individual loses the fear of the consequences, they lose their moral responsibility, temporarily feeling invincible. This is a major operator in the behavioral understanding of mobs.&amp;nbsp;&lt;/li&gt;&lt;li&gt;Contagion: In a crowd, Le Bon believed that every act is contagious. When we look at the dot com(.com) bubble or any major financial crisis, everyone that was part of the system was lead to buy something just because someone else was buying. The idea that buying or investing in a dot com venture was valuable was promoted as a contagion and not as an analytical understanding of the markets.&amp;nbsp;&lt;/li&gt;&lt;li&gt;Suggestibility: Individuals enter into a hypnotic state of mind mesmerized by a charismatic leader.&amp;nbsp;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div&gt;Herd mentality and mob mentality are observation of social psychology that mirror properties of the boids algorithm of working as a collective. The psychological study explores the idea that people can be influenced by their peers to adopt certain behavioral traits. As humans, we default to thinking that a collective might know something that as individuals we wouldn&#39;t know. Mob mentality might give away negative connotations to the idea of a collective but it is not all bad, there is a possibility of collective intelligence - something that stokes collaborations and collective effort. A great example of collaborative effort is the open-source software ecosystem.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The parallels between human behavior and the Boids algorithm give us an insight into how life-like boids algorithm is. By observing the patterns of a murmuration we have created an artificial life simulation, with autonomous entities that behave independently conforming to certain rules.&lt;/div&gt;&lt;blockquote&gt;&lt;div&gt;In times of uncertainity we always default to a collective.&lt;/div&gt;&lt;/blockquote&gt;&lt;div&gt;------------------------------------------------------------------------------------------------------------&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;span&gt;&lt;a name=&#39;more&#39;&gt;&lt;/a&gt;&lt;/span&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;h2 style=&quot;text-align: left;&quot;&gt;The Code.&lt;/h2&gt;&lt;div&gt;When I took a stab at the algorithm, I wanted to give complete autonomy to the boids by providing or simulating awareness of each boid to their surroundings. I didn&#39;t want to explore unsupervised learning to create the simulation, I think it would be an overkill. If I can create a truly autonomous boid then I can go a little further and introduce some cognitive dissonance, that&#39;s the plan at least.&amp;nbsp;&amp;nbsp;&lt;/div&gt;&lt;div&gt;Link to Code: &lt;a href=&quot;https://github.com/Keith3895/boids-js&quot;&gt;https://github.com/Keith3895/boids-js&lt;/a&gt;&lt;/div&gt;&lt;div&gt;link to the demo: &lt;a href=&quot;https://keith3895.github.io/boids-js/&quot;&gt;https://keith3895.github.io/boids-js/&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&amp;nbsp;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;</description><link>https://blog.keithfranklin.xyz/2020/07/murmuration-view-into-artificial-life.html</link><author>noreply@blogger.com (Keith Franklin)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhaOJx2sAx1tJaJVxDUbg_efAbV2kkIIaNZhEZE8VDa_yvnurccLmS78xuj_-jQ0nMI-TizRNrbuamR36afUHRJQr9bW29QqJ9v2echPY1KkR1sIOcZTzN-CzWhEm1PFQ-2yWiXGyKoHpw/s72-w640-h322-c/ezgif.com-video-to-gif.gif" height="72" width="72"/><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-1397999486493842391.post-5352868536647428544</guid><pubDate>Wed, 29 Jul 2020 13:15:00 +0000</pubDate><atom:updated>2020-07-29T06:15:16.392-07:00</atom:updated><title>The Dawn of programers</title><description>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
A programmer, also most associated with their new moniker a coder, is a person who writes or creates computer software. The definition of the word code is &quot; a system of words, letters, figures or symbols used to represent others especially for the purpose of secrecy&quot;. It is fascinating how programming came to be associated with this word, &quot;code&quot;.&lt;br /&gt;
&lt;br /&gt;
In 1936, Alan Turing first describe a simple abstraction of a computational device. In 1940, &lt;i&gt;&quot;The Bombe&quot;,&amp;nbsp;&lt;/i&gt;an electro-mechanical device&lt;i&gt;&amp;nbsp;&lt;/i&gt;was used to decipher the German Enigma-machine. In 1945, Turing went on and envisioned that&lt;br /&gt;
&lt;blockquote class=&quot;tr_bq&quot;&gt;
We shall need a great number mathematician of ability.&lt;/blockquote&gt;
because&lt;br /&gt;
&lt;blockquote class=&quot;tr_bq&quot;&gt;
there will be probabliy be a good deal of work of this kind to be done.&amp;nbsp;&lt;/blockquote&gt;
&lt;br /&gt;
With the evolution of technology, we moved on from electro-magnets to punch cards to transistors. In 1971, Dennis Ritchie and Ken Thompson at bell labs came up with a new programming language &#39;C&#39;, and a new operating system UNIX. There were a whole bunch of programming languages that I&#39;ve skipped but &#39;C&#39; changed the programming world. UNIX was the origin story for many of the operating systems we have today- Linux, Mac OS, Android, all these operating systems are based on the principles and architecture of UNIX. Around the same time, we had Apple and Steve Jobs disrupting and innovating in a primarily mainframe market then. Apple also is known to bring in designs and innovations that shape the market. They did it with the macintosh and most recently with the iPhone, creating a new market of application development.&lt;br /&gt;
&lt;br /&gt;
We are in an age where companies are transitioning and trying to cater to this new consumer market. CIO&#39;s of these companies are driving &quot;digital transformation&quot; initiatives backed with massive budgets. This has given an inroad to Application development platforms. Before going into development platforms lets understand the actual origins of the application development platform.&lt;br /&gt;
&lt;br /&gt;
Every industry has tools for their trade. The construction industry tools had rudimentary tools before they moved to power tools. Similarly, in computers, the code was written or rather punched on to punched cards, and then they moved onto text editors. With Graphical User Interfaces(GUI) improving, Integrated Development Environment (IDE) was introduced to help developers to keep all their resources organized, debug, and run their programs from a single tool. Application Development platforms are an extension of IDE&#39;s. As the name aptly conveys, the application development platform is a computer program that helps in developing software/applications on different devices.&lt;br /&gt;
&lt;br /&gt;
Application Development Platform has a massive ecosystem of its own. In this ecosystem, we have Low-code development platforms or even No-code development platform. A Low-code development platform is a software that facilitates application development with a GUI implementation of a drag and drop user experience and this is a shift from the traditional hand-coded approach to development. In the eco-system, thanks to aggressive marketing, we have Buzz words just floating around. they are basically the same thing just a fancy way of saying the same thing. some of these buzzwords are - HPAPAAS, MXDP, RAD also LCDP(Low-code development platforms), and NCDP(No-code development platform).&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhWkeeXnEFnDdcC4JJBrJUQPdZaqOwkmDQduALiiDBL2mazm0yZzaNmrpvb8F8U3bMqWBXqvrUhndSr2vX4YSswIkf1Pg3MmmKbu93-Z0Mx14NFIWS63mIb-IxRBdRF9uxu27wnVOJnBK4/s1600/download.png&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;177&quot; data-original-width=&quot;285&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhWkeeXnEFnDdcC4JJBrJUQPdZaqOwkmDQduALiiDBL2mazm0yZzaNmrpvb8F8U3bMqWBXqvrUhndSr2vX4YSswIkf1Pg3MmmKbu93-Z0Mx14NFIWS63mIb-IxRBdRF9uxu27wnVOJnBK4/s1600/download.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;
If you also share the same expression as the meme, fret not, we will talk about these outlandish abbreviations. HPAPAAS, High productivity application development platform as a service, is an Enterprise Application Development Platform that has a delivery and deployment mechanism like LCDP but not the same. It is also provisioned as a service. (you can read about HPA-PAAS at this link: &lt;a href=&quot;https://www.neutrinos.co/what-is-hpapaas/&quot;&gt;https://www.neutrinos.co/what-is-hpapaas/&lt;/a&gt;)(you can also check out my post about &lt;a href=&quot;https://blog.keithfranklin.xyz/2020/06/aas-explained.html&quot;&gt;*AAS explained&lt;/a&gt;). MXDP, Multi-Experience Development Platform, is a platform that encapsulates - design, development testing, managing, and analyzing. At least that is what Gartner has to say about MXDP. Personally, I think its another marketing ploy to sell an Application Development Platform.&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;
Over the past few decades, we&#39;ve seen technology evolve and the demands for programmers grow. A field originally intended and designed by mathematicians is now open to diverse demography. The Idea of a citizen developer just extends the scope a little more. A citizen developer is a user who creates new business applications for consumption by others using development and runtime environments sanctioned by corporate IT. When we look at the strides statistical learning and artificial intelligence is taking there is a lot of positive development to come. The bottom line is that The need for individuals to know &quot;coding&quot; will keep growing.&lt;/div&gt;
&lt;/div&gt;
</description><link>https://blog.keithfranklin.xyz/2020/06/the-dawn-of-programers.html</link><author>noreply@blogger.com (Keith Franklin)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhWkeeXnEFnDdcC4JJBrJUQPdZaqOwkmDQduALiiDBL2mazm0yZzaNmrpvb8F8U3bMqWBXqvrUhndSr2vX4YSswIkf1Pg3MmmKbu93-Z0Mx14NFIWS63mIb-IxRBdRF9uxu27wnVOJnBK4/s72-c/download.png" height="72" width="72"/><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-1397999486493842391.post-1911678840015161235</guid><pubDate>Mon, 20 Jul 2020 14:42:00 +0000</pubDate><atom:updated>2020-07-20T07:43:45.867-07:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">programming paradigm</category><category domain="http://www.blogger.com/atom/ns#">TDD</category><title>Understanding TDD - Part 2 - Adopting TDD</title><description>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
&lt;div&gt;
In part 1 of this series, we explored the fundamentals of Test Driven Development. After wrapping our heads around the principles and understanding the origins of TDD we will now look into applying TDD.&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;a href=&quot;https://blog.keithfranklin.xyz/2020/07/understanding-tdd-part-1-what-is-tdd.html&quot;&gt;Understanding TDD - Part 1 - &quot;What is TDD?&quot;&lt;/a&gt;&lt;/div&gt;
&lt;a name=&#39;more&#39;&gt;&lt;/a&gt;&lt;h2 style=&quot;text-align: left;&quot;&gt;
Adoption of TDD.&lt;/h2&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhyzfuVzIjXx-nf9rrY6EetyiBOHsE1CNUH_aDyT62MUfWXtUd-JZwjZ04re1Ipgpw6b3I6dO1RC9x0ARNsqIw89bwtjOKUKLYAWOxSwzdXjxC1DSPgRAhjRPOSsM65CGyMrm7yvrOKmqo/s1600/i-deployed-my-code-without-testing.jpg&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;315&quot; data-original-width=&quot;600&quot; height=&quot;168&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhyzfuVzIjXx-nf9rrY6EetyiBOHsE1CNUH_aDyT62MUfWXtUd-JZwjZ04re1Ipgpw6b3I6dO1RC9x0ARNsqIw89bwtjOKUKLYAWOxSwzdXjxC1DSPgRAhjRPOSsM65CGyMrm7yvrOKmqo/s320/i-deployed-my-code-without-testing.jpg&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
Test-Drive Development is effective and it works. There’s a catch though. Not all teams can jump right into it and start following the processes defined by Test-Drive Development(TDD). It is not easy to Convert your teams working in traditional programming processes trying to figure out the arcane code they have written. The challenge doesn’t just stop at the teams, convincing management about the change in approach in application development is another hurdle all by itself. Understanding Test-Driven Development is not the same as Integration testing is paramount to the adoption of Test-Driven Development (TDD).&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
Every time you talk to a team-lead they will usually bring up the point that they are already in the middle of their development it is an impossible task for them to just jump ship and start practicing TDD. The change isn’t about shifting to a Test-driven approach right away. The team can always start to write tests and run the tests manually if the team doesn’t have the privilege or the capacity to automate the tests. By defining and running tests manually the team could still cover their bases in terms of unit testing their code.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
When you talk to a traditional developer or an uninitiated in the ways of TDD, they will question you about “why they should make the shift?”, “Why worry about the overhead?”. The most direct approach to answer the question is to show how TDD visibly improves the quality and the standard of code.&amp;nbsp;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;h2 style=&quot;text-align: left;&quot;&gt;
The Challenge&lt;/h2&gt;
&lt;div&gt;
A majority of software or application development is done to cater to a competitive market. Execs invariably promise a short timeline, to compete with the other players in their specific domains. This thought process metastasizes and the development teams have tunnel vision to deliver products, applications in our case, as fast as possible. &lt;span style=&quot;background-color: #666666;&quot;&gt;The teams focus on a speedy approach to maintain the status quo always corrupts the process and always leads to jugaads(Hacks) as productionable solutions.&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
Another challenge is the mindset of the development team. Traditional developers have to adopt a completely different approach to what they were used to. The code that is written with the traditional approach in mind is most often not testable. This is why teams don&#39;t test their code.&amp;nbsp;&lt;/div&gt;
&lt;div&gt;
&lt;blockquote&gt;
Change is hard because people overestimate the value of what they have and underestimate the value of what they may gain by giving that up. – James Belasco and Ralph Stayer.&amp;nbsp;&amp;nbsp;&lt;/blockquote&gt;
&lt;/div&gt;
&lt;h2 style=&quot;text-align: left;&quot;&gt;
The Change&lt;/h2&gt;
&lt;div&gt;
It might seem like Converting the team to adopt TDD is never going to happen… It can, but change takes time. Certain prerequisites need to be fulfilled to make it to the finish line.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
The proverbial first step would be to cleanse yourself of all sin! Get the team to start writing CLEAN CODE. It might seem like it’s a rudimentary part of the development process. But still, a majority of developers don’t focus on writing clean code. With clean code, we must focus on the code to be testable. Initially, this is going to be difficult but getting the team to make code testable would be a major milestone. In the JavaScript ecosystem, a linting tool will be a good place to start from a source code management point of view.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
The Focus Should be on writing good test cases first instead of prioritizing on the CI/CD aspects or the automation aspects of the application design. Most team leads try to focus on getting a 100% score on their code coverage. A 100% score does not warrant that the test cases have covered all the possible positive and negative unit test scenarios.&amp;nbsp;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
Familiarizing the team with the testing framework that is going to be used. Almost all testing frameworks have the same core concepts of:&amp;nbsp;&lt;/div&gt;
&lt;div&gt;
&lt;ul style=&quot;text-align: left;&quot;&gt;
&lt;li&gt;Assertions&amp;nbsp;&lt;/li&gt;
&lt;li&gt;Expects (expectations)&amp;nbsp;&lt;/li&gt;
&lt;li&gt;“describe” and “it” keywords.&amp;nbsp;&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
Getting the team to be well versed in the testing frameworks helps in honing the skills of the developer to think more on the lines of automating test cases.&amp;nbsp;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
When transforming the development team to start TDD it would be wise to start with pair programming. When developers work in pairs it adds to new perspectives into how to write quality tests. One approach to getting your team to practice TDD more efficiently is to covert/train one developer at a time. Yes, it will be time-consuming. Yes, it would stretch the timeline of switching completely to TDD. You could speed the process up like a chain reaction but you will have to start with a handful of developers first. You would have to ‘indoctrinate’ the developers one at a time. the virtue Patient is key!&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;/div&gt;
</description><link>https://blog.keithfranklin.xyz/2020/06/understanding-tdd-part-2-adopting-tdd.html</link><author>noreply@blogger.com (Keith Franklin)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhyzfuVzIjXx-nf9rrY6EetyiBOHsE1CNUH_aDyT62MUfWXtUd-JZwjZ04re1Ipgpw6b3I6dO1RC9x0ARNsqIw89bwtjOKUKLYAWOxSwzdXjxC1DSPgRAhjRPOSsM65CGyMrm7yvrOKmqo/s72-c/i-deployed-my-code-without-testing.jpg" height="72" width="72"/><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-1397999486493842391.post-4324148500438055021</guid><pubDate>Mon, 13 Jul 2020 14:15:00 +0000</pubDate><atom:updated>2020-09-07T00:35:46.895-07:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">programming paradigm</category><title>The Pursuit Of Clean Code</title><description>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg-bWbfYqVrM_IH0781NEuHLgTWrAdQnwZoLNh77CPt4RcdJCa2n1r0ie2s4h7qnXWMU7rtLfm23osSx824Q0n6l67pFzfD-z9XVWtSId4Tykm_dOj1_9kqKbSE8zPUTmZ_bTahmL6VhFU/s500/1-1fig_martin.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;441&quot; data-original-width=&quot;500&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg-bWbfYqVrM_IH0781NEuHLgTWrAdQnwZoLNh77CPt4RcdJCa2n1r0ie2s4h7qnXWMU7rtLfm23osSx824Q0n6l67pFzfD-z9XVWtSId4Tykm_dOj1_9kqKbSE8zPUTmZ_bTahmL6VhFU/s320/1-1fig_martin.jpg&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;
There are different ways to interpret the meaning of clean code. The idea of clean code is a subjective concept and every developer has their own interpretation of it.&lt;br /&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;blockquote&gt;
&lt;div&gt;
Clean code is code that is easy to understand and easy to change&quot;&amp;nbsp;&lt;/div&gt;
&lt;/blockquote&gt;
&lt;div&gt;
When we say &quot;easy to understand&quot; what does it really translate to? Easy to understand can be easy to read, it can be easy to understand the flow of the code, easy to understand sequence events. Easy to understand can also quantify to the ease to understand the purpose and function of the methods and variables defined or declared. Easy to change can be interpreted as easy to extend and refactor, and it is easy to fix bugs. Easy to understand can be anything! it&#39;s up to the readers interpretation.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
When we write code it is generally in as higher-order language. This implies that we intend the code to be understood by other developers or other people. A higher-level language is not directly interpreted by the computer. A high-level language is compiled or interpreted into an assembly level language or a binary. The reason high-level languages exist is that they are easier to read, write, and maintain.&lt;/div&gt;
&lt;blockquote&gt;
&lt;div&gt;
Programming is the art of telling another human what one wants the computer to do.&lt;/div&gt;
&lt;/blockquote&gt;
&lt;div&gt;
- Donald Knuth&amp;nbsp;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
Clean code is not just writing code that is good or easy on the eye. Efficiency in the execution of the code is also a vital aspect of composing clean code. Efficiency can be correlated to the time it takes to execute a block of code. an example of bad and inefficient code would be:&lt;/div&gt;
&lt;div&gt;
&lt;pre style=&quot;text-align: left;&quot;&gt;function IsNumeric(sText) {
&amp;nbsp; &amp;nbsp; var ValidChars = &quot;0123456789.&quot;;
&amp;nbsp; &amp;nbsp; var IsNumber = true;
&amp;nbsp; &amp;nbsp; var Char;
&amp;nbsp; &amp;nbsp; for (i = 0; i &amp;lt; sText.length &amp;amp;&amp;amp; IsNumber == true; i++) {
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Char = sText.charAt(i);
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if (ValidChars.indexOf(Char) == -1) {
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; IsNumber = false;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }
&amp;nbsp; &amp;nbsp; }
&amp;nbsp; &amp;nbsp; return IsNumber;
}&lt;/pre&gt;
&lt;/div&gt;
&lt;div&gt;
This can be written with a simple implementation of &lt;span style=&quot;font-family: courier;&quot;&gt;isNAN().&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: courier;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: inherit;&quot;&gt;Over the past few years, I have made some observations that guided me in the path to writing clean legible code.&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;h4&gt;
&lt;ol style=&quot;text-align: left;&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;Rules for naming&lt;/span&gt;&lt;/li&gt;
&lt;ol&gt;
&lt;li&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;&lt;span style=&quot;font-weight: normal;&quot;&gt;select &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;font-weight: 400;&quot;&gt;descriptive&lt;/span&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;&lt;span style=&quot;font-weight: normal;&quot;&gt;&amp;nbsp;and unambiguous names.&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-weight: normal;&quot;&gt;use pronounceable names.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-weight: normal;&quot;&gt;Magic numbers.&lt;br /&gt;&lt;img height=&quot;124&quot; src=&quot;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAABAYAAADMCAYAAADgZqEYAAAgAElEQVR4Ae29BZQdRRr2jyzuwRZ398UXd12cxSHI4g6L2y6w+LLLstgCQRMSiJBAIAQSQkKMOHF3d+V8/+879T+/Cm/T07nSdWem596ZZ86Z01L+1NPd9T71Vt2VnP6EgBAQAkJACAgBISAEhIAQEAJCQAgIgQaLwEoNtuVquBAQAkJACAgBISAEhIAQEAJCQAgIASHgJAyIBEJACAgBISAEhIAQEAJCQAgIASEgBBowAhIGGnDnq+lCQAgIASEgBISAEBACQkAICAEhIAQkDIgDQkAICAEhIASEgBAQAkJACAgBISAEGjACEgYacOer6UJACAgBISAEhIAQEAJCQAgIASEgBCQMiANCQAgIASEgBISAEBACQkAICAEhIAQaMAISBhpw56vpQkAICAEhIASEgBAQAkJACAgBISAEJAyIA0JACAgBISAEhIAQEAJCQAgIASEgBBowAhIGGnDnq+lCQAgIASEgBISAEBACQkAICAEhIAQkDIgDQkAICAEhIASEgBAQAkJACAgBISAEGjACEgYacOer6UJACAgBISAEhIAQEAJCQAgIASEgBCQMiANCQAgIASEgBISAEBACQkAICAEhIAQaMAISBhpw56vpQkAICAEhIASEgBAQAkJACAgBISAEJAyIA0JACAgBISAEhIAQEAJCQAgIASEgBBowAhIGGnDnq+lCQAgIASEgBISAEBACQkAICAEhIAQkDIgDQkAICAEhIASEgBAQAkJACAgBISAEGjACEgYacOer6UJACAgBISAEhIAQEAJCQAgIASEgBCQMiANCQAgIASEgBISAEBACQkAICAEhIAQaMAISBhpw56vpQkAICAEhIASEgBAQAkJACAgBISAEJAyIA0JACAgBISAEhIAQEAJCQAgIASEgBBowAhIGGnDnq+lCQAgIASEgBISAEBACQkAICAEhIAQkDIgDQkAICAEhIASEgBAQAkJACAgBISAEGjAC9V8YePct5959yy395Rf/z7muhYf4oOcBDuh9oPehvgcrfg/Kdkyk77fGLxrPaTyr8bzsGY3fUo9fQ7/nEgY00NBAQwMNDTQ00NBAQwONaKAROpDILL6+1/pe63ut77W+1/pe63sdfa+LTXSGfp/rvTBggOm4fIZYOAgHcUAc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m53mnRHyngqtd1bxGzVq5A486KAgzg9/+21vvGH4933oIdfj+usdhj11NmMb4/qHiy/28X66++4of2azMfiar722+3LffaP7Y5o39/eHv/WWvzdj4EB/3fuuu/x1v0cecV0vu8zf63jssQ5je86YMf4fA5hw8v18xx29QYyBaRiO+ugjH0aZvW69Nbo/okkTH/ebo4/24T82buyvERtIm69MwrpecolP88Of/+y+3G8/fz7inXd8OhMGfrzqquX5JISBfBiQb6nCwPS+fb3R/8kaa7ieN9/sfrrnHmfYDXv9dV+/9n/4g/v+vPP8ebcrr/R1MyMd3Cg/LgwsWbrUtdluO9duzz0dGCL+IAwgcIB9qbgXKnNS584+325XXOHr2fG44/z1yA8+8PWjjjX9j8G+6UW93Zipi9yipcvcrf8d7S59dniqch55b5y77LnlcecvWuZ2bNzXfdt/tk/bvvcsLzK83m6yW/ecnm789EWp8qzp9im/mudMXWIa+n2WMFDkpXHsscc6PvjbbLON23bbbd3HTZtGDyouyRigfCgJ++fLL0dh3Me9lNnZXXbZxZ//45lnovCevXq5ww8/3K233nruoIMPdj+Z6v3LL+6kk092/33tNbfnXnv52UDc/CFVj549fT6bbrqp23Cjjfw5ZcyeOzfK94QTTnD77refOz2hlg4ZNswdddRRbv0NNnC///3vvbAwN+HOVoow8NDDD7snn3rKHX/88W6LLbZwjz3+eFQX6ozb+m677ebLPefccx3ulPaAYKAd8Ic/eHf/vfbe28expQy9f/rJ7bPvvm7jjTd2jz/xhMdo4uTJbv7Che4PBx7ocOG1fDp+990Ks3Y77LCD+7ZTpygOcU886SR3xplnOvD729//7nF48KGHojjMjm6yySYeW+LG3e2Zjbzkkkt8GtI/8quybnVgBmXnnXd2G2y44Qp1Ic7e++yzQp9Y2nxH+h8egduWW27pnv11VoL4Z59zjjvyyCN93bt26+a58Nobb7iFixf784svucS3k3rS3+RDOhMGaDf9Qr6GOeH9Bw50xxxzjOcl7Xnt9dcjfDp07OjzfuHFFx3PxTrrrFNUoMrXNrtvRjp832qrrTyP4s/CpClT3PkXXOA2atTIe8Eklx3k4/uSZcvcnXfd5Z9N+II3zKO/znAUKjPNM9a9Rw+3x557RvlZWwod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7OIGDR5c1vXMGiuMJ8am5dR/O+20k/v+hx+q1U+hfC9WZppnLOu+y1XelVde6ftzwqRJ1cIvV968P7bffntXG6JDrvJKvfe/d97xGHz40Uc1jkGxOnXt1s2tv/76jvdNsbiVFB76fZYwkEIYgACrrLKKGz12bL0iSyURW3WVsSUOiAPiQDYcCB1IZBW/rvv/hBNO8LNZNVmPTt9/73bdddeCY4vFS5cWDM9XH2a+cgkD5WRI5qt7/P47TZq4004/vSQM4vnUt/P6KgyE8r2YMJDmGSsHbtSmMED7Lvzzn92/X3mlrJ+juhQG2n7xhdt7n33KGp9SeBr6fZYwkFIYWH311R2eA6V0itJkM5gVzsJZHBAHxIHqcyB0IJFV/Or27T333uvuf+ABt9/++7uNN97Y3Xf//W7JsmXRd/3Z555zW2+9tQ9jZn3u/Pk+7D+vvur22GMPt84667gtt9zSn593/vlROtz1z7/gArdRo0Zuxx13dB99/HEU9tDDD7snn3rKHX/88W6LLbZwjz3+eBTGIHS77bZzjC/In/8OHTtG4X+97z637377+f/xEydG98Hh3PPOc5tssonbcKON3IknneRyud6GCgMtW7Vyja++2s9Ak/dVV13lpk6bFpXbs1cvd/jhh7v11lvPHXTwwe6nPn2iMOpEG1u3aeOOPvpot+6667obbrzRh5MHhv0GG27owK1x48auzeef+zDO47ODM2fPdvvsu6+Lz5pSjzhulPXgQw95t1/68YEHH3S77767O/NPf3Kz5szx+f79ySc9ttSD/v76m2+q1PXue+5xO++8s6/TKaeeWiUM4+Tggw/2s4fgnxz7Uec99twzyGUeo2//Aw5wT/ztb26zzTbzOBu/qCt9b+Vwfs211/o6XXzJJe6iiy/2aW697TbPBfAdM26c73M8Bi655BLPAfh32+23R5yePmOGu+yyyzyf4R5hNmPM0hTKuenmm93V11zjcaBN1X3GMNJffOklt+dee/k++aR58yhPXLV55rbaaivfHvgdf/4K8b3Je+/5Z5NZb56nM848M8q3UJnFnjHaS5zTzzgjyi8NBrQPHpxz7rn+ncC7g3QzZs3yuN55113++l///re/7v3TT44lPpR19jnn+Nl73kW///3vI2PdhAG8fTbffHO31957u169e0f1+qxlS48r7yGePwQPqyvvDfrz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&quot; width=&quot;625&quot; /&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-weight: normal;&quot;&gt;use the correct case.&lt;/span&gt;&lt;/li&gt;
&lt;ol&gt;
&lt;li&gt;&lt;span style=&quot;font-weight: 400;&quot;&gt;camel case&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-weight: 400;&quot;&gt;snake case&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-weight: 400;&quot;&gt;kabab case&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-weight: 400;&quot;&gt;pascal case.. and many more.&lt;br /&gt;Each type of casing of text implies a specific meaning to the code.&lt;/span&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;/ol&gt;
&lt;li&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;Function rules&lt;/span&gt;&lt;/li&gt;
&lt;ol&gt;
&lt;li&gt;&lt;span style=&quot;font-family: inherit; font-weight: normal;&quot;&gt;keep the functions small.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: inherit; font-weight: normal;&quot;&gt;do one thing and one thing only!&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: inherit; font-weight: normal;&quot;&gt;verbs as function names. Because functions always perform an action it makes sense to name them with verbs.&lt;/span&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;li&gt;Comments Rule&lt;/li&gt;
&lt;ol&gt;
&lt;li&gt;&lt;span style=&quot;font-weight: normal;&quot;&gt;don&#39;t add obvious comments.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-weight: normal;&quot;&gt;try to express your intent in the comments. don&#39;t explain unrelated facts about the requirement.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-weight: normal;&quot;&gt;use comments to &lt;/span&gt;&lt;span style=&quot;font-weight: 400;&quot;&gt;highlight&lt;/span&gt;&lt;span style=&quot;font-weight: normal;&quot;&gt;&amp;nbsp;warnings.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-weight: normal;&quot;&gt;try to express yourself in code and not in comments. Most programming languages are high-level languages, meant for humans to understand.&lt;/span&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;/ol&gt;
&lt;div&gt;
&lt;span style=&quot;font-weight: 400;&quot;&gt;So Why do we strive to write clean code? cant we just go with code that just works? there are many reasons for writing clean code:&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;ul style=&quot;text-align: left;&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-weight: 400;&quot;&gt;Easier onboarding of team members. If you are working with rotating teams, a common&amp;nbsp;outcome for most development teams within the pandemic. It is best if it takes less time to onboard new team members.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-weight: 400;&quot;&gt;Easier debugging. When it is easy to read and understand the codebase it is easy to pinpoint the segment of the code where the error or bug is occurring.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-weight: 400;&quot;&gt;better utilization of developer&#39;s time. The developer reading the code is not trying to figure out how the code works but is either implementing new features or refactoring the code.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;
&lt;span style=&quot;font-weight: 400;&quot;&gt;Another aspect that comes up every time there is a discussion of clean/bad code is complexity.&amp;nbsp;The causes of complexity are not always directly attributed to bad code, in much the same way that bad code is not always the direct result of bad or even poorly skilled developers. even senior developers write complex, difficult to understand code.&amp;nbsp;Many believe that complexity is caused by two things: Dependencies and lack of clarity.&amp;nbsp;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-weight: 400;&quot;&gt;Dependencies&amp;nbsp;can be both external modules/packages and developers who wrote some parts of code. If there is an excessive dependency on an external module the team is forced to write code as dictated by that module.&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-weight: 400;&quot;&gt;&amp;nbsp;the other form of dependency is what I call &quot;Key Person dependency&quot;. This is when there is an over-reliance on one developer to write and maintain most parts of the codebase. Both forms of dependencies are caused by&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-weight: 400;&quot;&gt;a given piece of code that cannot be understood and modified in isolation: the code relates in some way to other code and the other code must be considered and/or modified if the given code is changed.&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-weight: 400;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-weight: 400;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-weight: 400;&quot;&gt;The bottom line is that writing clean code has visible benefits. It improves the standard of code which directly affects the maintainability&amp;nbsp;of the software or applications. The complexity of a codebase is heavily driven by dependencies and incremental&amp;nbsp;changes, both in the team and in features. The development teams must spend quality time to write clean code. At its core, clean code is about eliminating complexities and improving the readability of the codebase.&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/h4&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;/div&gt;
</description><link>https://blog.keithfranklin.xyz/2020/06/the-pursuit-of-clean-code.html</link><author>noreply@blogger.com (Keith Franklin)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg-bWbfYqVrM_IH0781NEuHLgTWrAdQnwZoLNh77CPt4RcdJCa2n1r0ie2s4h7qnXWMU7rtLfm23osSx824Q0n6l67pFzfD-z9XVWtSId4Tykm_dOj1_9kqKbSE8zPUTmZ_bTahmL6VhFU/s72-c/1-1fig_martin.jpg" height="72" width="72"/><thr:total>2</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-1397999486493842391.post-3772757227566260237</guid><pubDate>Tue, 07 Jul 2020 14:45:00 +0000</pubDate><atom:updated>2020-07-07T07:45:14.634-07:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">code</category><category domain="http://www.blogger.com/atom/ns#">programming</category><title>conway&#39;s game of life. - code</title><description>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
&lt;h2 style=&quot;text-align: left;&quot;&gt;
Rules of the Game:&lt;/h2&gt;
The universe of the Game of Life is an infinite two-dimensional orthogonal grid of square cells, each of which is in one of two possible states, alive or dead. Every cell interacts with its eight neighbors, which are the cells that are horizontally, vertically, or diagonally adjacent. At each step in time, the following transitions occur:&lt;br /&gt;
&lt;ol style=&quot;text-align: left;&quot;&gt;
&lt;li&gt;Any live cell with fewer than two live neighbors dies as if caused by under-population.&lt;/li&gt;
&lt;li&gt;Any live cell with two or three live neighbors lives on to the next generation.&lt;/li&gt;
&lt;li&gt;Any live cell with more than three live neighbors dies, as if by overcrowding.&lt;/li&gt;
&lt;li&gt;Any dead cell with exactly three live neighbors becomes a live cell, as if by reproduction.&lt;/li&gt;
&lt;/ol&gt;
The initial pattern constitutes the seed of the system. The first generation is created by applying the above rules simultaneously to every cell in the seed—births and deaths occur simultaneously, and the discrete moment at which this happens is sometimes called a tick (in other words, each generation is a pure function of the preceding one). The rules continue to be applied repeatedly to create further generations.&lt;br /&gt;
&lt;br /&gt;
&lt;a name=&#39;more&#39;&gt;&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
We start by creating a HTML boiler plate with an empty canvas in the the body tag.&lt;br /&gt;
&lt;script src=&quot;https://gist.github.com/Keith3895/a42e12020a3ef8905f991422cb98eada.js&quot;&gt;&lt;/script&gt;

after the html we add a script tag and initialize the canvas and some global variables along with some utility fucntions.:&lt;br /&gt;
&lt;script src=&quot;https://gist.github.com/Keith3895/da8abc0da81e63caf6b57d2634dbb967.js&quot;&gt;&lt;/script&gt;

Next, we creat a Class which is representative of a cell in the universe of the game.&lt;br /&gt;
&lt;script src=&quot;https://gist.github.com/Keith3895/a85e0d3d41c8e2c3a4f97582fadea6a2.js&quot;&gt;&lt;/script&gt;

We define a draw member function to draw a grid of a cell. We will also define a fill member function which will add a fill to the grid to signify a live cell. Other member variables would be the position and dimensions of the cell.&lt;br /&gt;
&lt;br /&gt;
we will define a method to draw the universe:&lt;br /&gt;
&lt;script src=&quot;https://gist.github.com/Keith3895/2048190935092b7d9b2174842a88462f.js&quot;&gt;&lt;/script&gt;

we will define a pure function to apply the rules of the game and a method to calculate the next generation.&lt;br /&gt;
&lt;script src=&quot;https://gist.github.com/Keith3895/862e1659ea7185628f9798b78e53aa13.js&quot;&gt;&lt;/script&gt;

You will notice in the pure function there is a line &lt;code&gt;lifeCount = lifeCount &amp;gt; 0 ? lifeCount - 1 : 0;&amp;nbsp;&lt;/code&gt;we reduce the count because the calculation is inclusive of the current cell.&lt;br /&gt;
&lt;br /&gt;
to close the development on the game we&#39;ll add some event handlers to make the game a little interactive:&lt;br /&gt;
&lt;script src=&quot;https://gist.github.com/Keith3895/e6e2b60895c7bff2f17c80c7fb077088.js&quot;&gt;&lt;/script&gt;

and then you will have the final result: &lt;a href=&quot;https://keith3895.github.io/conways-game-of-life/index.html&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;https://keith3895.github.io/conways-game-of-life/index.html&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
the code is on github:&amp;nbsp;&lt;a href=&quot;https://github.com/Keith3895/conways-game-of-life&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;https://github.com/Keith3895/conways-game-of-life/blob/master/&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;&lt;/div&gt;
</description><link>https://blog.keithfranklin.xyz/2020/06/conways-game-of-life-code.html</link><author>noreply@blogger.com (Keith Franklin)</author><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-1397999486493842391.post-5947925207226785994</guid><pubDate>Wed, 01 Jul 2020 03:30:00 +0000</pubDate><atom:updated>2020-07-01T03:33:51.529-07:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">programming paradigm</category><category domain="http://www.blogger.com/atom/ns#">TDD</category><title>Understanding TDD - Part 1 - “What is TDD?”</title><description>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
&lt;font face=&quot;inherit&quot;&gt;&lt;span style=&quot;line-height: 1.5;&quot;&gt;&lt;span id=&quot;docs-internal-guid-5b05c4b2-7fff-9cd9-651d-9f2729144542&quot; style=&quot;line-height: 1.5;&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;/font&gt;&lt;h1 style=&quot;line-height: 1.5; margin-bottom: 0pt; margin-top: 0pt; text-align: justify;&quot;&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;span style=&quot;line-height: 1.5;&quot;&gt;&lt;span id=&quot;docs-internal-guid-5b05c4b2-7fff-9cd9-651d-9f2729144542&quot; style=&quot;line-height: 1.5;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgC2s40-m5VTHr9D-7Ckqy3aNGFaLUECR8eXjieDUn6CgUFqJFzqDL1ipia-xeNwEHFWSL_ak2p5xiNsLgcEnDvHllBmR1NFz8d-0nbO0iyfgwsdt2GOnDsgDFLdJ2rOVwnrf2lC1RbOOY/s800/tdd-cover-800x533.png&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;font face=&quot;inherit&quot; size=&quot;3&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;533&quot; data-original-width=&quot;800&quot; height=&quot;333&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgC2s40-m5VTHr9D-7Ckqy3aNGFaLUECR8eXjieDUn6CgUFqJFzqDL1ipia-xeNwEHFWSL_ak2p5xiNsLgcEnDvHllBmR1NFz8d-0nbO0iyfgwsdt2GOnDsgDFLdJ2rOVwnrf2lC1RbOOY/w500-h333/tdd-cover-800x533.png&quot; width=&quot;500&quot; /&gt;&lt;/font&gt;&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/h1&gt;
&lt;h2&gt;
&lt;span style=&quot;line-height: 1.5;&quot;&gt;&lt;span id=&quot;docs-internal-guid-5b05c4b2-7fff-9cd9-651d-9f2729144542&quot; style=&quot;line-height: 1.5;&quot;&gt;&lt;span style=&quot;line-height: 1.5; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&lt;font face=&quot;inherit&quot; size=&quot;3&quot;&gt;Understanding TDD&lt;/font&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;div style=&quot;line-height: 2; margin-bottom: 0pt; margin-top: 0pt; text-align: justify;&quot;&gt;
&lt;span style=&quot;line-height: 1.5;&quot;&gt;&lt;span id=&quot;docs-internal-guid-5b05c4b2-7fff-9cd9-651d-9f2729144542&quot; style=&quot;line-height: 1.5;&quot;&gt;&lt;font face=&quot;inherit&quot;&gt;&lt;span style=&quot;font-variant-east-asian: normal; font-variant-numeric: normal; line-height: 2; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;This post is written with the intent to help understand the concepts around TDD and help in the adaptation of the &lt;/span&gt;&lt;span style=&quot;font-style: italic; font-variant-east-asian: normal; font-variant-numeric: normal; line-height: 2; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;TDD approach &lt;/span&gt;&lt;span style=&quot;font-variant-east-asian: normal; font-variant-numeric: normal; line-height: 2; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;in the development process. The intended targets are developers, Team leads, and managers. The idea behind creating this was to explain the background of TDD. &lt;/span&gt;&lt;span style=&quot;font-variant-east-asian: normal; font-variant-numeric: normal; line-height: 2; vertical-align: baseline;&quot;&gt;This first part covers the origins of TDD and the basic principles that define development with TDD.&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1.5; margin-bottom: 0pt; margin-top: 0pt; text-align: justify;&quot;&gt;
&lt;span style=&quot;line-height: 1.5;&quot;&gt;&lt;span id=&quot;docs-internal-guid-5b05c4b2-7fff-9cd9-651d-9f2729144542&quot; style=&quot;line-height: 1.5;&quot;&gt;&lt;span style=&quot;line-height: 1.5; text-align: left; white-space: pre-wrap;&quot;&gt;&lt;font face=&quot;inherit&quot;&gt;&lt;br /&gt;&lt;/font&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1.5; margin-bottom: 0pt; margin-top: 0pt; text-align: justify;&quot;&gt;
&lt;span style=&quot;line-height: 1.5;&quot;&gt;&lt;span id=&quot;docs-internal-guid-5b05c4b2-7fff-9cd9-651d-9f2729144542&quot; style=&quot;line-height: 1.5;&quot;&gt;&lt;span style=&quot;line-height: 1.5; text-align: left; white-space: pre-wrap;&quot;&gt;&lt;font face=&quot;inherit&quot;&gt;&lt;br /&gt;&lt;/font&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1.5; margin-bottom: 0pt; margin-top: 0pt; text-align: justify;&quot;&gt;
&lt;span style=&quot;line-height: 1.5;&quot;&gt;&lt;span id=&quot;docs-internal-guid-5b05c4b2-7fff-9cd9-651d-9f2729144542&quot; style=&quot;line-height: 1.5;&quot;&gt;&lt;font face=&quot;inherit&quot;&gt;&lt;span style=&quot;line-height: 1.5; text-align: left; white-space: pre-wrap;&quot;&gt;-------&lt;/span&gt;&lt;span style=&quot;line-height: 1.5; text-align: left; white-space: pre-wrap;&quot;&gt;-------&lt;/span&gt;&lt;span style=&quot;line-height: 1.5; text-align: left; white-space: pre-wrap;&quot;&gt;-------&lt;/span&gt;&lt;span style=&quot;line-height: 1.5; text-align: left; white-space: pre-wrap;&quot;&gt;-------&lt;/span&gt;&lt;span style=&quot;line-height: 1.5; text-align: left; white-space: pre-wrap;&quot;&gt;-------&lt;/span&gt;&lt;span style=&quot;line-height: 1.5; text-align: left; white-space: pre-wrap;&quot;&gt;-------&lt;/span&gt;&lt;span style=&quot;line-height: 1.5; text-align: left; white-space: pre-wrap;&quot;&gt;-------&lt;/span&gt;&lt;span style=&quot;line-height: 1.5; text-align: left; white-space: pre-wrap;&quot;&gt;-------&lt;/span&gt;&lt;span style=&quot;line-height: 1.5; text-align: left; white-space: pre-wrap;&quot;&gt;-------&lt;/span&gt;&lt;span style=&quot;line-height: 1.5; text-align: left; white-space: pre-wrap;&quot;&gt;-------&lt;/span&gt;&lt;span style=&quot;line-height: 1.5; text-align: left; white-space: pre-wrap;&quot;&gt;-------&lt;/span&gt;&lt;span style=&quot;line-height: 1.5; text-align: left; white-space: pre-wrap;&quot;&gt;-------&lt;/span&gt;&lt;span style=&quot;line-height: 1.5; text-align: left; white-space: pre-wrap;&quot;&gt;-------&lt;/span&gt;&lt;span style=&quot;line-height: 1.5; text-align: left; white-space: pre-wrap;&quot;&gt;-------&lt;/span&gt;&lt;span style=&quot;line-height: 1.5; text-align: left; white-space: pre-wrap;&quot;&gt;-------&lt;/span&gt;&lt;span style=&quot;line-height: 1.5; text-align: left; white-space: pre-wrap;&quot;&gt;-------&lt;/span&gt;&lt;span style=&quot;line-height: 1.5; text-align: left; white-space: pre-wrap;&quot;&gt;-------&lt;/span&gt;&lt;span style=&quot;line-height: 1.5; text-align: left; white-space: pre-wrap;&quot;&gt;-------&lt;/span&gt;&lt;span style=&quot;line-height: 1.5; text-align: left; white-space: pre-wrap;&quot;&gt;-------&lt;/span&gt;&lt;span style=&quot;line-height: 1.5; text-align: left; white-space: pre-wrap;&quot;&gt;-------&lt;/span&gt;&lt;span style=&quot;line-height: 1.5; text-align: left; white-space: pre-wrap;&quot;&gt;-------&lt;/span&gt;&lt;span style=&quot;line-height: 1.5; text-align: left; white-space: pre-wrap;&quot;&gt;-------&lt;/span&gt;&lt;span style=&quot;line-height: 1.5; text-align: left; white-space: pre-wrap;&quot;&gt;---&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;line-height: 1.5;&quot;&gt;
&lt;font face=&quot;inherit&quot;&gt;&lt;span style=&quot;line-height: 1.5;&quot;&gt;&lt;span id=&quot;docs-internal-guid-5b05c4b2-7fff-9cd9-651d-9f2729144542&quot; style=&quot;line-height: 1.5;&quot;&gt;&lt;span style=&quot;line-height: 1.5; text-align: left; white-space: pre-wrap;&quot;&gt;&lt;span style=&quot;line-height: 1.5;&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;/font&gt;&lt;/div&gt;
&lt;font face=&quot;inherit&quot;&gt;&lt;span style=&quot;line-height: 1.5;&quot;&gt;&lt;span style=&quot;font-style: italic; line-height: 1.5; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;/font&gt;&lt;div style=&quot;line-height: 1.5; text-align: justify;&quot;&gt;
&lt;span style=&quot;line-height: 1.5;&quot;&gt;&lt;span style=&quot;font-style: italic; line-height: 1.5; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&lt;span style=&quot;font-style: italic; line-height: 1.5; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&lt;font face=&quot;inherit&quot;&gt;&lt;br /&gt;&lt;/font&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;font face=&quot;inherit&quot;&gt;&lt;span style=&quot;line-height: 1.5;&quot;&gt;&lt;span style=&quot;font-style: italic; line-height: 1.5; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;
&lt;/span&gt;&lt;/span&gt;
&lt;br /&gt;
&lt;/font&gt;&lt;h2 style=&quot;line-height: 1.5; text-align: justify;&quot;&gt;
&lt;span style=&quot;font-style: italic; line-height: 1.5; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&lt;span style=&quot;line-height: 1.5;&quot;&gt;&lt;font face=&quot;inherit&quot; size=&quot;3&quot;&gt;What is TDD?&lt;/font&gt;&lt;/span&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1.5; margin-bottom: 0pt; margin-top: 0pt; text-align: justify;&quot;&gt;
&lt;span style=&quot;line-height: 1.5;&quot;&gt;&lt;font face=&quot;inherit&quot;&gt;&lt;span style=&quot;font-style: italic; line-height: 1.5; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;Test-driven Development &lt;/span&gt;&lt;span style=&quot;line-height: 1.5; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;abbreviated to TDD,&amp;nbsp; is an Approach to problem-solving or application/software development when &lt;/span&gt;&lt;span style=&quot;font-style: italic; line-height: 1.5; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;unit tests&lt;/span&gt;&lt;span style=&quot;line-height: 1.5; vertical-align: baseline; white-space: pre-wrap;&quot;&gt; are written prior to writing code.&amp;nbsp; Before jumping in headfirst into &lt;/span&gt;&lt;span style=&quot;font-style: italic; line-height: 1.5; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;Test-driven Development (TDD) &lt;/span&gt;&lt;span style=&quot;line-height: 1.5; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;let’s look back at the background of how TDD came to be.&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;/div&gt;
&lt;h3 style=&quot;line-height: 1.5; margin-bottom: 0pt; margin-top: 0pt; text-align: justify;&quot;&gt;
&lt;span style=&quot;line-height: 1.5; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&lt;span style=&quot;line-height: 1.5;&quot;&gt;&lt;font face=&quot;inherit&quot; size=&quot;3&quot;&gt;&lt;br /&gt;&lt;/font&gt;&lt;/span&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;h2 style=&quot;line-height: 1.5; margin-bottom: 0pt; margin-top: 0pt; text-align: justify;&quot;&gt;
&lt;span style=&quot;line-height: 1.5; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&lt;span style=&quot;line-height: 1.5;&quot;&gt;&lt;font face=&quot;inherit&quot; size=&quot;3&quot;&gt;History of TDD&lt;/font&gt;&lt;/span&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;div style=&quot;line-height: 1.5; margin-bottom: 0pt; margin-top: 0pt; text-align: justify;&quot;&gt;
&lt;font face=&quot;inherit&quot;&gt;&lt;span style=&quot;line-height: 1.5;&quot;&gt;&quot;Generally, the modern “rediscovery” of TDD is attributed to Kent Beck, who is also known as the creator of Extreme Programming. Extreme Programming (XP) is an agile software development framework that aims to produce higher quality software and higher quality of life for the development team.&quot; &lt;/span&gt;&lt;span style=&quot;line-height: 1.5;&quot;&gt;&lt;span style=&quot;line-height: 1.5; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;The general characteristics of &lt;/span&gt;&lt;span style=&quot;font-style: italic; line-height: 1.5; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;Extreme Programming&lt;/span&gt;&lt;span style=&quot;line-height: 1.5; vertical-align: baseline; white-space: pre-wrap;&quot;&gt; (XP) described in &lt;/span&gt;&lt;span style=&quot;color: #1155cc; line-height: 1.5; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&lt;a href=&quot;http://www.extremeprogramming.org/when.html&quot; style=&quot;line-height: 1.5; text-decoration-line: none;&quot;&gt;extreme programming &lt;/a&gt;&lt;/span&gt;are.&lt;span style=&quot;line-height: 1.5; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/font&gt;&lt;/div&gt;
&lt;div style=&quot;line-height: 1.5; margin-bottom: 0pt; margin-top: 0pt; text-align: justify;&quot;&gt;
&lt;/div&gt;
&lt;ol&gt;
&lt;li&gt;&lt;span&gt;&lt;span style=&quot;line-height: 1.5; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&lt;span style=&quot;line-height: 1.5;&quot;&gt;&lt;font face=&quot;inherit&quot;&gt;Extreme Programming (XP) was created in response to problem domains whose requirements change.&lt;/font&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;&lt;font face=&quot;inherit&quot;&gt;XP is set up for small groups of programmers.&amp;nbsp;&lt;/font&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;line-height: 1.15;&quot;&gt;&lt;font face=&quot;inherit&quot;&gt;The XP team includes not only the developers but the managers and customers as well, all working together elbow to elbow.&lt;/font&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;&lt;font face=&quot;inherit&quot;&gt;Another requirement is testability. You must be able to create automated unit and functional tests.&lt;/font&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;&lt;font face=&quot;inherit&quot;&gt;The last thing on the list is productivity.&amp;nbsp;&lt;/font&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ol&gt;&lt;div&gt;&lt;font face=&quot;inherit&quot;&gt;XP gave a broad framework on which TDD would become a Development practice used to drive quality code.&lt;/font&gt;&lt;/div&gt;
&lt;h4 style=&quot;text-align: left;&quot;&gt;&lt;font face=&quot;inherit&quot;&gt;
The Agile Mindset of development teams.&lt;/font&gt;&lt;/h4&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;span&gt;&lt;font face=&quot;inherit&quot;&gt;The &lt;a href=&quot;https://agilemanifesto.org/principles.html&quot; style=&quot;line-height: 1.5; text-align: justify; text-decoration-line: none;&quot;&gt;&lt;span style=&quot;color: #1155cc; line-height: 1.5; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;Agile Manifesto&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot;line-height: 1.5; text-align: justify; vertical-align: baseline; white-space: pre-wrap;&quot;&gt; is tantamount to a “declaration of independence” for Agile Software development. Many offshoots the agile system are extreme programming, scrum, pair programming, refactoring, and many more. The agile&lt;/span&gt;&amp;nbsp;manifesto is also important in the development of TDD as many of the principles of the manifesto are key drivers in TDD. Some of the direct correlations of the principles are:&lt;/font&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;/div&gt;
&lt;ul style=&quot;line-height: 1.15; text-align: left;&quot;&gt;
&lt;li style=&quot;line-height: 1.15;&quot;&gt;&lt;span style=&quot;line-height: 1.15;&quot;&gt;&lt;span style=&quot;line-height: 1.15; text-align: justify; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&lt;span style=&quot;line-height: 1.15;&quot;&gt;&lt;font face=&quot;inherit&quot;&gt;“Welcome changing requirements, even late in development. Agile processes harness change for the customer’s competitive advantage.”. As we write Tests for every block of code any faults to any specific part of the software will be flagged.&amp;nbsp;&lt;/font&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li style=&quot;line-height: 1.15;&quot;&gt;&lt;span style=&quot;line-height: 1.15;&quot;&gt;&lt;span style=&quot;line-height: 1.15; text-align: justify; white-space: pre-wrap;&quot;&gt;&lt;font face=&quot;inherit&quot;&gt;“Working software is the primary measure of progress.” &lt;/font&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li style=&quot;line-height: 1.15;&quot;&gt;&lt;span style=&quot;line-height: 1.15;&quot;&gt;&lt;span style=&quot;line-height: 1.15; text-align: justify; white-space: pre-wrap;&quot;&gt;&lt;font face=&quot;inherit&quot;&gt;“Simplicity--the art of maximizing the amount of work not done--is essential.”. To facilitate testable blocks the code is designed to be simple.&lt;/font&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 style=&quot;text-align: justify;&quot;&gt;
&lt;span&gt;&lt;span style=&quot;white-space: pre-wrap;&quot;&gt;&lt;font face=&quot;inherit&quot;&gt;Let&#39;s Look at The Traditional Process&lt;/font&gt;&lt;/span&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;table align=&quot;center&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;tr-caption-container&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;font face=&quot;inherit&quot;&gt;&lt;img height=&quot;166&quot; src=&quot;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAA8oAAAD8CAYAAACvpF0ZAAAgAElEQVR4AeydCRx11bj/M9VFSHpR0mAIGW83ZAiV6m1WIrPSJHI1XcStlKkiVBoM1b1CpmQsVNIgFJFCReapDOleU8T+f77b/3fu86537332mfbeZ5/f+nzWWfvsYe21fs+zn7V+a1whszMCRsAIGAEjYASMgBEwAkbACBgBI2AEBgisMDjygREwAkbACBgBI2AEjIARMAJGwAgYASOQmShbCYyAETACRsAIGAEjYASMgBEwAkbACAQETJQDGD40AkbACBgBI2AEjIARMAJGwAgYASNgomwdMAJGwAgYASNgBIyAETACRsAIGAEjEBAwUQ5g+NAIGAEjYASMgBEwAkbACBgBI2AEjICJsnXACBgBI2AEjIARMAJGwAgYASNgBIxAQMBEOYDhQyNgBIyAETACRsAIGAEjYASMgBEwAibK1gEjYASMgBEwAkbACBgBI2AEjIARMAIBARPlAIYPjYARMAJGwAgYASNgBIyAETACRsAImChbB4yAETACRsAIGAEjYASMgBEwAkbACAQETJQDGD40AkbACBgBI2AEjIARMAJGwAgYASNgomwdMAJGwAgYASNgBIyAETACRsAIGAEjEBAwUQ5g+NAIGAEjYASMgBEwAkbACBgBI2AEjICJsnXACBgBI2AEjIARMAJGwAgYASNgBIxAQMBEOYDhQyNgBIyAETACRsAIGAEjYASMgBEwAibK1gEjYASMgBEwAkbACBgBI2AEjIARMAIBARPlAIYPjYARMAJGwAgYASNgBIyAETACRsAImChbB4yAETACRsAIGAEjYASMgBEwAkbACAQETJQDGD40AkbACBgBI2AEjIARMAJGwAgYASNgomwdMAJGwAgYASNgBIyAETACRsAIGAEjEBAwUQ5g+NAIGAEjYASMgBEwAkbACBgBI2AEjICJsnXACBgBI2AEjIARMAJGwAgYASNgBIxAQMBEOYDhQyNgBIyAETACRsAIGAEjYASMgBEwAibK1gEjYASMgBEwAkbACBgBI2AEjIARMAIBARPlAIYPjYARMAJGwAgYASNgBIyAETACRsAImChbB4yAETACRsAIGAEjYASMgBEwAkbACAQETJQDGD40AkbACBgBI2AEjIARMAJGwAgYASNgomwdMAJGwAgYASNgBIyAETACRsAIGAEjEBAwUQ5g+NAIGAEjYASMgBEwAkbACBgBI2AEjICJsnXACBgBI2AEjIARMAJGwAgYASNgBIxAQMBEOYDhQyNgBIyAETACRsAIGAEjYASMgBEwAibK1gEjYASMgBEwAkbACBgBI2AEjIARMAIBARPlAIYPjYARMAJGwAgYASNgBIyAETACRsAImChbB4yAETACRsAIGAEjYASMgBEwAkbACAQETJQDGD40AkbACBgBI2AEjIARMAJGwAgYASNgomwdMAJGwAgYASNgBIyAETACRsAIGAEjEBAwUQ5g+NAIGAEjYASMgBEwAkbACBgBI2AEjICJsnXACBgBI2AEjIARMAJGwAgYASNgBIxAQMBEOYDhQyNgBIyAETACRsAIGAEjYASMgBEwAibK1gEjYASMgBEwAkbACBgBI2AEjIARMAIBARPlAIYPjYARMAJGwAgYASNgBIyAETACRsAImChbB4yAETACRsAIGAEjYASMgBEwAkbACAQETJQDGD40AkbACBgBI2AEjIARMAJGwAgYASNgomwdMAJGwAgYASNgBIyAETACRsAIGAEjEBAwUQ5g+NAIGAEjYASMgBEwAkbACBgBI2AEjICJsnXACBgBI2AEjIARMAJGwAgYASNgBIxAQMBEOYDhQyNgBIyAETACRsAIGAEjYASMgBEwAibK1gEjYASMgBEwAkbACBgBI2AEjIARMAIBARPlAIYPjYARMAJGwAgYASNgBIyAETACRsAImChbB4yAETACRsAIGAEjYASMgBEwAkbACAQETJQDGD40AkbACBgBI2AEjIARMAJGwAgYASNgomwdMAJGwAgYASNgBIyAETACRsAIGAEjEBAwUQ5g+NAIGAEjYASMgBEwAkbACBgBI2AEjICJsnXACBgBI2AEjIARMAJGwAgYASNgBIxAQMBEOYDhQyNgBIyAETACRsAIGAEjYASMgBEwAibK1gEjYASMgBEwAkbACBgBI2AEjIARMAIBARPlAIYPjYARMAJGwAgYASNgBIyAETACRsAImChbB4yAETACRsAIGAEjYASMgBEwAkbACAQETJQDGD40AkbACBgBI2AEjIARMAJGwAgYASNgomwdMAJGwAgYASNgBIyAETACRsAIGAEjEBAwUQ5g+NAIGAEjYASMgBEwAkbACBgBI2AEjICJsnXACBgB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s0eArYB22223bP31189+/OMfz+yFdcgYe/M+85nPXM6/7GUvy6655pr8/FVXXVU7jSw+VRQfPaZNu6uvvjofzswCWWmayN9nPvOZRueMx/zXkU2838dGwAgYgWkgYKI8DRQdhxEwAkbACBgBIzBTBN797ndnS5YsyY499tiZrGxch4yxoBT3rb322tkTn/jEgd9ll13yYcGc+9rXvlYbhze+8Y15fBtssMEgLuLYfffda8cxrRv333//HF8aA8jj/e9//2z77bfPtttuu2yttdbKz5111lnTet1I8dSRzUgR+mYjYASMQA0ETJRrgORbjIARMAJGwAgYgfYRoLd2s802yx7xiEdkl1122VQTVIeMiSi/6U1vWu7d7NtLD/Gvf/3r7Lzzzss+8YlPDHpgv/KVr+TX6B2PTkT5u9/9bjydHzPUnPjYN/i9731vdvbZZ2ef/vSns+9///t57+6pp56a30eaTjrppOw973lPxvZJcp///Ocz4j3//POzE088MZ/n/dnPfjZ785vfnL3rXe9aZvutv/71rzlJPuCAA/IVpMHiwAMPVFTZ73//+4xVpulpxhH3N7/5zcH1Cy64YBl5XHjhhdnb3/72jBA5cR1Hntjv+Oijj84+9KEPZX/+858HcVQd1JFN1fO+ZgSMgBEYBwET5XFQ8zNGwAgYASNgBIxAawhAsu573/tmm2++eU4Ep5GQOmRMRPmggw7Kvve97w08BPCiiy7Ke10hpqecckp+DCG84oorshVXXDF74QtfuFwyRZQ/97nPDeIi3ptvvjn/T5rWXHPN7Da3uU225557Zne5y13y/5zfcMMNM3rZb3/722frrrtuvnXSHe94x+yTn/xk/h56vXmWe1kh+uUvf3lOdh/72Mdmd7vb3Qa9x9x85pln5vcx/Jqtlnhmn332yX71q19lv/jFL3ISzjm2YsLxvhe84AX5MT+PetSjsh122CH//6pXvSp//qEPfWi26qqrZqusskrGMQuy0cDBnsePecxjsjvc4Q7ZxhtvPIij6oB32xkBI2AEmkbAlqdpxP0+I2AEjIARMAJGYGIE6I087bTTsgc/+MH5frr0qNLzOa6rQ8ZElLk3+o9+9KPLEGXS8KxnPStbaaWVsnXWWSd70IMeVLgYmYhyjItjen0hzBzz7M9+9rM8WxDllVdeOSffrArOMQSV/ab/8pe/5DgwTBoHUYagQ+BxkFUI7e9+97u8N3i//fbLLr/88vzaNttsk5NX/ogop2liD+Mf/OAH+f1lRJlVqOl5hpTj6A2HGPPuG264Ic/PXnvtldGD/ZGPfCQjDXVkRlrsjIARMAJNI2DL0zTifp8RMAJGwAgYASMwNQToqWSY89Of/vS8x3XHHXfMPvaxj2U33XTTSO+oQ8ZElF/84hdnDKeWh+zFHmVeTK8wJJF4zz333MK0iCgzHFlxEdKLK6L81re+dfAsRPl5z3te/p+eauImr3L0+HIOsgtRZgslueOPPz7vfaYHmjnRRxxxRE6umZMMuT355JPzW0WU99hjj3zxNBZQI/304LOgGq6MKLMQGO+/5JJL9Nps6dKlOVHmBEO3uX7nO98523TTTbP3v//9g/uqDnjGzggYASPQNAK2PE0j7vcZASNgBIyAETACM0EAcsrc3S233DLvbWV4MitIM2eYucNVrg4ZE1EumqOcEmV6u4kTErrtttsWvlpEuWiOsogy+wbLQZSZR4y77rrr8vgZ5i13+OGH58O06W2GKO+66666lP3kJz/JV+Zm2Dpkm7S9/vWvz0gDQ7bBDieiHOcoc/7Zz352/gwNEA94wAOynXfeeRA3vfr0bF966aX5PQzllmO4NT3K9HhDur/xjW/kc6Sf8IQn5PfyzDBXRzbD4vB1I2AEjMCoCJgoj4qY7zcCRsAIGAEjYAQ6jwDDeyGvhx12WPbkJz85n5e7+uqr53syv+Y1r8nnEdNTeu211+Ykrg4Zq0uUIbkMi37GM56RnXDCCTkhJEydiDLpoTdYHrI/jCjfeuut+bDsBz7wgflQ7Isvvji7173ulW2yySb5a1KivMYaa2QPf/jDc4LNQlwMy2Y+Mc+rl5oHRZTpjYak4w855JA8P/Qq04P/3Oc+N7vnPe+ZXXnllXmPNnOoIcqQYd7D3tf0dB988MF53iHKbJ8FxszVZig5C4rxn4XBhrk6shkWh68bASNgBEZFwER5VMR8vxEwAkbACBgBIzCXCNCjyTDt173udXlvK8N/6R2FNNYhY/T8ct9RRx21XP4hqlxjMa9HP/rR2WqrrZaTTogli47RawtZjI6eaZ5JPYSU1a05H3uUGcqtHmXigfAyHFrPb7TRRoN5xMyNjj3KENd73OMey9zLOZ7VqtTESc+74lN497vfPV9t/Otf/3qefO7XllH0JrNYmBbzYpVrevIZXr3VVlvljRTMjcZBnFnEi3jpaWd/7HQl8PzG5If77YyAETACTSNgy9M04n6fETACRsAIGAEj0CkEILPzTMZYnZrtqYY5etmvv/76fDVr7qX3mH2fyf+ojgXEiCs+S/zMbf7whz+cR0cPMz3Pr371qwfRs0I4w8Y11HtwoeJgnmVTkS1fMgJGoOMImCh3XEBOnhEwAkbACBgBIzB7BEzGpoPxc57znHzRMLZ+YmuoJUuW5MR4ktgtm0nQ87NGwAiMi4CJ8rjI+TkjYASMgBEwAkZgrhGgN1TeZGw6oqSnmeHnJ510Ur76Nf8ndchGcpo0Lj9vBIyAEaiLgIlyXaR8nxEwAkbACBgBIzA3CIhY1Q1NlLsr2kiU68izuzlxyoyAEZgnBEyU50laTqsRMAJGwAgYASMwQKAOaap7j4nyANbOHYxKlKtk3rnMOUFGwAh0FgET5c6KxgkzAkbACBgBI2AEhEAV+Rl2jeG/w7yJspDuXohshslvmA5UXe9ejp0iI2AEuoCAiXIXpOA0GAEjYASMgBEwAoUIVBGc9FoVmWLf4TLPFkUmyoXwd+IksimTHeer5J7qSNX/TmTWiTACRqAzCJgod0YUTogRMAJGwAgYASNQRWTitSpyVESqIMPRs5WR/C233GKi3GHVgyhLVoRRjhwXybtKP6IelR13GA4nzQgYgYYQMFFuCGi/xggYASNgBIyAEShHoIyw6HwV8eFaSpZEpiLB4hhSLM8+v/g///nPJsrlomn9CkQZGSEryU5hlK9kHnVhmN5Iv6rC1gFwAoyAEWgFARPlVmD3S42AETACRsAIGAEQqCIoXKsiOpEQiSRF4iRiHAkxhAv/pz/9Kfd//OMfsz/84Q85UYaQ2XcTA+SEzCQ/hZItxDnKXvpAGPWkSp+G6aK/2P/X3n32uK1rURj+/38lvSFBeu+99957+3RwgcuDJWANNglJlsYeHFl8A2zI8jiJ+JAzwPKmNQggUJcAQbmu+Wa0CCCAAAIITEJgUSjpCskx9MQwpMcOxgpNDlA6OhgrbDkY//37N6n+/PnT1O/fv9OvX7/Sz58/m/rx40dSff/+PX379q2pr1+/pi9fvmzU58+fk+rTp09Nffz4McX68OFDivX+/fvUVu/evUtTr7br1nNxfHocx28XHW1lP1mqbCtnm3sONCcqz5HmS29qqDyXDs9xvmNoLteI109XYB6yLifxDcRFIIDAlgsQlLecmP8AAQQQQAABBCwwJIh0hRiHnBh+3EX0VlwH465wrNBVhmKFNAdih2GHPAU/h0EFQwfat2/fpjdv3jT1+vXr5Hr16lVSvXz5cqNevHiRynr+/Hkq69mzZ2lKVV6fz8ux6DyO1wY20VFWMlPZMAZtOcdA7RDtAN0Wnh2c3W12aNbcax14TXiNxHXjtdS21oasUa9njgggMF8BgvJ855aRIYAAAgggMDmBvhDSFlr0nEONjjHstHWQY0BW59Fd4xiOHYrV3VQ4U0hzCFagU7BT8FMAVDhUeH369Gl68uRJevz4cXr06FF6+PBhUw8ePEj379/fqHv37iXV3bt3m7pz506Kdfv27VTWrVu30tSrvGadx3HpscdsA7vISGUz+clRnir5ytmB28FagVrzovlRR1rzpQ605k/BWTsA3HGOnWYHZneZY4dZa8ZryOuqa931rVV9jT8IIDBvAYLyvOeX0SGAAAIIIDAZgb7g0RVWHGY2G5IdkLWtVyHL4VgBTKFYgVhBTcFNQU4hTyHw5s2b6fr16+nq1avpypUr6fLly+nixYvpwoUL6fz58+ncuXNNnT17NqnOnDnT1OnTp5Pq1KlTG3Xy5MnkOnHiRIp1/PjxtC4Vr1uPPSYd43htYBMbyUx2KjnK89KlS42vnOUtd4VuhWzNh4K0QrTmSd1odff15obm0d1mBWbtFCg7zO4su7s8trOsNdm3ZifzjcWFIIDAlggQlLeElX8UAQQQQAABBEqBvtCxKCi7C6ijA486he4atnWSy5CsrqSClgKXgpe6xApjCmY3btxoApsCnAKewp8C7NGjR9Phw4fTwYMHmzpw4EDav39/2rdvX1N79+5Ne/bs2ajdu3cn1a5du5rauXNnaqsdO3aksrZv356mVuU1+rxtTB6zDaKLnGQmO5UcZXro0KHGV87yVuBWsNY86A0KzYs61ZonzVcMzJpPvfmhN0HcWY5hWWti2bDct2b1Nf4ggMB8BQjK851bRoYAAggggMCkBPpCx9ig7M+fLgrK2qKrzqM+86pOpDvJ2uarbqW2BKuDrG6musbqdiooq2N67NixJsQpzCnUxZAcA3JXMHao1LEtAG/bti2tW7WNw+Msw3MMzg7NMTCXYVneeoNC/jEoa35iUNZOAL3hoaCseVVQpqs8qW91LgaBWQgQlGcxjQwCAQQQQACB6QusMij788l9Qdk37nJYVvdR4UqfedXnX/VZWAdmBTFt91V3Wdt/r1271my71tZgb7nW1uFym7W3HCvgeWty3Eqt8OdS17Stjhw5ksaUOtzL1pj/r+2a43Men8dtBx3jtmxtyY7bseXpLdh6k0IdZL1hoc9re/u1Ps+sTrLmSfOlefNnlh2SNb/uKPuO2P6cMh3l6f9c4AoRmKoAQXmqM8N1IYAAAgggMDOBvqCsr62qq6yQNORGXt6KrS6ztmMriOmOzQpl5Q28FKR9UyoF6vKGXep6quJNuRS4Vdo+7FIQ7CsF9KlU33Xqax6Tjh6rx28PHRV6tX063uQr3tzLN/ZSIJa7/DUPmg/Ny5AbesUt16sKyXxGeWY/gBgOAiMFCMojwXg5AggggAACCGxeoC8sdwVlPe+benV9VtmfV/ZnlRWW2n5nsjqP6kCqfIMvdSZ1cygFZ98FW1t7FdDUwVRY03Zf3xE7/vonhTqVf3WSgp5DtoKfynd31lGhsCx1Tadc5fU62MZxeawev442kY8+W6yKvzpKnsnSO9cAAAZ8SURBVLJV+Q7XclfHWPOg+dC8aH584y7Nm+92rblUQFaVv1d52U4yIXnz3+P8TQTmIkBQnstMMg4EEEAAAQTWRKAvLA/pLMc7YMcbe8XPLZeBOYZmbcn2tmyFLodmBWcFMm3RVjgrA7RDtIKcAp3DtAO1Q7XDn8O1A7Y6pGU5OK7Dsbx2n8dxeuwOvw7AMrJZGYZjIJa9KgbjGI59d+vYQfbvUdacOyB7LXh9xDdY/KaLjm1vzixan2vybcZlIoDAkgIE5SUB+esIIIAAAgggsDmBRYGkLcTE7nIMzOXdsN1h1meYHaDUZY6d5rg928FZXUqH5zJAO0SXQVpdT3ek3ZVWqHYpWA+tGCb/68dDr1mv81g1/li2cWfYQdhh2IFYb1LIO4Zif+7Y4bj8XcldW6w195sJyIu6yFqv/EEAgXoECMr1zDUjRQABBBBAYHICi8Kyvt4VmGNojh3DvtDcFpwdntWZ9FZeHxXSyhCtIB3DdAzUCnwuhcCuioFx6GN3uVd5HPp/x9d1jSmGXhvEAOwQbD8F4TIM29035XK32G9y+E0P38St7BwrIJdrwR3krnU0ZA0Skif3o4MLQmDLBQjKW07Mf4AAAggggAACiwSGhpW+4OxAVHaaHZzcZXS4ctjy0SFMRwczBbWy3Nl0R9rhTkcH66FHh8V1OA4dU3ydbaJZDMHR1uZxHjw3PsZucVso1lzHdbBsOCYgL/rO5esIzFeAoDzfuWVkCCCAAAIIrKXAkNDcFYDK52NoKgO0g3N5dJDW0QHNxxjiyscOemOOMShO/fGYcfm1pVE8t6mP0b2cE5/7TQ8f4/yWc992PmRtEY7X8scGF43AygUIyisn5R9EAAEEEEAAgVUKDA03bcGo67kYsPzY4as8OqS1HWO44/E/qc+gzc/PleY+99zEY9ecls8PXTcE41V+t/JvITAfAYLyfOaSkSCAAAIIIFCFwJgA5NeWIarrPAaysY8d7jj+b+NzwmMN4+u75qh83nM85ljFNwqDRACBpQQIykvx8ZcRQAABBBBAYCoCY4JS22vLALbq8xgC5/J41Ublv9c2T2Oem8ra5DoQQGD9BAjK6zdnXDECCCCAAAIIDBAYE6h47f/THAwGLAteggACCAwSICgPYuJFCCCAAAIIIDBXgTkExLmPYa5rj3EhgMB0BQjK050brgwBBBBAAAEEZigwh1A7w2lhSAgggEAmQFDOODhBAAEEEEAAAQQQQAABBBCoXYCgXPsKYPwIIIAAAggggAACCCCAAAKZAEE54+AEAQQQQAABBBBAAAEEEECgdgGCcu0rgPEjgAACCCCAAAIIIIAAAghkAgTljIMTBBBAAAEEEEAAAQQQQACB2gUIyrWvAMaPAAIIIIAAAggggAACCCCQCRCUMw5OEEAAAQQQQAABBBBAAAEEahcgKNe+Ahg/AggggAACCCCAAAIIIIBAJkBQzjg4QQABBBBAAAEEEEAAAQQQqF2AoFz7CmD8CCCAAAIIIIAAAggggAACmQBBOePgBAEEEEAAAQQQQAABBBBAoHYBgnLtK4DxI4AAAggggAACCCCAAAIIZAIE5YyDEwQQQAABBBBAAAEEEEAAgdoFCMq1rwDGjwACCCCAAAIIIIAAAgggkAkQlDMOThBAAAEEEEAAAQQQQAABBGoXICjXvgIYPwIIIIAAAggggAACCCCAQCZAUM44OEEAAQQQQAABBBBAAAEEEKhdgKBc+wpg/AgggAACCCCAAAIIIIAAApkAQTnj4AQBBBBAAAEEEEAAAQQQQKB2AYJy7SuA8SOAAAIIIIAAAggggAACCGQCBOWMgxMEEEAAAQQQQAABBBBAAIHaBQjKta8Axo8AAggggAACCCCAAAIIIJAJEJQzDk4QQAABBBBAAAEEEEAAAQRqFyAo174CGD8CCCCAAAIIIIAAAggggEAmQFDOODhBAAEEEEAAAQQQQAABBBCoXYCgXPsKYPwIIIAAAggggAACCCCAAAKZAEE54+AEAQQQQAABBBBAAAEEEECgdgGCcu0rgPEjgAACCCCAAAIIIIAAAghkAgTljIMTBBBAAAEEEEAAAQQQQACB2gUIyrWvAMaPAAIIIIAAAggggAACCCCQCRCUMw5OEEAAAQQQQAABBBBAAAEEahcgKNe+Ahg/AggggAACCCCAAAIIIIBAJkBQzjg4QQABBBBAAAEEEEAAAQQQqF3gXx8XP0o8rd5uAAAAAElFTkSuQmCC&quot; style=&quot;margin-left: auto; margin-right: auto;&quot; title=&quot;Traditional development process.&quot; width=&quot;640&quot; /&gt;&lt;/font&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;tr-caption&quot; style=&quot;text-align: center;&quot;&gt;&lt;span&gt;&lt;font face=&quot;inherit&quot;&gt;Traditional development process.&lt;/font&gt;&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1.5; margin-bottom: 0pt; margin-top: 0pt; text-align: justify;&quot;&gt;
&lt;span style=&quot;line-height: 1.5; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&lt;span style=&quot;line-height: 1.5;&quot;&gt;&lt;font face=&quot;inherit&quot;&gt;&lt;br /&gt;&lt;/font&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;line-height: 1.5; margin-bottom: 0pt; margin-top: 0pt; text-align: justify;&quot;&gt;
&lt;span style=&quot;line-height: 1.5;&quot;&gt;&lt;font face=&quot;inherit&quot;&gt;&lt;span style=&quot;line-height: 1.5; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&lt;span style=&quot;line-height: 1.5;&quot;&gt;The traditional development standard follows a broken process that is meant to fail over the long run. &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;line-height: 1.5; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;The major flaw in the traditional process is when a new change is brought in, it can be in the form of a bug-fix or a feature enhancement there is bound to be a change in the pre-existing code. Factoring in the human element of the developer, gaps in the unit testing can arise due to human error. This brings us to the infamous statement: “Fixing one bug causes (&lt;/span&gt;&lt;span style=&quot;font-style: italic; line-height: 1.5; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;N)&lt;/span&gt;&lt;span style=&quot;line-height: 1.5; vertical-align: baseline; white-space: pre-wrap;&quot;&gt; new bugs”. This constant back and forth between the different members of the team cause the team to question their own competence and approaches to problem-solving, negatively affecting the team&#39;s morale.&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;line-height: 1.5; margin-bottom: 0pt; margin-top: 0pt; text-align: justify;&quot;&gt;
&lt;span style=&quot;line-height: 1.5;&quot;&gt;&lt;span style=&quot;line-height: 1.5; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&lt;font face=&quot;inherit&quot;&gt;&lt;br /&gt;&lt;/font&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;line-height: 1.5; margin-bottom: 0pt; margin-top: 0pt; text-align: justify;&quot;&gt;
&lt;span style=&quot;line-height: 1.5;&quot;&gt;&lt;font face=&quot;inherit&quot;&gt;&lt;span style=&quot;line-height: 1.5; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;/div&gt;
&lt;h4 style=&quot;text-align: justify;&quot;&gt;
&lt;span&gt;&lt;span style=&quot;white-space: pre-wrap;&quot;&gt;&lt;font face=&quot;inherit&quot;&gt;The TDD Process&lt;/font&gt;&lt;/span&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;table align=&quot;center&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;tr-caption-container&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;tr-caption&quot; style=&quot;text-align: center;&quot;&gt;&lt;span&gt;&lt;font face=&quot;inherit&quot;&gt;&lt;br /&gt;&lt;/font&gt;&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1.5; margin-bottom: 0pt; margin-top: 0pt; text-align: justify;&quot;&gt;
&lt;span style=&quot;line-height: 1.5; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&lt;span style=&quot;line-height: 1.5;&quot;&gt;&lt;font face=&quot;inherit&quot;&gt;The General flow chart of the TDD process is:&lt;/font&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;table align=&quot;center&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;tr-caption-container&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;font face=&quot;inherit&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;204&quot; data-original-width=&quot;1030&quot; height=&quot;126&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhasngtw48Ogdyf1ddbglz1ByWIYCL4yUhPJkjYUTGQJAPxg9r3by6y_XQVW4Q-a9BLnji8V9N5LUsJk5jJ1QOHjzrIXkYkOg-J6gS0ihpjfwLU9pAev8ql2wKPCNfaFFA6Be41kwP3P2k/w640-h126/Screenshot+2020-06-14+at+12.44.26+PM.png&quot; style=&quot;margin-left: auto; margin-right: auto;&quot; width=&quot;640&quot; /&gt;&lt;/font&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;tr-caption&quot; style=&quot;text-align: center;&quot;&gt;&lt;span&gt;&lt;font face=&quot;inherit&quot;&gt;TDD Process&lt;/font&gt;&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1.5; margin-bottom: 0pt; margin-top: 0pt; text-align: justify;&quot;&gt;
&lt;span style=&quot;line-height: 1.5; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&lt;font face=&quot;inherit&quot;&gt;&lt;span style=&quot;line-height: 1.5;&quot;&gt;&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;/div&gt;
&lt;font face=&quot;inherit&quot;&gt;&lt;br /&gt;
&lt;/font&gt;&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1.5; margin-bottom: 0pt; margin-top: 0pt; text-align: justify;&quot;&gt;
&lt;span style=&quot;line-height: 1.5; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&lt;span style=&quot;line-height: 1.5;&quot;&gt;&lt;font face=&quot;inherit&quot;&gt;Derek Barber, in his &lt;a href=&quot;http://derekbarber.ca/blog/2012/03/27/why-test-driven-development/&quot; target=&quot;_blank&quot;&gt;blog&lt;/a&gt;, defines the TDD process/cycle to have 4 main steps:&lt;/font&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;ol style=&quot;line-height: 1.5; margin-bottom: 0px; margin-top: 0px;&quot;&gt;
&lt;li dir=&quot;ltr&quot; style=&quot;line-height: 1.5; list-style-type: decimal; vertical-align: baseline;&quot;&gt;&lt;div dir=&quot;ltr&quot; role=&quot;presentation&quot; style=&quot;line-height: 1.5; margin-bottom: 0pt; margin-top: 0pt; text-align: justify;&quot;&gt;
&lt;span style=&quot;line-height: 1.5; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&lt;span style=&quot;line-height: 1.5;&quot;&gt;&lt;font face=&quot;inherit&quot;&gt;Write a test&lt;/font&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li dir=&quot;ltr&quot; style=&quot;line-height: 1.5; list-style-type: decimal; vertical-align: baseline;&quot;&gt;&lt;div dir=&quot;ltr&quot; role=&quot;presentation&quot; style=&quot;line-height: 1.5; margin-bottom: 0pt; margin-top: 0pt; text-align: justify;&quot;&gt;
&lt;span style=&quot;line-height: 1.5; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&lt;span style=&quot;line-height: 1.5;&quot;&gt;&lt;font face=&quot;inherit&quot;&gt;Make it run.&lt;/font&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li dir=&quot;ltr&quot; style=&quot;line-height: 1.5; list-style-type: decimal; vertical-align: baseline;&quot;&gt;&lt;div dir=&quot;ltr&quot; role=&quot;presentation&quot; style=&quot;line-height: 1.5; margin-bottom: 0pt; margin-top: 0pt; text-align: justify;&quot;&gt;
&lt;span style=&quot;line-height: 1.5; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&lt;span style=&quot;line-height: 1.5;&quot;&gt;&lt;font face=&quot;inherit&quot;&gt;Change the code to make it right i.e. Refactor.&lt;/font&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li dir=&quot;ltr&quot; style=&quot;line-height: 1.5; list-style-type: decimal; vertical-align: baseline;&quot;&gt;&lt;div dir=&quot;ltr&quot; role=&quot;presentation&quot; style=&quot;line-height: 1.5; margin-bottom: 0pt; margin-top: 0pt; text-align: justify;&quot;&gt;
&lt;span style=&quot;line-height: 1.5; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&lt;span style=&quot;line-height: 1.5;&quot;&gt;&lt;font face=&quot;inherit&quot;&gt;Repeat process.&lt;/font&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;div style=&quot;line-height: 1.5; text-align: justify;&quot;&gt;
&lt;font face=&quot;inherit&quot;&gt;&lt;span style=&quot;line-height: 1.5;&quot;&gt;
  
 
 
  &lt;/span&gt;&lt;br /&gt;
&lt;/font&gt;&lt;div class=&quot;page&quot; title=&quot;Page 1&quot;&gt;
&lt;div class=&quot;layoutArea&quot;&gt;
&lt;div class=&quot;column&quot;&gt;
&lt;span style=&quot;line-height: 1.5;&quot;&gt;&lt;font face=&quot;inherit&quot;&gt;In TDD, a test is added and tested with the code
produced. The code is reworked until all the tests are passed.
Additional features are added one by one in an incremental
process. Additional tests are added to the testbed as and&amp;nbsp;when needed. In the traditional way, all the implementation
is completed and then test cases are designed. The code is
run through all the tests and is reworked until desired
functionality is achieved.&amp;nbsp;&lt;/font&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1.5; margin-bottom: 0pt; margin-top: 0pt; text-align: justify;&quot;&gt;&lt;span style=&quot;line-height: 1.5; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&lt;span style=&quot;line-height: 1.5;&quot;&gt;&lt;font face=&quot;inherit&quot;&gt;&lt;br /&gt;&lt;/font&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1.5; margin-bottom: 0pt; margin-top: 0pt; text-align: justify;&quot;&gt;
&lt;span style=&quot;line-height: 1.5; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&lt;span style=&quot;line-height: 1.5;&quot;&gt;&lt;font face=&quot;inherit&quot;&gt;Some clarifications about TDD:&lt;/font&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;ol style=&quot;line-height: 1.5; margin-bottom: 0px; margin-top: 0px;&quot;&gt;
&lt;li dir=&quot;ltr&quot; style=&quot;line-height: 1.5; list-style-type: decimal; vertical-align: baseline;&quot;&gt;&lt;div dir=&quot;ltr&quot; role=&quot;presentation&quot; style=&quot;line-height: 1.5; margin-bottom: 0pt; margin-top: 0pt; text-align: justify;&quot;&gt;
&lt;span style=&quot;line-height: 1.5; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&lt;span style=&quot;line-height: 1.5;&quot;&gt;&lt;font face=&quot;inherit&quot;&gt;TDD is neither about &quot;Testing&quot; nor about &quot;Design&quot;.
It is a development process. the focus is on developing good quality and clean code.&lt;/font&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li dir=&quot;ltr&quot; style=&quot;line-height: 1.5; list-style-type: decimal; vertical-align: baseline;&quot;&gt;&lt;div dir=&quot;ltr&quot; role=&quot;presentation&quot; style=&quot;line-height: 1.5; margin-bottom: 0pt; margin-top: 0pt; text-align: justify;&quot;&gt;
&lt;span style=&quot;line-height: 1.5; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&lt;span style=&quot;line-height: 1.5;&quot;&gt;&lt;font face=&quot;inherit&quot;&gt;TDD does not mean &quot;write some of the tests, then build a system that passes the tests.”
The idea is to write tests that quantify the action the block of code is intended to do.&lt;/font&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li dir=&quot;ltr&quot; style=&quot;line-height: 1.5; list-style-type: decimal; vertical-align: baseline;&quot;&gt;&lt;div dir=&quot;ltr&quot; role=&quot;presentation&quot; style=&quot;line-height: 1.5; margin-bottom: 0pt; margin-top: 0pt; text-align: justify;&quot;&gt;
&lt;span style=&quot;line-height: 1.5; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&lt;span style=&quot;line-height: 1.5;&quot;&gt;&lt;font face=&quot;inherit&quot;&gt;TDD does not mean &quot;do lots of Testing.&quot;
TDD is heavily reliant on good test cases (quality) and not on the number of test cases(quantity).&lt;/font&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;font face=&quot;inherit&quot;&gt;&lt;span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/font&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;font face=&quot;inherit&quot;&gt;&lt;span&gt;TDD is a process about Development. It is about writing quality unit tests that &lt;/span&gt;&lt;span&gt;guarantee the quality of the code that is being tested. The purpose of the entire development process is to reduce the manual overhead of rechecking everything. In subsequent posts, we&#39;ll look at some of the hurdles to adopting TDD as a process.&lt;/span&gt;&lt;/font&gt;&lt;/div&gt;
&lt;div style=&quot;line-height: 1.5; text-align: justify;&quot;&gt;
&lt;span style=&quot;line-height: 1.5;&quot;&gt;&lt;font face=&quot;inherit&quot;&gt;&lt;span style=&quot;line-height: 1.5;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;line-height: 1.5; white-space: pre-wrap;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;line-height: 1.5; text-align: justify;&quot;&gt;
&lt;span&gt;&lt;span style=&quot;white-space: pre-wrap;&quot;&gt;&lt;font face=&quot;inherit&quot;&gt;&lt;br /&gt;&lt;/font&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;font face=&quot;inherit&quot;&gt;&lt;br /&gt;&lt;/font&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;/div&gt;
</description><link>https://blog.keithfranklin.xyz/2020/07/understanding-tdd-part-1-what-is-tdd.html</link><author>noreply@blogger.com (Keith Franklin)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgC2s40-m5VTHr9D-7Ckqy3aNGFaLUECR8eXjieDUn6CgUFqJFzqDL1ipia-xeNwEHFWSL_ak2p5xiNsLgcEnDvHllBmR1NFz8d-0nbO0iyfgwsdt2GOnDsgDFLdJ2rOVwnrf2lC1RbOOY/s72-w500-h333-c/tdd-cover-800x533.png" height="72" width="72"/><thr:total>0</thr:total></item></channel></rss>