<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-1118525250065750272</id><updated>2011-07-07T16:23:23.105-07:00</updated><category term='Test method - Frameworks and libraries'/><title type='text'>Oracle PL/SQL Framework Blog</title><subtitle type='html'>All the news and comments about PL/SQL frameworks and libraries.</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://plsqlframework.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1118525250065750272/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://plsqlframework.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Alain Rigaïl</name><uri>http://www.blogger.com/profile/06081161834811497379</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://1.bp.blogspot.com/_tt5rggFQimM/SrZApz3RdnI/AAAAAAAAAAM/gmfOzTzXqkk/S220/Identite.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>4</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-1118525250065750272.post-7274982588764184571</id><published>2010-03-12T23:43:00.000-08:00</published><updated>2011-01-17T11:41:52.211-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Test method - Frameworks and libraries'/><title type='text'>Ownership and support for the test of PL/SQL Libraries</title><content type='html'>&lt;meta equiv="CONTENT-TYPE" content="text/html; charset=utf-8"&gt;&lt;title&gt;&lt;/title&gt;&lt;meta name="GENERATOR" content="OpenOffice.org 3.2  (Win32)"&gt;  &lt;p style="font-family: arial;" lang="en-US"&gt;This is the second article on the method to test and is about “Ownership and support”.  &lt;/p&gt; &lt;p style="font-family: arial;" lang="en-US"&gt;During the installation of the library or just after, when you starts to use it, you need some support. Because when you are using the creation of another people, you need to understand the structure, the goals and the ways of creating the code. In one word to take ownership of the code.&lt;/p&gt; &lt;p style="font-family: arial;" lang="en-US"&gt;The better code can be unusable without explanations. We will consider the different ways to offer support to users, on line with bugs trackers and forums and off line with the usual electronic documentation.  &lt;/p&gt; &lt;h2 style="font-family: arial; font-weight: normal;" lang="en-US"&gt;&lt;span style="font-size:100%;"&gt;&lt;i&gt;Ownership and support&lt;/i&gt;&lt;/span&gt;&lt;/h2&gt; &lt;h3 style="font-family: arial; font-weight: bold;" lang="en-US"&gt;&lt;span style="font-size:100%;"&gt;Notation&lt;/span&gt;&lt;/h3&gt; &lt;ul style="font-family: arial;"&gt;&lt;li&gt;&lt;p lang="en-US"&gt;On line help :  	&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;p lang="en-US"&gt;1 point for each communication channel&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p lang="en-US"&gt; 		1 more point if a question is answered in less than 5 working days  	&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt; &lt;/li&gt;&lt;/ul&gt;  &lt;ul style="font-family: arial;"&gt;&lt;li&gt;&lt;p lang="en-US"&gt;Off line help : documentation 	&lt;/p&gt;&lt;ul&gt;&lt;li&gt; 		0 if it is not available or does not bring nothing to the library&lt;/li&gt;&lt;li&gt;&lt;p lang="en-US"&gt; 		1 point for existing in English&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p lang="en-US"&gt; 		1 point for free format (text, OpenOffice, PDF...)&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p lang="en-US"&gt; 		1 point if the main subject is detailed in more than 3 pages&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p lang="en-US"&gt; 		1 point for examples&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p lang="en-US"&gt; 		1 point for schema.&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt; &lt;/li&gt;&lt;/ul&gt;  &lt;h3 style="font-family: arial; font-weight: bold;" lang="en-US"&gt;&lt;span style="font-size:100%;"&gt;Features to evaluate&lt;/span&gt;&lt;/h3&gt; &lt;p style="font-family: arial;" lang="en-US"&gt;The choice has been done to evaluate the documentation in another category. The only exception will be the Quick Start guide, only noted here.&lt;/p&gt;  &lt;ul style="font-family: arial;"&gt;&lt;li&gt;&lt;p lang="en-US"&gt;On line help :  	&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;p lang="en-US"&gt;Forum help : to discuss with the others users 		and the development team about the problem you have&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p lang="en-US"&gt; 		Bug Tracker : to register a bug you encountered&lt;/p&gt;&lt;p lang="en-US"&gt; 		&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt; 	&lt;/li&gt;&lt;li&gt;&lt;p lang="en-US"&gt;Off line help :  	&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;p lang="en-US"&gt;Quick start guide : how to start with the 		library and use it as quick as possible.&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt; &lt;/li&gt;&lt;/ul&gt; &lt;dl style="font-family: arial;"&gt;&lt;dt&gt;&lt;p lang="en-US"&gt;This article is quite short and allows us to 	take a rest before the main piece of the methodology : the 	development feature that we will evaluate next week.&lt;/p&gt;&lt;/dt&gt;&lt;dt&gt;&lt;p lang="en-US"&gt; 	I am waiting for your opinions and feedback about that post.&lt;/p&gt;&lt;/dt&gt;&lt;dt&gt;&lt;p lang="en-US"&gt; 	Have a nice week-end and see you next week.&lt;/p&gt;&lt;/dt&gt;&lt;dt&gt;&lt;p lang="en-US"&gt; 	&lt;br /&gt;	&lt;/p&gt;&lt;/dt&gt;&lt;dt&gt;&lt;p lang="en-US"&gt;&lt;br /&gt;	&lt;/p&gt;&lt;/dt&gt;&lt;dt&gt;&lt;p lang="en-US"&gt;&lt;br /&gt;&lt;/p&gt;&lt;/dt&gt;&lt;/dl&gt; &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1118525250065750272-7274982588764184571?l=plsqlframework.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://plsqlframework.blogspot.com/feeds/7274982588764184571/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://plsqlframework.blogspot.com/2010/03/methodology-to-test-plsql-frameworks.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1118525250065750272/posts/default/7274982588764184571'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1118525250065750272/posts/default/7274982588764184571'/><link rel='alternate' type='text/html' href='http://plsqlframework.blogspot.com/2010/03/methodology-to-test-plsql-frameworks.html' title='Ownership and support for the test of PL/SQL Libraries'/><author><name>Alain Rigaïl</name><uri>http://www.blogger.com/profile/06081161834811497379</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://1.bp.blogspot.com/_tt5rggFQimM/SrZApz3RdnI/AAAAAAAAAAM/gmfOzTzXqkk/S220/Identite.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1118525250065750272.post-5811111250796955941</id><published>2009-09-27T00:00:00.000-07:00</published><updated>2011-01-17T11:39:41.198-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Test method - Frameworks and libraries'/><title type='text'>Introduction to the test methodology for PL/SQL libraries</title><content type='html'>&lt;span style=";font-family:arial;font-size:130%;"  &gt;&lt;i&gt;Presentation of the articles series&lt;/i&gt;&lt;/span&gt; &lt;p lang="en-US"&gt;Discussing about a methodology to test PL/SQL frameworks and libraries seems too long and technical to be done in one article. So I decided to split the article in seven parts (one by category to evaluate) to give you something more digest and let you give your feedback on a limited number of subjects. You will have a weekly “pill to take” and talk about the effects.&lt;/p&gt; &lt;p lang="en-US"&gt;We start the series with this article.&lt;/p&gt; &lt;h2 style="font-weight: normal;"&gt;&lt;span style="font-family:Arial;"&gt;&lt;span style="font-size:130%;"&gt;&lt;i&gt;Introduction&lt;/i&gt;&lt;/span&gt;&lt;/span&gt;&lt;/h2&gt; &lt;dl&gt;&lt;dt&gt;&lt;p lang="en-US"&gt;Testing PL/SQL frameworks and libraries demands 	a lot of work and a method is necessary to evaluate multiple tools 	with different features and different approach of the development.&lt;/p&gt;&lt;/dt&gt;&lt;dt&gt;&lt;p lang="en-US"&gt; 	As developers, we all have different sensibilities and each people 	has to find his own comfortable path to develop. With these tests, I 	just want to highlight the strengths and weaknesses of the tools to 	let you choose which one better fits your needs with a maximum of 	information.&lt;/p&gt;&lt;/dt&gt;&lt;dt&gt;&lt;p lang="en-US"&gt; 	That is why I publish the methodology and ask you to help me to 	build the most "objective" one.&lt;/p&gt;&lt;/dt&gt;&lt;dt&gt;&lt;p lang="en-US"&gt; 	&lt;br /&gt;&lt;/p&gt;&lt;/dt&gt;&lt;/dl&gt; &lt;h2 style="font-weight: normal;"&gt;&lt;span style="font-family:Arial;"&gt;&lt;span style="font-size:130%;"&gt;&lt;i&gt;Information on frameworks and libraries&lt;/i&gt;&lt;/span&gt;&lt;/span&gt;&lt;/h2&gt; &lt;dl&gt;&lt;dt&gt;&lt;p lang="en-US"&gt;In this article I define a library as a 	collection of functions and procedures on a specific topic and a 	framework like a collection of libraries. And of course, one of the 	greatest interests of a framework is the compatibility between its 	libraries.  	&lt;/p&gt;&lt;/dt&gt;&lt;dt&gt;&lt;p lang="en-US"&gt;I will use here the word of library to indicate 	a library or a framework.&lt;/p&gt;&lt;/dt&gt;&lt;dt&gt;&lt;p lang="en-US"&gt; 	To have an overview of each library, I will provide the following 	information on each one :&lt;/p&gt;&lt;/dt&gt;&lt;/dl&gt; &lt;ul&gt;&lt;li&gt;&lt;p lang="en-US"&gt; 	Type (framework or library)&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p lang="en-US"&gt; 	Type of release (alpha, beta, production...)&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p lang="en-US"&gt; 	Version of the release&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p lang="en-US"&gt; 	Start date of the project  	&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p lang="en-US"&gt;Date of the last version&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p lang="en-US"&gt; 	Translations available&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p lang="en-US"&gt; 	Number of developers&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p lang="en-US"&gt; 	Web site&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt; &lt;dl&gt;&lt;dt&gt;&lt;p lang="en-US"&gt;when they are known.&lt;/p&gt;&lt;/dt&gt;&lt;dt&gt;&lt;p lang="en-US"&gt; 	&lt;br /&gt;&lt;/p&gt;&lt;/dt&gt;&lt;/dl&gt; &lt;h2 style="font-weight: normal;"&gt;&lt;span style="font-family:Arial;"&gt;&lt;span style="font-size:130%;"&gt;&lt;i&gt;General principles of the notation&lt;/i&gt;&lt;/span&gt;&lt;/span&gt;&lt;/h2&gt; &lt;dl&gt;&lt;dt&gt;&lt;p lang="en-US"&gt;As it is difficult to compare numerous libraries 	that does have not the same features and documentation, I will note 	all the features or documentation present in each one.  	&lt;/p&gt;&lt;/dt&gt;&lt;dt&gt;&lt;p lang="en-US"&gt;The features and documentation will be group in 	categories.&lt;/p&gt;&lt;/dt&gt;&lt;dt&gt;&lt;p lang="en-US"&gt; 	The note for each feature or documentation will be summed to give a 	note to their category.  	&lt;/p&gt;&lt;/dt&gt;&lt;dt&gt;&lt;p lang="en-US"&gt;If a feature or documentation only exists in a 	library, only this one will be noted. Others libraries will have 0 	for that feature or documentation.  	&lt;/p&gt;&lt;/dt&gt;&lt;dt&gt;&lt;p lang="en-US"&gt;It means that the notes of the categories are 	not limited, it is an open notation.&lt;/p&gt;&lt;/dt&gt;&lt;dt&gt;&lt;p lang="en-US"&gt; 	Moreover some extra points can be given in some conditions (if no 	DBA action required for example).&lt;/p&gt;&lt;/dt&gt;&lt;dt&gt;&lt;p lang="en-US"&gt; 	Anyway, a notation reference is detailed before the each evaluation 	of a category.&lt;/p&gt;&lt;/dt&gt;&lt;/dl&gt; &lt;h2 style="font-weight: normal;"&gt; &lt;span style="font-family:Arial;"&gt;&lt;span style="font-size:130%;"&gt;&lt;i&gt;The main categories to evaluate&lt;/i&gt;&lt;/span&gt;&lt;/span&gt;&lt;/h2&gt; &lt;dl&gt;&lt;dt&gt;&lt;p lang="en-US"&gt;I have identified seven categories than should 	be evaluated :&lt;/p&gt;&lt;/dt&gt;&lt;/dl&gt; &lt;ol&gt;&lt;li&gt;&lt;p lang="en-US"&gt;Install/uninstall and upgrade  	&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p lang="en-US"&gt;Ownership and support  	&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p lang="en-US"&gt;Development features  	&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p lang="en-US"&gt;Documentation  	&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p lang="en-US"&gt;Interoperability&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p lang="en-US"&gt; 	Code quality &amp;amp; architecture&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p lang="en-US"&gt; 	Performances&lt;/p&gt;&lt;/li&gt;&lt;/ol&gt; &lt;dl&gt;&lt;dt&gt;&lt;p lang="en-US"&gt;&lt;br /&gt;&lt;/p&gt;&lt;/dt&gt;&lt;/dl&gt; &lt;h2 style="font-weight: normal;"&gt;&lt;span style="font-family:Arial;"&gt;&lt;span style="font-size:130%;"&gt;&lt;i&gt;Install/Uninstall and upgrade&lt;/i&gt;&lt;/span&gt;&lt;/span&gt;&lt;/h2&gt; &lt;h3&gt;&lt;span style="font-family:Arial;"&gt;&lt;span style="font-size:100%;"&gt;Notation&lt;/span&gt;&lt;/span&gt;&lt;/h3&gt; &lt;p lang="en-US"&gt;Prerequisites :  &lt;/p&gt; &lt;ul&gt;&lt;li&gt;&lt;p lang="en-US"&gt;0 point if several prerequisites  	&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p lang="en-US"&gt;1 point if one prerequisite  	&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p lang="en-US"&gt;2 points if no prerequisite&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt; &lt;p lang="en-US"&gt;Scripts :  &lt;/p&gt; &lt;ul&gt;&lt;li&gt;&lt;p lang="en-US"&gt;0 if it does not work (&gt;15 min to use it) or 	it is not present or if the results are not reproducible&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt; &lt;ul&gt;&lt;li&gt;&lt;p lang="en-US"&gt;1 point for &gt;10 min to use it&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p lang="en-US"&gt; 	2 points for &gt;5 min and &lt;10&gt;&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p lang="en-US"&gt; 	3 points for &lt;5&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt; &lt;p lang="en-US"&gt;Bonus :   &lt;/p&gt; &lt;ul&gt;&lt;li&gt;&lt;p lang="en-US"&gt;1 more point if no DBA action is required.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p lang="en-US"&gt; 	1 more point if the number of objects created by library is less or 	equal to 10&lt;/p&gt;&lt;p lang="en-US"&gt; 	&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt; &lt;h3&gt;&lt;span style="font-family:Arial;"&gt;&lt;span style="font-size:100%;"&gt;Features to evaluate&lt;/span&gt;&lt;/span&gt;&lt;/h3&gt; &lt;ul&gt;&lt;li&gt;&lt;p lang="en-US"&gt;Installation or upgrade :  &lt;/p&gt;&lt;/li&gt;&lt;/ul&gt; &lt;ul&gt;&lt;ul&gt;&lt;li&gt;&lt;p lang="en-US"&gt;Install script : from scratch&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/ul&gt; &lt;ul&gt;&lt;ul&gt;&lt;li&gt;&lt;p lang="en-US"&gt;Upgrade script : from a previous version of the 		library&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p lang="en-US"&gt; 		Example : a script or package is given as example to verify 		immediately that the library works correctly.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p lang="en-US"&gt; 		Prerequisites : dedicated schema, administrator rights, others.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p lang="en-US"&gt; 		Number of objects installed : Packages, tables, views, sequence...&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;&lt;p lang="en-US"&gt;Uninstall :  	&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;p lang="en-US"&gt;Uninstall script : from the last version of the 		library&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p lang="en-US"&gt; 		Cleaning of the installed objects.&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt; &lt;/li&gt;&lt;/ul&gt; &lt;p&gt;&lt;br /&gt;This is the end of the first article of our serial. I am waiting for your feedback, ideas and contributions. It is up to you now !  &lt;/p&gt; &lt;p&gt;And see you next week for the second article...&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;/p&gt; &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1118525250065750272-5811111250796955941?l=plsqlframework.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://plsqlframework.blogspot.com/feeds/5811111250796955941/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://plsqlframework.blogspot.com/2009/09/methodology-to-test-plsql-frameworks.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1118525250065750272/posts/default/5811111250796955941'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1118525250065750272/posts/default/5811111250796955941'/><link rel='alternate' type='text/html' href='http://plsqlframework.blogspot.com/2009/09/methodology-to-test-plsql-frameworks.html' title='Introduction to the test methodology for PL/SQL libraries'/><author><name>Alain Rigaïl</name><uri>http://www.blogger.com/profile/06081161834811497379</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://1.bp.blogspot.com/_tt5rggFQimM/SrZApz3RdnI/AAAAAAAAAAM/gmfOzTzXqkk/S220/Identite.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1118525250065750272.post-6042506327275548581</id><published>2009-09-20T12:44:00.000-07:00</published><updated>2009-09-21T00:08:40.355-07:00</updated><title type='text'>Let us use the right tool at the right moment</title><content type='html'>&lt;dl&gt;&lt;dt&gt;&lt;u&gt;Introduction&lt;/u&gt;   &lt;/dt&gt;&lt;dt&gt;  Three months ago, we had a very interesting discussion on the  LinkedIn Oracle Pro group (see the (1) note below) about the tools  used to log, debug and instrument the PL/SQL code.   &lt;/dt&gt;&lt;dt&gt;  I initiate that discussion willing to improve the features of the  PL/SQL library I develop based on the points of view of the other  developers.   &lt;/dt&gt;&lt;dt&gt;  We had very different opinions on all the phases of the process,  from the tactic and the tools used to debug during the development,  to the ones meant to catch the errors in production and finally, the  ones destined to follow the performances of the programs.   &lt;/dt&gt;&lt;dt&gt;  &lt;br /&gt; &lt;/dt&gt;&lt;dt&gt;  Here it is a synthesis of the different exchanges and opinions:   &lt;/dt&gt;&lt;/dl&gt; &lt;ul&gt;&lt;li&gt;  First, we have to identify the different phases in a standard  project ;   &lt;/li&gt;&lt;li&gt;Then, we will able to discuss about the needs of each phase ;&lt;/li&gt;&lt;li&gt;Finally, the choice of the tools that will fit the needs will  follow logically.   &lt;/li&gt;&lt;/ul&gt; &lt;dl&gt;&lt;dt&gt;  I was also inspired by a recent article of  Steve Feuerstein  (see the (2) note below).   &lt;/dt&gt;&lt;dt&gt;  Maybe sometimes we do not agree with all he is saying, but we must  admit that he is a reference in the PL/SQL's world.   &lt;/dt&gt;&lt;dt&gt;  On my part, I am sure to have a lot to learn from him.   &lt;/dt&gt;&lt;dt&gt;  &lt;br /&gt; &lt;/dt&gt;&lt;dt&gt;  Of course, each of your projects is different and each of you as a  programer or a team you have your own habits and the knowledge of a  particular tool. Definitely, the article will not reflect  necessarily your choices.   &lt;/dt&gt;&lt;dt&gt;  Anyway, most of the time, there are several ways to solve a problem.  I hope that this could be an opportunity to make an assessment of  our practices and find ideas to improve them.   &lt;/dt&gt;&lt;dt&gt;  &lt;br /&gt; &lt;/dt&gt;&lt;dt&gt;  &lt;u&gt;Classically, what are the development phases ?&lt;/u&gt;   &lt;/dt&gt;&lt;dt&gt;  We can identify the following phases in the life cycle of a program  :   &lt;/dt&gt;&lt;/dl&gt; &lt;ul&gt;&lt;li&gt;  Development ;   &lt;/li&gt;&lt;li&gt;Tests (yes, it is always better to test the developments, even  if it is a long and complex process ;-) ) ;   &lt;/li&gt;&lt;li&gt;Pre-production (it is really more secure when you have it);&lt;/li&gt;&lt;li&gt;Production ;&lt;/li&gt;&lt;li&gt;Maintenance.   &lt;/li&gt;&lt;/ul&gt; &lt;dl&gt;&lt;dt&gt;&lt;u&gt;The Development phase&lt;/u&gt;   &lt;/dt&gt;&lt;dt&gt;  As you are just supposed to write the code, there is no particular  need for logging in that phase.   &lt;/dt&gt;&lt;dt&gt;  But you will test it...Maybe not in the same way than in the Test  phase, but you will want to be sure that the program starts when you  press [Enter].&lt;/dt&gt;&lt;dt&gt;  If for no other reasons, at least in order to keep your good  reputation.   &lt;/dt&gt;&lt;dt&gt;  &lt;br /&gt; &lt;/dt&gt;&lt;dt&gt;  At this point, we have to answer the question : what is the limit  between being sure that the program runs and testing it ?   &lt;/dt&gt;&lt;dt&gt;  I would answer that at this step, we have to assume the complete  unit tests of the procedures. Maybe we can be more focused on  testing all the cases rather than on values (if you disagree, you  can comment below ;-) ).   &lt;/dt&gt;&lt;dt&gt;  &lt;br /&gt; &lt;/dt&gt;&lt;dt&gt;  If you just want to know where the program goes,  DBMS_OUTPUT.PUT_LINE is enough. But if the program is complex, maybe  you will be bored to put your DBMS_OUTPUT.PUT_LINE statements and to  delete or to comment them at the end of development.   &lt;/dt&gt;&lt;dt&gt;  So you can use a debugger and some breakpoints to verify the  program. It is easier to do and you do not touch to the code at the  end, which is good.   &lt;/dt&gt;&lt;dt&gt;  &lt;br /&gt; &lt;/dt&gt;&lt;dt&gt;  On another side, if you want to log the activity of your program and  the errors in production, you must implement the mechanism in this  phase.   &lt;/dt&gt;&lt;dt&gt;  It means that the logging tool is already developed and reliable.   &lt;/dt&gt;&lt;dt&gt;  It also means that this tool can be another way to verify that your  program is working, but this depends on the features of your logging  library.   &lt;/dt&gt;&lt;dt&gt;  &lt;br /&gt; &lt;/dt&gt;&lt;dt&gt;  The second phase of development runs after the Tests phase, when you  have to find why the results of the tests are not as expected. And  the IDE step by step features as well as logging libraries or the  famous DBMS_OUTPUT.PUT_LINE can be good, of course, depending on the  code complexity.   &lt;/dt&gt;&lt;dt&gt;  &lt;br /&gt; &lt;/dt&gt;&lt;dt&gt;  &lt;u&gt;The Tests phase &lt;/u&gt;  &lt;/dt&gt;&lt;dt&gt;  Testing a program is a full time job. There are numerous solutions,  from manual testing (possible for short and not too complex code) to  automated testing with specialized frameworks.   &lt;/dt&gt;&lt;dt&gt;  According to Steve Feuerstein, the most recommendable are utPLSQL,  PLUTO, PL/Unit, DbFit, and Quest Code Tester for Oracle (of course).   &lt;/dt&gt;&lt;dt&gt;  For that job, the logging libraries are only interesting if you are  doing manual testing. For automatic testing, &lt;span style="font-size:130%;"&gt;it&lt;/span&gt;  must be already prepared with special features.   &lt;/dt&gt;&lt;dt&gt;  At this point, it seems difficult to choose a tool as it depends on  your code and the type of test you want to do.   &lt;/dt&gt;&lt;dt&gt;  &lt;br /&gt; &lt;/dt&gt;&lt;dt&gt;  &lt;u&gt;The Pre-production phase&lt;/u&gt;   &lt;/dt&gt;&lt;dt&gt;  In the pre-production phase, you always have access to the code and  the tables. Nevertheless, depending on your organization, maybe your  DBA does not allow you to modify anything on the server or may be  you can only modify the parameters.   &lt;/dt&gt;&lt;dt&gt;  If you are developing a program that you can start when you want,  probably you can use debuggers, and even DBMS_OUTPUT.PUT_LINE.   &lt;/dt&gt;&lt;dt&gt;  If your process is scheduled or dependent of a particular context,  it will be trickier. In that case, if you do not want to sleep next  to the server, you will need to register the results or the key  points of the process. Writing records in files (if your DBA agrees  and let you write on his server) or tables, with or without logging  library, can be a good solution.   &lt;/dt&gt;&lt;dt&gt;  &lt;br /&gt; &lt;/dt&gt;&lt;dt&gt;  &lt;u&gt;The Production phase&lt;/u&gt;   &lt;/dt&gt;&lt;dt&gt;  You will probably have three needs in this phase.   &lt;/dt&gt;&lt;/dl&gt; &lt;ul&gt;&lt;li&gt;  First, the performances. You can use TKPROF, which seems very  powerful but difficult to use. That is why, maybe, I have not met a  lot of experts of TKPROF at this moment. You also have the Oracle  logs, but it is hard to understand. And anyway, you will need your  DBA to obtain them but today he is very busy (as yesterday and  probably tomorrow). And you will not have the information for the  exact portion of the code that you want to examine.   &lt;/li&gt;&lt;li&gt;Then, the technical error management. Here, there is no miracle,  if you have set nothing in your exception section, you may have some  surprises. Not only that the process can stop, but you will also  loose the error context. I mean, you can try to examine the Oracle  logs, but the variables, records or field that were in that context  can be hard to find.&lt;/li&gt;&lt;li&gt;And finally, the functional errors. The bad news is that if  you do not set nothing in your code, the the process continues and  the Oracle logs contain nothing particular.&lt;br /&gt;And the worse thing  is that the results of the error may stay hidden for several days or  weeks, for you and your customer, so you will have no idea that  errors are encountered in the process.   &lt;/li&gt;&lt;/ul&gt; &lt;p&gt;In all these cases, you will need a logging tool connected with an error management.&lt;/p&gt; &lt;dl&gt;&lt;dt&gt;&lt;u&gt;The Maintenance phase&lt;/u&gt;   &lt;/dt&gt;&lt;dt&gt;  If you stay some months or years in a company, you will probably  have to maintain your own code.   &lt;/dt&gt;&lt;dt&gt;  It will be your punishment if you wrote poor code, or a pleasure if  you wrote a good one.   &lt;/dt&gt;&lt;dt&gt;  &lt;br /&gt; &lt;/dt&gt;&lt;dt&gt;  Saying that in writing good code, 90% of the effort comes from your  brain is perfectly true.   &lt;/dt&gt;&lt;dt&gt;  No tool will help you if your code is written against the language  and the good practices.   &lt;/dt&gt;&lt;dt&gt;  &lt;br /&gt; &lt;/dt&gt;&lt;dt&gt;  But when you work for IT services company and you have another  customer each 3 or 6 months (like me), most of the time you do not  have to maintain your code but the code of other people who preceded  you at your position. And sometimes it is not funny, especially when  the code is unclear and you have few documents on conception and/or  technical realization.   &lt;/dt&gt;&lt;dt&gt;  And do not tell me that in your company all your documentation is  always updated, I would be hurt to think that I am not lucky in my  missions ;-).   &lt;/dt&gt;&lt;dt&gt;  So you need good tools or a lot of time (sometimes both) because  brain power is not enough in that case.   &lt;/dt&gt;&lt;dt&gt;  The full range of the available tools can be employed, from  debuggers to DBMS_OUTPUT.PUT_LINE statements, and including logging  libraries to recover an understanding of the code.   &lt;/dt&gt;&lt;dt&gt;  &lt;br /&gt; &lt;/dt&gt;&lt;dt&gt;  &lt;u&gt;Conclusion&lt;/u&gt;   &lt;/dt&gt;&lt;dt&gt;  In almost every phase, you have several solutions to do your job.  But as you can see, the only one which can be used or helpful each  time is a logging tool linked to an error management.   &lt;/dt&gt;&lt;dt&gt;  That is why I developed one, under LGPL open source license, The Log  &amp;amp; DBug library (&lt;span style="font-size:85%;"&gt;&lt;a href="http://dbuglibraryora.sourceforge.net/"&gt;http://dbuglibraryora.sourceforge.net&lt;/a&gt;&lt;/span&gt;).   &lt;/dt&gt;&lt;dt&gt;  The PL/SQL Libraries and Frameworks cannot be an universal solution  because the needs are different in all companies and organizations,  and the practices of the developers are also different.   &lt;/dt&gt;&lt;dt&gt;  I know several companies where installing any code or table outside  the core business is forbidden. This means that libraries or  frameworks cannot be used.   &lt;/dt&gt;&lt;dt&gt;  So we will also need the others tools like SQL Developer, TOAD, or  DBMS_OUTPUT.PUT_LINE statements.   &lt;/dt&gt;&lt;dt&gt;  I just think that with libraries, you can win time and reliability  in your code. Also, we have to recognize that it is more efficient  and funny to be concentrate on your core business rather than on  reinventing the wheel.   &lt;/dt&gt;&lt;dt&gt;  &lt;br /&gt; &lt;/dt&gt;&lt;dt&gt;  These conclusions are just an approach on development needs and  tools, not the truth.   &lt;/dt&gt;&lt;dt&gt;  Your opinions and arguments are more than welcomed!   &lt;/dt&gt;&lt;dt&gt;  &lt;br /&gt; &lt;/dt&gt;&lt;dt&gt;  &lt;u&gt;Discussion&lt;/u&gt;   &lt;/dt&gt;&lt;dt&gt;  I have started a discussion on the forum of The Log &amp;amp; DBug  Library project on Sourceforge.net   &lt;/dt&gt;&lt;dt&gt;  that you can join at : &lt;span style="font-size:85%;"&gt;&lt;a href="http://sourceforge.net/projects/dbuglibraryora/forums/forum/961099"&gt;http://sourceforge.net/projects/dbuglibraryora/forums/forum/961099&lt;/a&gt;&lt;/span&gt;&lt;/dt&gt;&lt;dt&gt;  &lt;br /&gt; &lt;/dt&gt;&lt;dt&gt;  &lt;br /&gt; &lt;/dt&gt;&lt;dt&gt;  &lt;u&gt;Notes&lt;/u&gt;   &lt;/dt&gt;&lt;/dl&gt; &lt;ol&gt;&lt;li&gt;&lt;p&gt;  the discussion link is  &lt;span style="font-size:85%;"&gt;&lt;a href="http://www.linkedin.com/groupAnswers?viewQuestionAndAnswers=&amp;amp;gid=60191&amp;amp;discussionID=4623837&amp;amp;sik=1253278911278&amp;amp;trk=ug_qa_q&amp;amp;goback=.ana_60191_1253273449342_3_2.ana_60191_1253278911278_3_1"&gt;http://www.linkedin.com/groupAnswers?viewQuestionAndAnswers=&amp;amp;gid=60191&amp;amp;discussionID=4623837&amp;amp;sik=1253278911278&amp;amp;trk=ug_qa_q&amp;amp;goback=.ana_60191_1253273449342_3_2.ana_60191_1253278911278_3_1&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;  &lt;/li&gt;&lt;li&gt;&lt;p&gt;the article link is  &lt;span style="font-size:85%;"&gt;&lt;a href="http://www.oracle.com/technology/oramag/oracle/09-jul/o49plsql.html?goback=.ana_60191_1247036341672_3_1.nvr_60191_1247036355474_1"&gt;http://www.oracle.com/technology/oramag/oracle/09-jul/o49plsql.html?goback=.ana_60191_1247036341672_3_1.nvr_60191_1247036355474_1&lt;/a&gt;&lt;/span&gt;   &lt;/p&gt; &lt;/li&gt;&lt;/ol&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1118525250065750272-6042506327275548581?l=plsqlframework.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://plsqlframework.blogspot.com/feeds/6042506327275548581/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://plsqlframework.blogspot.com/2009/09/let-us-use-right-tool-at-right-moment.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1118525250065750272/posts/default/6042506327275548581'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1118525250065750272/posts/default/6042506327275548581'/><link rel='alternate' type='text/html' href='http://plsqlframework.blogspot.com/2009/09/let-us-use-right-tool-at-right-moment.html' title='Let us use the right tool at the right moment'/><author><name>Alain Rigaïl</name><uri>http://www.blogger.com/profile/06081161834811497379</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://1.bp.blogspot.com/_tt5rggFQimM/SrZApz3RdnI/AAAAAAAAAAM/gmfOzTzXqkk/S220/Identite.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1118525250065750272.post-8039010716247384192</id><published>2009-07-24T10:00:00.000-07:00</published><updated>2009-07-24T14:21:23.949-07:00</updated><title type='text'>Why do we need PL/SQL frameworks and libraries ?</title><content type='html'>As a PL/SQL developer in various IT services companies, I felt many times the need of more libraries to help me ; I had a few time (the project was late, what a surprise !), not a lot of tools to help me (most of the time older versions of Toad without any options) and all to invent because the organization had no written standard for PL/SQL.&lt;br /&gt;But it was difficult to find some libraries that you can use in 5 minutes and add the features you need : basically, logging and error handling. And you also need to be sure it's working well. You have enough with your bugs, you don't need the bugs from other people...&lt;br /&gt;And after logging, like a lot of people, the file management : UTL_FILE is good but anyone has a procedure to write Excel files or others formats ?&lt;br /&gt;And so on.&lt;br /&gt;&lt;br /&gt;I think that a lot of PL/SQL developers love that language but need more support to have the benefits of  reliable code that save their time and make development more pleasant.&lt;br /&gt;&lt;br /&gt;Probably sometimes we don't have all the knowing of the Oracle's features and the standard features are not the same in the different versions or Oracle ; but in fact, most of the time the features available in the standard packages does not meet all the needs or are not convenient.&lt;br /&gt;And that's why we need frameworks and libraries.&lt;br /&gt;It is not an universal answer to the PL/SQL developers needs but it is a good help.&lt;br /&gt;That's why I decided to compile all the code I wrote during several year in &lt;a href="http://dbuglibraryora.sourceforge.net/"&gt;The Log &amp;amp; DBug library&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;But to go further, I think it's interesting to examine all the libraries and frameworks available on the net to see what part of each can be usable for us. I will do these tests it in the next months and share the results with you.&lt;br /&gt;And on my part, I will do my best to integrated your feedback and needs to assure the evolution of my library.&lt;br /&gt;&lt;br /&gt;In my next post, I will use the result of a very interesting &lt;a href="http://www.linkedin.com/groupAnswers?viewQuestionAndAnswers=&amp;amp;gid=60191&amp;amp;discussionID=4623837&amp;amp;sik=1248468888625&amp;amp;trk=ug_qa_q&amp;amp;goback=.ana_60191_1248468888625_3_1"&gt;discussion&lt;/a&gt; we have on a the Oracle Pro group on LinkedIn to try to distinguish what are the tools needed according to the development phase the context and the organization.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1118525250065750272-8039010716247384192?l=plsqlframework.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://plsqlframework.blogspot.com/feeds/8039010716247384192/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://plsqlframework.blogspot.com/2009/07/why-do-we-need-plsql-frameworks-and.html#comment-form' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1118525250065750272/posts/default/8039010716247384192'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1118525250065750272/posts/default/8039010716247384192'/><link rel='alternate' type='text/html' href='http://plsqlframework.blogspot.com/2009/07/why-do-we-need-plsql-frameworks-and.html' title='Why do we need PL/SQL frameworks and libraries ?'/><author><name>Alain Rigaïl</name><uri>http://www.blogger.com/profile/06081161834811497379</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://1.bp.blogspot.com/_tt5rggFQimM/SrZApz3RdnI/AAAAAAAAAAM/gmfOzTzXqkk/S220/Identite.jpg'/></author><thr:total>5</thr:total></entry></feed>
