<?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-4576882180671232399</id><updated>2011-04-21T17:29:42.534-07:00</updated><category term='software quality'/><category term='pragmatic approach'/><category term='dataflow'/><category term='c/c++'/><category term='quality measurement'/><category term='static analysis'/><category term='memory management'/><category term='software defect reduction'/><category term='programming'/><category term='coding standards'/><category term='memory corruption'/><category term='definition'/><category term='memory tracking'/><category term='configuration management'/><category term='quality metrics'/><category term='software development'/><category term='software quality landscape'/><category term='dynamic analysis'/><category term='application crash'/><category term='infrastructure'/><category term='memory debugging'/><category term='resource management'/><category term='project constraints'/><category term='root cause analysis'/><category term='peer review'/><category term='unit testing'/><category term='maintenance'/><category term='project management'/><category term='code'/><category term='automation'/><category term='requirements management'/><category term='roi'/><category term='runtime error'/><category term='test management'/><category term='memory leak'/><title type='text'>On Software Quality</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://onsoftwarequality.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4576882180671232399/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://onsoftwarequality.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Leszek Slonczynski</name><uri>http://www.blogger.com/profile/02143787248928790394</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://2.bp.blogspot.com/_ZuehATZHWIE/SUoO4ZD8HcI/AAAAAAAAAA0/KBCE4IAXeDQ/S220/ja_foto.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>27</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-4576882180671232399.post-7924766164105629606</id><published>2009-02-16T00:32:00.000-08:00</published><updated>2009-02-16T00:49:36.075-08:00</updated><title type='text'>XML Orientation Tutorial</title><content type='html'>following are fragments from my article - available also at  &lt;a href="http://www.assistars.com/"&gt;http://www.assistars.com&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;h4&gt;XML is a Markup Language.&lt;/h4&gt; &lt;p&gt; &lt;/p&gt; &lt;p&gt;XML stands for eXtensible Markup Language. If you've read through any HTML page source you probably know what markup language is about. If not read on - we will explain. Imagine plain text document - it is built from words, sentences, paragraphs, chapters. Now, if you would like to print this document and for example make some parts stand out from the rest of the text (by bolding them for example) - you need to provide printer with information to do so. The simplest and most effective way to achieve that is to put some special markers into the text (themselves being text of special meaning) which will not be printed out but will indicate printer to switch mode and print fonts with increased weight. Such 'tags' form a markup language. HTML was developed that way to enable annotating text presented on the web page with some formatting/presentation instructions. The very same idea is one of the foundation stones for XML.&lt;/p&gt; &lt;p&gt; &lt;/p&gt; &lt;p&gt;There is more general pattern here: XML was built based on the ideas from HTML (as it was well tested and widely adopted format) but with different objective in mind: instead of using tags to provide information on how to display the data, let's use them to represent logical structure of the data.&lt;/p&gt; &lt;p&gt; &lt;/p&gt; &lt;p&gt;Let's take a look at the example of XML:&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&amp;lt;contact&amp;gt;&lt;br /&gt;  &amp;lt;firstname&amp;gt;John&amp;lt;/firstname&amp;gt;&lt;br /&gt;  &amp;lt;surname&amp;gt;Doe&amp;lt;/surname&amp;gt;&lt;br /&gt;  &amp;lt;email&amp;gt;John.Doe@assistars.com&amp;lt;/email&amp;gt;&lt;br /&gt;  &amp;lt;phone country="UK"&amp;gt;020 1234 4321&amp;lt;/phone&amp;gt;&lt;br /&gt;&amp;lt;/contact&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;First thing you may notice is that you understand the document from just reading it, it is pretty self-descriptive, the names of the tags suggest how content should be interpreted.&lt;/p&gt;  &lt;p&gt; &lt;/p&gt;&lt;p&gt;After brief reading of the example you may notice the following:&lt;/p&gt; &lt;p&gt;- tags are defined using '&lt;' and '&gt;' brackets like for example '&lt;contact&gt;' (similarly to notation used in HTML)&lt;/contact&gt;&lt;/p&gt; &lt;p&gt;- for each tag we have corresponding 'closing' tag which is used to mark the end of specific element (by using '/' preceding the tag name) like for example ''&lt;/p&gt; &lt;p&gt;- elements of the document define tree-like structure (tags are nested) which allow to easily represent part-to-whole relationships among data. For example '&lt;firstname&gt;' is a part of '&lt;contact&gt;' etc.&lt;/contact&gt;&lt;/firstname&gt;&lt;/p&gt; &lt;p&gt;- by the names chosen for tags we can deduce that there are no limitations to how tags are being named&lt;/p&gt; &lt;p&gt; &lt;/p&gt; &lt;p&gt;which leads us to next very important important characteristic:&lt;/p&gt; &lt;p&gt; &lt;/p&gt; &lt;h4&gt;XML is eXtensible.&lt;/h4&gt;   &lt;p&gt;There is no limits to the kind of information XML document will represent, and how it would represent it. It is your freedom (and responsibility) to invent your own tags and how to decompose your data into hierarchical structure. That's because you will be the one reading and interpreting it. Why it was impossible for HTML in which all tags are defined by the format? Because HTML had to be understood by general purpose browsers. With XML as long all intended data readers agree on format sky is the limit.&lt;br /&gt;&lt;/p&gt; &lt;h4&gt;XML - the purpose. &lt;/h4&gt;   &lt;p&gt;The main purposes for XML is data storing and exchange.&lt;br /&gt;&lt;/p&gt; &lt;p&gt;Following characteristics made it very good for this task:&lt;/p&gt; &lt;p&gt;- XML is flexible - you can model pretty much anything you can think of, tree structures are powerful models for data representations (vide folders structure on the disk, hyperlink structures on the websites)&lt;/p&gt; &lt;p&gt;- XML is extensible - you can evolve your models as you gather or require additional data&lt;/p&gt; &lt;p&gt;- XML is text - as it is defined as plain text - there is no platform specific element to it - document is completely platform independent&lt;/p&gt; &lt;p&gt;- XML is human readable - you can understand it from reading it&lt;/p&gt;  &lt;p&gt;- XML is simple - you understand the concept right away&lt;br /&gt;&lt;/p&gt; &lt;p&gt;And that's why this format was so widely accepted and adopted and made it to the standard.&lt;/p&gt;  &lt;h4&gt;XML - what it is and what it isn't.&lt;br /&gt;&lt;/h4&gt;  &lt;p&gt;It is important to take XML for what it is: a file format which accomodates hierarchical structure of data using tags to represent logical dependencies and meaning of the data. Nothing more. There is such a buzz around XML that people tend to take it for something more. XML itself is just a file format. Period.&lt;/p&gt;  &lt;p&gt;Very powerful because of its simplicity.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4576882180671232399-7924766164105629606?l=onsoftwarequality.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://onsoftwarequality.blogspot.com/feeds/7924766164105629606/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4576882180671232399&amp;postID=7924766164105629606' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4576882180671232399/posts/default/7924766164105629606'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4576882180671232399/posts/default/7924766164105629606'/><link rel='alternate' type='text/html' href='http://onsoftwarequality.blogspot.com/2009/02/xml-orientation-tutorial.html' title='XML Orientation Tutorial'/><author><name>Leszek Slonczynski</name><uri>http://www.blogger.com/profile/02143787248928790394</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://2.bp.blogspot.com/_ZuehATZHWIE/SUoO4ZD8HcI/AAAAAAAAAA0/KBCE4IAXeDQ/S220/ja_foto.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4576882180671232399.post-6720799726876648658</id><published>2009-01-06T22:34:00.000-08:00</published><updated>2009-01-06T23:03:33.263-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='resource management'/><category scheme='http://www.blogger.com/atom/ns#' term='software development'/><category scheme='http://www.blogger.com/atom/ns#' term='project constraints'/><category scheme='http://www.blogger.com/atom/ns#' term='project management'/><title type='text'>Project Management - you can't go into many directions at the same time</title><content type='html'>One of the most important things in managing your project is to have a clear vision on what is it you want to deliver. Of course we all want to deliver maximum features with very low defect ratios, within 6 months time frame. I have news for you this is usually not possible. Those are interdependent and usually investing in one of the constraints costs you neglecting another. You will be making priority decisions throughout the project, so why not to get clear on what are them at the beginning. That would also give your team a clarity on what is important to the project and how to act when they would have to make priority decision themselves. So keep everybody in sync by providing priorities in advance.&lt;br /&gt;&lt;br /&gt;As it always come to comparing two (sometimes more) project characteristics when you are supposed to make a decision I would recommend to write down an order of priority list which has the most important characteristic on top and then descend to less important characteristics.&lt;br /&gt;&lt;br /&gt;So for example if you are targeting visionaries with new innovative project you know that you have to generate a specific minimal features set, release it as soon as possible, and think about quality later. You can reflect it in your list. That means that if your defect levels are high but you still don't have complete feature set you will devote your time to implementing features and not improving quality. Second important thing is to define what are the must-haves from the list - things which have to be accomplished for the project to be successful.&lt;br /&gt;&lt;br /&gt;Now, make sure you are on the same page with your sponsors and potential customers as otherwise you are heading for disaster. You must be sure that list reflects priorities of people who fund the project. Talk to the sponsors and get them to choose what's the most important by simply asking them. If they don't want to choose as they want 'perfect quality, full feature set, 6 months, 4 people team' ask questions which will mimic decision you will have to make: "let's say it's a month and we still don't have full feature set and quality is low, shall we focus on quality or on features? Or maybe delay the release?". Do whatever you can to get it out from your sponsor. If you can't make the decision yourself (in advance) and get sponsor to agree, sign off on it. Without that project will be dead on arrival - overconstrained projects rarely are harder to deliver they usually are impossible to deliver. Unless you are Chuck Norris of course.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4576882180671232399-6720799726876648658?l=onsoftwarequality.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://onsoftwarequality.blogspot.com/feeds/6720799726876648658/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4576882180671232399&amp;postID=6720799726876648658' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4576882180671232399/posts/default/6720799726876648658'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4576882180671232399/posts/default/6720799726876648658'/><link rel='alternate' type='text/html' href='http://onsoftwarequality.blogspot.com/2009/01/project-management-you-cant-go-into.html' title='Project Management - you can&apos;t go into many directions at the same time'/><author><name>Leszek Slonczynski</name><uri>http://www.blogger.com/profile/02143787248928790394</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://2.bp.blogspot.com/_ZuehATZHWIE/SUoO4ZD8HcI/AAAAAAAAAA0/KBCE4IAXeDQ/S220/ja_foto.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4576882180671232399.post-8641842630246981116</id><published>2009-01-03T09:30:00.000-08:00</published><updated>2009-01-03T09:33:00.591-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='software development'/><category scheme='http://www.blogger.com/atom/ns#' term='project management'/><category scheme='http://www.blogger.com/atom/ns#' term='programming'/><title type='text'>How to develop software faster</title><content type='html'>Nice article on how to develop software faster: &lt;a href="http://www.informit.com/articles/article.aspx?p=446797"&gt;here&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4576882180671232399-8641842630246981116?l=onsoftwarequality.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://onsoftwarequality.blogspot.com/feeds/8641842630246981116/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4576882180671232399&amp;postID=8641842630246981116' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4576882180671232399/posts/default/8641842630246981116'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4576882180671232399/posts/default/8641842630246981116'/><link rel='alternate' type='text/html' href='http://onsoftwarequality.blogspot.com/2009/01/how-to-develop-software-faster.html' title='How to develop software faster'/><author><name>Leszek Slonczynski</name><uri>http://www.blogger.com/profile/02143787248928790394</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://2.bp.blogspot.com/_ZuehATZHWIE/SUoO4ZD8HcI/AAAAAAAAAA0/KBCE4IAXeDQ/S220/ja_foto.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4576882180671232399.post-2126295524698470513</id><published>2009-01-01T06:41:00.000-08:00</published><updated>2009-01-01T09:28:58.401-08:00</updated><title type='text'>Project Management Tips - Value Your Time</title><content type='html'>Tip: start be aware of where you spend your and your team time. Spend it wisely.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Steps to get there:&lt;br /&gt;&lt;br /&gt;1. Once you reach the office, sit and don't start your machine for 10 minutes. Just sit there. Be careful with that - you may panic first few days. It's important you do nothing these 10 minutes. During this time you can think on what you would like to accomplish this day. Now for the scary part - before you get your emails.&lt;br /&gt;&lt;br /&gt;2. Imagine time as a physical resource (imagine unit representative). Every time you are planning to spend some of it imagine how much of units you need to take from the heap of all units you have to complete the project and ask yourself: is it worth it? If it is then go for it. If it's not forget about it.&lt;br /&gt;&lt;br /&gt;If you want to call the whole team (8 people) 2 hours meeting to discuss which variant of user interface workflow for some scenario would be better think again. Be creative in finding ways to make this decision at lower cost than two man days. Toss a coin for example.&lt;br /&gt;&lt;br /&gt;3. Don't write elaborate emails. They look nice, but you have to pay a lot of time to write them, and then your recipients pay time to read them. Straight to the point is a good approach. People know you are smart anyway.&lt;br /&gt;&lt;br /&gt;4. Don't answer your emails. Or less extreme version don't answer your emails right away. If you don't - problems magically tend to resolve themselves even without your attention. Don't worry if they don't you will be reminded about them. Extra benefit here: you minimize the risk of becoming your company's google search replacement.&lt;br /&gt;&lt;br /&gt;5. Make sure that you open your mail program only once, twice a day - every 4 hours or so. Spend time with it, caress it for an hour or so, and then close it and start doing a real work. Limit your time spent with it to an hour, two hours a day. With that in mind your mails will be much more efficient.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4576882180671232399-2126295524698470513?l=onsoftwarequality.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://onsoftwarequality.blogspot.com/feeds/2126295524698470513/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4576882180671232399&amp;postID=2126295524698470513' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4576882180671232399/posts/default/2126295524698470513'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4576882180671232399/posts/default/2126295524698470513'/><link rel='alternate' type='text/html' href='http://onsoftwarequality.blogspot.com/2009/01/project-management-tips-value-your-time.html' title='Project Management Tips - Value Your Time'/><author><name>Leszek Slonczynski</name><uri>http://www.blogger.com/profile/02143787248928790394</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://2.bp.blogspot.com/_ZuehATZHWIE/SUoO4ZD8HcI/AAAAAAAAAA0/KBCE4IAXeDQ/S220/ja_foto.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4576882180671232399.post-2774293670186910347</id><published>2009-01-01T05:57:00.000-08:00</published><updated>2009-01-01T06:07:44.367-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='software quality'/><category scheme='http://www.blogger.com/atom/ns#' term='software defect reduction'/><category scheme='http://www.blogger.com/atom/ns#' term='software development'/><category scheme='http://www.blogger.com/atom/ns#' term='peer review'/><title type='text'>Software Defect Reduction Top 10 List</title><content type='html'>I've just found interesting article on statistics behind defect reduction by Barry Boehm and Victor Basili: &lt;a href="http://www.cs.umd.edu/projects/SoftEng/ESEG/papers/82.78.pdf"&gt;here&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;According to the article top ten defect reduction list is the following (I'm citing the article):&lt;br /&gt;&lt;ol&gt;&lt;br /&gt;&lt;li&gt;Finding and fixing a software problem&lt;br /&gt;after delivery is often 100 times more&lt;br /&gt;expensive than finding and fixing it during&lt;br /&gt;the requirements and design phase.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Current software projects spend about&lt;br /&gt;40 to 50 percent of their effort on avoidable&lt;br /&gt;rework.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;About 80 percent of avoidable rework&lt;br /&gt;comes from 20 percent of the defects.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;About 80 percent of the defects come&lt;br /&gt;from 20 percent of the modules, and&lt;br /&gt;about half the modules are defect free.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;About 90 percent of the downtime&lt;br /&gt;comes from, at most, 10 percent of the&lt;br /&gt;defects.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Peer reviews catch 60 percent of the&lt;br /&gt;defects.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Perspective-based reviews catch 35&lt;br /&gt;percent more defects than nondirected&lt;br /&gt;reviews.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Disciplined personal practices can&lt;br /&gt;reduce defect introduction rates by up to&lt;br /&gt;75 percent.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;All other things being equal, it costs 50&lt;br /&gt;percent more per source instruction to&lt;br /&gt;develop high-dependability software&lt;br /&gt;products than to develop low-dependability&lt;br /&gt;software products. However, the&lt;br /&gt;investment is more than worth it if the&lt;br /&gt;project involves significant operations&lt;br /&gt;and maintenance costs.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;About 40 to 50 percent of user programs&lt;br /&gt;contain nontrivial defects.&lt;/li&gt;&lt;br /&gt;&lt;/ol&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4576882180671232399-2774293670186910347?l=onsoftwarequality.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://onsoftwarequality.blogspot.com/feeds/2774293670186910347/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4576882180671232399&amp;postID=2774293670186910347' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4576882180671232399/posts/default/2774293670186910347'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4576882180671232399/posts/default/2774293670186910347'/><link rel='alternate' type='text/html' href='http://onsoftwarequality.blogspot.com/2009/01/software-defect-reduction-top-10-list.html' title='Software Defect Reduction Top 10 List'/><author><name>Leszek Slonczynski</name><uri>http://www.blogger.com/profile/02143787248928790394</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://2.bp.blogspot.com/_ZuehATZHWIE/SUoO4ZD8HcI/AAAAAAAAAA0/KBCE4IAXeDQ/S220/ja_foto.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4576882180671232399.post-5863145883162080524</id><published>2009-01-01T02:09:00.000-08:00</published><updated>2009-01-01T06:06:14.224-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='software quality'/><category scheme='http://www.blogger.com/atom/ns#' term='software quality landscape'/><category scheme='http://www.blogger.com/atom/ns#' term='definition'/><title type='text'>Software Quality Definition Revisited - Domain Landscape</title><content type='html'>&lt;p&gt;Happy Year 2009 to everybody. &lt;br /&gt;&lt;br /&gt;&lt;p&gt;As new is coming I decided to add something new - a bit more structured to the blog. I will try to describe my understanding on what is on software quality map and where it fits. I will be tagging this thread with 'software quality landscape' tag&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;As described in my post ealier (&lt;a href="http://onsoftwarequality.blogspot.com/2008/11/attempts-to-define-quality.html"&gt;here&lt;/a&gt;) Following are the software quality characteristics:&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;External characteristics:&lt;br /&gt;&lt;ol&gt;&lt;br /&gt;&lt;li&gt; Correctness - does software do correctly what it is supposed to?&lt;/li&gt;&lt;br /&gt;&lt;li&gt; Usability - is software intuitive and easy to learn and operate?&lt;/li&gt;&lt;br /&gt;&lt;li&gt; Reliability - is software working correctly when fed with correct inputs/environment condititions?&lt;/li&gt;&lt;br /&gt;&lt;li&gt; Performance - is software working within acceptable resource limits/response times?&lt;/li&gt;&lt;br /&gt;&lt;li&gt; Security - is software immune to attacks, does it protect data fed to it?&lt;br /&gt;Robustness - how well software behaves when fed with incorrect inputs/environment conditions?&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Scalability - will software behave correctly and efficiently when fed with significantly increased volume of data&lt;/li&gt;&lt;br /&gt;&lt;/ol&gt;&lt;br /&gt;&lt;br /&gt;Internal characteristics:&lt;br /&gt;&lt;ol&gt;&lt;br /&gt;&lt;li&gt;Maintainability - is software easy to maintain?&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Reusability - are software parts easy to reuse when developing another software which needs similar functionalities?&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Portability - how easy it is to port software to other environments to the ones for which it was developed?&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Extendability - how easy it is to add new features?&lt;/li&gt;&lt;br /&gt;&lt;/ol&gt;&lt;br /&gt;&lt;br /&gt;I will discuss all those in greater detail in subsequent posts in this thread ('software quality landscape').&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4576882180671232399-5863145883162080524?l=onsoftwarequality.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://onsoftwarequality.blogspot.com/feeds/5863145883162080524/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4576882180671232399&amp;postID=5863145883162080524' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4576882180671232399/posts/default/5863145883162080524'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4576882180671232399/posts/default/5863145883162080524'/><link rel='alternate' type='text/html' href='http://onsoftwarequality.blogspot.com/2009/01/software-quality-components.html' title='Software Quality Definition Revisited - Domain Landscape'/><author><name>Leszek Slonczynski</name><uri>http://www.blogger.com/profile/02143787248928790394</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://2.bp.blogspot.com/_ZuehATZHWIE/SUoO4ZD8HcI/AAAAAAAAAA0/KBCE4IAXeDQ/S220/ja_foto.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4576882180671232399.post-6896252587529248155</id><published>2008-12-30T02:40:00.000-08:00</published><updated>2008-12-31T01:08:17.823-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='software quality'/><category scheme='http://www.blogger.com/atom/ns#' term='runtime error'/><category scheme='http://www.blogger.com/atom/ns#' term='memory leak'/><category scheme='http://www.blogger.com/atom/ns#' term='memory debugging'/><category scheme='http://www.blogger.com/atom/ns#' term='memory corruption'/><title type='text'>C/C++ memory management - programs insanities listed</title><content type='html'>This is a continuation of my entry from several days ago &lt;a href="http://onsoftwarequality.blogspot.com/2008/12/cc-language-for.html"&gt;view&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;There are different kinds of memory related issues, which usually lead to raise of a runtime error. Let's try to define categories of those:&lt;br /&gt;- memory leaks - memory is being allocated and not freed, program 'grows' in context of memory usage somewhat proportionally to the time of execution, usually leads for program to become unresponsive over time. It is quite difficult to diagnose without having memory debugging monitors at your disposal.&lt;br /&gt;- dereferencing nulls - we try to access memory behind the pointer which wasn't yet allocated - leads to access violation runtime error right away. Fortunately this one is fairly easy to diagnose as the cause is very close to the symptom.&lt;br /&gt;- memory corruption - in our program memory there is a region which doesn't contain data we expect it does - it can be either because memory was never initialized, or because there was writing out of bounds situation on the neighboring memory region. Program now contains a 'mine' - as soon as we foot on it (by reading from corrupted memory region) we will get incorrect data fed to our program datasystem and it will start behaving inconsistently. Usually leads to runtime crash error, preceded by some strange and nondeterministic behavior in areas directly or indirectly dependent on data read from corrupted memory error. Like for the first category memory debuggers come handy here as well.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4576882180671232399-6896252587529248155?l=onsoftwarequality.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://onsoftwarequality.blogspot.com/feeds/6896252587529248155/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4576882180671232399&amp;postID=6896252587529248155' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4576882180671232399/posts/default/6896252587529248155'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4576882180671232399/posts/default/6896252587529248155'/><link rel='alternate' type='text/html' href='http://onsoftwarequality.blogspot.com/2008/12/cc-memory-management-programs.html' title='C/C++ memory management - programs insanities listed'/><author><name>Leszek Slonczynski</name><uri>http://www.blogger.com/profile/02143787248928790394</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://2.bp.blogspot.com/_ZuehATZHWIE/SUoO4ZD8HcI/AAAAAAAAAA0/KBCE4IAXeDQ/S220/ja_foto.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4576882180671232399.post-2762366946521601043</id><published>2008-12-28T03:31:00.000-08:00</published><updated>2008-12-28T03:34:47.882-08:00</updated><title type='text'>Very interesting website for people in software testing business</title><content type='html'>I would like to recommend a website I've just found: &lt;a href="http://www.riceconsulting.com/"&gt;Randy Rice's Software Testing Site - A Resource for Software Testing Training and Consulting&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;It has a lot of valuable content software testing and QA professionals could benefit from.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4576882180671232399-2762366946521601043?l=onsoftwarequality.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://onsoftwarequality.blogspot.com/feeds/2762366946521601043/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4576882180671232399&amp;postID=2762366946521601043' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4576882180671232399/posts/default/2762366946521601043'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4576882180671232399/posts/default/2762366946521601043'/><link rel='alternate' type='text/html' href='http://onsoftwarequality.blogspot.com/2008/12/very-interesting-website-for-people-in.html' title='Very interesting website for people in software testing business'/><author><name>Leszek Slonczynski</name><uri>http://www.blogger.com/profile/02143787248928790394</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://2.bp.blogspot.com/_ZuehATZHWIE/SUoO4ZD8HcI/AAAAAAAAAA0/KBCE4IAXeDQ/S220/ja_foto.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4576882180671232399.post-2962447028141661322</id><published>2008-12-27T00:58:00.000-08:00</published><updated>2008-12-27T01:00:32.875-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='software development'/><category scheme='http://www.blogger.com/atom/ns#' term='roi'/><title type='text'>Software Economics</title><content type='html'>I found interesting entry on stackoverflow.com which lists resources for Software Economics (not only Barry Boehm book).&lt;br /&gt;&lt;br /&gt;Check it out: &lt;a href="http://stackoverflow.com/questions/394719/economics-of-software-development"&gt;Economics of Software Development&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4576882180671232399-2962447028141661322?l=onsoftwarequality.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://onsoftwarequality.blogspot.com/feeds/2962447028141661322/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4576882180671232399&amp;postID=2962447028141661322' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4576882180671232399/posts/default/2962447028141661322'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4576882180671232399/posts/default/2962447028141661322'/><link rel='alternate' type='text/html' href='http://onsoftwarequality.blogspot.com/2008/12/software-economics.html' title='Software Economics'/><author><name>Leszek Slonczynski</name><uri>http://www.blogger.com/profile/02143787248928790394</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://2.bp.blogspot.com/_ZuehATZHWIE/SUoO4ZD8HcI/AAAAAAAAAA0/KBCE4IAXeDQ/S220/ja_foto.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4576882180671232399.post-5751893612079853098</id><published>2008-12-24T03:58:00.001-08:00</published><updated>2008-12-30T03:08:49.783-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='software quality'/><category scheme='http://www.blogger.com/atom/ns#' term='runtime error'/><category scheme='http://www.blogger.com/atom/ns#' term='memory leak'/><category scheme='http://www.blogger.com/atom/ns#' term='memory tracking'/><category scheme='http://www.blogger.com/atom/ns#' term='c/c++'/><category scheme='http://www.blogger.com/atom/ns#' term='memory management'/><category scheme='http://www.blogger.com/atom/ns#' term='application crash'/><category scheme='http://www.blogger.com/atom/ns#' term='memory corruption'/><title type='text'>C/C++ memory management - responsibility which comes with power</title><content type='html'>When Java popped up - designed as improvement of prevalent back then C/C++ family - we didn't have to wait long for announcements of soon-to-be-seen death of C family. Java offered platform portability, internal memory management and got rid of templates which were somewhat enough complicated construct for many developers to get lost there completely and avoid them at any cost. Java being wonderful language I still felt a bit connected with the last language trying to get as close to the processor and memory as possible. Luckily people started embedding software into nearly everything and virtual machine and garbage collection costs were easily translatable into cents and dollars per device and C and C++ didn't go away. I could still put in CV that I speak 'the last language for adults' and hope to get more from it than just indication of how old I have to be.&lt;br /&gt;&lt;br /&gt;But then with being treated by compiler as an adult comes responsibility, you have to manage things which otherwise your JVM parent would manage for you. If you act like a child your applications will be crashing in the middle of documents creation, will behave in a non-deterministic fashion, will slow down and potentially make the whole operating system unresponsive.&lt;br /&gt;&lt;br /&gt;For anybody who developed something in C or C++ it is probably obvious already that all those symptoms usually means: incorrect memory/resource managament in C/C++. Memory is not being freed or is double-freed, is not allocated or not initialized before reading, the writing to it goes out of bonds.&lt;br /&gt;&lt;br /&gt;If we are lucky the application crashes right away (with access violation indication), unfortunately in most of the cases the 'patient is starting to show symptoms long after (in instructions time) the initial infection'. That leads quite often to great deal of frustration as the causes are very difficult to trace back.&lt;br /&gt;&lt;br /&gt;To be continued...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4576882180671232399-5751893612079853098?l=onsoftwarequality.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://onsoftwarequality.blogspot.com/feeds/5751893612079853098/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4576882180671232399&amp;postID=5751893612079853098' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4576882180671232399/posts/default/5751893612079853098'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4576882180671232399/posts/default/5751893612079853098'/><link rel='alternate' type='text/html' href='http://onsoftwarequality.blogspot.com/2008/12/cc-language-for.html' title='C/C++ memory management - responsibility which comes with power'/><author><name>Leszek Slonczynski</name><uri>http://www.blogger.com/profile/02143787248928790394</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://2.bp.blogspot.com/_ZuehATZHWIE/SUoO4ZD8HcI/AAAAAAAAAA0/KBCE4IAXeDQ/S220/ja_foto.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4576882180671232399.post-6579801781822688278</id><published>2008-12-23T12:23:00.000-08:00</published><updated>2008-12-23T12:53:25.401-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='software quality'/><category scheme='http://www.blogger.com/atom/ns#' term='quality metrics'/><category scheme='http://www.blogger.com/atom/ns#' term='test management'/><category scheme='http://www.blogger.com/atom/ns#' term='quality measurement'/><title type='text'>Test Management - what makes you good at it?</title><content type='html'>So you are a test manager and you are not sure whether you are good at it?&lt;br /&gt;&lt;br /&gt;Let's think on it. First of all what is it your employer expects you to do - that's quite simple - lead the team of testers and realize some testing strategy (which usually is defined simply: 'find maximum defects possible' or 'assess product overall quality').&lt;br /&gt;&lt;br /&gt;So first you better be good with people and disciplined enough to stick to some sensible process of testing (which you can create yourself). If you want to have reasonable process of testing you should approach the task in structured and measurable manner (you need to make sure that you tested everything and you need to be able to provide some interpretation of the results). This is where test strategy, test plan etc come handy. As you proceed into testing you should be generalizing observations, figuring out theories on symptoms, and actively building metrics and measurements which explain in the quantified way software condition.&lt;br /&gt;&lt;br /&gt;Next important thing is you better be thick-skinned. You will have to fight with the development team to get software to test on time, developers will not be happy that you found another application crashing input combination, or 'break their deadline' by rejecting the product after simple acceptance testing. Rationally everybody knows that messenger who brings bad news is just a messenger, but nobody likes him anyway. Your goals are somehow opposite to those of development manager (she is supposed to make application work and you are supposed to break the application (yes, yes I know - just to show it was broken in the first place)), so it's easy to get into conflicts. If you have this cool need to pleasure everybody this is not the job for you.&lt;br /&gt;&lt;br /&gt;And finally you should be a mega-tester - so the more the hacking attitude the better (after all it takes a lot of skills to act like a monkey at the computer). You will need all features future users of the product would have: non-biased thinking, creativity on how to move against intuition, creative way to stress application etc.&lt;br /&gt;&lt;br /&gt;If you have these skills I believe you are on the good way to break many application before they get broken after they leave your shop. Good luck.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4576882180671232399-6579801781822688278?l=onsoftwarequality.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://onsoftwarequality.blogspot.com/feeds/6579801781822688278/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4576882180671232399&amp;postID=6579801781822688278' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4576882180671232399/posts/default/6579801781822688278'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4576882180671232399/posts/default/6579801781822688278'/><link rel='alternate' type='text/html' href='http://onsoftwarequality.blogspot.com/2008/12/test-management-what-makes-you-good-at.html' title='Test Management - what makes you good at it?'/><author><name>Leszek Slonczynski</name><uri>http://www.blogger.com/profile/02143787248928790394</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://2.bp.blogspot.com/_ZuehATZHWIE/SUoO4ZD8HcI/AAAAAAAAAA0/KBCE4IAXeDQ/S220/ja_foto.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4576882180671232399.post-1030198788708288315</id><published>2008-12-22T05:38:00.000-08:00</published><updated>2008-12-22T05:42:07.610-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='software quality'/><category scheme='http://www.blogger.com/atom/ns#' term='root cause analysis'/><title type='text'>Root Cause Analysis - practical approach</title><content type='html'>Check out the article by David M. Russell: &lt;a href="http://www.daivrussell.com/Fishboning.pdf"&gt;http://www.daivrussell.com/Fishboning.pdf&lt;/a&gt;. It's a very good and pragmatic introduction to the method.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4576882180671232399-1030198788708288315?l=onsoftwarequality.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://onsoftwarequality.blogspot.com/feeds/1030198788708288315/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4576882180671232399&amp;postID=1030198788708288315' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4576882180671232399/posts/default/1030198788708288315'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4576882180671232399/posts/default/1030198788708288315'/><link rel='alternate' type='text/html' href='http://onsoftwarequality.blogspot.com/2008/12/rca-in-practice.html' title='Root Cause Analysis - practical approach'/><author><name>Leszek Slonczynski</name><uri>http://www.blogger.com/profile/02143787248928790394</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://2.bp.blogspot.com/_ZuehATZHWIE/SUoO4ZD8HcI/AAAAAAAAAA0/KBCE4IAXeDQ/S220/ja_foto.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4576882180671232399.post-1252574328166383928</id><published>2008-12-22T03:33:00.001-08:00</published><updated>2008-12-22T05:02:46.249-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='software quality'/><category scheme='http://www.blogger.com/atom/ns#' term='pragmatic approach'/><category scheme='http://www.blogger.com/atom/ns#' term='infrastructure'/><category scheme='http://www.blogger.com/atom/ns#' term='requirements management'/><category scheme='http://www.blogger.com/atom/ns#' term='configuration management'/><title type='text'>Quality Enabled Infrastructure - Bare Essentials</title><content type='html'>First of all software quality seems like a very good idea. Less defects or misinterpreted requirements means less rework, less maintenance, less lost opportunities. &lt;br /&gt;&lt;br /&gt;And there is a large range of techniques, technologies and products which can help increase quality. &lt;br /&gt;&lt;br /&gt;Shouldn't we use them all before we release the product?&lt;br /&gt;&lt;br /&gt;The answer is simple: NO.&lt;br /&gt;&lt;br /&gt;If you work on something which will be used only by you and two of your friends, I would even suggest accepting that it crashes from time to time if only it provides valuable results most of the time. Not to mention buying toolset for quality improvement which can cost hundreds of thousands. All it would give you is additional cost: time spent on implementing it, learning it, using it, interpreting results.&lt;br /&gt;&lt;br /&gt;On the other hand if you are about to deploy your software to some hardware component which will leave your shop embedded into cars and driving in all directions with average speed 50 miles per hour you may want to make sure that you will not need to call all these cars back for the software update. Then the more the merrier on the software quality boosters shelf.&lt;br /&gt;&lt;br /&gt;Obviously there is whole spectrum of software shops in between. How they should choose what to apply?&lt;br /&gt;&lt;br /&gt;The answer isn't simple here, but I'm a believer in pragmatic approach to software quality which for me means: provide foundations and extend where and when it makes sense.&lt;br /&gt;&lt;br /&gt;Foundations being:&lt;br /&gt;* configuration management system &lt;br /&gt;* facility to manage requirements (it can be Excel or even plain text file)&lt;br /&gt;* facility to manage defect reports, enhancement requests&lt;br /&gt;* some kind of quality indication (it can be as simple as plain number of defects to number of requirements)&lt;br /&gt;&lt;br /&gt;Analyzing those on biweekly basis gives you an information which you can use to figure out what works and what not, whether applying some technique/technology would be freeing or tightening your resources and thus stretching or relaxing your constraints being budget, time etc. And to act on the information.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4576882180671232399-1252574328166383928?l=onsoftwarequality.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://onsoftwarequality.blogspot.com/feeds/1252574328166383928/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4576882180671232399&amp;postID=1252574328166383928' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4576882180671232399/posts/default/1252574328166383928'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4576882180671232399/posts/default/1252574328166383928'/><link rel='alternate' type='text/html' href='http://onsoftwarequality.blogspot.com/2008/12/software-quality-bare-essentials.html' title='Quality Enabled Infrastructure - Bare Essentials'/><author><name>Leszek Slonczynski</name><uri>http://www.blogger.com/profile/02143787248928790394</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://2.bp.blogspot.com/_ZuehATZHWIE/SUoO4ZD8HcI/AAAAAAAAAA0/KBCE4IAXeDQ/S220/ja_foto.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4576882180671232399.post-4088592083823679351</id><published>2008-12-18T05:09:00.001-08:00</published><updated>2008-12-18T06:06:44.221-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='software quality'/><category scheme='http://www.blogger.com/atom/ns#' term='automation'/><title type='text'>Oral hygiene - word about automation</title><content type='html'>How do you make sure you still have teeth in your thirties - you look after them since day one. While your parents are catching up with sleeping after several heavy in 'mommy my tooth is coming' nights you should be starting cleaning your teeth. Well, your parents should help teach you that.&lt;br /&gt;&lt;br /&gt;Is it enough to know how to brush your teeth? Not really - far more important is to know why you should be doing it. Is it sufficient to have them brushed consistently? Still not - a special ritual has to be integrated with other rituals you have. What in case when you don't have any rituals? Well if you don't sleep every 24 hours, or eat at least once a day then state of your teeth is not your biggest problem.&lt;br /&gt;&lt;br /&gt;So we condition ourselves to brush our teeth right after a wake up, or right after eating, or right before leaving to school. After some time it costs us more effort not to do it than otherwise. What we are doing here: we automate the process.&lt;br /&gt;&lt;br /&gt;That takes off a lot of hassle - like checking whether teeth should be cleaned in the first place, figuring out where to fit it into our busy schedules etc.&lt;br /&gt;&lt;br /&gt;Additionally it's the only way to do anything consistently for a longer time period (try exercising every now and then and check your average). &lt;br /&gt;&lt;br /&gt;The same stands for your project hygiene - if you want to have something done consistently, you have to make sure that activities required are integrated into your daily routine. Automation is the key. Fortunately computers come handy there, as there is nothing they do better than stick to the clock and doing repetitive task.&lt;br /&gt;&lt;br /&gt;And believe me if you want your project clean you need to brush it every single day. Build up your tasks, schedule them and make sure that results are being delivered every morning.&lt;br /&gt;&lt;br /&gt;Soon enough lack of report in your mail will feel like dirty teeth and you will be able to be in software project in your thirties.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4576882180671232399-4088592083823679351?l=onsoftwarequality.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://onsoftwarequality.blogspot.com/feeds/4088592083823679351/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4576882180671232399&amp;postID=4088592083823679351' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4576882180671232399/posts/default/4088592083823679351'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4576882180671232399/posts/default/4088592083823679351'/><link rel='alternate' type='text/html' href='http://onsoftwarequality.blogspot.com/2008/12/oral-hygiene-word-about-automation.html' title='Oral hygiene - word about automation'/><author><name>Leszek Slonczynski</name><uri>http://www.blogger.com/profile/02143787248928790394</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://2.bp.blogspot.com/_ZuehATZHWIE/SUoO4ZD8HcI/AAAAAAAAAA0/KBCE4IAXeDQ/S220/ja_foto.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4576882180671232399.post-3239125367537016771</id><published>2008-12-17T03:54:00.000-08:00</published><updated>2008-12-18T00:52:59.491-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='code'/><category scheme='http://www.blogger.com/atom/ns#' term='programming'/><title type='text'>Programming Languages Popularity Index</title><content type='html'>Ever wondered which programming languages are hip these days? Or what are the trends? Or whether C++ is being replaced by Java? I've just found this website from Holland which calculates index for those.&lt;br /&gt;&lt;br /&gt;Check it out:  &lt;a href="http://www.tiobe.com/index.php/content/paperinfo/tpci/index.html"&gt;TIOBE Programming Community Index&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Very interesting way of calculating it:&lt;br /&gt;"The TIOBE Programming Community index gives an indication of the popularity of programming languages. The index is updated once a month. The ratings are based on the number of skilled engineers world-wide, courses and third party vendors. The popular search engines Google, MSN, Yahoo!, and YouTube are used to calculate the ratings."&lt;br /&gt;&lt;br /&gt;And wonderful message: C and C++ are not going anywhere. :)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4576882180671232399-3239125367537016771?l=onsoftwarequality.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://onsoftwarequality.blogspot.com/feeds/3239125367537016771/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4576882180671232399&amp;postID=3239125367537016771' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4576882180671232399/posts/default/3239125367537016771'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4576882180671232399/posts/default/3239125367537016771'/><link rel='alternate' type='text/html' href='http://onsoftwarequality.blogspot.com/2008/12/programming-languages-popularity-index.html' title='Programming Languages Popularity Index'/><author><name>Leszek Slonczynski</name><uri>http://www.blogger.com/profile/02143787248928790394</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://2.bp.blogspot.com/_ZuehATZHWIE/SUoO4ZD8HcI/AAAAAAAAAA0/KBCE4IAXeDQ/S220/ja_foto.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4576882180671232399.post-3848000786916711394</id><published>2008-12-17T01:55:00.000-08:00</published><updated>2008-12-18T00:53:53.793-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='software quality'/><category scheme='http://www.blogger.com/atom/ns#' term='maintenance'/><category scheme='http://www.blogger.com/atom/ns#' term='static analysis'/><category scheme='http://www.blogger.com/atom/ns#' term='roi'/><title type='text'>Code Duplication Removal ROI Calculator</title><content type='html'>I found some interesting website which provides visitor with nice return on investment calculator: &lt;a href="http://www.semanticdesigns.com/Purchase/CloneCalc.html"&gt;http://www.semanticdesigns.com/Purchase/CloneCalc.html&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;The basis for the estimate is Brenda Baker paper “On Finding Duplication and Near-Duplication in Large Software Systems.” You can find it for example on IEEExplore (&lt;a href="http://ieeexplore.ieee.org/stamp/stamp.jsp?arnumber=514697&amp;isnumber=11405"&gt;http://ieeexplore.ieee.org/stamp/stamp.jsp?arnumber=514697&amp;isnumber=11405&lt;/a&gt;).&lt;br /&gt;&lt;br /&gt;Bottom line: on average 13%-20% of the code can be removed (as is a result of code duplication) making maintenance of the project significantly cheaper. Assuming that code maintenance is proportional to its' size - up to 20% cheaper. &lt;br /&gt;&lt;br /&gt;So if you are spending $70,000+ on your software engineer and have 5 of them maintaining the code invest $5,000 on code duplication removal product and get your money back in less than a month. Within a year you will be $30,000 up in the blacks. On average of course. Not bad.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4576882180671232399-3848000786916711394?l=onsoftwarequality.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://onsoftwarequality.blogspot.com/feeds/3848000786916711394/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4576882180671232399&amp;postID=3848000786916711394' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4576882180671232399/posts/default/3848000786916711394'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4576882180671232399/posts/default/3848000786916711394'/><link rel='alternate' type='text/html' href='http://onsoftwarequality.blogspot.com/2008/12/code-duplication-removal-roi-calculator.html' title='Code Duplication Removal ROI Calculator'/><author><name>Leszek Slonczynski</name><uri>http://www.blogger.com/profile/02143787248928790394</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://2.bp.blogspot.com/_ZuehATZHWIE/SUoO4ZD8HcI/AAAAAAAAAA0/KBCE4IAXeDQ/S220/ja_foto.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4576882180671232399.post-2362329025794830632</id><published>2008-12-08T23:19:00.000-08:00</published><updated>2008-12-18T01:15:13.452-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='software quality'/><category scheme='http://www.blogger.com/atom/ns#' term='unit testing'/><category scheme='http://www.blogger.com/atom/ns#' term='dynamic analysis'/><title type='text'>Test cases and test clusters - partition inputs to save your time</title><content type='html'>Imagine that you have just finished writing your new cool feature. Now, what is the simplest check whether the code really does what it is supposed to? Run it through simple inputs and check whether outcome matches? Great technique. It has a limitation though - it checks it against this specific case (please see my last entry on that as well). How can we extend that and test whole classes of inputs? Well, there is this simple and elegant technique, which is called equivalence partitioning which seems to be exactly about that.&lt;br /&gt;&lt;br /&gt;So what's the idea? We divide our input vectors based on the outcome they are producing (different inputs go through different paths etc) and then work on the representatives and assume that the rest of the inputs from the specific domain will behave similarly. So for example if we play with function, which calculates absolute number we have two partitions - positive numbers and negative numbers and we need to test at least one of each to check whether our function works.&lt;br /&gt;&lt;br /&gt;Given that partitions are defined correctly (outcomes are similar on any two given inputs from the cluster) and completely (all inputs are in clusters) we have very powerful tool for software testing in an easy way. We found out how to reduce number of tests to be applied to the minimum and still test all possible test scenarios. Nice job.&lt;br /&gt;&lt;br /&gt;Unfortunately, in life, if the problem just got much simpler it usually means you delegated it somewhere else.&lt;br /&gt;&lt;br /&gt;The task of figuring out partitions is now the place where we will be spending our time. It's not trivial (or more like very very far from trivial) to figure out what are those clusters and what are their boundaries - but it's still a very effective way to move from chaotic to structured testing. &lt;br /&gt;&lt;br /&gt;How you can do it - analyzing your code most likely - you can calculate sets of equations and reducing it by fixing some of the unknowns as problem becomes too complex quickly (top-down approach) or just run test case through the debugger and build on it when stepping through decision points (bottom-up). Or any approach in between really.&lt;br /&gt;&lt;br /&gt;And one last note - as always - interesting things happen near or on the boundaries - there is a new life promise there which make your inputs behave - well let's call it unexpectedly - make sure that you have your guards there.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4576882180671232399-2362329025794830632?l=onsoftwarequality.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://onsoftwarequality.blogspot.com/feeds/2362329025794830632/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4576882180671232399&amp;postID=2362329025794830632' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4576882180671232399/posts/default/2362329025794830632'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4576882180671232399/posts/default/2362329025794830632'/><link rel='alternate' type='text/html' href='http://onsoftwarequality.blogspot.com/2008/12/test-cases-and-test-clusters-partition.html' title='Test cases and test clusters - partition inputs to save your time'/><author><name>Leszek Slonczynski</name><uri>http://www.blogger.com/profile/02143787248928790394</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://2.bp.blogspot.com/_ZuehATZHWIE/SUoO4ZD8HcI/AAAAAAAAAA0/KBCE4IAXeDQ/S220/ja_foto.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4576882180671232399.post-8231121196971866332</id><published>2008-12-03T02:07:00.000-08:00</published><updated>2008-12-18T01:14:57.310-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='software quality'/><category scheme='http://www.blogger.com/atom/ns#' term='dataflow'/><category scheme='http://www.blogger.com/atom/ns#' term='static analysis'/><title type='text'>User always chooses the wrong path - on data flowing through your code</title><content type='html'>&lt;h2&gt;Software development is so much fun&lt;/h2&gt;&lt;br /&gt;&lt;br /&gt;Developing the code is a very cool activity. Because of how creative and limitless it is and because of instant rewarding nature. You figure out what needs to be done - you model it, write it down, and execute almost immediately. Caboom! New shiny '4' is produced in your console as the answer to your '2' and '2' input. You just did an amazing piece on integers adding. You can move on to the next adventure.&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;And then software development suddenly is mundane&lt;/h2&gt;&lt;br /&gt;But then, can you really? I would suggest to try '3' and '2' inputs as well to make sure that your algorithm is adding (we expect '5') and not multiplying (which would get us to '6' and a bit of frustration when trying to claim money back from our savings account) or even better with '3' and '4' to make sure that it doesn't add '2' to the first argument. This for some time can be cool experience - as you are still playing in 'what I could’ve missed' game, but far before we get to '2147483647' + '1' the boredom sneaks in and just kills all the fun. &lt;br /&gt;&lt;br /&gt;What makes the whole thing worse is that you are locked in what you know about the code you've just written, and you haven't managed to develop your brain significantly since then, so you are locked in the same mindset with all limiting consequences.&lt;br /&gt;&lt;br /&gt;Bad news is that we have to do it and there is no way around it, good news is that there are tools and techniques available to shortcut it. Today I would like to talk about one of them called 'data-flow analysis'.&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;Data flow analysis - what is it about?&lt;/h2&gt;&lt;br /&gt;&lt;br /&gt;So what is it - it is a static code analysis in a sense that we don't run our software to get results, but what it is trying to do is to mimic potential paths through the code in search of some specific path or data patterns which are for some reasons interesting. When you think about it - this approach is much more powerful than just testing some of the paths - here we have all of them analyzed.&lt;br /&gt;&lt;br /&gt;The idea is: let's assume we can collect all possible paths through our application and then let's define subset there which would collect 'something went wrong' paths. Extremely powerful idea - if entirely realizable, it would be equivalent to testing all possible inputs and conditions. And the world would be a different place, where software is cheap. And big part of software developers would be selling coffee in Starbucks.&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;Data flow analysis - how useful it is?&lt;/h2&gt;&lt;br /&gt;&lt;br /&gt;Unfortunately for software users and fortunately for software developers and currently selling coffee wanna-be-actors it is not entirely possible. Calculus required is too complicated, space of all possible paths and inputs too big to control. Does it mean it's useless? Not at all. &lt;br /&gt;&lt;br /&gt;It's actually extremely useful and commonly used - the trick is to limit the 'all paths' set by imposing maximum path length, size of all possible within path transitions etc. And we still can get extremely valuable results - these algorithms know transitions or path segments which you usually don't anticipate - like for simple setups which lead to raising exception from standard functions, rare paths which lead to leaked memory and resources, weird user scenarios which lead to pumping your collections with excess of data. Running your code through such algorithms is actually an eye-opening experience - there is so much you haven't anticipated getting your 'man of an hour creativity reward' earlier this day.&lt;br /&gt;&lt;br /&gt;And remember - no matter how weird and rare these paths seem to be, these are the very ones people will follow as soon as they start using your software. Users are vicious when it comes to using our software - they don't add '2' and '2', they just keep adding whatever they fancy with no respect to the inputs we test it against. Unless you know how to change this behavior, data flow analysis can help you 'prove' your software (in a limited but still powerful way).&lt;br /&gt;&lt;br /&gt;Use it.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4576882180671232399-8231121196971866332?l=onsoftwarequality.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://onsoftwarequality.blogspot.com/feeds/8231121196971866332/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4576882180671232399&amp;postID=8231121196971866332' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4576882180671232399/posts/default/8231121196971866332'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4576882180671232399/posts/default/8231121196971866332'/><link rel='alternate' type='text/html' href='http://onsoftwarequality.blogspot.com/2008/12/user-always-chooses-wrong-path-on-data.html' title='User always chooses the wrong path - on data flowing through your code'/><author><name>Leszek Slonczynski</name><uri>http://www.blogger.com/profile/02143787248928790394</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://2.bp.blogspot.com/_ZuehATZHWIE/SUoO4ZD8HcI/AAAAAAAAAA0/KBCE4IAXeDQ/S220/ja_foto.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4576882180671232399.post-7481821777931272757</id><published>2008-11-29T03:00:00.001-08:00</published><updated>2008-12-18T01:14:40.569-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='software quality'/><category scheme='http://www.blogger.com/atom/ns#' term='coding standards'/><category scheme='http://www.blogger.com/atom/ns#' term='automation'/><category scheme='http://www.blogger.com/atom/ns#' term='static analysis'/><title type='text'>Covering your tracks  - let your codebase follow your skills</title><content type='html'>We've all been in situations when somebody dug up a piece of code from 1997, in a far far away module, authored by us and still containing some not the best of the breed code construction. We've spent too much time catenating Strings instead of StringBuffers, we left behind empty catch blocks, we double-iterated over a map first for the key and then for the value, you name it. We would never do it now, but there were times when we weren't that expert. When it happens there is usually a lot of joy for others when it's spotted, not so cool for us though.&lt;br /&gt;&lt;br /&gt;There are several things we can get out of it: first of all if we want to see our programming skills evolving we just need to review our code in chronological order - it's all documented there. Now as we already know how to fix ourselves a nice evening of memories, full of emotions, recalling how fragile and naive developers we were some day, let's think about some more practical aspects of that discovery. Thus the second: people are still running this code and depend on it, and the third – if your portfolio is to be complete it doesn't look to good.&lt;br /&gt;&lt;br /&gt;It seems like a good idea to – whenever you learn something new – review your earlier work and update it according to new information you’ve just gathered. &lt;br /&gt;&lt;br /&gt;How would you go about that? &lt;br /&gt;&lt;br /&gt;You can read the whole code, spot where you used a 'deprecated' technique and replace it with a 'better-new' approach. A single review of such kind may be months to years in time cost depending on how productive you are, and there is a high risk that your manager will beg you to make sure that you will not learn a single thing afterwards.&lt;br /&gt;&lt;br /&gt;Then you can use string analyzing tools: simple 'grep' or any other string find software would reduce this time greatly (if you are using home-made one please make sure that you are using StringBuffers for heavily changing strings). You will still get a lot of noise (false positives) and miss a lot of problems (false negatives), which will require a lot of manual analyzing - nevertheless it will be much faster than reading through the whole codebase.&lt;br /&gt;&lt;br /&gt;And then there are dedicated tools for that - greps which have kind of regular expressions based on the structure of programming language you work in. That's the fastest I know. Choosing such tool you need to make sure that (one) you are able to integrate it with your work, (two) you can define the pattern you want to find easily, and (three) you are able to define patterns in a way which allows you to reduce noise to minimum (patterns are not to generic (false positives), or too specific (false negatives)).&lt;br /&gt;&lt;br /&gt;Once you have such product integrated with you - as soon you learn something new, you can make sure that code you created in the past follows.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4576882180671232399-7481821777931272757?l=onsoftwarequality.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://onsoftwarequality.blogspot.com/feeds/7481821777931272757/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4576882180671232399&amp;postID=7481821777931272757' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4576882180671232399/posts/default/7481821777931272757'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4576882180671232399/posts/default/7481821777931272757'/><link rel='alternate' type='text/html' href='http://onsoftwarequality.blogspot.com/2008/11/covering-your-tracks-let-your-codebase.html' title='Covering your tracks  - let your codebase follow your skills'/><author><name>Leszek Slonczynski</name><uri>http://www.blogger.com/profile/02143787248928790394</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://2.bp.blogspot.com/_ZuehATZHWIE/SUoO4ZD8HcI/AAAAAAAAAA0/KBCE4IAXeDQ/S220/ja_foto.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4576882180671232399.post-2161279027130085062</id><published>2008-11-28T02:07:00.000-08:00</published><updated>2008-12-18T01:16:12.831-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='software quality'/><category scheme='http://www.blogger.com/atom/ns#' term='coding standards'/><category scheme='http://www.blogger.com/atom/ns#' term='static analysis'/><category scheme='http://www.blogger.com/atom/ns#' term='roi'/><title type='text'>Static Analysis - is it ROIng or not ROIng</title><content type='html'>Today I would like to talk about pattern based code checking (aka Static Analysis aka Coding Standards) - a very powerful technique which allows you to improve quality of your code in no time. &lt;br /&gt;&lt;br /&gt;The idea is pretty simple - programming is an activity of coding based on the grammar, which is somewhat regular, and that means that programs will have similar patterns in their code. This is where bad and best practices come from. Now if we have means to analyze the program structure (given by existence of grammar) and we have patterns of different quality - we can promote good over bad patterns and that improves the overall quality of our software.&lt;br /&gt;&lt;br /&gt;How would you do that - the easiest technique is to find and eliminate bad patterns in existing code. There is a wealth of products which not only can analyze the structure of your code but have tens or hundreds of such best practices built in. They integrate with our development IDEs, allow for extensions (defining your own rules), manage results of analysis, sometimes have auto-fix feature (apply standard refactoring to replace bad practice with its' better equivalent).&lt;br /&gt;&lt;br /&gt;Now, there is a lot of discussion on whether it is necessary to use static analysis in your development lifecycle. The arguments are that this practice is not about chasing errors which would necessarily trigger off at some point of a user experience and kill our application in front of her eyes, this is more about preventing errors by writing in 'better style'. If we look at it from the return of investment side, we have to consider three costs - cost of the product, cost of introduction of the product, cost of using it.&lt;br /&gt;&lt;br /&gt;As for the cost of the product - it's usually in whereabouts of several thousands dollars. Just think about it as a vehicle to make junior developer into senior one by putting it at its belt. Do the math how quickly it pays off.&lt;br /&gt;&lt;br /&gt;As for the cost of introduction - back in the eighties there may have been some learning curve involved in this (as everything was command line based then), but now it just plugs in into your development environment, you work with results by clicking, it jumps with you to specific places in the code which require modification, explains what to do and why to do it. From time to time I train people on various kinds of testing. Static analysis takes about two-three hours (including rules configuration, suppressions mechanisms etc.). Again I'm leaving the math for you.&lt;br /&gt;&lt;br /&gt;As for the cost of using it - processing time is pretty much about the same (up to three times longer) as normal compilation and it suits kind of similar purpose (checks whether code is sound and you can progress based on it with your development), so if you allow your team to compile code as they go, you should be ok with them running static analysis. Than there is working with results - first of all usually there is one click to assess whether violation should be fixed or not - it takes literally seconds. No false positives (of course if software doing analysis is not buggy itself).&lt;br /&gt;&lt;br /&gt;And now for the ROI - depending on sources and lifecycle phase we have the cost of single defect removal varying from 1,000$ to 20,000$ and more.&lt;br /&gt;&lt;br /&gt;That leaves it as a no-brainer. After three, four defects are removed, we have our price of the product paid off and we are left with developer directly connected to the oracle of coding wisdom.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4576882180671232399-2161279027130085062?l=onsoftwarequality.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://onsoftwarequality.blogspot.com/feeds/2161279027130085062/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4576882180671232399&amp;postID=2161279027130085062' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4576882180671232399/posts/default/2161279027130085062'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4576882180671232399/posts/default/2161279027130085062'/><link rel='alternate' type='text/html' href='http://onsoftwarequality.blogspot.com/2008/11/static-analysis-roing-or-not-roing.html' title='Static Analysis - is it ROIng or not ROIng'/><author><name>Leszek Slonczynski</name><uri>http://www.blogger.com/profile/02143787248928790394</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://2.bp.blogspot.com/_ZuehATZHWIE/SUoO4ZD8HcI/AAAAAAAAAA0/KBCE4IAXeDQ/S220/ja_foto.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4576882180671232399.post-4546445515297597106</id><published>2008-11-25T22:01:00.000-08:00</published><updated>2008-12-18T01:16:40.269-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='software quality'/><category scheme='http://www.blogger.com/atom/ns#' term='project management'/><title type='text'>Prima donna - 50 ways to kill your project</title><content type='html'>While we are talking about developers - there is one group, which 'deserves' a separate entry. These are software prima donnas - boys and girls who have one major goal - to look smarter than the others. Much smarter that is.&lt;br /&gt;&lt;br /&gt;As you can imagine with such agenda there is not much good they can contribute to the project. It was kind of obvious to me since my day one. But I had no idea about how much harm to the project a single prima donna could do...&lt;br /&gt;&lt;br /&gt;Let's look at them for a moment - it's easy to spot them – get the whole team in one room and talk to them about anything - if you see a person with silent disapproval on the face - this is your prima donna working hard for her throne. What always amazed me was the fact that the subject of the talk was irrelevant, the person talking was irrelevant - prima donna had always this unhappy 'I would do it much better' face.&lt;br /&gt;&lt;br /&gt;Now, don't get me wrong - it's not like every project has them - in my whole professional life I worked closer with only three of them. &lt;br /&gt;&lt;br /&gt;They are rare, but they are deadly.&lt;br /&gt;&lt;br /&gt;Their number one goal is asserting their superiority. They have all kinds of power tricks in their arsenal: misleading, information hiding, gossiping, marginalizing others’ achievements, coloring up own achievement, over complicating things to arrive as a great savior of the day afterwards, asking questions without good answers, refocusing toward my areas of expertise, implying others' lack of competence, learning some very detailed part of knowledge and dragging it out whenever possible, you name it.&lt;br /&gt;&lt;br /&gt;If they manage to achieve that they try to find followers - they are a building opposition business now. First of all they spread 'being unhappy' atmosphere. After all they need to be in opposition to something - the existing order of things. That means that current state of affairs has to be a bad one. If it isn't it has to be made one. And as we all know, unhappiness spreads easily so soon enough you will have an unhappy crowd instead of the team. And then it's usually too late to save a project.&lt;br /&gt;&lt;br /&gt;Now, is it possible to fight the 'sneaky prima donna sabotage'? Of course it is - all you have to do is to show that the prima donna superiority is a fabricated one. Provide enough visibility on prima donna work effects (software creation related) and two things will happen: first of all everybody in the team will see that there is nothing special in prima donna performance, this is just as normal person as we all are; and secondly that would also force prima donna to focus on what he should be focusing on - software development. That should put prima donna covert operation into sleep (until better times come).&lt;br /&gt;&lt;br /&gt;Or if you want a long-term solution - as soon you spot prima donna operating just split with her. You have my word - she will find another job and will be as unhappy there as she is with you. That's what prima donnas do.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4576882180671232399-4546445515297597106?l=onsoftwarequality.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://onsoftwarequality.blogspot.com/feeds/4546445515297597106/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4576882180671232399&amp;postID=4546445515297597106' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4576882180671232399/posts/default/4546445515297597106'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4576882180671232399/posts/default/4546445515297597106'/><link rel='alternate' type='text/html' href='http://onsoftwarequality.blogspot.com/2008/11/prima-donna-50-ways-to-kill-your.html' title='Prima donna - 50 ways to kill your project'/><author><name>Leszek Slonczynski</name><uri>http://www.blogger.com/profile/02143787248928790394</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://2.bp.blogspot.com/_ZuehATZHWIE/SUoO4ZD8HcI/AAAAAAAAAA0/KBCE4IAXeDQ/S220/ja_foto.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4576882180671232399.post-7203948371685956276</id><published>2008-11-24T01:26:00.000-08:00</published><updated>2008-12-18T01:16:57.588-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='software quality'/><category scheme='http://www.blogger.com/atom/ns#' term='project management'/><title type='text'>In search for developers - curious craftsmen wanted!</title><content type='html'>We looked at what a good manager is supposed to be about. Let's now try to figure out what makes developers write better quality code. Things like skills and brilliance may certainly help. But are those the core components? I don't think so.&lt;br /&gt;&lt;br /&gt;If I was to choose perfect features of my team member I would go with curiosity, engagement, openness and thoroughness in no particular order (or maybe in alphabetical). All right - I can add that some programming experience would be a plus as well.&lt;br /&gt;&lt;br /&gt;Let's start with openness - no software developer is an island, thus communication is everything in software business. I talked about it already but I can't emphasize it enough. Unless you don't need extensible maintainable software, its' creators have to communicate with their peers and the rest of external world. So they do have to have two following skills: being able to talk to others (and actually practicing it) and being likeable enough to be talked to. I'm not saying that they should be party stars or anything like that. Nerds with working I/O would do.&lt;br /&gt;&lt;br /&gt;Now, what I found is that creating something of high value and high quality was always going in pair with having fun working on it (no matter whether I was a developer, architect or manager). I think that basically goes with the feeling that you are doing something right. Moreover, in these projects I had people who no matter what they were doing, they were always putting their 100% in it. It was somehow easy to get them engaged. At some point I figured out that they had engagement ingrained in them. And believe me you want to work with such people. People who don't give a damn, who are 'just earning money' are not fun to work with. They are inclined to take shortcuts, think short term and to look at you with 'what this has to do with me' face in the time of crisis. If you can - work with people who care about what they are doing.&lt;br /&gt;&lt;br /&gt;As I mentioned earlier building up quality is all about incremental improvements, innovations which make your code better and better. And to innovate you have to stay up to date, learn and try new things. Think about your current quality as the status quo, comfort zone your developers live in. If you want them to get out of this cave they need to be curious enough to take action which would push them out. Given that they are wondering enough to see shadows and hear echoes in the first place. No progress without questioning, in short.&lt;br /&gt;&lt;br /&gt;And finally thoroughness - this is the difficult one - most of the folks go into this business because of high payoffs for creative actions - you build up several routines and you are already running something which paints beautiful outputs to your screen, you change a bit of it and the outcomes are completely different and even better adjusted to what you wanted to get. This is what we all are for in this business. Unfortunately, if we want to make something more out of it than a creator's toy - after we have the prototype which works with input of our choice, we need to put ten times more work to make it work with all the inputs in all situations - and this is not so much fun any more. Ratio is different based on how you modeled domain in the first place, but still creative piece is always far shorter than the process of handling non-standard cases afterwards. To make things worse we know how to get next adrenaline fix - we just need to move on to creating next piece. It requires a lot of discipline to finish it up - I've been there - it took me many years to develop thoroughness and ingrain it into my character and I still have slips from time to time. Fortunately being able to do the task completely offers also good chemistry strike through your body and additionally good managers will be looking for you everywhere.&lt;br /&gt;&lt;br /&gt;To sum this up - features commonly searched for like skills and creativity are for sure important, but at least my experience says that some character traits (which by the way would make you stand out in anything you put your hands to) are far more important than that.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4576882180671232399-7203948371685956276?l=onsoftwarequality.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://onsoftwarequality.blogspot.com/feeds/7203948371685956276/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4576882180671232399&amp;postID=7203948371685956276' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4576882180671232399/posts/default/7203948371685956276'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4576882180671232399/posts/default/7203948371685956276'/><link rel='alternate' type='text/html' href='http://onsoftwarequality.blogspot.com/2008/11/in-search-for-developers-curious.html' title='In search for developers - curious craftsmen wanted!'/><author><name>Leszek Slonczynski</name><uri>http://www.blogger.com/profile/02143787248928790394</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://2.bp.blogspot.com/_ZuehATZHWIE/SUoO4ZD8HcI/AAAAAAAAAA0/KBCE4IAXeDQ/S220/ja_foto.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4576882180671232399.post-6466843895342680677</id><published>2008-11-21T00:58:00.000-08:00</published><updated>2008-12-18T01:17:19.505-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='software quality'/><category scheme='http://www.blogger.com/atom/ns#' term='project management'/><title type='text'>On good manager - how to spend windowed office wisely</title><content type='html'>Last post was about insecure software manager vicious circle, so to balance it today I will talk about what I believe are the most desired features in managers’ CVs to scan for.&lt;br /&gt;&lt;br /&gt;Task of finding a good manager is one of the important ones as difference on this element of the puzzle can give us results varying from a successful project on time (if you have your project delivered even earlier it's most likely time to wake up and go to work) to projects abandoned out of frustration by the whole crew, completely unmanageable, which you need to burn to the ground to avoid disease spreading. So unless you have magic idea how to capitalize on high turnover (if you have and you are still making software you are apparently missing something) you should look for a manager who would perform well.&lt;br /&gt;&lt;br /&gt;So what makes a difference in manager performance? I would probably go for the following mix: integrity, ability to keep an eye on the target, ability to glue the team, ability to facilitate communication and minimize its costs. Let me elaborate a bit on that.&lt;br /&gt;&lt;br /&gt;She has to have the integrity as there will be pressures from all directions - we have customers pushing for features, project sponsors pushing for return on investment, team pushing for nice neat innovations, economy pushing for savings - manager has to know the balance and has to level everything to keep it.&lt;br /&gt;&lt;br /&gt;Similar story about maintaining the vision on what it is we are producing. Everybody else get their own partial perspective on the project - there is money view and features view and program characteristics view, internal construction view. Project sponsor is funding it to get more money out of it, developer is writing code to get PS3 for his 1-year old son. Project manager is the person who has to see from the project success perspective. Now this is a difficult task, because requirements, resources keep changing as we go (as we didn't put external world on standby). Project manager has to keep this running target under control and in sync.&lt;br /&gt;&lt;br /&gt;Now let's look how the team works - from the workflow point of view, we work in iterations: participants are agreeing what they are working on (parts) and how it will connect to the rest of a whole (interfaces). Then they work on their parts and when finished they integrate the parts with the whole. Keep in mind that we are working on the mathematical model of a high complexity - there is a lot of communication required to make it happen and any miscommunication costs a lot. Project manager has to carefully develop environment, which promotes easy flowing communication. All disrupting factors like interpersonal conflicts, prima donnas, special procedures for communication have to be resolved at all costs. Manager should also seek to find ways to provide people with information in a way, which doesn't get them out of their zones or put them on documentation pages for hours. She should also at all costs make sure that nobody feels overlooked there.&lt;br /&gt;&lt;br /&gt;Now to the gluing part - I've worked with many teams in my life, and I can see two patterns really - either people are engaged into the project and work as a team, are proud of being a member of the team, help each other, or they are there to earn money, doing what they are asked to but never going an extra inch in project cause. Performances of both teams differ drastically - I've never done proper measurement, but I think factor of ten is not unreasonable. If you want to check which of the two your team is, check whether most of the team is sitting on their chairs 5.03pm - if they are then there is a pretty good chance they are engaged. By the way if they are still there at 6pm you have another kind of problem, but this is for another occasion. If you are a manager and cannot check whether they are there at 5.03pm because you are in the car already you not only can safely bet they aren't but you have also serious suspicion for what is causing it. To be honest I've never figured out what does the gluing - I had teams working on similar projects on two completely different ends of this scale. The only hints I can give here is: treat people seriously, be honest and be friendly. &lt;br /&gt;&lt;br /&gt;And remember you are there no to demand. You are there to help.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4576882180671232399-6466843895342680677?l=onsoftwarequality.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://onsoftwarequality.blogspot.com/feeds/6466843895342680677/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4576882180671232399&amp;postID=6466843895342680677' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4576882180671232399/posts/default/6466843895342680677'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4576882180671232399/posts/default/6466843895342680677'/><link rel='alternate' type='text/html' href='http://onsoftwarequality.blogspot.com/2008/11/on-good-manager-how-to-spend-windowed.html' title='On good manager - how to spend windowed office wisely'/><author><name>Leszek Slonczynski</name><uri>http://www.blogger.com/profile/02143787248928790394</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://2.bp.blogspot.com/_ZuehATZHWIE/SUoO4ZD8HcI/AAAAAAAAAA0/KBCE4IAXeDQ/S220/ja_foto.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4576882180671232399.post-3567064596777546200</id><published>2008-11-19T02:00:00.000-08:00</published><updated>2008-12-18T01:17:48.139-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='project management'/><title type='text'>Continuously degrading quality - insecure manager kills it all</title><content type='html'>Software programs tend (still) to be created by people - so it's quite likely that different people would create software of different quality. There is a whole bunch of people who are involved during project creation - we have product managers, project managers, project sponsors, architects, team leads, software developers, graphic designers, docs people, qa people etc. Let's divide them into two groups: managers (people responsible for overall outcome) and developers (people who develop parts of actual product). Trying to refocus from how big this oversimplification is let's try to figure what are the desired characteristics for the manager. Or maybe let's try an easier path and leave the desired stuff for later - what actually should be avoided at all costs when you are looking for a good manager to take on your project.&lt;br /&gt;&lt;br /&gt;Based on my experience if there is a single thing I could say to a software manager sitting next to my death bed (I don't think I'll get that lucky...) - that would be: 'do no harm'. &lt;br /&gt;&lt;br /&gt;Why is that? Because managers are the people who do most harm during software project creation. They are usually responsible for project failures. Am I saying managers are idiots? Not at all. Managers are usually the most experienced and wise people in the project. But...&lt;br /&gt;&lt;br /&gt;Managers have extremely hard life: they are not much smarter (if at all) than the rest of the team in which they are supposed to be power figures. Remember that we are talking about ecosystem in which the main survival skill is mathematics. It's not easy to compete with pale-face, skinny-bodied mathema-males. But the manager has to have respect in this world to lead the project to desired outcome.&lt;br /&gt;&lt;br /&gt;Additionally managers do not have measure work units which they could present to their masters if required. There is no I did 20 pounds of managing today which is well above my last year average. They are supposed to define a course and if the boat deviates from it put corrections in place.&lt;br /&gt;&lt;br /&gt;So project management seems like easy money. Start the thing up, anticipate problems and help team prevent them or overcome them. Make sure communication within the team doesn't go off limits and protect team from the external world. &lt;br /&gt;&lt;br /&gt;The rest of the time sit in the office and do not distract others.&lt;br /&gt;&lt;br /&gt;This is where it gets weak when experienced by insecure manager:&lt;br /&gt;if I'm not doing anything apparently there is something wrong and my masters would not be happy with me. I need to help my team. I will get involved in some technical meetings, I will argue with technicians on technical stuff, to defend my position in the team as a power figure I will be winning arguments using 'because I say so' approach. Seeing morale plunging I will design some sophisticated work review procedures and add some procedures to uniform the team. I will talk to developers with sad voice about their performance to make them improve. At the end I might not be happy and they will probably seem miserable but whatever it takes to deliver the project. Maybe late and maybe not really tested, but we for sure all worked hard every minute of our time...&lt;br /&gt;&lt;br /&gt;So if you are a manager please remember 'do no harm' - especially if you are insecure. If you don't calculate both benefits and costs of introducing new practice, don't introduce it. If you are not sure of the outcome of the new experiment don't start it. &lt;br /&gt;&lt;br /&gt;And if you are insecure fight your insecurity with all power you have for Christ sake - you are a manager now, you are supposed to lead people.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4576882180671232399-3567064596777546200?l=onsoftwarequality.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://onsoftwarequality.blogspot.com/feeds/3567064596777546200/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4576882180671232399&amp;postID=3567064596777546200' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4576882180671232399/posts/default/3567064596777546200'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4576882180671232399/posts/default/3567064596777546200'/><link rel='alternate' type='text/html' href='http://onsoftwarequality.blogspot.com/2008/11/continuously-degrading-quality-insecure.html' title='Continuously degrading quality - insecure manager kills it all'/><author><name>Leszek Slonczynski</name><uri>http://www.blogger.com/profile/02143787248928790394</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://2.bp.blogspot.com/_ZuehATZHWIE/SUoO4ZD8HcI/AAAAAAAAAA0/KBCE4IAXeDQ/S220/ja_foto.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4576882180671232399.post-4723223251414950522</id><published>2008-11-17T01:35:00.000-08:00</published><updated>2009-01-01T02:45:47.579-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='software quality'/><category scheme='http://www.blogger.com/atom/ns#' term='software quality landscape'/><title type='text'>Attempts to define quality</title><content type='html'>So software quality can help us grow our business. Can make our customers loyal. Gives us an edge when it comes to competition.&lt;br /&gt;&lt;br /&gt;Let's define what we mean by software quality. Software quality from the user perspective is its correctness (it does what is it supposed to), reliability (it does actually work even if we deviate from tutorial), scalability (larger inputs don't get it out of balance), completeness (models whole domain it represents, ratio of quirky NYI message boxes/produced assertions is rather small), intuitiveness (user spends more time with the program than its documentation). Software quality from developer point of interest means also readability (software can be still read after several sequences of improvements), extendibility (extension of the domain doesn't require creating of separate program), maintability (if defect is found there is no need to shut down the business).&lt;br /&gt;&lt;br /&gt;And many other factors really. Anything what could support 'My program is better because' cause in ideological war between two geeks or sales-reps (on CRM system choice) would do.&lt;br /&gt;&lt;br /&gt;So software quality can be described as a vector of certain aspects of quality and our overall goal (quality engineering) would be to first normalize the vector (figure out which aspects are how important) by most likely putting weights to them and then try to maximize resulting value given resources we have or are obtainable (people, time etc). Why do we need this measure which combines all aspects into one - very often quality requirements are contradictory - to speed up application you need to sacrifice readability, to increase reliability you need to sacrifice speed etc. Don't be scared in the real world this measure is most often described in sentences like: 'reliability is the most important for us' or 'it has to be the fastest processing product' which gives you (a developer) a good framework to assess where to go when the fork on the road appears. This is also the place where projects can get dead-on-arrival status right away - if you (a manager) combine two contradicting aspects together and force developers to 'accept' them - you (still the same manager) build strong foundation for failure. Not to mention sacrificing morale of developers, who (usually) have better understanding what can and what cannot be achieved together when it comes to code construction.&lt;br /&gt;&lt;br /&gt;But back on the subject - quality seems to be a task of finding a maximum in some vertex space. When we take a closer look at any one of the aspects we find that it's characteristic is kind of monotonous - if you can apply A to improve it, and then B to improve it - overall improvement will be aggregated. That means that continuous improvement would be our method of choice. Which is a good thing as we live by continuous improvement all our lives (or at least I hope we are). Now let's think what we can be improved - it's obvious like in the old joke: code can be improved. How do we go about improving code - we need to modify something in process of its' creation or we modify it post-mortem (which is also altering process of code creation). And that's where the fun begins...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4576882180671232399-4723223251414950522?l=onsoftwarequality.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://onsoftwarequality.blogspot.com/feeds/4723223251414950522/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4576882180671232399&amp;postID=4723223251414950522' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4576882180671232399/posts/default/4723223251414950522'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4576882180671232399/posts/default/4723223251414950522'/><link rel='alternate' type='text/html' href='http://onsoftwarequality.blogspot.com/2008/11/attempts-to-define-quality.html' title='Attempts to define quality'/><author><name>Leszek Slonczynski</name><uri>http://www.blogger.com/profile/02143787248928790394</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://2.bp.blogspot.com/_ZuehATZHWIE/SUoO4ZD8HcI/AAAAAAAAAA0/KBCE4IAXeDQ/S220/ja_foto.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4576882180671232399.post-8628605995355982606</id><published>2008-10-31T04:14:00.000-07:00</published><updated>2008-12-18T01:18:21.549-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='software quality'/><title type='text'>Quality - where the buzz comes from?</title><content type='html'>The whole industry wants to produce better quality products. Why is that?&lt;br /&gt;&lt;br /&gt;Some time ago we figured out that our relation with customer is better for both parties if it is not a one night thing but more long term bond – we can mutually provide our areas of expertise (or money equivalents in some cases) and benefit from each other even after those magic novelty sparks fade away.&lt;br /&gt;&lt;br /&gt;With switching the mindset from sell &amp; run, a new concept has arisen – product maintenance. If we are in touch with the customer whenever our product misbehaves, the customer asks us why is that and expects ‘it won’t happen anymore’ answer. Unless we want to find out that our customer is now in relationship with some other (much uglier obviously) company, we have to start investing into this relationship.&lt;br /&gt;&lt;br /&gt;So now we are in sell &amp; fix business. That way we sell more, which is good, but then there is this second part – we have to fix what’s broken. The worst about it is that it costs. What comes to mind naturally is to revert to freestyle sell &amp; run approach, but then two things stop us – customers communicate among themselves and our chances of getting rejected rise significantly, and then there is this other company which does similar thing to what we do, so suddenly our customers have a possibility not to choose us. Scary stuff.&lt;br /&gt;&lt;br /&gt;So we are back in sell &amp; fix mode. We decide to face the problem of fixing. We provide maintenance service and pay the costs of fixing. And then there is this customer saying that she is tired of working on our relationship constantly and she leaves for the other company. You shout ‘pastures are always greener’ but back of the ungrateful customer is getting smaller and smaller. After the anxiety connected with rejections fades the reflection comes – apparently the customer somehow participated in costs of the fixing and that made her leave. We have to find a way to fix the problem of fixing. It was painful enough for us to pay for it. But customer leaving is too much. And then there is this beautiful idea that only broken things need fixing.&lt;br /&gt;&lt;br /&gt;So figuring out how to provide something which breaks less easily is now what’s on our mind. Improving quality it is. And suddenly it all makes sense - we invest in advance, do tests, find out weak spots, fix them. Customers are loyal and relationships expand. We are happier and happier as we provide something valuable. Our stack of pesos rises. Good old happy end.&lt;br /&gt;&lt;br /&gt;That makes the story all right. But in the real world… Well let me say I’ve seen different.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4576882180671232399-8628605995355982606?l=onsoftwarequality.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://onsoftwarequality.blogspot.com/feeds/8628605995355982606/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4576882180671232399&amp;postID=8628605995355982606' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4576882180671232399/posts/default/8628605995355982606'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4576882180671232399/posts/default/8628605995355982606'/><link rel='alternate' type='text/html' href='http://onsoftwarequality.blogspot.com/2008/10/quality-where-buzz-come-from.html' title='Quality - where the buzz comes from?'/><author><name>Leszek Slonczynski</name><uri>http://www.blogger.com/profile/02143787248928790394</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://2.bp.blogspot.com/_ZuehATZHWIE/SUoO4ZD8HcI/AAAAAAAAAA0/KBCE4IAXeDQ/S220/ja_foto.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4576882180671232399.post-3294208433219785854</id><published>2008-10-22T02:44:00.000-07:00</published><updated>2008-10-22T02:58:57.400-07:00</updated><title type='text'>Intro</title><content type='html'>I'm creating this blog to try to define/discuss what are the useful quality related practices in software development, where are the borders between what is useful and what is an overkill, what are the symptoms that disease is approaching or spreading etc. I have some experience on the subject, but I will appreciate any comments, suggestions etc as this is where I foresee potential value of this blog.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4576882180671232399-3294208433219785854?l=onsoftwarequality.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://onsoftwarequality.blogspot.com/feeds/3294208433219785854/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4576882180671232399&amp;postID=3294208433219785854' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4576882180671232399/posts/default/3294208433219785854'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4576882180671232399/posts/default/3294208433219785854'/><link rel='alternate' type='text/html' href='http://onsoftwarequality.blogspot.com/2008/10/intro.html' title='Intro'/><author><name>Leszek Slonczynski</name><uri>http://www.blogger.com/profile/02143787248928790394</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://2.bp.blogspot.com/_ZuehATZHWIE/SUoO4ZD8HcI/AAAAAAAAAA0/KBCE4IAXeDQ/S220/ja_foto.jpg'/></author><thr:total>0</thr:total></entry></feed>
