<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>The JOT Blog</title>
	<atom:link href="http://blog.jot.fm/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.jot.fm</link>
	<description>The Journal of Object Technology</description>
	<lastBuildDate>Thu, 26 Aug 2010 15:25:35 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0-RC1</generator>
		<item>
		<title>Ten Things I Hate About Object-Oriented Programming</title>
		<link>http://blog.jot.fm/2010/08/26/ten-things-i-hate-about-object-oriented-programming/</link>
		<comments>http://blog.jot.fm/2010/08/26/ten-things-i-hate-about-object-oriented-programming/#comments</comments>
		<pubDate>Thu, 26 Aug 2010 15:25:35 +0000</pubDate>
		<dc:creator>Oscar Nierstrasz</dc:creator>
				<category><![CDATA[Editorial]]></category>

		<guid isPermaLink="false">http://blog.jot.fm/?p=128</guid>
		<description><![CDATA[Boy, I some days I really hate object-oriented programming. Apparently I’m not the only one. In the immortal words of Edsger Dijkstra: “Object-oriented programming is an exceptionally bad idea which could only have originated in California.” Well, I’m not normally one to complain, but I think it is time to step back and take a [...]]]></description>
			<content:encoded><![CDATA[<p>Boy, I some days I really <em>hate</em> object-oriented programming.</p>
<p>Apparently I’m not the only one.  In the immortal words of Edsger Dijkstra: <em>“Object-oriented programming is an exceptionally bad idea which could only have originated in California.”</em></p>
<p>Well, I’m not normally one to complain, but I think it is time to step back and take a serious look at what is wrong with OOP.  In this spirit, I have prepared a modest list of <em>Ten Things I Hate About Object-Oriented Programming</em>.</p>
<h2 id=".paradigm">1. Paradigm</h2>
<p>What is the object-oriented paradigm anyway?  Can we get a straight story on this?  I have heard so many different versions of this that I really don’t know myself what it is.</p>
<p>If we go back to the origins of Smalltalk, we encounter the mantra, “Everything is an object”. Except variables.  And packages.  And primitives.  And numbers and classes are also not really objects, and so on.  Clearly “Everything is an object” cannot be the essence of the paradigm.</p>
<p>What is fundamental to OOP?  Peter Wegner once proposed that <em>objects + classes + inheritance</em> were essential to object-oriented languages [<a href="http://doi.acm.org/10.1145/38807.38823">http://doi.acm.org/10.1145/38807.38823</a>].  Every programming language, however, supports these features differently, and they may not even support them as built-in features at all, so that is also clearly not the paradigm of OOP.</p>
<p>Others argue convincingly that OOP is really about <em>Encapsulation</em>, <em>Data Abstraction</em> and <em>Information Hiding</em>.  The problem is that some sources will tell you that these are just different words for the same concepts.  Yet other sources tell us that the three are fundamentally different in subtle ways.</p>
<p>Since the mid-eighties, several myths have been propagated about OOP.  One of these is <em>the Myth of Reuse</em>, which says that OOP makes you more productive because instead of developing your code from scratch, you can just inherit from existing code and extend it.  The other is <em>the Myth of Design</em>, which implies that analysis, design and implementation follow seamlessly from one another because <em>it’s objects all the way down</em>.  Obviously neither of these candidates could really be the OO paradigm.</p>
<p>Let’s look at other paradigms which offer a particular way to solve programming problems.  Procedural programming is often described as <em>programs = data + algorithms</em>.  Logic programming says <em>programs = facts + rules</em>.  Functional programming might be <em>programs = functions + functions</em>.  This suggest that OOP means <em>programs = objects + messages</em>.  Nice try, but this misses the point, I think.</p>
<p>For me the point of OOP is that it <em>isn’t</em> a paradigm like procedural, logic or functional programming.  Instead, OOP says “for every problem you should design your own paradigm”.  In other words, the OO paradigm really is: <em>Programming is Modeling</em></p>
<h2 id=".object-orientedprogramminglanguages">2. Object-Oriented Programming Languages</h2>
<p>Another thing I hate is the way that everybody loves to hate the other guy’s programming language.  We like to divide the world into curly brackets vs square brackets vs round brackets.</p>
<p>Here are some of the nice things that people have said about some of our favorite OOPLs:</p>
<p><em>“C makes it easy to shoot yourself in the foot; C++ makes it harder, but when you do, it blows away your whole leg.”</em></p>
<p>It was Bjarne Stroustrup who said that, so that’s ok, I guess.</p>
<p><em>“Actually I made up the term ‘object-oriented’, and I can tell you I did not have C++ in mind.”</em> — Alan Kay</p>
<p><em>“There are only two things wrong with C++: The initial concept and the implementation.”</em> — Bertrand Meyer</p>
<p><em>“Within C++, there is a much smaller and cleaner language struggling to get out.”</em> — Bjarne Stroustrup</p>
<p><em>“C++ is history repeated as tragedy.  Java is history repeated as farce.”</em> — Scott McKay</p>
<p><em>“Java, the best argument for Smalltalk since C++.”</em> — Frank Winkler</p>
<p><em>“If Java had true garbage collection, most programs would delete themselves upon execution.”</em> — Robert Sewell</p>
<p>But perhaps the best blanket condemnation is the following:</p>
<p><em>“There are only two kinds of languages: the ones people complain about and the ones nobody uses.”</em> — Bjarne Stroustrup</p>
<h2 id=".classes">3. Classes</h2>
<p>Classes drive me crazy.  That might seem strange, so let me explain why.</p>
<p>Clearly classes should be great.  Our brain excels at classifying everything around us.  So it seems natural to classify everything in OO programs too.</p>
<p>However, in the real world, there are only objects.  <em>Classes exist only in our minds.</em> Can you give me a single real-world example of class that is a true, physical entity?  No, I didn’t think so.</p>
<p>Now, here’s the problem. Have you ever considered why it is so much harder to understand OO programs than procedural ones?</p>
<p>Well, in procedural programs procedures call other procedures.  Procedural source code shows us … procedures calling other procedures.  That’s nice and easy, isn’t it?</p>
<p>In OO programs, objects send messages to other objects.  OO source code shows us … classes inheriting from classes.  Oops.  There is a complete disconnect in OOP between the source code and the runtime entities.  Our tools don’t help us because our IDEs show us classes, not objects.</p>
<p>I think that’s probably why Smalltalkers like to program in the debugger.  The debugger lets us get our hands on the running objects and program them directly.</p>
<p>Here is my message for tool designers: please give us an IDE that shows us objects instead of classes!</p>
<h2 id=".methods">4. Methods</h2>
<p>To be fair, I hate methods too.</p>
<p>As we have all learned, methods in good OO programs should be short and sweet.  Lots of little methods are good for development, understanding, reuse, and so on.  Well, what’s the problem with that?</p>
<p>Well, consider that we actually spend more time reading OO code than writing it.  This is what is known as productivity.  Instead of spending many hours writing a lot of code to add some new functionality, we only have to write a few lines of code to get the new functionality in there, but we spend many hours trying to figure out <em>which</em> few lines of code to write!</p>
<p>One of the reasons it takes us so long is that we spend much of our time bouncing back and forth between … lots of little methods.</p>
<p>This is sometimes known as the <em>Lost in Space</em> syndrome.  It has been reported since the early days of OOP.  To quote Adele Goldberg, <em>“In Smalltalk, everything happens somewhere else.”</em></p>
<p>I believe that the code-oriented view of today’s IDEs is largely to blame — given that OO code does not accurately reflect the running application, the IDE gets in our way instead of helping us to bridge the gap.  Another reason I believe that Smalltalkers like to develop in the debugger is that it lets them clearly see which <em>objects</em> are communicating with which other <em>objects</em>.  I am guessing that one of the reasons that Test-Driven Development is popular is that it also exposes object interactions during development.</p>
<p>It is not OOP that is broken — we just haven’t figured out (after over 40 years) how best to develop with it.  We need to ask ourselves: <em>Why should the source code be the dominant view in the IDE?</em></p>
<p>I want an IDE that lets me jump from the <em>running application</em> to the code and back again.  (For a demonstration of this idea, have a look at the Seaside web development platform which allows you to navigate directly from a running web application to the editable source code. [<a href="http://seaside.st">http://seaside.st</a>])</p>
<h2 id=".types">5. Types</h2>
<p>OK, I admit it.  I am an impatient guy, and I hate having to say everything twice.  Types force me to do that.</p>
<p>I’m sure some of you are thinking — “Oh, how could you program in an <em>untyped</em> language. You could never be sure your code is correct.”</p>
<p>Of course there is no such thing as an “untyped” programming language — there are just statically and dynamically typed ones.  Static types just prevent you from writing certain kinds of code.  There is nothing wrong with that, in principle.</p>
<p>There are several problems, however, with types as we know them.  First of all they tend to lead to a false sense of security.  Just because your Java program compiles does not mean it has no errors (even type errors).</p>
<p>Second of all, and much more evil, is that type systems assume the world is consistent, <em>but it isn’t!</em> This makes it harder to write certain useful kinds of programs (especially reflective ones).  Type systems cannot deal well with the fact that programs change, and that different bits of complex systems may not be consistent.</p>
<p>Finally, type systems don’t cope well with the fact that <em>there are different useful notions of types.</em> There is no one type system to rule them all.  Recall the pain we experienced to extend Java with generics.  These days there are many interesting and useful type systems being developed, but we cannot extend Java to accommodate them all.  Gilad Bracha has proposed that type systems should not only be <em>optional</em>, in the sense that we should be able to run programs even if the type system is unhappy, but that they should be <em>pluggable</em>, meaning that we can plug multiple type systems into different parts of our programs. [<a href="http://bracha.org/pluggableTypesPosition.pdf">http://bracha.org/pluggableTypesPosition.pdf</a>]  We need to take this proposal seriously and explore how our languages and development tools can be more easily adapted to diverse type systems.</p>
<h2 id=".change">6. Change</h2>
<p><em>“Change is inevitable — except from a vending machine.”</em> — Robert C. Gallagher</p>
<p>We all hate change, right?  So, if everyone hates change, why do we all complain when things don’t get better?  We know that useful programs must change, or they degrade over time.</p>
<p>(Incidentally, you know the difference between hardware and software? Hardware degrades if you <em>don’t</em> maintain it.)</p>
<p>Given that real programs must change, you would think that languages and their IDEs would support this.  I challenge you, however, to name a <em>single</em> programming language mechanism that supports change.  Those mechanisms that do deal with change restrict and control it rather than enable it.</p>
<p>The world is not consistent, but we can cope with that just fine.  <em>Context</em> is a great tool for managing change and inconsistency.  We are perfectly comfortable adapting our expectations and our behavior in our daily lives depending on the context in which we find ourselves, but the programs we write break immediately if their context changes.</p>
<p>I want to see context as a first-class concept in OO languages and IDEs.  Both source code and running software should be able to adapt to changing context.  I believe that many design patterns and idioms (such as visitors, and dependency injection) are simply artifacts of the lack of support for context, and would disappear if context were available as a first-class construct.</p>
<h2 id=".designpatterns">7. Design Patterns</h2>
<p>Patterns.  Can’t live with ’em, can’t live without ’em.</p>
<p>Every single design pattern makes your design more complicated.</p>
<p>Visitors. I rest my case.</p>
<h2 id=".methodologies">8. Methodologies</h2>
<p><em>“All methodologies are based on fear.”</em> — Kent Beck</p>
<p>Evidently some of my students follow the Chuck Norris school of Agile Development:</p>
<p><em>“Chuck Norris pairs alone.”</em></p>
<p><em>“Chuck Norris doesn’t do iterative development. It’s right the first time, every time.”</em></p>
<p><em>“Chuck Norris doesn’t do documentation. He stares down the code until it tells him everything he wants to know.”</em></p>
<h2 id=".uml">9. UML</h2>
<p>Bertrand Meyer tells this story about always wondering why diagrammatic modeling languages were always so popular, until one day it hit him: <em>“Bubbles don’t crash.”</em> I believe his point is that OO languages <em>are</em> modeling languages. (AKA “All you need is code”)</p>
<p>There similarly appears to be something fundamentally wrong with model-driven development as it is usually understood — instead of <em>generating</em> code from models, the model should <em>be</em> the code.</p>
<p>By analogy, when FORTRAN was invented, it was sold as a high-level language from which <em>source code</em> would be generated.   Nowadays we think of the high-level languages as <em>being</em> the source code.</p>
<p>I like to think that one day, when we grow up, perhaps we will think of the <em>model</em> as being the source code.</p>
<h2 id="0.thenextnewthing">10. The Next New Thing</h2>
<p>Finally, I hate the catchphrase: “Objects are not enough.  We need …”  Over the years we have needed frameworks, components, aspects, services (which, curiously, seems to bring us back to procedural programming!).</p>
<p>Given the fact that objects clearly <em>never</em> were enough, isn’t it odd that they have served us so well over all these years?</p>
<h2 id="conclusion">Conclusion?</h2>
<p>25 years ago we did not expect object-oriented programming to last as a “new” phenomenon for so long.  We thought that OO conferences like ECOOP, OOPSLA and TOOLS would last for 4 or 5 years and then fade into the mainstream.  It is too soon to dismiss OOP as just being part of the mainstream.  Obviously we cannot feel passionately about something that does not interest us.  The fact that academic and industrial research is still continuing suggests that there is something deep and important going on that we do not yet fully understand.</p>
<p>OOP is about taming complexity through modeling, but we have not mastered this yet, possibly because we have difficulty distinguishing real and accidental complexity.</p>
<p>I believe that to make further progress we must <em>focus on change</em> and how OOP can facilitate change.  After all these years, we are still in the early days of OOP and understanding what it has to offer us.</p>
<p>Oscar Nierstrasz<br />
<em>[Banquet speech given at ECOOP 2010. Maribor, June 24, 2010]</em></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.jot.fm/2010/08/26/ten-things-i-hate-about-object-oriented-programming/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>The Trouble with Configuration Management</title>
		<link>http://blog.jot.fm/2010/08/01/the-trouble-with-configuration-management/</link>
		<comments>http://blog.jot.fm/2010/08/01/the-trouble-with-configuration-management/#comments</comments>
		<pubDate>Sun, 01 Aug 2010 00:19:04 +0000</pubDate>
		<dc:creator>John McGregor</dc:creator>
				<category><![CDATA[Column]]></category>

		<guid isPermaLink="false">http://blog.jot.fm/?p=104</guid>
		<description><![CDATA[The trouble with configuration management in some large technical organizations is that it is not just configuration management. An organization often assigns to a single role responsibility for software builds, configuration management (which often includes change management), and releases of products to customers. While these responsibilities are mutually dependent they are distinct roles, have different [...]]]></description>
			<content:encoded><![CDATA[<p>The trouble with configuration management in some large technical organizations is that it is not just configuration management. An organization often assigns to a single role responsibility for software builds, configuration management (which often includes change management), and releases of products to customers. While these responsibilities are mutually dependent they are distinct roles, have different goals, and require very different skills. When we evaluate a product line organization this role is often identified as a source of problems. One or more of the dimensions is either neglected or incorrectly executed by the personnel assigned to the position.</p>
<p>There are several issues related to this approach. People in this integrated role are often not familiar with how software development will be carried out on a specific project and as a result they will often design a repository structure that does not permit, or at least hinders, parallel development. This has to do with the grain size of each versioned blob and the dependencies among blobs. A poor structure results in the possibility of two people needing to working on the same file at the same time. Developers who are unaware of the structure of the repository or who do not understand how that structure relates to the structure of the products will not be able to write build scripts that are sufficiently modular to be reused at every level up the aggregation hierarchy and may codify dependencies incorrectly resulting in an improperly linked module.</p>
<p>The CM staff will also define one process that is applied to both development activities and delivery activities. While this makes the release part of the CM job simpler, it slows down the development process which needs quick, frequent access to repositories to commit, update, and retrieve program elements. Some companies address this by having separate development and release CM processes without sufficiently differentiating between the processes.</p>
<p>First I will talk about the goals of each role, then the required skills, and finally dependencies among the roles. I will describe a company doing it right and will briefly describe how they perform these three functions.</p>
<h2>Goals</h2>
<p>Each of these roles has a specific goal that distinguishes it from the other roles.</p>
<p>The goal of the build role is to provide an executable that reflects the current development state of the product. Often legacy modules are not recompiled during a build. This is sometimes because of the time it would take to build the module but more often it is because there is a risk that the module will not build in the current environment. The result of partial recompilation can be that other modules that have changed and should be rebuilt aren’t.  Building is a sufficiently complex task that many organizations require an independent auditor to witness the actual building to affirm that the correct modules were used to produce an executable with no errors.</p>
<p>The goal of the (real) configuration management role is to allow controlled changes to the source code by multiple people at the same time while protecting the integrity of previous work. This sounds simple, but in an environment such as a software product line it is not so simple. The structure of the repository of versions of the code facilitates specific development patterns more than others. The CM role must anticipate the eventual complexity of a development effort that will involve multiple players for multiple products. In a software product line the emphasis is on multiple references from multiple products to single copies of assets.</p>
<p>The goal of release management is to deliver to the customer a complete and consistent set of modules and resources that represent a correct product at a specific point in time. The product release and related resources such as the installation mechanism must be tested and the release manager determines whether particular features meet quality standards. Each release represents a build that has a permanent life in the CM system.</p>
<h2>Skills</h2>
<p>The build role needs an understanding of the product architecture, compile and link time variation points, and, obviously, the build tools. The build manager assures that the final build and installation package includes all the required resources including appropriate licenses.  In a software product line, the build script for a product specifies a configuration of the product with compile and link time variations resolved.  The script is placed under management because it captures the variant choices. The build role provides build automation to the development and test staff. In many projects every commit is a compile and test before the commit is confirmed. If every developer commits every day the organization has “always running” code. I have developed for many years using this style and it is a very efficient approach, but it is only feasible if the builds and tests are automatic.</p>
<p>The configuration management role requires knowledge of design, variation mechanisms, and the development process. The structure of the repository must support the approach taken to development. Some parallelism in work is required. The CM process should support concurrent work in a baseline. One way this happens is by having assigned ownership of assets so that only one person does work in a specific asset. Or at least having a separate trunk for each asset with only one person allowed in the asset at a time. Newer build tools allow logical references to files removing the need to physically copy code, but many organizations still do copy and are then faced with a diverging code base.</p>
<p>Release management requires an individual who understands the development process, the needs of the customer, the install time variations, and the paperwork required to support a release.  In many companies the release manager is responsible for negotiating with the customer and development team for what will be ready for delivery in the next release and by what date. The manager determines that every module in the release has been through the full life cycle and is ready for release. The release manager is also responsible for assembling the installation package. Automation is critical to be able to exactly repeat a build and to quickly get ready for the next build.</p>
<p>Every project should establish and maintain a regular schedule of releases.  This steady rhythm will establish a positive expectation on the part of clients. Many large open source projects release nightly builds, which are less well tested than the periodic stable builds. Software product line organizations often make both core asset and product releases on a regular schedule. Eclipse creates a stable, deliverable build for a large percentage of its project twice a year with nightly builds in-between. While the rhythms may vary from one organization to another, this is still a useful approach.</p>
<h2>Dependencies</h2>
<p>The three roles all manipulate the source code for the products. Essentially CM manages a set of files, some subset of which are selected to be built together, and the result of that build is the key element in a release. While the build process could take place with almost any physical organization of the code, the CM role can facilitate the build process through the structures that are chosen. An organization of the code that reflects some logical structure can reduce the chances of build errors. Clear labeling of versions allows for the automatic generation of new build scripts. The Build role needs to understand the content of a release and know any specific constraints for resolving any compile/link time variations.</p>
<p><a href="http://blog.jot.fm/wp-content/uploads/2010/07/fig1.png"><img class="alignleft size-full wp-image-111" src="http://blog.jot.fm/wp-content/uploads/2010/07/fig1.png" alt="" width="656" height="304" /></a></p>
<p style="text-align: center"><em>Figure 1 Interdependencies</em></p>
<p style="text-align: left">CM needs to know logical dependencies among the source files. The CM role captures a complete snapshot of its database for each release. This does not have to be a separate copy. It can be a versioned script that specifies a specific version for every element in the release. This goes beyond the scope of a “build” which is limited to the elements needed to compile and link the code to produce an executable. The copy includes all tests, test results, the development environment, and more.</p>
<p>The release role needs to know the exact contents of a release, which means the contents of one of many builds and the structure of the repository. If build scripts are managed in the repository by the CM function than the release role can retrieve a specific one at any time.</p>
<h2>A Modest Proposal</h2>
<p>Much of this confusion can be clarified by automating the build process and treating the build script, which may be more than a single text file, as a first class object. In fact, the build script should be thought of as the product. The script is placed under management and is versioned as changes are made to the contents of the product. The CM role creates a structure for the product that will include the build script and any product unique code. The build role creates the script and submits it to the configuration management system. The release of a product simply requires that the build script be baselined, references into the core asset base are changed from relative to absolute addresses, a separate branch is created to assemble the elements of the product.</p>
<p>Even if the three roles are assigned to a single person, this is a sufficiently simple process that can be handled by a single person. Many tools such as Eclipse and Visual Studio support this approach with integrated build tools. Eclipse has several projects such as Buckminster and b3 that manage the build process (and much more) and consist of artifacts that can be managed in the configuration management system.</p>
<h2>Case in Point</h2>
<p>My example company will have to remain anonymous but it is a major software development house specializing in a single domain but producing a software product line of consumer and professional products in that domain. This company separates the build, CM, and release roles and is large enough to have several people in each role.</p>
<p>Build – Building a product begins with builds of individual executables. These builds are initiated by development team members.  The owner of a module develops a build script for that module. Successive layers of integration also produce build scripts that utilize the lower level scripts to build from the ground up. Finally each product has a script that automates the instantiation of the lower level pieces. Since a fundamental responsibility of the build role is to ensure that the correct code is compiled and linked, this bottom up aggregation of scripts provides a natural traceability mechanism.</p>
<p>CM – The configuration management is largely automated at the start of a project. The structure of the core asset base has been fixed for some time and each new product sets up to utilize that base in their scheme. The developer sets up a directory structure for their code and includes references to each core asset used rather than copying the asset into their project. The CM role establishes and evolves the basic structure and is responsible for “baselining” deliveries, which only requires creating a branch for the build scripts and making variable references in the script to the latest versions of assets into fixed references to specific versions of those assets instead.</p>
<p>Release management – The role of release manager carries both responsibility and authority.  Once a delivery date is set and the scope of the release is negotiated with all development streams, the release manager has the authority to remove a feature from a product if including that feature puts the delivery date at risk.   The manager also has the responsibility to ensure that any included features have been appropriately tested and have satisfied quality requirements. The release itself is based on the baselined build scripts that have been used from initial development through testing and now to release.</p>
<h2>Summary</h2>
<p>These infrastructure roles are important to the success of any software development effort but they are particularly critical in a software product line organization. The role definitions and training for each role need to be sharply focused and we need to push for trained personnel in each role. In the event that two or more of these roles are assigned to the same person, controls should be put in place to ensure even-handed and competent treatment in each of the three areas.</p>
<p>Running through this entire discussion is the notion of automation. There are many tools that can be used make building, change management, and product release much more repeatable and robust. Most of these tools support a variety of process structure and styles but most also make the lines between the three roles much more discernable.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.jot.fm/2010/08/01/the-trouble-with-configuration-management/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Word template for JOT submissions is now available</title>
		<link>http://blog.jot.fm/2010/07/28/word-template-for-jot-submissions-is-now-available/</link>
		<comments>http://blog.jot.fm/2010/07/28/word-template-for-jot-submissions-is-now-available/#comments</comments>
		<pubDate>Wed, 28 Jul 2010 12:45:40 +0000</pubDate>
		<dc:creator>Oscar Nierstrasz</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://blog.jot.fm/?p=108</guid>
		<description><![CDATA[This new template can be downloaded from the information for authors page. It mimics the LaTeX template as far as possible. To use the Word template you should install the Computer Modern fonts (instructions provided).]]></description>
			<content:encoded><![CDATA[<p>This new template can be downloaded from the <a href="http://www.jot.fm/authors.html" target="_blank">information for authors</a> page. It mimics the LaTeX template as far as possible. To use the Word template you should install the Computer Modern fonts (instructions provided).</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.jot.fm/2010/07/28/word-template-for-jot-submissions-is-now-available/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Announcing JOT Volume 9, Number 4 (July 2010)</title>
		<link>http://blog.jot.fm/2010/07/08/announcing-jot-volume-9-number-4-july-2010/</link>
		<comments>http://blog.jot.fm/2010/07/08/announcing-jot-volume-9-number-4-july-2010/#comments</comments>
		<pubDate>Thu, 08 Jul 2010 09:07:01 +0000</pubDate>
		<dc:creator>Oscar Nierstrasz</dc:creator>
				<category><![CDATA[Issue TOC]]></category>

		<guid isPermaLink="false">http://blog.jot.fm/?p=92</guid>
		<description><![CDATA[JOT Volume 9, no. 4 (July 2010) Editorial: Introducing the New JOT By: Oscar Nierstrasz HTML Article: A Dependence Representation for Coverage Testing of Object-Oriented Programs By: ESF Najumudheen, Rajib Mall, Debasis Samanata Abstract We propose a dependence-based representation for object-oriented programs, named Call-based Object-Oriented System Dependence Graph (COSDG). Apart from structural features, COSDG captures [...]]]></description>
			<content:encoded><![CDATA[<h1>JOT <a class="issue" href="http://www.jot.fm/contents/issue_2010_07.html">Volume 9, no. 4 (July 2010)</a></h1>
<h2>Editorial: <a class="article" href="http://www.jot.fm/contents/issue_2010_07/editorial.html">Introducing the New JOT</a></h2>
<p>By: Oscar Nierstrasz</p>
<p><a class="html" href="http://blog.jot.fm/2010/06/30/introducing-the-new-jot/" target="_blank">HTML</a></p>
<h2>Article: <a class="article" href="http://www.jot.fm/contents/issue_2010_07/article1.html">A Dependence Representation for Coverage Testing of Object-Oriented Programs</a></h2>
<p>By: ESF Najumudheen, Rajib Mall, Debasis Samanata</p>
<h3>Abstract</h3>
<p>We propose a dependence-based representation for object-oriented programs, named Call-based Object-Oriented System Dependence Graph (COSDG). Apart from structural features, COSDG captures important object-oriented features such as class, inheritance, polymorphism, and dynamic binding. Novel features of COSDG include details of method visibility in a derived class, and different types of method call edges to distinguish between various calling contexts &#8212; simple, inherited, and polymorphic. We also propose an algorithm for the construction of COSDG, and subsequently explain its working with an example. COSDG has been developed primarily to aid test coverage analysis. However, it can be used in a variety of other software engineering applications such as program slicing, software re-engineering, debugging, etc.</p>
<p><a class="pdf" href="http://www.jot.fm/issues/issue_2010_07/article1.pdf" target="_blank">PDF</a></p>
<h2>Article: <a class="article" href="http://www.jot.fm/contents/issue_2010_07/article2.html">A UML and Colored Petri Nets Integrated Modeling and Analysis Approach using Graph Transformation</a></h2>
<p>By: Elhillali Kerkouche, Algeria Allaoua Chaoui, El Bay Bourennane, Ouassila Labbani</p>
<h3>Abstract</h3>
<p>Nowadays, UML is considered to be the standardized language for object-oriented modeling and analysis. However, UML cannot be used for automatic analyses and simulation. In this paper, we propose an approach for transforming UML statechart and collaboration diagrams to Colored Petri net models. This transformation aims to bridge the gap between informal notation (UML diagrams) and more formal notation (Colored Petri net models) for analysis purposes. It produces highly-structured, graphical, and rigorously-analyzable models that facilitate early detection of errors such as deadlock and livelock. The approach is based on graph transformations where the input and output of the transformation process are graphs. The meta-modeling tool AToM3 is used. A case study is presented to illustrate our approach.</p>
<p><a class="pdf" href="http://www.jot.fm/issues/issue_2010_07/article2.pdf" target="_blank">PDF</a></p>
<h2>Article: <a class="article" href="http://www.jot.fm/contents/issue_2010_07/article3.html">Extending Scala with Database Query Capability</a></h2>
<p>By: Miguel Garcia, Anastasia Izmaylova, Sibylle Schupp</p>
<h3>Abstract</h3>
<p>The integration of database and programming languages is difficult due to the different data models and type systems prevalent in each field. We present a solution where the developer may express queries encompassing program and database data. The notation used for queries is based on comprehensions, a declarative style that does not impose any specific execution strategy. In our approach, the type safety of language-integrated queries is analyzed at compile-time, followed by a translation that optimizes for database evaluation. We show the translation total and semantics preserving, and introduce a language-independent classification. According to this classification, our approach compares favorably with Microsoft&#8217;s LINQ, today&#8217;s best known representative. We provide an implementation in terms of Scala compiler plugins, accepting two notations for queries: LINQ and the native Scala syntax for comprehensions. The prototype relies on Ferry, a query language that already supports comprehensions yet targets SQL:1999. The reported techniques pave the way for further progress in bridging the programming and the database worlds.</p>
<p><a class="pdf" href="http://www.jot.fm/issues/issue_2010_07/article3.pdf" target="_blank">PDF</a></p>
<h2>Article: <a class="article" href="http://www.jot.fm/contents/issue_2010_07/article4.html">REquirements, Aspects and Software Quality: the REASQ model</a></h2>
<p>By: Isi Castillo, Francisca Losavio, Alfredo Matteo, Jørgen Bøegh</p>
<h3>Abstract</h3>
<p>Object-oriented analysis and design have been more concerned with system functionality, neglecting non functional aspects; the result is code entanglement, difficult to maintain, contradicting main principles of object orientation. Aspect Oriented Software Development (AOSD) proposes the early specification of non functional requirements. However, a standard and homogenous vision of the AOSD terminology is still missing. The goal of this work is to integrate AOSD concepts, classic requirements engineering notions, and the new standard ISO/IEC 25030 on software quality requirements.The main result of this study is the REASQ (REquirements, Aspects and Software Quality) conceptual model, expressed in UML. All the modeling concepts are formalized into three related ontologies, representing the ambits of aspect-orientation, software quality and requirements engineering. The ontologies can be used as an umbrella to specify quality requirements in aspect-oriented engineering processes.</p>
<p><a class="pdf" href="http://www.jot.fm/issues/issue_2010_07/article4.pdf" target="_blank">PDF</a></p>
<h2>Article: <a class="article" href="http://www.jot.fm/contents/issue_2010_07/article5.html">Using a Situational Method Engineering Approach to Identify Reusable Method Fragments from the Secure TROPOS Methodology</a></h2>
<p>By: Graham Low, Haris Mouratidis, Brian Henderson-Sellers</p>
<h3>Abstract</h3>
<p>Situational method engineering (SME) has as a focus a repository of method fragments, gleaned from extant methodologies and best practice. Using one such example, the OPF (OPEN Process Framework) repository, we identify deficiencies in the current SME support for security-related issues in the context of agent-oriented software engineering. Specifically, theoretical proposals for the development of reusable security-related method fragments from the agent-oriented methodology Secure Tropos are discussed. Since the OPF repository has already been enhanced by fragments from Tropos and other non-security-focussed agent-oriented software development  methodologies, the only method fragments from Secure Tropos not already contained in this repository are those that are specifically security-related. These are identified, clearly defined and recommended for inclusion in the current OPF repository of method fragments.</p>
<p><a class="pdf" href="http://www.jot.fm/issues/issue_2010_07/article5.pdf" target="_blank">PDF</a></p>
<h2>Review: <a class="article" href="http://www.jot.fm/contents/issue_2010_07/review1.html">Succeeding With Agile: Software Development Using Scrum, by Mike Cohn</a></h2>
<p>By: Charles Ashbacher</p>
<p><a class="html" href="http://blog.jot.fm/review-of-succeeding-with-agile/" target="_blank">HTML</a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.jot.fm/2010/07/08/announcing-jot-volume-9-number-4-july-2010/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Review of &#8220;Succeeding With Agile: Software Development Using Scrum&#8221;, by Mike Cohn</title>
		<link>http://blog.jot.fm/2010/06/30/review-of-succeeding-with-agile-software-development-using-scrum-by-mike-cohn/</link>
		<comments>http://blog.jot.fm/2010/06/30/review-of-succeeding-with-agile-software-development-using-scrum-by-mike-cohn/#comments</comments>
		<pubDate>Wed, 30 Jun 2010 07:55:37 +0000</pubDate>
		<dc:creator>Charles Ashbacher</dc:creator>
				<category><![CDATA[Book Review]]></category>

		<guid isPermaLink="false">http://blog.jot.fm/?p=73</guid>
		<description><![CDATA[Review of Succeeding With Agile: Software Development Using Scrum, by Mike Cohn, Addison-Wesley, Boston, Massachusetts, 2010. 475 pp., $49.99(paper) ISBN 978-0-321-57936-2. Reviewed by Charles Ashbacher One of the easiest things to do in print is to praise a strategy or set of tactics used to perform difficult tasks. When all you are doing is simply [...]]]></description>
			<content:encoded><![CDATA[<p>Review of<img src="http://www.jot.fm/images/blog/succeeding-with-agile-software-development-using-scrum.jpg" alt="Book cover -- Succeeding with Agile" width="20%" align="right" /></p>
<p>Succeeding With Agile: Software Development Using Scrum, by Mike Cohn, Addison-Wesley, Boston, Massachusetts, 2010. 475 pp., $49.99(paper) ISBN 978-0-321-57936-2.</p>
<p>Reviewed by Charles Ashbacher</p>
<p>One of the easiest things to do in print is to praise a strategy or set of tactics used to perform difficult tasks. When all you are doing is simply expounding the stated virtues of a methodology, you are somewhat free to use hype, anecdotal information and instance proofs of success. Implementation details and explanations of logical and frequent difficulties encountered by practitioners of the methodology are ignored or minimized.</p>
<p>That is not the case in this book, Cohn describes the agile software development process and he provides extensive examples of the use of the Scrum methodology and the difficulties commonly encountered. It is easy to understand the hesitation that development teams will have when considering the adoption of Scrum. The development of large software projects is the most complex task that humans have ever undertaken; even a single wrong character out of millions can break a program. The appearance of the relaxation of controls of the process can appear counterintuitive, as it seems that would allow for additional errors to slip through the weakened defenses.</p>
<p>Cohn goes to great lengths to demonstrate how Scrum will strengthen those defenses by reducing the likelihood that errors will survive for very long. Splitting the process into short spurts means that all minds can be on deck and their focus will be on a small set of parameters. This is a way to make minds smarter without actually having to be smarter. Cohn also joins the collective clamor against the extensive use of overtime as a way to compress the time to completion. Evidence going back decades is completely convincing that when it is brainwork, overtime can only increase productivity for a short time. Intellectual fatigue rapidly sets in and after approximately three weeks, the productivity level begins to drop down to less that what is achieved in a standard forty-hour week.</p>
<p>Charts, graphs and tables are used to support the arguments made for the adoption and intelligent use of Scrum. Convincing a team to adopt Scrum is essentially using facts and demonstrated rewards to overcome emotional barriers and the natural unwillingness to execute change. This cannot be done in any way other than by starting with the reality of current problems, giving multiple demonstrations that it can work and then detailed explanations of how to overcome common obstacles that are encountered. Cohn does all of this very well; this book is an excellent point to begin the study and adoption of Scrum.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.jot.fm/2010/06/30/review-of-succeeding-with-agile-software-development-using-scrum-by-mike-cohn/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Introducing the new JOT</title>
		<link>http://blog.jot.fm/2010/06/30/introducing-the-new-jot/</link>
		<comments>http://blog.jot.fm/2010/06/30/introducing-the-new-jot/#comments</comments>
		<pubDate>Wed, 30 Jun 2010 07:54:56 +0000</pubDate>
		<dc:creator>Oscar Nierstrasz</dc:creator>
				<category><![CDATA[Editorial]]></category>

		<guid isPermaLink="false">http://blog.jot.fm/?p=42</guid>
		<description><![CDATA[This issue of JOT marks a number of changes in the goals, process, appearance and format of the Journal of Object Technology. The object-oriented research community needs a strong archival journal commanding the right level of scientific respect. JOT, the Journal of Object Technology, published by Bertrand Meyer at ETH and edited by Richard Wiener [...]]]></description>
			<content:encoded><![CDATA[<p>This issue of JOT marks a number of changes in the goals, process, appearance and format of the Journal of Object Technology.</p>
<p>The object-oriented research community needs a strong archival journal commanding the right level of scientific respect. JOT, the Journal of Object Technology, published by Bertrand Meyer at ETH and edited by Richard Wiener since 2002, is the spiritual successor to JOOP, the Journal of Object-Oriented Programming. JOT has combined aspects of a traditional scientific journal with scientific-magazine-style features such as columns. In the absence of any other reference publication in the field, a group of researchers including Bertrand Meyer and myself has taken the initiative to devise a new, expanded formula for JOT, which will emphasize the research orientation and instill high standards of refereeing, while retaining some of the industry-oriented features that have sustained the success of JOT over the past eight years.</p>
<p>Periodic and regular rotation of staff is important to keep a volunteer organization healthy.  Accordingly, this issue of JOT introduces <a title="JOT Masthead" href="http://www.jot.fm/masthead.html" target="_blank">a new editorial board</a>, mandated to establish the highest scientific quality for JOT research contributions by actively soliciting strong submissions and by applying rigorous review standards to submitted papers.  Terms for associate editors and the editor-in-chief are normally two years, renewable once.  A separate <a title="JOT Masthead" href="http://www.jot.fm/masthead.html" target="_blank">steering committee</a> now oversees the editorial process and all other strategic and management decisions.</p>
<p>The JOT <a title="JOT Submission process" href="http://www.jot.fm/submission.html" target="_blank">submission and review process</a> has been thoroughly revised to ensure full transparency, high standards of refereeing, and rapid turnaround.  Papers judged to be within scope will normally be reviewed by three expert referees, and a final decision should be given within 3 months.  During 2010, JOT will be emptying its pipeline of accepted papers so that, starting January 2011, papers will be published as soon as the final camera-ready version is available.  In a change with JOT&#8217;s former policy, authors will retain their copyright, instead signing a simplified copyright agreement. JOT also plans to introduce <a title="Wikipedia" href="http://en.wikipedia.org/wiki/Digital_object_identifier" target="_blank">Digital Object Identifiers</a> for all accepted research contributions. <a title="AITO" href="http://aito.org/" target="_blank">AITO</a> (Association Internationale pour les Technologies Objets) has agreed to sponsor JOT, thus guaranteeing the future of the web site and the digital object identifiers.</p>
<p>The JOT format will be modified to clearly distinguish peer-reviewed research contributions from reviews, columns, and other non-research contributions.  Instead of publishing all contributions in both HTML and PDF, research contributions will be published only in a newly-design PDF format, suitable for printing as well as on-line viewing, whereas non-research contributions will appear exclusively on-line.  In additional to regular research papers, JOT will also explicitly welcome state-of-the-art surveys and tutorials for emerging research fields.  These contributions will undergo the usual peer-review process for research contributions.</p>
<p>The JOT web site has also been completely redesigned to be generated from metadata describing individual articles. This strategy eliminates the need for manual authoring of web pages for articles and issues, thus reducing the potential for errors while facilitating the gradual integration of new features into the web site, such as the automatic generation of BiBTeX entries for published articles.  A separate WordPress blog is also being introduced with this issue, to host all non-research contributions (such as this editorial) and JOT announcements.  Postings will automatically appear in the JOT RSS and Twitter feeds, thus providing more modern mechanisms to notify subscribers of new content and offering more convenient means to offer timely feedback.</p>
<p>I believe that JOT is well placed to establish itself as a unique open-access archival journal dedicated to all aspects of object technology, but we need your help and contributions to achieve this. An important milestone will be to have JOT listed in the best known indexes, such as the ISI Web of Science, but the <a title="ISI Selection Process" href="http://science.thomsonreuters.com/mjl/selection/" target="_blank">selection process</a> can be time-consuming. JOT can only establish itself as an &#8220;A&#8221; journal through a concerted community effort.</p>
<p>There are several things you can do to help. First, subscribe to JOT (by <a title="Subscribe to JOT newsletter" href="mailto:jot-subscribe@jot.fm">email</a>, <a title="JOT RSS Feed" href="http://blog.jot.fm/feed/">RSS</a> or <a title="JOT Twitter Feed" href="http://twitter.com/jotfm" target="_blank">Twitter</a>) and spread the word.  Second, cite JOT publications in your work.  Third, contribute full or expanded versions of your best research results to JOT, and encourage colleagues to do the same.  We especially welcome expanded versions of high quality conference and workshop contributions.  Finally, we also welcome timely and topical non-research contributions to the JOT blog to raise JOT&#8217;s visibility.</p>
<p style="text-align: right;">Oscar Nierstrasz</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.jot.fm/2010/06/30/introducing-the-new-jot/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Welcome to the JOT Blog</title>
		<link>http://blog.jot.fm/2010/06/07/welcome-to-the-jot-blog/</link>
		<comments>http://blog.jot.fm/2010/06/07/welcome-to-the-jot-blog/#comments</comments>
		<pubDate>Mon, 07 Jun 2010 10:11:00 +0000</pubDate>
		<dc:creator>Oscar Nierstrasz</dc:creator>
				<category><![CDATA[Announcement]]></category>

		<guid isPermaLink="false">http://blog.jot.fm/?p=38</guid>
		<description><![CDATA[The Journal of Object Technology is a peer-reviewed, open-access journal dedicated to the timely publication of previously unpublished research articles, surveys, tutorials, and technical notes on all aspects of object technology. This blog complements the main web site with editorials, reviews, technology updates, and other news items related to object technology.]]></description>
			<content:encoded><![CDATA[<p>The <a href="http://www.jot.fm/">Journal of Object Technology</a> is a peer-reviewed, open-access journal dedicated to the timely publication of previously unpublished research articles, surveys, tutorials, and technical notes on all aspects of object technology. This blog complements the main web site with editorials, reviews, technology updates, and other news items related to object technology.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.jot.fm/2010/06/07/welcome-to-the-jot-blog/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
