<?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'><id>tag:blogger.com,1999:blog-36773268</id><updated>2009-11-09T08:37:18.434+08:00</updated><title type='text'>Software Engineering, Object-Oriented and Patterns Design</title><subtitle type='html'>An ongoing exploration of the patterns and practices that originate in the pragmatic application of the discipline of software engineering and the principles of object-oriented design.</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://systecit.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36773268/posts/default'/><link rel='alternate' type='text/html' href='http://systecit.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><link rel='next' type='application/atom+xml' href='http://www.blogger.com/feeds/36773268/posts/default?start-index=26&amp;max-results=25'/><author><name>Daniel Berinson</name><email>noreply@blogger.com</email></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>28</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-36773268.post-2410957513232685602</id><published>2009-10-28T11:15:00.004+08:00</published><updated>2009-10-28T12:06:52.598+08:00</updated><title type='text'>SOA Manifesto</title><content type='html'>The &lt;a href="http://www.soa-manifesto.org/"&gt;SOA&lt;/a&gt;&lt;a href="http://www.soa-manifesto.org/"&gt; Manifesto&lt;/a&gt; is a fanfare to architects everywhere, its &lt;a href="http://www.soa-manifesto.org/index.php/soamanifesto/view"&gt;Signatories&lt;/a&gt; like a triumphant procession heralding the pragmatic delivery of business value to enterprises via the provision of IT services.&lt;blockquote&gt;&lt;div style="text-align: center;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;Service orientation is a paradigm that frames what you do. Service-oriented architecture (SOA) is a type of architecture that results from applying service orientation. We have been applying service orientation to help organizations consistently deliver sustainable business value, with increased agility and cost effectiveness, in line with changing business needs. Through our work we have come to prioritize:&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;b&gt;Business value&lt;/b&gt; over technical strategy &lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;b&gt;Strategic goals over&lt;/b&gt; project-specific benefits &lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;b&gt;Intrinsic interoperability&lt;/b&gt; over custom integration &lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;b&gt;Shared services&lt;/b&gt; over specific-purpose implementations &lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;b&gt;Flexibility&lt;/b&gt; over optimization &lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;b&gt;Evolutionary refinement&lt;/b&gt; over pursuit of initial perfection&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;div style="text-align: center;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;That is, while we value the items on the right, we value the items on the left more.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/blockquote&gt;It was a bit of a toss-up whether to write this blog here or under &lt;a href="http://danielberinson.blogspot.com/"&gt;Innovation and Business&lt;/a&gt; since the impact of enterprise architecture is across both the business and IT segments of the enterprise - the very issue addressed by myself and several colleagues in &lt;a href="http://www.linkedin.com/groupAnswers?viewQuestionAndAnswers=&amp;amp;gid=36781&amp;amp;discussionID=8796089&amp;amp;sik=1256700861950&amp;amp;trk=ug_qa_q&amp;amp;goback=%2Eana_36781_1256700861950_3_1"&gt;&lt;i&gt;Is EA a general business term, or an IT term&lt;/i&gt;&lt;/a&gt; and &lt;i&gt;&lt;a href="http://www.linkedin.com/groupAnswers?viewQuestionAndAnswers=&amp;amp;gid=36781&amp;amp;discussionID=8342675&amp;amp;sik=1256700861953&amp;amp;trk=ug_qa_q&amp;amp;goback=%2Eana_36781_1256700861953_3_1"&gt;Is Enterprise Architecture a philosophy or an artefact?&lt;/a&gt;&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;However I want to reprise just my own comments from the latter discussion:&lt;br /&gt;&lt;blockquote&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;I reckon enterprise architecture is the outcome of practising enterprise architecture; like design is the outcome of, well, 'doing the design and constructing the pieces.' Enterprise architecture means either or both of 'enterprise business architecture' or 'enterprise IT architecture.' We usually leave off 'business' or 'IT' as implied but there is a non-subtle difference.&lt;br /&gt;&lt;br /&gt;The business architecture is a constraint on the IT architecture whether or not it reflects as-is or to-be business strategy. The IT architecture, on the other hand, we can shape and mold, just as creative an exercise as it is methodical. Either way, our IT terminology and outcomes should/must match the expectations of business stakeholders, corporate and IT governance, strategy and objectives.&lt;br /&gt;&lt;br /&gt;As an exercise, using TOGAF or Zachman, for example, adds structure ('constraints give us freedom') however the creation and evolution of enterprise architecture is necessarily ontological, that is, associated with the existence of entities and the relationships between them. The philosophy, architecture practice and implementation are inseparable facets of enterprise architecture reflecting the underlying nature of complex, emergent systems.&lt;/span&gt;&lt;/blockquote&gt;We must think carefully about what we are trying to achieve, about alignment of IT strategy with organisational strategy, culture, values and objectives.  As architects, we must ensure the technical solutions we provide are cohesive in themselves as well as delivering business value.&lt;br /&gt;&lt;br /&gt;The SOA Manifesto and associated &lt;a href="http://www.soa-manifesto.org/principles.html"&gt;Guiding Principles&lt;/a&gt;, when followed, should help us to deliver on this promise.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/36773268-2410957513232685602?l=systecit.blogspot.com'/&gt;&lt;/div&gt;</content><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=36773268&amp;postID=2410957513232685602&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/36773268/posts/default/2410957513232685602'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36773268/posts/default/2410957513232685602'/><link rel='alternate' type='text/html' href='http://systecit.blogspot.com/2009/10/soa-manifesto.html' title='SOA Manifesto'/><author><name>Daniel Berinson</name><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='01530541075595598284'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-36773268.post-8943150184743811907</id><published>2009-09-26T20:14:00.003+08:00</published><updated>2009-09-27T11:51:04.355+08:00</updated><title type='text'>Code generation and Godel's genie</title><content type='html'>Many of the advantages gained by generating executable code from models are matched by various problems.  At any particular level of abstraction, analysis and requirements languages like &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_0"&gt;UML&lt;/span&gt;, Z and &lt;span class="misspell" suggestions="COL,CL,OIL,OWL,OCR"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_1"&gt;OCL&lt;/span&gt;&lt;/span&gt; are wonderful for specifying, with varying levels of precision, the constraints for the next, more-detailed model.&lt;br /&gt;&lt;br /&gt;Model-driven architecture and code generation involve executing a series of transformations which use as input the higher level of abstraction to produce the more detailed architecture layer as output.  The usual practice is to elaborate additional details of implementation in the more-detailed layer: The logical layer is used to generate the physical layer; the platform-independent model is used to generate the platform-specific model.&lt;br /&gt;&lt;br /&gt;The problem with generating executable code is that the model language has been morphed into an implementation meta-language.  When there is no room for elaboration because the model contains all the necessary details then the model is itself the implementation.  The problem of verification has to be generalised from using the model to verify the implementation to one of verifying the model itself.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://en.wikipedia.org/wiki/G%C3%B6del%27s_incompleteness_theorems"&gt;Godel's  incompleteness theorem&lt;/a&gt; essentially says, in this context, that in-principle we cannot  verify the model or its elaborated implementation.  Hofstadter might say the meta-genie has been let out of the bottle.  We verify models by inspection, consistency checking and theorem proving, when possible; likewise we verify implementations by inspection and the closest thing we have to theorem proving, i.e. testing.&lt;br /&gt;&lt;br /&gt;The key assumption of testing is that we can verify the implementation against a subset of test vectors representing equivalence sets across the input domain.  The key for code generation is that the set of valid assumptions embodied in the model is retained by an isomorphic transformation from the model into the implementation. Model consistency checking does not help if the model is inconsistent or any of its assumptions have been invalidated by the process of elaboration.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/36773268-8943150184743811907?l=systecit.blogspot.com'/&gt;&lt;/div&gt;</content><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=36773268&amp;postID=8943150184743811907&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/36773268/posts/default/8943150184743811907'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36773268/posts/default/8943150184743811907'/><link rel='alternate' type='text/html' href='http://systecit.blogspot.com/2009/09/code-generation-and-godels-genie.html' title='Code generation and Godel&apos;s genie'/><author><name>Daniel Berinson</name><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='01530541075595598284'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-36773268.post-8632302273596137556</id><published>2009-07-01T09:53:00.015+08:00</published><updated>2009-07-19T19:07:23.980+08:00</updated><title type='text'>Agile Adoption: How to stuff it up</title><content type='html'>&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_0"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_0"&gt;ThoughtWorks&lt;/span&gt;&lt;/span&gt; ran a thoroughly enjoyable and rather informative pair of sessions cheekily titled &lt;span style="font-style: italic;"&gt;Agile Adoption: How to stuff it up&lt;/span&gt; in Perth on Tuesday 30 June 2009.  My hearty thanks go out to Karin &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_1"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_1"&gt;Verloop&lt;/span&gt;&lt;/span&gt; for the invitation to attend the&lt;a href="http://www.thoughtworks.com.au/what-we-say/events/tech-briefing_au.html"&gt; Quarterly Technology Briefing&lt;/a&gt; over a light breakfast at The &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_2"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_2"&gt;Parmelia&lt;/span&gt;&lt;/span&gt; Hilton, and the Executive &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_3"&gt;Round table&lt;/span&gt; Luncheon at The Globe.&lt;br /&gt;&lt;br /&gt;Martin Fowler, Chief Scientist at &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_4"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_3"&gt;ThoughtWorks&lt;/span&gt;&lt;/span&gt; and one of the original signatories of the Agile Manifesto, was unable to attend but Andy Marks, who specialises in enterprise-level adoption of Lean and Agile concepts, ably led the earlier discussion and along with Keith &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_5"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_4"&gt;Dodds&lt;/span&gt;&lt;/span&gt;, Director of Sales &amp;amp; &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_6"&gt;Marketing&lt;/span&gt;, facilitated discussion over the &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_7"&gt;round table&lt;/span&gt; luncheon.&lt;br /&gt;&lt;br /&gt;The Quarterly Technology Briefing was introduced by Karin &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_8"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_5"&gt;Verloop&lt;/span&gt;&lt;/span&gt; and handed off to Andy Marks, who said he has been looking after the largest agile adoption in &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_9"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_6"&gt;Suncorp&lt;/span&gt;&lt;/span&gt;.  The Agile Manifesto states the common ground of lightweight approaches, &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_10"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_7"&gt;eg&lt;/span&gt;&lt;/span&gt;. Scrum and &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_11"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_8"&gt;XP&lt;/span&gt;&lt;/span&gt;.  The notable software craftsmen who drafted the manifesto in 2001 at the Utah meeting decided to call it 'Agile' instead of the other &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_12"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_9"&gt;possibilities&lt;/span&gt;&lt;/span&gt; mooted because they felt the word closely reflected their approach.&lt;br /&gt;&lt;blockquote&gt;"It is not necessary to change.  Survival is optional." said W. Edward Deming, the original thought leader in continuous quality improvement.&lt;/blockquote&gt; There are about six root cause issues to cover in this session. ASWEC 2009 on the Gold Coast recognised that "Agile is the new mainstream."&lt;br /&gt;&lt;br /&gt;Andy credited Mike Cohen with the common adoption patterns for Agile:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Scale - from start small to all-in.&lt;/li&gt;&lt;li&gt;Interest focus - from teaching practices to iterations.&lt;/li&gt;&lt;li&gt;Visibility - from stealth mode to public display.&lt;br /&gt;&lt;/li&gt;&lt;/ol&gt;Not addressed was the trivial pilot anti-pattern.  It's best to start with a high risk, high value of success to engage the business.&lt;br /&gt;&lt;br /&gt;Here's a basic recipe for stuffing it up:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_14"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_11"&gt;Underestimate&lt;/span&gt;&lt;/span&gt; the change.&lt;/li&gt;&lt;li&gt;Assume minimal cultural impact.&lt;/li&gt;&lt;li&gt;Undervalue experience.&lt;/li&gt;&lt;li&gt;Learning finishes at school.&lt;/li&gt;&lt;li&gt;Let others fail first.&lt;/li&gt;&lt;li&gt;De-emphasise technical design.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;The people will break first.  Small group comes to realisation that agile works or is worth looking into; by executive decree - why are we doing this?  User story is statement of customer requirement, ideally can be implemented in 1-2 days; binary status reporting 0/100% completed.&lt;br /&gt;&lt;br /&gt;As opposed to projects reporting green, green, green,... then red one month before delivery - 6 months late; instead early indication, &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_16"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_12"&gt;eg&lt;/span&gt;&lt;/span&gt;. green, green, amber, red... needs a cultural change.&lt;br /&gt;&lt;blockquote&gt;"He who rejects change is the architect of decay," Harold Wilson.&lt;/blockquote&gt;&lt;blockquote&gt;On &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_15"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_13"&gt;organisational&lt;/span&gt;&lt;/span&gt; culture: "It is very evident that all culture has developed as an initial reaction against adaptation, " Beatrice Winkle. [Can someone help me with this literary allusion?]&lt;/blockquote&gt;IT is tailor made to embrace change, especially software developers who can be [ahem] obsessive compulsive (&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_17"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_14"&gt;OCD&lt;/span&gt;&lt;/span&gt;) and show signs of attention deficit disorder (ADD).  Making new connections, changing existing connections, 'lusting after change' - you want these people in you team with Agile adoption.&lt;br /&gt;&lt;br /&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_18"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_15"&gt;Standup&lt;/span&gt;&lt;/span&gt; meeting - what I did yesterday, what I am doing today, any blockers.  Co-located team, customer embedded, tolerance for failure.&lt;br /&gt;&lt;blockquote&gt;"Failure is the opportunity to begin again more &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_19"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_16"&gt;intelligently&lt;/span&gt;&lt;/span&gt;," Moshe &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_20"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_17"&gt;Arens&lt;/span&gt;&lt;/span&gt;.&lt;br /&gt;&lt;/blockquote&gt;Often rewarded publicly for 'success' - Herculean efforts, 'by hell or high water'; other projects ('failures?') which have taken risks, lessons are not advertised.&lt;br /&gt;&lt;br /&gt;The &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_21"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_18"&gt;inspirational&lt;/span&gt;&lt;/span&gt; &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_22"&gt;ravine&lt;/span&gt; of &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_23"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_19"&gt;effectiveness&lt;/span&gt;&lt;/span&gt;-versus-time has a dip as a team moves through learning, change, transition.  It is guaranteed to kill adoption if you stomp on people in the ravine.&lt;br /&gt;&lt;br /&gt;Outliers by Malcolm &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_24"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_20"&gt;Gladwell&lt;/span&gt;&lt;/span&gt; speaks of the conditions to achieve high level performance - his studies show 10,000h to achieve &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_25"&gt;high&lt;/span&gt;-level aptitude, or about 5y at 8h/day.  (Note that a journey man plumber, not master, is achieved after 5y.)&lt;br /&gt;&lt;blockquote&gt;"Experience is the name every one gives to their mistakes, " Oscar Wilde.&lt;/blockquote&gt;It is a mistake to &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_26"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_21"&gt;de&lt;/span&gt;&lt;/span&gt;-emphasise technical design.  The Manifesto implies paying continuous attention to technical excellence and good design enhances agility.  [I myself speak of a culture of quality and merciless refactoring.]&lt;br /&gt;&lt;br /&gt;The best &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_27"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_22"&gt;architectures&lt;/span&gt;&lt;/span&gt; emerge from Agile design.  Don't over-invest in design ('big upfront design'); however the pendulum may swing too far the other way.&lt;br /&gt;&lt;br /&gt;Customer focus is important because the impact of technical debt is that the entire &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_29"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_23"&gt;organisation&lt;/span&gt;&lt;/span&gt;, says Kent Beck, can be brought to a standstill under the debt load of &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_30"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_24"&gt;unconsolidated&lt;/span&gt;&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_31"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_25"&gt;implementation&lt;/span&gt;&lt;/span&gt;.  Debt load is lack of technical quality, i.e. refactoring, patterns.&lt;br /&gt;&lt;br /&gt;The next step:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Conduct readiness review.&lt;/li&gt;&lt;li&gt;Get experience.&lt;/li&gt;&lt;li&gt;Plan in Agile way.&lt;/li&gt;&lt;li&gt;Identify a quick win.&lt;/li&gt;&lt;li&gt;Budget to include learning.&lt;/li&gt;&lt;li&gt;Publicly reward effort to improve and acknowledge lessons learned.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;The discussion at the Executive &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_32"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_26"&gt;Roundtable&lt;/span&gt;&lt;/span&gt; Luncheon was interesting and stimulating.  As a marketing tools, Agile is clearly finding its way into the hearts and minds of &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_33"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_27"&gt;practitioners&lt;/span&gt;&lt;/span&gt; and IT leaders alike however there seems to a &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_34"&gt;concomitant&lt;/span&gt; &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_35"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_28"&gt;forgetfulness&lt;/span&gt;&lt;/span&gt; of supporting principles and practices.&lt;br /&gt;&lt;br /&gt;In particular, the role of project managers and the governance structures provided by approaches like Prince2, &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_36"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_29"&gt;PMBOK&lt;/span&gt;&lt;/span&gt; and &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_37"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_30"&gt;CMMI&lt;/span&gt;&lt;/span&gt; go largely unremarked, except for a lingering negativity towards such approaches.&lt;br /&gt;&lt;br /&gt;[&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_38"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_31"&gt;Chatham&lt;/span&gt;&lt;/span&gt; House Rule applies to the following &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_39"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_32"&gt;recollections&lt;/span&gt;&lt;/span&gt;.]&lt;br /&gt;&lt;br /&gt;&lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_40"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_33"&gt;Surprisingly&lt;/span&gt;&lt;/span&gt; to me, the &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_41"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_34"&gt;organisation&lt;/span&gt;&lt;/span&gt; with the highest statutory compliance obligation and hence a &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_42"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_35"&gt;satisfactory&lt;/span&gt;&lt;/span&gt; management system was the least inclined towards a traditional project management approach.&lt;br /&gt;&lt;br /&gt;To some extent I think their position is a &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_43"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_36"&gt;misunderstanding&lt;/span&gt;&lt;/span&gt; about the purpose of &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_44"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_37"&gt;documentation&lt;/span&gt;&lt;/span&gt; and the intent of the expression in the Agile Manifesto to value, "Working software over &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_45"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_38"&gt;comprehensive&lt;/span&gt;&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_46"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_39"&gt;documentation&lt;/span&gt;&lt;/span&gt;."  The purpose of &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_47"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_40"&gt;documentation&lt;/span&gt;&lt;/span&gt; is knowledge capture and sharing, and they should be so lucky to have it!&lt;br /&gt;&lt;br /&gt;The issue of testing in an Agile  environment was raised.  Like most things Agile, even formal testing using the traditional techniques fits the description.  Test &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_48"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_41"&gt;specifications&lt;/span&gt;&lt;/span&gt; can almost entirely replace user and functional &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_49"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_42"&gt;requirements&lt;/span&gt;&lt;/span&gt; because that is precisely what is evaluated during user acceptance, functional and system testing.&lt;br /&gt;&lt;br /&gt;Inadequate testing will deliver a fragile product into production every time.  Worse still, it will be very difficult to run regression tests, both manual and automated, in order to identify new defects.&lt;br /&gt;&lt;br /&gt;&lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_50"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_43"&gt;Requirements&lt;/span&gt;&lt;/span&gt; management was the crux of another question: Are changes to &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_51"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_44"&gt;requirements&lt;/span&gt;&lt;/span&gt; assessed and approved by the business first?  This is a tricky one because in an Agile approach, a customer &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_52"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_45"&gt;representative&lt;/span&gt;&lt;/span&gt; is supposed to be available and one of the problems is that often they are not empowered to make decisions, or lack the specialist knowledge of a subject matter expert.&lt;br /&gt;&lt;br /&gt;Of course, this is the reason for functional &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_53"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_46"&gt;requirements&lt;/span&gt;&lt;/span&gt; but I agree that a user story, written from scratch or enveloping one or few cohesive &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_54"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_47"&gt;requirements&lt;/span&gt;&lt;/span&gt;, can be given to a developer in an Agile team to take 1-2 days.&lt;br /&gt;&lt;br /&gt;The Agile business analyst has a similar role to the traditional business analyst and that is to interpret the customer &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_55"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_48"&gt;requirements&lt;/span&gt;&lt;/span&gt; and to act as the customer proxy to the development team.  It is not so Agile to interpose someone between the customer and the developer but for complex &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_56"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_49"&gt;requirements&lt;/span&gt;&lt;/span&gt; this is fairly necessary.  It was also noted that user stories could be expanded into proper use cases.&lt;br /&gt;&lt;br /&gt;Business rules came up for discussion as well and how they can be captured: in user stories?  For simple or few rules this may be fine but otherwise it is begging for disaster to scatter business rules across informal user stories and throughout the code base.  A little bit of abstraction may be called for using design patterns, &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_57"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_50"&gt;eg&lt;/span&gt;&lt;/span&gt;. policy or delegate, or use a full-blown business rules engine - an &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_58"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_51"&gt;architectural&lt;/span&gt;&lt;/span&gt; decision.  The cost of rework can be high unless this decision is made upfront.&lt;br /&gt;&lt;br /&gt;Agile in the context of enterprise software development was discussed, involving the integration of legacy and commercial-off-the-shelf (COTS) software and systems.  Interface contracts between systems, common messaging formats, &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_59"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_52"&gt;architecture&lt;/span&gt;&lt;/span&gt; of enterprise service bus (&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_60"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_53"&gt;ESB&lt;/span&gt;&lt;/span&gt;) are design elements usually associated with big upfront design (&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_61"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_54"&gt;BUFD&lt;/span&gt;&lt;/span&gt;) but are the only things that matter when developing distributed systems.&lt;br /&gt;&lt;br /&gt;It was noted that stubs and mock objects enable the creation of unit tests before launching into full-on integration testing.&lt;br /&gt;&lt;br /&gt;Does Agile apply to COTS only development?  Yes was the answer, mainly to do with &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_62"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_55"&gt;requirements&lt;/span&gt;&lt;/span&gt; gathering - well, maybe but I'm not sure.  The business &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_63"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_56"&gt;requirements&lt;/span&gt;&lt;/span&gt; and scope should be the same regardless of software approach because a project can only be initiated once a problem or gap has been identified by the business.&lt;br /&gt;&lt;br /&gt;(The detailed functional &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_57"&gt;requirements&lt;/span&gt;, use cases or user stories, in general, are allowed to be a moving target - part of the reason is that many 'discovered &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_58"&gt;requirements&lt;/span&gt;' are unknown at the outset.)&lt;br /&gt;&lt;br /&gt;It makes a lot of sense to write the evaluation criteria as a test &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_59"&gt;specification&lt;/span&gt; so that each function can be ticked-off and compared during the evaluation phase.  Then, in place of a traditional software &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_64"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_60"&gt;construction&lt;/span&gt; &lt;/span&gt; there will be several iterations of '&lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_65"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_61"&gt;construction&lt;/span&gt;&lt;/span&gt; by &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_66"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_62"&gt;configuration&lt;/span&gt;&lt;/span&gt;' where the user stories are met at each closure.&lt;br /&gt;&lt;br /&gt;Hire these guys if you want to learn to do software development well.  The people at &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_67"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_63"&gt;ThoughtWorks&lt;/span&gt;&lt;/span&gt; really know what they are doing and if the &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_68"&gt;marketing&lt;/span&gt; hype about Agile gets you down just ignore it.&lt;br /&gt;&lt;br /&gt;The values behind the Agile Manifesto are the key to their approach which I would happily classify as Agile-Lean because unnecessary processes and &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_69"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_64"&gt;requirements&lt;/span&gt;&lt;/span&gt; are discarded by applying common sense to software development.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/36773268-8632302273596137556?l=systecit.blogspot.com'/&gt;&lt;/div&gt;</content><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=36773268&amp;postID=8632302273596137556&amp;isPopup=true' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/36773268/posts/default/8632302273596137556'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36773268/posts/default/8632302273596137556'/><link rel='alternate' type='text/html' href='http://systecit.blogspot.com/2009/07/agile-adoption-how-to-stuff-it-up.html' title='Agile Adoption: How to stuff it up'/><author><name>Daniel Berinson</name><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='01530541075595598284'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-36773268.post-4767955776016051088</id><published>2009-03-03T09:18:00.010+09:00</published><updated>2009-03-26T16:43:08.481+09:00</updated><title type='text'>Future trends in software engineering</title><content type='html'>About a year after the panel convened at &lt;a href="http://www.aswec2008.curtin.edu.au/"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_0"&gt;ASWEC&lt;/span&gt; 2008&lt;/a&gt;, my words on future trends in software engineering are still pertinent to ongoing work I am undertaking in software engineering and service-oriented architecture.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Model-driven architecture (&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_1"&gt;MDA&lt;/span&gt;)&lt;/span&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;not old-style computer-aided software engineering (CASE), i.e. &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_2"&gt;discredited&lt;/span&gt; round-trip engineering&lt;/li&gt;&lt;li&gt;capture different levels of abstraction; elaborating lower-levels, constrained by higher-levels&lt;/li&gt;&lt;/ul&gt;&lt;span style="font-weight: bold;"&gt;Software factories&lt;/span&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;component-based libraries and frameworks&lt;/li&gt;&lt;li&gt;meta-object facility (&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_3"&gt;MOF&lt;/span&gt;) for store and registry of component meta-data&lt;/li&gt;&lt;li&gt;dependency-injection, &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_4"&gt;eg&lt;/span&gt;. Spring factory&lt;/li&gt;&lt;li&gt;mocks objects to complement, not replace, unit and integration testing using fixtures&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;span style="font-weight: bold;"&gt;Service-oriented architecture (&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_5"&gt;SOA&lt;/span&gt;)&lt;/span&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;continuing growth and refinement of ontology-based software engineering&lt;/li&gt;&lt;li&gt;return to not-quite components, i.e. facade for service interfaces that are explicit&lt;/li&gt;&lt;li&gt;growth of resource description framework (&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_6"&gt;RDF&lt;/span&gt;), web ontology language (OWL) - semantic-description languages and extensions (hard problem!)&lt;/li&gt;&lt;li&gt;realisation that C++, Java, C#, &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_7"&gt;perl&lt;/span&gt;, python, &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_8"&gt;yacc&lt;/span&gt;/bison (of course) incorporate support for domain-specific languages (&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_9"&gt;DSLs&lt;/span&gt;) by extension, &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_10"&gt;genericity&lt;/span&gt; and composition&lt;/li&gt;&lt;li&gt;convergence of object-oriented analysis and design with design and enterprise patterns&lt;/li&gt;&lt;li&gt;combine patterns and domain ontology to give &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_11"&gt;DSL&lt;/span&gt; independent of technology and platforms - "form follows function"&lt;/li&gt;&lt;/ul&gt;&lt;span style="font-weight: bold;"&gt;Non-trivial systems&lt;/span&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;software and systems engineering merge into concrete discipline&lt;/li&gt;&lt;li&gt;integration architecture, &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_12"&gt;distributed&lt;/span&gt; and real-time computing are increasingly seen as facets of same problem&lt;/li&gt;&lt;li&gt;enterprise security, single sign on, &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_13"&gt;unified&lt;/span&gt; data views, portals - service and system &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_14"&gt;mashups&lt;/span&gt; at user and data levels&lt;/li&gt;&lt;li&gt;two-level development: 1) service and business levels based on business/logical processes and composite services; 2) implementations that conform to service and interface contracts can be in any &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_15"&gt;technology&lt;/span&gt;, i.e. custom software, commercial-off-the-shelf (COTS) or free and open source software (FOSS)&lt;/li&gt;&lt;li&gt;well-defined registry interface - "think global over enterprise, act local" every system and application adheres to enterprise guidelines&lt;br /&gt;&lt;/li&gt;&lt;li&gt;configurable and adaptable - constrained flexibility due to absolute need to confidently test known configurations&lt;/li&gt;&lt;/ul&gt;&lt;span style="font-weight: bold;"&gt;Cross discipline&lt;/span&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;computer science and software engineering, psychology, management&lt;/li&gt;&lt;li&gt;unified analysis, richer toolkit of analytics and heuristics&lt;/li&gt;&lt;li&gt;mature processes, peer review and accreditation&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/36773268-4767955776016051088?l=systecit.blogspot.com'/&gt;&lt;/div&gt;</content><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=36773268&amp;postID=4767955776016051088&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/36773268/posts/default/4767955776016051088'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36773268/posts/default/4767955776016051088'/><link rel='alternate' type='text/html' href='http://systecit.blogspot.com/2009/03/aswec-2008-panel-on-future-trends-in.html' title='Future trends in software engineering'/><author><name>Daniel Berinson</name><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='01530541075595598284'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-36773268.post-4075281899064735457</id><published>2008-10-11T18:47:00.018+08:00</published><updated>2009-03-03T08:27:49.818+09:00</updated><title type='text'>Messaging Completes a Full Circle</title><content type='html'>&lt;span style="font-size:85%;"&gt;&lt;blockquote&gt;"riverrun, past Eve and Adam's, from swerve of shore to bend of bay, brings us by a commodius vicus of recirculation back to Howth Castle and Environs." &lt;a title="James Joyce" href="http://en.wikipedia.org/wiki/James_Joyce"&gt;James Joyce&lt;/a&gt;, &lt;i&gt;&lt;a title="Finnegans Wake" href="http://en.wikipedia.org/wiki/Finnegans_Wake"&gt;Finnegans Wake&lt;/a&gt;&lt;/i&gt;&lt;/blockquote&gt;&lt;i&gt;&lt;a title="Finnegans Wake" href="http://en.wikipedia.org/wiki/Finnegans_Wake"&gt;&lt;/a&gt;&lt;/i&gt;&lt;/span&gt;In the beginning there was RPC or Remote Procedure Call, later mostly standardised as Distributed Computing Environment or DCE-RPC and reappearing as Microsoft's MSRPC. XDR is a protocol for the description and encoding of data and is useful for transferring data between different computer architectures - roughly analogous in purpose to Abstract Syntax Notation (ASN). Often used for C programming but with bindings to numerous languages on many platforms.&lt;br /&gt;&lt;br /&gt;Time passed and Corba or Common Object Request Broker Architecture appeared, less well known in modern incarnations as the most-widely deployed interoperability standard, IIOP (Internet Inter Orb Protocol), also underlying RMI-IIOP and EJB-IIOP in the Java stable, and deployed with every web browser, most mobile phones and other devices. Corba and IDL (Interface Definition Language) allows many languages and platforms to interoperate transparently using objects often written in C++, Java or C# but possibly in almost any language. Regular claims that Corba is dead are premature and show ignorance or denial of reality.&lt;br /&gt;&lt;br /&gt;Various message queuing technologies soon appeared on the computing horizon to start the trend towards loosely-coupled systems. IBM MQ Series, more recently called WebSphere MQ, Microsoft Message Queue (MSMQ) and Java Messaging Service (JMS) offer interoperability options that may cross platforms depending upon vendor support. WebSphere MQ is offered by IBM at a fee on virtually every platform imaginable; MSMQ is a Microsoft-centric technology; and JMS is a community-defined standard with many cross-platform implementations.&lt;br /&gt;&lt;br /&gt;Bringing us to recent times where the buzz word for loosely-coupled systems is SOA or Service Oriented Architecture, often built upon web services. Over the past few years, the WS-standard stack or web service protocols, including WSDL (web service definition), SOAP (message protocol) and UDDI (discovery) that leverage XML, have appeared. Unsurprisingly they closely mirror the Corba stack, using XSD (XML schema definitions) as the new IDL.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Web services define function interfaces like RPC XDR, not object interfaces like Corba IDL, so have we just completed a full circle and returned back to where we started?&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;XML compared to IDL, XML first:&lt;br /&gt;&lt;blockquote&gt;&lt;code&gt;&amp;lt;message name="SayHelloRequest"&amp;gt;&lt;br /&gt;   &amp;lt;part name="firstName" type="xsd:string"/&amp;gt;&lt;br /&gt;&amp;lt;/message&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;message name="SayHelloResponse"&amp;gt;&lt;br /&gt;   &amp;lt;part name="greeting" type="xsd:string"/&amp;gt;&lt;br /&gt;&amp;lt;/message&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;porttype name="Hello_PortType"&amp;gt;&lt;br /&gt;   &amp;lt;operation name="sayHello"/&amp;gt;&lt;br /&gt;&amp;lt;input message="SayHelloRequest"/&amp;gt;&lt;br /&gt;&amp;lt;output message="SayHelloResponse"/&amp;gt;&lt;br /&gt;&amp;lt;/porttype&amp;gt;&lt;br /&gt;&lt;/code&gt;&lt;/blockquote&gt;Now IDL:&lt;blockquote&gt;&lt;code&gt;struct SayHelloRequest {&lt;br /&gt;string firstName;&lt;br /&gt;};&lt;br /&gt;&lt;br /&gt;struct SayHelloResponse {&lt;br /&gt;string greeting;&lt;br /&gt;};&lt;br /&gt;&lt;br /&gt;program Hello_Server {&lt;br /&gt;version Hello_Version {&lt;br /&gt;SayHelloResponse sayHello(SayHelloRequest) = 1;&lt;br /&gt;} = 1;&lt;br /&gt;} = 0x20000001;&lt;/code&gt;&lt;/blockquote&gt;Part of the answer is that SOA or Service-Oriented Architecture is one characterised by: &lt;ul&gt;&lt;li&gt;Loosely coupled services.&lt;/li&gt;&lt;li&gt;Platform-agnostic interfaces.&lt;/li&gt;&lt;li&gt;Dynamic discovery and invocation.&lt;/li&gt;&lt;/ul&gt;SOA is an approach to system integration centred around business processes.&lt;br /&gt;&lt;br /&gt;Another part of the puzzle is found in BPM or Business Process Management, which embodies:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;The concept of choreographing work items through a multi-step process or orchestration.&lt;/li&gt;&lt;li&gt;The work items are identified and tracked as they move through each step, with either specified people or applications processing the information.&lt;/li&gt;&lt;li&gt;The process flow is determined by choreography with the applications themselves playing no role in determining where the messages are sent.&lt;/li&gt;&lt;/ul&gt;&lt;a href="http://www.omg.org/mda/"&gt;MDA or Model Driven Architecture&lt;/a&gt;, as defined by the OMG or Object Management Group, fills in the technological process of managing the transition between the artifacts generated by the business and those used by IT:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_rb44yWzfS4M/SPCafOFd5kI/AAAAAAAAADY/Fo2WALo95O8/s1600-h/OMG_MDA.gif"&gt;&lt;img id="BLOGGER_PHOTO_ID_5255870626289018434" style="margin: 0px auto 10px; display: block; cursor: pointer; text-align: center;" alt="" src="http://4.bp.blogspot.com/_rb44yWzfS4M/SPCafOFd5kI/AAAAAAAAADY/Fo2WALo95O8/s320/OMG_MDA.gif" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.zifa.com/"&gt;Zachman's framework for enterprise architecture&lt;/a&gt; is the final piece of the puzzle for slotting it all together:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_rb44yWzfS4M/SPCafLrvlFI/AAAAAAAAADg/NFmGmzjEmEQ/s1600-h/Zachman_Enterprise_Arch.jpg"&gt;&lt;img id="BLOGGER_PHOTO_ID_5255870625644254290" style="margin: 0px auto 10px; display: block; cursor: pointer; text-align: center;" alt="" src="http://2.bp.blogspot.com/_rb44yWzfS4M/SPCafLrvlFI/AAAAAAAAADg/NFmGmzjEmEQ/s320/Zachman_Enterprise_Arch.jpg" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;So there you have it, we have finally gained the hard-won knowledge accumulated through experience that the business should drive IT systems development (fancy that) and that models have greater and longer-lasting value than technology implementations (who would have guessed).&lt;br /&gt;&lt;blockquote&gt;Now quieten down and listen to me, messaging was actually a dead end and the next big thing in enterprise integration and software development is...&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/36773268-4075281899064735457?l=systecit.blogspot.com'/&gt;&lt;/div&gt;</content><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=36773268&amp;postID=4075281899064735457&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/36773268/posts/default/4075281899064735457'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36773268/posts/default/4075281899064735457'/><link rel='alternate' type='text/html' href='http://systecit.blogspot.com/2008/10/messaging-completes-full-circle.html' title='Messaging Completes a Full Circle'/><author><name>Daniel Berinson</name><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='01530541075595598284'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_rb44yWzfS4M/SPCafOFd5kI/AAAAAAAAADY/Fo2WALo95O8/s72-c/OMG_MDA.gif' height='72' width='72'/><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-36773268.post-5193917134473763858</id><published>2008-06-01T15:23:00.002+08:00</published><updated>2008-06-01T15:29:20.746+08:00</updated><title type='text'>Recipe for Getting and Staying Ahead in CSSE</title><content type='html'>I am a bit embarrassed about not posting here for so long however the reason is that I have been busy with &lt;a href="http://aswec2008.curtin.edu.au/"&gt;ASWEC 2008&lt;/a&gt;.  A while ago, I was honoured to be invited to present a &lt;a href="http://web.csse.uwa.edu.au/research/research_seminars/2008/070308"&gt;seminar in CSSE at UWA&lt;/a&gt;, as follows:&lt;br /&gt;&lt;br /&gt;&lt;iframe src="http://docs.google.com/EmbedSlideshow?docid=ddfvtbbj_246hrn6n69t" frameborder="0" height="342" width="410"&gt;&lt;/iframe&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/36773268-5193917134473763858?l=systecit.blogspot.com'/&gt;&lt;/div&gt;</content><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=36773268&amp;postID=5193917134473763858&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/36773268/posts/default/5193917134473763858'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36773268/posts/default/5193917134473763858'/><link rel='alternate' type='text/html' href='http://systecit.blogspot.com/2008/06/recipe-for-getting-and-staying-ahead-in.html' title='Recipe for Getting and Staying Ahead in CSSE'/><author><name>Daniel Berinson</name><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='01530541075595598284'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-36773268.post-3654237084556536413</id><published>2007-05-26T16:58:00.005+08:00</published><updated>2009-07-18T11:36:59.606+08:00</updated><title type='text'>Goal of CS and SE degrees</title><content type='html'>The goal of CS and SE degrees are respectively to turn out Computer Scientists and Software Engineers. Sometimes it is forgotten that graduates are much more than merely programmers insofar as studies at university can spend an inordinate amount of time immersed in the minutiae of programming.&lt;br /&gt;&lt;br /&gt;As part of a recent discussion about programming languages following in part from my earlier articles on the topic and a stimulating presentation at a SE Forum, I read an article entitled &lt;span style="font-style: italic;"&gt;An Objective Comparison of Languages for Teaching Introductory Programming&lt;/span&gt; (&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_0"&gt;Mannila&lt;/span&gt; and &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_1"&gt;de&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_2"&gt;Raadt&lt;/span&gt;).  To put it in a nutshell, I would contest the word &lt;span style="font-style: italic;"&gt;Objective&lt;/span&gt; in the title and I think their assumptions about what makes a valuable teaching language and their analysis of the candidate languages against those criteria are both flawed. Some of their criteria, for example, &lt;span style="font-style: italic;"&gt;The language is suitable for teaching&lt;/span&gt; with reference to &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_3"&gt;Wirth's&lt;/span&gt; Pascal and &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_4"&gt;Modula&lt;/span&gt; languages are self-serving and circular tautologies.&lt;br /&gt;&lt;br /&gt;On the other hand, issues of strong typing (&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_5"&gt;eg&lt;/span&gt;. &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_6"&gt;constness&lt;/span&gt;), static type safety (i.e. compile-time type checking) and support for reuse via generics, &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_7"&gt;mixins&lt;/span&gt;, delegation and inheritance are glossed over or ignored completely. These being some of the very &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_8"&gt;charactistics&lt;/span&gt; that make programming languages useful as opposed to such criteria as &lt;span style="font-style: italic;"&gt;The language can be used to apply physical analogies&lt;/span&gt; in reference to &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_9"&gt;Papert's&lt;/span&gt; Logo and Alice that purports to teach object-oriented programming concepts by enabling the student to manipulate objects via their properties and methods in a &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_10"&gt;microworld&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;It is as if CS should be taught at university the same way that mathematics are taught through the progression of primary, secondary and tertiary education followed by practice - in the footsteps of Piaget's childhood development of cognition.  It trivialises the purpose and mode of tertiary education to suggest that concepts already known should be retaught.  The context of the learning environment must be taken into account but teaching object-oriented programming as defining an ontology of classes modelled on the real world - the best description of the thought process being found in &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_11"&gt;Booch's&lt;/span&gt; seminal work - is very different to crawling through an object-world sandbox before learning to walk on crippled programming languages designed for teaching.&lt;br /&gt;&lt;br /&gt;I think that Bloom's taxonomy or a similar kind of learning path is more appropriate with the tertiary student starting from a higher level from the outset. For example, comprehension is quite distinct from synthesis as evidence of high-level cognitive skills. The same applies for method based reading or code inspections when the inspector can perhaps read and comprehend the code but may lack the technical ability to synthesise the equivalent result in any programming language. Call this a desktop review and arguably one of little value.&lt;br /&gt;&lt;br /&gt;Piaget's theories of cognitive development are not applicable to programming because the adult learner is already at an operational stage of competence with abstractions, for example, mathematics. Therefore easy-to-use and simple syntax perhaps are not valid criteria for selection of teaching or industry programming language. &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_12"&gt;Koenig&lt;/span&gt; and Moo argue persuasively that C++ is an ideal language for teaching and for industry practice. The study cited uses few if any of the features that set C++ above and C++-like languages including Java and C# apart from the other languages in the feature comparison.&lt;br /&gt;&lt;br /&gt;The flavour of the past decade was for C++ and Unix to be maligned as out of step with modern practice however the collective wisdom on Unix has shifted back to one based on common sense; C++ soon to follow in supporting several programming paradigms including functional and generic programming in addition to object-oriented programming.  The modern programming languages like Java and C# are becoming more like C++ in feature richness just as so-called modern operating systems are becoming more Unix-like in the elegant simplicity of its design.&lt;br /&gt;&lt;br /&gt;Precision teaching in the behavioural formalism of Skinner is perhaps of greater relevance where the reinforcement of outcomes is desirable, again reflecting on industry programming practice and code inspections in the sense of &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_13"&gt;Fagan&lt;/span&gt; and Weinberg. Many of the best known text books and reference books available on programming build from an elementary foundation, adding advanced concepts and implementation details according to the authors taste.&lt;br /&gt;&lt;br /&gt;Frequently we refer to language features that are not strictly necessary, for example, operator overloading as syntactic sugar. Similarly, the syntax of the language is for all intents and purposes irrelevant since an alternative and equivalent syntax could be substituted. Tritely some argue that their preferred syntax is superior but this is merely an expression of the very-human tendency to believe one's own opinion as to the superiority or elegance of form to be better than &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_14"&gt;another's&lt;/span&gt; favoured form.&lt;br /&gt;&lt;br /&gt;In teaching and industry practice I do not believe the choice of programming language has as significant an impact as other factors. More important is the way the language is taught, the manner of reading or inspection and other supporting practices, &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_15"&gt;eg&lt;/span&gt;. design.  I have found that many people who are &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_16"&gt;focused&lt;/span&gt; on programming believe that programs are an outcome in themselves however in most settings the business outcome is the only consideration outside of the programming team itself.&lt;br /&gt;&lt;br /&gt;Since all of the general-purpose programming languages are Turing complete then business considerations of maintainability and total cost of ownership, for example, mean that project management, enterprise architecture, business processes and issues of service contracts are the business drivers and the implementation mechanism is not directly relevant.&lt;br /&gt;&lt;br /&gt;CS and SE degrees programmes must include significant mathematics components. The coverage of material and degree of difficulty depends on the goals of each school however the fundamentals of logic, set theory, statistics, matrix algebra, sequences and series must always be included. Not every graduate needs to know much or perhaps anything about multivariate calculus of a complex variable, number theory, or advanced numerical methods.&lt;br /&gt;&lt;br /&gt;Some of this material will probably be covered adequately in a unit on algorithms or maybe even robotics. Probably not to the same level of rigour as if the material were taught in a mainstream unit taught by the mathematics department or even one customised for the needs of CS and SE.&lt;br /&gt;&lt;br /&gt;The objectives claimed from teaching simplified programming languages specially designed for this purpose are questionable. The example earlier in this article where the programming language Alice is used to teach object-oriented concepts captures the fatuous assumption that the students in such course do not learn basic mathematics. Set theory, for example, captures and defines the concept of class and object together with axioms, mappings, functions and properties.  Likewise a course on algorithms should build on or, if you please, specialise rather than replace or reinvent a unit on numerical methods.(*)&lt;br /&gt;&lt;br /&gt;To summarise, we should treat our students as adults not as children to be molly-coddled!&lt;br /&gt;&lt;br /&gt;(*) I could launch into a discussion about the seemingly unknowing teaching of kinetics, kinematics and dynamics in physics, mathematics and engineering units simultaneously with equivalent concepts in fluid dynamics and electrostatics.&lt;br /&gt;&lt;br /&gt;For example, the curl and div of vector potential fields in &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_17"&gt;Navier&lt;/span&gt;-Stokes and &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_18"&gt;Maxwells&lt;/span&gt; equations, or more simply the moments V=I.R and F=M.A where V=voltage, I=current; F=force vector, M=mass, A=acceleration vector=second derivative of vector displacement; .=scalar multiplication or vector dot product.&lt;br /&gt;&lt;br /&gt;But I won't. :-)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/36773268-3654237084556536413?l=systecit.blogspot.com'/&gt;&lt;/div&gt;</content><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=36773268&amp;postID=3654237084556536413&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/36773268/posts/default/3654237084556536413'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36773268/posts/default/3654237084556536413'/><link rel='alternate' type='text/html' href='http://systecit.blogspot.com/2007/05/goal-of-cs-and-se-degrees.html' title='Goal of CS and SE degrees'/><author><name>Daniel Berinson</name><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='01530541075595598284'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-36773268.post-9213893192974284130</id><published>2007-04-29T15:48:00.000+08:00</published><updated>2007-11-12T23:13:21.256+09:00</updated><title type='text'>Matching the Process to the Project</title><content type='html'>&lt;span style="font-weight: bold;"&gt;Gathering the Right Requirements&lt;/span&gt;&lt;br /&gt;(Julie Blake, Business Analyst, Object Training)&lt;br /&gt;&lt;br /&gt;Since returning I have been happily telling all and sundry that with this presentation, Julie was awarded the best Industry Track Paper for the conference - she's a BA and her presentation nailed the requirements process. Julie delivered case studies about two projects, contrasting the approaches taken and identifying lessons learned.&lt;br /&gt;&lt;br /&gt;Project 1:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;300 use cases.&lt;/li&gt;&lt;li&gt;6 experienced BAs.&lt;/li&gt;&lt;li&gt;4-5 months.&lt;/li&gt;&lt;li&gt;Success - happy client.&lt;/li&gt;&lt;/ul&gt;Project 2:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;100 use cases. (different level of detail; about same size ~300 under more analysis)&lt;/li&gt;&lt;li&gt;40 new BAs.&lt;/li&gt;&lt;li&gt;8 months+.&lt;/li&gt;&lt;li&gt;Still going - trying Agile.&lt;/li&gt;&lt;/ul&gt;Both projects were mentored.&lt;br /&gt;Project 1:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;BAs experienced.&lt;/li&gt;&lt;li&gt;Customised templates and tasks.&lt;/li&gt;&lt;li&gt;Fixed time frames.&lt;/li&gt;&lt;li&gt;Clear, succinct high-level requirements.&lt;/li&gt;&lt;li&gt;Clearly defined boundaries.&lt;/li&gt;&lt;li&gt;Clearly defined interactions with external systems.&lt;/li&gt;&lt;/ul&gt;Project 2:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Inexperienced BAs (from business or SW developers) - little or no training or coaching.&lt;/li&gt;&lt;li&gt;'Project office' customised roadmap and templates.&lt;/li&gt;&lt;li&gt;Ongoing activity.&lt;/li&gt;&lt;li&gt;High-level requirements too detailed.&lt;/li&gt;&lt;li&gt;Cloudy project boundaries.&lt;/li&gt;&lt;li&gt;New external systems were constantly discovered: 50-70 kinda involved.&lt;/li&gt;&lt;/ul&gt;Lessons learned:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Don't spend too much time on detailed requirements up front.&lt;/li&gt;&lt;li&gt;Team responsible for customising templates.&lt;/li&gt;&lt;li&gt;Time spent on requirements eats into development time.&lt;/li&gt;&lt;li&gt;Requirements and development should be done in parallel -&gt; Agile.&lt;/li&gt;&lt;li&gt;Avoid analysis paralysis.&lt;/li&gt;&lt;/ul&gt;When do you stop?&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Requires thought.&lt;/li&gt;&lt;li&gt;Do developers have enough to go on with?&lt;/li&gt;&lt;li&gt;Can business sign off?&lt;/li&gt;&lt;li&gt;Have the complex parts of the solution [problem?] been captured adequately.&lt;/li&gt;&lt;/ul&gt;Essential requirements iterations:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Scope; Context; Capability.&lt;/li&gt;&lt;li&gt;Detail; Quantifiable Risk; Buildability.&lt;/li&gt;&lt;li&gt;Resolution; Completion; Testability.&lt;/li&gt;&lt;/ol&gt;Deadlines slipping - why?&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Too much detail up front?&lt;/li&gt;&lt;li&gt;Problems getting signoff?&lt;/li&gt;&lt;li&gt;Don't know what to do next?&lt;/li&gt;&lt;/ul&gt;&lt;span style="font-weight: bold;"&gt;&lt;blockquote&gt;Process may help - what to do next.&lt;/blockquote&gt;&lt;/span&gt;Customise the process:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Every project should customise for project needs.&lt;/li&gt;&lt;li&gt;Process chosen should be flexible enough for customisation.&lt;/li&gt;&lt;li&gt;Agile is not always the answer.&lt;/li&gt;&lt;/ul&gt;Forces:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Agile for high rate of change. &lt;--&lt;/li&gt;&lt;li&gt;and risk. &lt;-- &lt;/li&gt;&lt;li&gt;--&gt; Plan driven for depth of business user knowledge.&lt;/li&gt;&lt;li&gt;--&gt; and project complexity.&lt;/li&gt;&lt;/ul&gt;How do I customise?&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Key - experienced practitioners, not third party.&lt;/li&gt;&lt;li&gt;Activities to touch lightly and in detail.&lt;/li&gt;&lt;li&gt;Experience and coaching are required.&lt;/li&gt;&lt;li&gt;Process does not turn bad BAs into good BAs.&lt;/li&gt;&lt;li&gt;Need support for coaching to customise process and activities for BAs, developers and testers.&lt;/li&gt;&lt;/ul&gt;&lt;span style="font-weight: bold;"&gt;&lt;blockquote&gt;Experience makes the difference.&lt;/blockquote&gt;&lt;/span&gt;Q. Methodology?&lt;br /&gt;A. UML, use cases, activity diagrams, sometimes sequence diagrams. Not casual. Any consistent methodology. Same methodology for each phase - more detail and elaboration.&lt;br /&gt;Q. What size?&lt;br /&gt;A. Is anybody going to need what I am writing? Break into small, bite-size chunks - subject areas.&lt;br /&gt;&lt;br /&gt;Requirements engineering is important - vital.&lt;br /&gt;Business needs to have, to state key project requirements that are clear [objectives!].&lt;br /&gt;Detail of dozens/hundreds of use cases can change - in detail - does not affect key outcomes of project.&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/36773268-9213893192974284130?l=systecit.blogspot.com'/&gt;&lt;/div&gt;</content><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=36773268&amp;postID=9213893192974284130&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/36773268/posts/default/9213893192974284130'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36773268/posts/default/9213893192974284130'/><link rel='alternate' type='text/html' href='http://systecit.blogspot.com/2007/04/matching-process-to-project.html' title='Matching the Process to the Project'/><author><name>Daniel Berinson</name><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='01530541075595598284'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-36773268.post-5214877890501452217</id><published>2007-04-29T15:31:00.000+08:00</published><updated>2007-05-08T14:19:21.163+08:00</updated><title type='text'>Panel on Standards and Accreditation</title><content type='html'>&lt;span style="font-weight: bold;"&gt;Panel on Standards, Accreditation and Joint EA/ACS Board on Software Engineering&lt;/span&gt;&lt;br /&gt;(Prof. Leon Sterling, University of Melbourne, Chair Joint EA/ACS Board)&lt;br /&gt;&lt;br /&gt;Joint EA/ACS Board has existed since 2001 - low key role in shaping professionals involved in software engineering.  Cooperate rather than compete - three members from each plus academic and industry representatives, alternating Chair.&lt;br /&gt;&lt;br /&gt;Bob Hart:  Accreditation from ACS and Joint Board - primary role to cooperate on accreditation; should we have licencing and certification for SE and registration issues; role in running ASWEC (was alternating between EA and ACS).  ~5 meetings per year - review of guidelines for accreditation - shapes accreditation visit, '... to the engineering [verb; gerund] of software.'&lt;br /&gt;&lt;ul&gt;   &lt;li&gt;SWEBOK as example of knowledge base.&lt;/li&gt;   &lt;li&gt;Best practice.&lt;/li&gt;   &lt;li&gt;Code of ethics.&lt;/li&gt;   &lt;li&gt;Team project.&lt;/li&gt;   &lt;li&gt;Clear course aims - not CS extended - articulate vision of graduates.&lt;/li&gt; &lt;/ul&gt; ISO standard on certification of SE professionals, 11 March 2007 - Bob Hart, Manager of Professional Standards and Development, ACS:&lt;br /&gt;&lt;ul&gt;   &lt;li&gt;SEPs work across international borders.&lt;/li&gt;   &lt;li&gt;Need for portability of professional status (Washington Accord for engineers; not all jurisdictions can meet).&lt;/li&gt;   &lt;li&gt;Cohort aspect of engineering degrees.&lt;br /&gt; &lt;/li&gt;   &lt;li&gt;Certify on basis of examination but no ongoing requirement in some jurisdictions.&lt;/li&gt;   &lt;li&gt;Common framework for evaluating certification schemes.&lt;/li&gt;   &lt;li&gt;ISO 17024:2003 standard for conformity and accreditation as a certifying body.&lt;/li&gt;   &lt;li&gt;Required to describe the type of SEP that certification covers:  Title; tasks undertaken; level of accountability and responsibility; skills and competence, knowledge and cognitive levels; other assisting information to identify types of SEP.&lt;/li&gt; &lt;/ul&gt; Knowledge and skills:&lt;br /&gt;&lt;ul&gt;   &lt;li&gt;SWEBOK as comparison.&lt;/li&gt;   &lt;li&gt;Cognitive skills (eg. Blooms taxonomy).&lt;/li&gt;   &lt;li&gt;Other knowledge and skills not in SWEBOK.&lt;/li&gt;   &lt;li&gt;Generic professional capabilities.&lt;/li&gt;   &lt;li&gt;Appropriate standards knowledge.&lt;/li&gt;   &lt;li&gt;Domain (industry, application, &amp;etc) knowledge and skills.&lt;/li&gt; &lt;/ul&gt; Evaluation - competencies, KAs, examination, reports, interviews, employer assessments, external examiners accreditation and QA.&lt;br /&gt;Code of Ethics - minimum set of ethics; compliance; complaints and disciplinary processes.&lt;br /&gt;Maintenance of Certification - period of certification and request for renewal; signed compliance statement from SEP; renewed commitment to code.&lt;br /&gt;Continuing Professional Education - requirement for CPE; what and how much; compliance and sanctions.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/36773268-5214877890501452217?l=systecit.blogspot.com'/&gt;&lt;/div&gt;</content><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=36773268&amp;postID=5214877890501452217&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/36773268/posts/default/5214877890501452217'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36773268/posts/default/5214877890501452217'/><link rel='alternate' type='text/html' href='http://systecit.blogspot.com/2007/04/panel-on-standards-and-accreditation.html' title='Panel on Standards and Accreditation'/><author><name>Daniel Berinson</name><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='01530541075595598284'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-36773268.post-5441736639137447855</id><published>2007-04-29T13:52:00.001+08:00</published><updated>2007-04-29T13:52:27.390+08:00</updated><title type='text'>How Open are we to Open Source?</title><content type='html'>(Michael Coates, Object Consulting - Java J2EE on Windows and Unix. Focus on solution architecture - Consulting, Development, Training and Support.)&lt;br /&gt;&lt;br /&gt;Java development - relies on open source software on every project he works on including development environment and frameworks - in commercial and government. Java - lots of open source; Microsoft.Net - filling gaps especially Java developers desiring specific features.&lt;br /&gt;&lt;br /&gt;Examples:&lt;br /&gt;&lt;ul&gt; &lt;li&gt;Eclipse, Netbeans, xplanner.&lt;/li&gt;&lt;li&gt;Ruby - mainly DSL for build processes.&lt;/li&gt;&lt;li&gt;Some Linux and database deployment.&lt;/li&gt;&lt;li&gt;Java language itself is becoming open source.&lt;/li&gt;&lt;li&gt;JBoss, Tomcat - rare in givernment and enterprise.&lt;/li&gt;&lt;li&gt;Few business, enterprise applications to match Office, Notes, SAP.&lt;/li&gt; &lt;/ul&gt;  Australian National Archives has three open source projects on Source Forge. Infomedix - five major hospitals has systems based on Linux plus MySQL commercial licences. University departments - eg. 350 students onsite - open source everything, high reliability (uptime). Lesser GPL or Apache licence for reuse of libraries.&lt;br /&gt;&lt;br /&gt;Licencing considerations:&lt;br /&gt;&lt;ul&gt; &lt;li&gt;As a platform?  ef. JBoss, Tomcat, Linux.&lt;/li&gt;&lt;li&gt;As a library?  eg. log4j, Spring, nHibernate.&lt;/li&gt;&lt;li&gt;Modifying, borrowing from, eatending lib or product?  eg. customer CMS.&lt;/li&gt;&lt;li&gt;Internal solution.&lt;/li&gt;&lt;li&gt;Developed on behalf of third party.&lt;/li&gt;&lt;li&gt;Plan to distribute for free or for a cost.&lt;/li&gt;&lt;li&gt;How to get new licence approved?&lt;/li&gt; &lt;/ul&gt;  Barriers to adoption - Support:&lt;br /&gt;&lt;ul&gt; &lt;li&gt;Forums, wiki pages.&lt;/li&gt;&lt;li&gt;Community versus Enterprise licences.&lt;/li&gt;&lt;li&gt;How does it compare to support for current solutions?  Vary between the development team and the business users.&lt;/li&gt;&lt;li&gt;Where do we get training?  Available for mature projects.&lt;/li&gt; &lt;/ul&gt;  Barriers to adoptions - Incumbent vendors:&lt;br /&gt;&lt;ul&gt; &lt;li&gt;No one every got fired for buying...&lt;/li&gt;&lt;li&gt;Cost of change for retraining, deployment.  Need to have a significant reason to change.&lt;/li&gt;&lt;li&gt;Bargaining.&lt;/li&gt; &lt;/ul&gt;  Yet er're still using Open Source:&lt;br /&gt;&lt;ul&gt; &lt;li&gt;Cost effective - existing skills, low cost to try.&lt;/li&gt;&lt;li&gt;Open standards - avoid vendor lock-in; interop, duture proofing.&lt;/li&gt;&lt;li&gt;Reduced time to market - particularly for development teams.&lt;/li&gt;&lt;li&gt;Best of breed.&lt;/li&gt; &lt;/ul&gt;  Trend towards greater focus on business domain components over technical domain, eg. model-driven architecture (MDA) for business patterns. You cannot sell infrastructure to business - OS projects focus on techies (devel tools, libs, OS). For wide adoption provide visible business value (CMS, CRM, ERP). Government agencies making open source available to wider community.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/36773268-5441736639137447855?l=systecit.blogspot.com'/&gt;&lt;/div&gt;</content><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=36773268&amp;postID=5441736639137447855&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/36773268/posts/default/5441736639137447855'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36773268/posts/default/5441736639137447855'/><link rel='alternate' type='text/html' href='http://systecit.blogspot.com/2007/04/how-open-are-we-to-open-source.html' title='How Open are we to Open Source?'/><author><name>Daniel Berinson</name><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='01530541075595598284'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-36773268.post-4323074181564713507</id><published>2007-04-29T12:15:00.001+08:00</published><updated>2009-03-11T16:27:28.558+09:00</updated><title type='text'>Architectural Knowledge Sharing</title><content type='html'>&lt;span style="font-weight: bold;"&gt;Prerequisites for Successful Architectural Knowledge (AK) Sharing&lt;/span&gt;&lt;br /&gt;(Rik Farenhorst, Patricia Lago and Hans van Vliet)&lt;br /&gt;&lt;br /&gt;Architectural knowledge not shared eventually dissipates.  Sharing:&lt;br /&gt;&lt;ul&gt;   &lt;li&gt;Prevents loss of crucial architectural knowledge.&lt;/li&gt;   &lt;li&gt;Enables exchange of experiences.&lt;/li&gt;   &lt;li&gt;Enables reuse of expertise.&lt;/li&gt;   &lt;li&gt;Assists to train juniors.&lt;/li&gt; &lt;/ul&gt; Not so popular because:&lt;br /&gt;&lt;ul&gt;   &lt;li&gt;Costs time and effort.&lt;/li&gt;   &lt;li&gt;Lack of perceived short-term benefits.&lt;/li&gt; &lt;/ul&gt; People need to be motivated - incentives - to make them aware of intrinsic benefits and to induce people to share AK. Incentives for AK sharing:&lt;br /&gt;&lt;ol&gt;   &lt;li&gt;Establishment of social ties - leading to increased transparency and trust.&lt;/li&gt;   &lt;li&gt;More efficient decision making.&lt;/li&gt;   &lt;li&gt;Knowledge internalisation - ownership of explicit knowledge; control, stored in own mind.&lt;/li&gt; &lt;/ol&gt; Study at large software development organisations identified four angles that need to be activated:&lt;br /&gt;&lt;ol&gt;   &lt;li&gt;Context and environment.&lt;/li&gt;   &lt;li&gt;Description.&lt;br /&gt;&lt;/li&gt;   &lt;li&gt;Decisiveness.&lt;/li&gt;   &lt;li&gt;Stakeholders roles and responsibilities.&lt;/li&gt; &lt;/ol&gt; Observed issues with AK sharing:&lt;br /&gt;&lt;ol&gt;   &lt;li&gt;Lack of consistency between architecture and design documents.&lt;/li&gt;   &lt;li&gt;Communication overhead between stakeholders - not properly-documented decisions.&lt;/li&gt;   &lt;li&gt;No explicit collaboration with maintenance teams.&lt;/li&gt;   &lt;li&gt;No feedback from developers to architects - architects may lack up-to-date technology knowledge.&lt;/li&gt;   &lt;li&gt;No up-tp-date knowledge from development teams in repository.&lt;/li&gt;   &lt;li&gt;No up-to-date knowledge from main customer in repository - reference architecture used by organisation.&lt;/li&gt; &lt;/ol&gt; Prerequisites for AK sharing:&lt;br /&gt;&lt;ol&gt;   &lt;li&gt;Alignment between design artifacts -&gt; [create] higher-quality knowledge -&gt; [incentive] knowledge internalisation.&lt;/li&gt;   &lt;li&gt;Traceability between architectural decisions and descriptions -&gt; [as above].&lt;/li&gt;   &lt;li&gt;Architect fulfil a central role -&gt; minimise competition -&gt; establishment of social ties.&lt;/li&gt;   &lt;li&gt;Central architectural knowledge repository -&gt; creates feedback loop -&gt; more efficient decision making.&lt;/li&gt; &lt;/ol&gt;Goal:  Effective tool support for AK sharing - close alignment to &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_0"&gt;architecting&lt;/span&gt; process; lightweight and appealing to users.  Solution:  AK sharing platform that features explicit focus on collaboration, &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_1"&gt;hybrid&lt;/span&gt; AK model (codification and personalisation), reuse of best practices, &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_2"&gt;expertise&lt;/span&gt;, easy adding and &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_3"&gt;editing&lt;/span&gt;.  For AK that is hard to make explicit:  Who has what AK? - 'yellow pages' and store unstructured information - blogs, discussion groups - searching and enriching this information.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/36773268-4323074181564713507?l=systecit.blogspot.com'/&gt;&lt;/div&gt;</content><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=36773268&amp;postID=4323074181564713507&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/36773268/posts/default/4323074181564713507'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36773268/posts/default/4323074181564713507'/><link rel='alternate' type='text/html' href='http://systecit.blogspot.com/2007/04/architectural-knowledge-sharing.html' title='Architectural Knowledge Sharing'/><author><name>Daniel Berinson</name><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='01530541075595598284'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-36773268.post-1285954627570144712</id><published>2007-04-22T10:12:00.001+08:00</published><updated>2009-03-11T16:31:08.409+09:00</updated><title type='text'>ASWEC 2007</title><content type='html'>&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_0"&gt;ASWEC&lt;/span&gt; 2007 was held at the &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_1"&gt;RACV&lt;/span&gt; Club in Melbourne from 11-13 April with tutorials on Tuesday 10 April and was a great success. Expect several followup articles covering various sessions and presentations that I attended. Welcome by Prof. Doug Grant, conference General Chair - who gave thanks to authors, sponsors, Steering Committee and organisers.&lt;br /&gt;&lt;br /&gt;Doug noted that it has been 39 years since the NATO conference (1968) held on German city of &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_2"&gt;Garmisch&lt;/span&gt;, coined the term 'Software Engineering.'  The theme of this years conference is an example of reuse, "Taming Complexity with Research and Practice.'  Since that time much has changed:  Thomas Freedman, 'The World is Flat' explores globalisation; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_3"&gt;ASWEC&lt;/span&gt; is a global conference that is located in Australia.&lt;br /&gt;&lt;br /&gt;The charter of &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_4"&gt;ASWEC&lt;/span&gt; is to communicate and share problems, solutions, to form partnerships.  There may be impact from the Research Quality Framework (&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_5"&gt;RQF&lt;/span&gt;) which seeks to assess the quality of research in each discipline.  Research publications and local conferences appear to be disadvantaged by these metrics.  Those is academia must influence attendance of conferences and members of university advisory &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_6"&gt;committees&lt;/span&gt; should do likewise.&lt;br /&gt;&lt;br /&gt;Competent graduates are the ones who can communicate well; they are snapped up by industry.  Persuading young people to study in our universities - &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_7"&gt;ICT&lt;/span&gt; - not for lack of places, we need ideas to &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_8"&gt;reenergise&lt;/span&gt; and &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_9"&gt;reengage&lt;/span&gt; young people in these disciplines.&lt;br /&gt;&lt;br /&gt;Prof. Jun Han - few words about the program; research and industry track papers; keynotes; tutorials (yesterday).  100 submissions; half local, half overseas; selected 39 - reviewed by at least 3 (sometimes 4 to resolve issues).  Selected 19 industry presentations.  Mixed program of industry and academic papers by topic.&lt;br /&gt;&lt;br /&gt;The keynote was delivered by Prof. Oscar &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_10"&gt;Nierstraag&lt;/span&gt;, head of the Software Composite Groups - making &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_11"&gt;systems&lt;/span&gt; more adaptive to changing requirements, visiting professor at the Sorbonne, coauthor of Software &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_12"&gt;Reengineering&lt;/span&gt; Patterns - speaking about modelling change as a first-class entity.  Kinds of change include configuration, refactoring, new functionality, &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_13"&gt;run-time&lt;/span&gt; adaption, projects include:  &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_14"&gt;Piccola&lt;/span&gt;, Traits, &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_15"&gt;Classboxes&lt;/span&gt;, Persephone and &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_16"&gt;Geppette&lt;/span&gt;, Object Flow Analysis, Moose, &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_17"&gt;Changeboxes&lt;/span&gt; to encapsulate change.  Software inevitably changes but program languages and development environments inhibit change rather than support it.  Symptoms include assumption of global consistency, static type systems, design patterns - covered in 'On the Revival of Dynamic Languages.'&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Piccolo.&lt;/span&gt;  Problem - &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_18"&gt;reconfig&lt;/span&gt; application (without changing &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_19"&gt;eveything&lt;/span&gt;).  Solution - composition language - application = components + script.  Separates stable components from flexible configuration.  Scripts plug together (not wire) components and define style of composition for &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_20"&gt;plugins&lt;/span&gt;.  Lessons - first-class &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_21"&gt;namespaces&lt;/span&gt; enable flexible &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_22"&gt;composition&lt;/span&gt;, &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_23"&gt;eg&lt;/span&gt;. sandboxes; conceptual gap between core and target models (components, &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_24"&gt;plugins&lt;/span&gt; and styles versus agents, forms and channels).&lt;span style="font-weight: bold;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-weight: bold;"&gt;Traits.&lt;/span&gt;  Problem - refactoring commonality (without &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_25"&gt;introducing&lt;/span&gt; fragility).  Solution - factor commonalities into traits (&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_26"&gt;mixins&lt;/span&gt; and multiple inheritance are fragile); resolve conflict locally.  Traits are &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_27"&gt;parameterised&lt;/span&gt; behaviours that provide and require methods - no state (assumption may be weakened) - class = &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_28"&gt;superclass&lt;/span&gt; + traits + glue.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_29"&gt;Classboxes&lt;/span&gt;:&lt;/span&gt;  Controlling visibility in class extensions.  Problem - changing a running system without anticipated hooks.  Solution - refactor on demand - partial, behavioural reflection.  First idea - &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_30"&gt;ByteSurgeon&lt;/span&gt; to &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_31"&gt;transform&lt;/span&gt; Smalltalk code.&lt;span style="font-weight: bold;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-weight: bold;"&gt;Persephone.&lt;/span&gt;  Reflection methods - higher level - byte code plus abstract syntax tree (&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_32"&gt;AST&lt;/span&gt;).&lt;span style="font-weight: bold;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-weight: bold;"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_33"&gt;Geppetto&lt;/span&gt;.&lt;/span&gt;  Behavioural reflection on demand.  Lessons - &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_34"&gt;reflectoin&lt;/span&gt; enables analysis; reflection need not be expensive; should be scoped to relevant contexts (&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_35"&gt;eg&lt;/span&gt;. Lists in application context).&lt;span style="font-weight: bold;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-weight: bold;"&gt;Moose.&lt;/span&gt;  Extensible &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_36"&gt;metamodel&lt;/span&gt; repository - navigation, metrics, querying, grouping - tools for enabling research.  Java, &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_37"&gt;Colol&lt;/span&gt;, C++ - &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_38"&gt;XMI&lt;/span&gt; - import to enable model-driven development, explicit and available at &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_39"&gt;runtime&lt;/span&gt;.  Enables "ever more fine-&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_40"&gt;grined&lt;/span&gt; changes" without artificial separation between source code and compilation (&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_41"&gt;eg&lt;/span&gt;. Smalltalk and Eiffel).&lt;br /&gt;&lt;br /&gt;Certainly an interesting and stimulating talk by the keynote speaker.  My own notes and several pointed questions and remarks raise the question, "Is this software engineering?"  Some of these techniques approach the mainstream insofar as dynamic interception can be implemented with &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_42"&gt;run-time&lt;/span&gt; proxies using reflection; the Spring framework allows for wired configuration at &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_43"&gt;run-time&lt;/span&gt;; the new keyword in .Net localises the context for a method extension; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_44"&gt;Corba&lt;/span&gt; using the dynamic invocation interface.&lt;br /&gt;&lt;br /&gt;The issue of regression testing, verification and validation to give confidence in the &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_45"&gt;run-time&lt;/span&gt; is similar to proxy interceptors, &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_46"&gt;SQL&lt;/span&gt; triggers and aspect-oriented programming.  It is ironic that low-level techniques are arising to allegedly solve problems with the object-oriented approach to design but aspect-oriented programming, while described as orthogonal to object design, is at a lower level of abstraction.&lt;br /&gt;&lt;br /&gt;When asked about bugs related to threading, locks, logging, transactions and similar, I usually say that the design is flawed - no amount of hunting will track down the elusive bug if it isn't there in the first place.  Go back to analysis and design to isolate the parts of the system that are variable from those that are general - see, for example, &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_47"&gt;Coplien's&lt;/span&gt; Commonality-Variability principle.  Software engineering is more than just programming.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/36773268-1285954627570144712?l=systecit.blogspot.com'/&gt;&lt;/div&gt;</content><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=36773268&amp;postID=1285954627570144712&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/36773268/posts/default/1285954627570144712'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36773268/posts/default/1285954627570144712'/><link rel='alternate' type='text/html' href='http://systecit.blogspot.com/2007/04/aswec-2007.html' title='ASWEC 2007'/><author><name>Daniel Berinson</name><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='01530541075595598284'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-36773268.post-3445028988514391417</id><published>2007-02-16T23:47:00.000+09:00</published><updated>2007-03-10T00:10:23.553+09:00</updated><title type='text'>Commonality and Variability</title><content type='html'>Following the same thread towards commonality-variablity analysis, a practical and common-sense approach to designing abtract and concrete classes by distinguishing common behaviour of a class-of-types from their distinct variable behaviour from each other within that class-of-types.&lt;br /&gt;&lt;br /&gt;I was just refreshing my memory about commonality-variablity analysis (see &lt;a href="http://www1.bell-labs.com/user/cope/Mpd/IeeeNov1998/"&gt;James O. Coplien, et al&lt;/a&gt;) and I noticed the first reference  D.L. Parnas et al., "The Modular Structure Of Complex Systems," IEEE Trans. Software Eng., Mar. 1985, pp.408-417.&lt;br /&gt;&lt;br /&gt;Prof. David L. Parnas was the keynote speaker the Australian Software Engineering Conference I recently attended in Brisbane.  An inspirational speaker, he is "one of the grandmasters of software engineering." (&lt;a href="http://www.awprofessional.com/bookstore/product.asp?isbn=0201703696&amp;redir=1"&gt;see&lt;/a&gt;).  "Software Fundamentals: Collected Papers by David L. Parnas is a practical guide to key software engineering concepts that belongs in the library of every software professional." (ibid; &lt;a href="http://www.amazon.com/exec/obidos/tg/detail/-/0201703696/103-4120042-7063812?v=glance"&gt;see also&lt;/a&gt;).&lt;br /&gt;&lt;br /&gt;I was privileged to have the opportunity to sit down and chat with Prof. Parnas on several occasions over the course of the conference and found him to be a gentleman and still passionate about software engineering, licencing and education or professionals in our field.  One of the recurrent topics is the content and quality of University education.&lt;br /&gt;&lt;br /&gt;Recently, I had the opportunity to give a seminar in CS at UWA about Java, C++, type-safety and emergent design, in part motivated by discussions with David and also stimulated by thoughts from Douglas Hofstadter's fabulous Godel, Escher, Bach:  An Eternal Golden Braid.&lt;br /&gt;&lt;br /&gt;You haven't read GEB?  I heartily recommend it as a glorious and stimulating mental roller coaster for all readers.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/36773268-3445028988514391417?l=systecit.blogspot.com'/&gt;&lt;/div&gt;</content><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=36773268&amp;postID=3445028988514391417&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/36773268/posts/default/3445028988514391417'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36773268/posts/default/3445028988514391417'/><link rel='alternate' type='text/html' href='http://systecit.blogspot.com/2007/02/commonality-and-variability.html' title='Commonality and Variability'/><author><name>Daniel Berinson</name><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='01530541075595598284'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-36773268.post-7559860697692264044</id><published>2007-02-16T23:32:00.001+09:00</published><updated>2008-09-16T15:02:57.465+08:00</updated><title type='text'>Which programming language to teach?</title><content type='html'>Having just stumbled across these comments in a personal email I sent to a colleague about what programming languages to teach, it seems a good idea to reporoduce it here.  Not intended to start a flame war but rather to offer a commercial perspective on the relevance of the various languages in undergraduate teaching at university.  My reply to his question is shaped by my thoughts having just returned from ASWEC 2005, held in Brisbane, Queensland.&lt;br /&gt;&lt;br /&gt;I have strong feelings about the structure of undergraduate and postgraduate courses at university.  I had discussions with several people at the conference, including world expert Prof. Parnas, one of the keynote speakers, and several others about problems with course content, mainly the tension between science, IT, CS, fundamentals, engineering accreditation, resources and so on.  An enduring feature of these discussions is what languages to teach.&lt;br /&gt;&lt;br /&gt;I think UWA has traditionally had a good balance however the recent lack of strong C/C++ teaching has been a disadvantage while Haskell, and functional languages, are closer to much commercial reality when code generation and style-sheet processing (like grammars, parsing and rules application eg. make, ant, xslt, yacc/lex) are involved.  Lisp, prolog and their ilk are yet another kettle-of-umm-fish.&lt;br /&gt;&lt;br /&gt;My personal feeling is that Smalltalk and Eiffel have limited applicability in commercial applications.  My main reasons are that they lack flexibility and sufficient object-oriented constructs, are overly rigid and, as a result, never achieved commercial acceptance.  I will state, however, that Smalltalk concepts are endemic through the community and have found a place in other languages and common practice, C# delegates and C++ Boost function prototypes being modern implementations of Smalltalk message passing based on method signatures rather than, for C++ and others previously, where an explicit, common base class has been required for polymorphism and dynamic dispatch to take place.&lt;br /&gt;&lt;br /&gt;Teaching of these languages, or similar, must be mandatory because otherwise there is no sense of history and development, for one thing, and they also provide a platform for describing improvements (not always the case though) through language evolution.  As Isaac Newton said, "If I have been able to see further, it was only because I stood on the shoulders of giants."&lt;br /&gt;&lt;br /&gt;My reasons for and against Smalltalk and Eiffel, neither of which I have used in earnest, follow.  Sigh.  Single inheritance means that natural object hierarchies cannot be built.  Same objection against Java and C# managed components.  Leads to code duplication and in some cases jumping-through-hoops to achieve satisfactory design.  For example, p-&gt;impl-ing a class to implement a sort-of decorator which delegates to the another class.  Certainly we prefer composition to inheritance however the mixin is incredibly useful and, importantly, leads to a very simple design, most important for understanding, and implementation, less important except directly impacts on maintenance costs over lifetime of component.&lt;br /&gt;&lt;br /&gt;Similarly for const-correctness in C++, lacking in the others, where this additional contract improves code robustness.  We use the const idiom in Java, the read-write interface extending the read-only interface (Aro &lt;- Arw) in order to get similar, but without type safety.  Eiffel programming by contract is a design principle and has some arguments to its merit, expressing invariants in code, however the mechanism is rigid and hence brittle.  I argue the same for Ada.&lt;br /&gt;&lt;br /&gt;Specifically, it is unnecessary, even wrong, for whole families of constraints to be captured in source code and caught at compile time.  Static type safety is, I believe, fundamental to building robust software.  However, pre and post conditions are run-time constraints so they are of less benefit than contraints imposed by the "interface contract" of a base class or interface.  Early failure is as desirable as late binding and lazy initialisation.&lt;br /&gt;&lt;br /&gt;An open question on requirements capture is occupying my thinking, and I should be generating a paper on equivalence between typographical, textual requirements, formal specification (eg. Z or object Z), use cases and invariants asserted in test cases.  Trying to capture all of the same information is more than one layer of abstraction is of questionable value because it appears that instead of a higher-level language being used for analysis, requiring a tranformative step and further elaboration (eg. detailed design) it is assumed that direct translation can be used.  Which is pointless.&lt;br /&gt;&lt;br /&gt;Consider that if the specification language can be translated to an implementation then it is just another isomorphic implementation language.  Oddly enough, that is how in the limit I tend to describe all of the modern programming languages - as syntactic variations of Algol.  Maybe that's a bit extreme.  Include Lisp:  Treat modules and classes as metaconstructs.  Maybe not.  I treat comments as part of the interface contract.  Test-driven development exercises these constraints as well.&lt;br /&gt;&lt;br /&gt;So there you have it.  Teach all of the programming languages.  Keep them in context.  Stand on the shoulders of giants.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/36773268-7559860697692264044?l=systecit.blogspot.com'/&gt;&lt;/div&gt;</content><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=36773268&amp;postID=7559860697692264044&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/36773268/posts/default/7559860697692264044'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36773268/posts/default/7559860697692264044'/><link rel='alternate' type='text/html' href='http://systecit.blogspot.com/2007/02/which-progamming-language-to-teach.html' title='Which programming language to teach?'/><author><name>Daniel Berinson</name><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='01530541075595598284'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-36773268.post-5745186406793284268</id><published>2006-12-14T22:47:00.001+09:00</published><updated>2009-02-06T13:40:10.751+09:00</updated><title type='text'>Pragmatic Software Design</title><content type='html'>Is there such a thing as minimal design? In my experience there is good design, bad design or no design at all. The easy throw-away line that minimal design and coding is the way to go just does not wash with any rational test. The problem is how to identify and eliminate poorly designed bits of code while recognising and keeping well-designed pieces of code.&lt;br /&gt;&lt;br /&gt;How do we identify bad code? The easiest way is to follow a set of rules and match the code against those rules. Design &lt;span style="font-style: italic;"&gt;antipatterns&lt;/span&gt; are a good place to start. Martin Fowler and friends in &lt;span style="font-style: italic;"&gt;Refactoring&lt;/span&gt; speak of &lt;span style="font-style: italic;"&gt;code smells&lt;/span&gt; and have a taxonomic breakdown of the smells that emanate from bad code and the steps to be taken to rectify the problem.&lt;br /&gt;&lt;br /&gt;Can we recognise good code? If we start with design patterns, enterprise patterns, language-oriented idioms and set the goal of explicitly naming the &lt;span style="font-style: italic;"&gt;patterns and idioms&lt;/span&gt; in our code then we have a metric of pattern density, or as I like to call it, the emergence of pattern poetry.&lt;br /&gt;&lt;br /&gt;The emergence of structure from goal-seeking behaviour among autonomous agents is a characteristic of all distributed systems including software developers. Some might call it, with apologies to John Vlissides, &lt;span style="font-style: italic;"&gt;pattern hatching&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;What can be done to rectify poor code? The baby steps of refactoring are a good starting point for improving code structure in the small. The detail of implementation can be directly improved by making incremental changes to the code. In order to ensure the continuation of correctness in the behaviour of the code it is necessary to have unit tests that exercise each unit of code and confirms its &lt;span style="font-style: italic;"&gt;invariants are satisfied&lt;/span&gt; as expected.&lt;br /&gt;&lt;br /&gt;Test-Driven Development in concert with &lt;span style="font-style: italic;"&gt;Mock Objects&lt;/span&gt; for unit testing help to ensure that the expected behaviour of each unit can be modelled, tested and implemented. One of the corollary conditions is that the contract for each unit is expressed as an interface or abstract base class so that production and mock implementations can be provided for units to test against.&lt;br /&gt;&lt;br /&gt;Unit testing, glass box or white box testing is concerned with assuring the internal behaviour of each component is correct. Integration testing or black box testing is distinguished as concerned with validating the external behaviour of various integrated sets of components against the expectations of the customer. Acceptance tests and integration tests are synonyms for tests that are specified by the customer or are derived from the user requirements, otherwise known as the system definition.&lt;br /&gt;&lt;br /&gt;It is perfectly clear to most developers that unit testing is sufficient to ensure that components will successfully integrate and interoperate together in order to fulfil the purpose for which they were designed. Usually, each component has been assigned a number of specific functional requirements, use cases or user stories during requirements analysis and negotiation, iteration planning or the planning game. The problem is this crystal clear conclusion is completely wrong.&lt;br /&gt;&lt;br /&gt;A number of units of code cannot just be stitched together and expected to work as anticipated. Each component or unit has its own invariants, constraints and boundary conditions. Some of these match globally across all of the other components while other are distinct constraints. The picture is one of trying to stitch together a large area of fabric from different sized and shaped pieces that each have their own size, shape, material and thickness.&lt;br /&gt;&lt;br /&gt;For the mathematically minded, the situation is analogous to a analytic function in complex space in the sense of satisfying the Cauchy-Riemann equations for the existence of higher-order derivatives and so demonstrating smooth continuity.&lt;br /&gt;&lt;br /&gt;Most system partitionings into subsystems and components result in units of code that are analogous to distinct regions of complex space where each one of the functions may be locally analytic. However there are mathematical difficulties at the boundaries of each of these regions trying to stitch the functions together.&lt;br /&gt;&lt;br /&gt;The problem cannot be remedied by small, incremental, baby steps to refactor the code. Fowler's large refactorings cannot be done in baby staps at all. Continuous integration that requires code to compile against &lt;span style="font-style: italic;"&gt;all the most recent versions&lt;/span&gt; in the source repository of other components is not possible.&lt;br /&gt;&lt;br /&gt;Such a backward-looking constraint causes the design of the code to remain in a &lt;span style="font-style: italic;"&gt;local minimum&lt;/span&gt; in the phase space of design possibilities with little or no chance or breaking out into a quality design.&lt;br /&gt;&lt;br /&gt;Evidence for progress is a continually breaking build because an advance or change is made to one or more component interfaces causing compilation failure, or change in one or more component implementations causing unit or integration test failures.&lt;br /&gt;&lt;br /&gt;The need for unit and integration tests is paramount for the possibility of successfully integrating the diverse components. And for interface contracts to allow the unit and integration tests to be coded in the first place using mock objects.&lt;br /&gt;&lt;br /&gt;The result is confidence in the code, the unit tests and validation of acceptance and integration tests. This is a &lt;span style="font-style: italic;"&gt;pragmatic approach&lt;/span&gt; and there is nothing minimal about it.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/36773268-5745186406793284268?l=systecit.blogspot.com'/&gt;&lt;/div&gt;</content><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=36773268&amp;postID=5745186406793284268&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/36773268/posts/default/5745186406793284268'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36773268/posts/default/5745186406793284268'/><link rel='alternate' type='text/html' href='http://systecit.blogspot.com/2006/12/minimal-or-pragmatic-software-design.html' title='Pragmatic Software Design'/><author><name>Daniel Berinson</name><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='01530541075595598284'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-36773268.post-1415363567185706534</id><published>2006-12-10T20:23:00.000+09:00</published><updated>2007-02-06T19:59:54.364+09:00</updated><title type='text'>Modern Object-Oriented Programming</title><content type='html'>The most popular object-oriented programming (OOP) languages of C++, Java and C# are very similar to each other and indeed to their progenitors of Smalltalk, Simula, Algol and C.  Similarly, the programming skills employed are similar regardless of the development language that has been chosen.  Each of the modern languages shares structured programming constructs like if-then-else, for-next loops, or equivalents, and so on, with each other and their older cousins.  With each other they share constructs that can be used to build classes, employ polymorphism and specify type safety within the bounds of the domain-specific language (DSL) that extends the base language for the problem domain in which we are working.&lt;br /&gt;&lt;br /&gt;That there are so many commonalities between the three modern languages is unsurprising since C++ was the first programming language to cohesively tie together object-oriented concepts and Java copied, sometimes insensitively, from C++.  Without doubt C# is a copy of Java with a few extensions along the lines of syntactic sugar (eg. properties and indexers, perhaps itself a workaround for the absence of operator overloading).  Even more telling is the fact that Java and C# betray their own origins by adopting the very features that they initially dropped from C++ and had previously been decried by the language designers as bad features.  The features that were dropped from Java when otherwise copying C++ syntax include multiple inheritance, operator overloading and templates, otherwise known as generics.  C# included operator overloading in its first incarnation as a throw-back to its supposed C++ lineage but copies the Java path, perhaps set by Smalltalk, in disallowing multiple inheritance and generics.  These and other features have crept their way into Java and C# however it is arguable whether programmers are more productive, not withstanding the marketting of the respective sponsor organisations for each language.&lt;br /&gt;&lt;br /&gt;The exploration of the details behind the key constructs of C++, the equivalent code in Java and C#, the extensions and omissions in those languages, and the revised C++ standard, i.e. C++0x and Technical Report 1 (TR1), following over a decade of stability, are beyond the scope of the present discussion.  The points of note are that the languages are very similar and appear, at first glance, then second and third blush, to borrow insensitively from C++, clearly their motivation.  Java differs quite markedly in some syntax while maintaining the same class flavour while the more-recent C# seems, to invoke evolutionary atavism, to be a throwback to C++ with a few enriching extensions.  All three are, for all intents and purposes, equivalent for purpose of business programming, among others, and being general-purpose programming languages any one can in general implement with relative ease the same solution as in any of the other two.&lt;br /&gt;&lt;br /&gt;The building blocks of complex software are groups of components that number several classes grouped together into a library, jar file or assembly.  The opposing forces of decoupling and cohesion determine which classes and components to group together into a single unit of release.  Robert Martin's Principles of Object-Oriented Design speaks of the Common Closure Principle (CCP) and Common Reuse Principle (CRP) for grouping classes together; the Dependency Inversion Principle (DIP) and Interface Segregation Principle (ISP) for classes to depend on abstractions and client-specific, or narrow, rather than fat interfaces.&lt;br /&gt;&lt;br /&gt;Beyond design patterns at a higher level of abstraction one may speak of analysis patterns and enterprise patterns or more generally to speak of application and framework architecture.  The elements of architecture include frameworks of reusable components that are idiomatic for each programming language so that C++, Java and C# libraries may be unique in design to take advantage of each language benefits.  Examples include OpenGL and Open Scene Graph (OSG) in C++; Spring for Inversion of Control (IoC) or dependency injection in Java; COM+ and Enterprise Services in C#, the natural language of .NET.  Other frameworks may be similar or identical for all of these, including Corba-IIOP, SOAP/SOA, ESB and Brokers at a high level; Hibernate persistence framework, xUnit test (i.e. CppUnit, JUnit and NUnit) and logging frameworks (i.e. log4cpp, log4j and log4net) at a lower level.&lt;br /&gt;&lt;br /&gt;Similar to analysis patterns that transform into a myriad of design patterns, each of which can be implemented in any language and reflect the customary idiom, Corba-IIOP and DCE-RPC turn up as Corba in C++, RMI-IIOP in Java and .NET Remoting in C#.NET; message queuing WebSphere MQ, Java Message Queue (JMQ) and MSMQ are platform and language independent to a greater and lesser extent.  By their nature, integration technologies need to span various technologies and platforms in order to serve their purpose.  Adaptive Communications Environment (ACE), TAO Corba ORB (Object Request Broker) in C++; perhaps Internet Communications Engine (ICE) with bindings to these and other platforms is the most cohesive of all.  The same can be said for transaction models that seem much alike from IBM CICS, BEA Tuxedo, Java EE, Microsoft MTS/COM+ and .NET Enterprise components.&lt;br /&gt;&lt;br /&gt;The modern concept of an application server embodies many of these concepts in various combinations.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/36773268-1415363567185706534?l=systecit.blogspot.com'/&gt;&lt;/div&gt;</content><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=36773268&amp;postID=1415363567185706534&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/36773268/posts/default/1415363567185706534'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36773268/posts/default/1415363567185706534'/><link rel='alternate' type='text/html' href='http://systecit.blogspot.com/2006/12/modern-object-oriented-programming.html' title='Modern Object-Oriented Programming'/><author><name>Daniel Berinson</name><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='01530541075595598284'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-36773268.post-1194636286339404429</id><published>2006-11-12T12:34:00.000+08:00</published><updated>2006-11-13T10:44:10.100+08:00</updated><title type='text'>Peer Review and Problem Solving</title><content type='html'>Peer review, open communication and collaboration are probably the hardest nuts to crack and the foundation of successful team. Some years ago, a colleague of mine suggested that the increased communication encouraged by OO design and interfaces is more important than the OO itself as a determinant of success.&lt;br /&gt;&lt;br /&gt;Curiously, she has a background in communications and media before completing a postgrad computing degree. Some of the most successful people I know in this field have three year degrees or a background outside of computing. Not to mention the fathers of the field like Dijkstra, Barry Boehm and David Parnas, whom I had the pleasure of meeting at ASWEC 2005 in Brisbane two years ago.&lt;br /&gt;&lt;br /&gt;My current reading extends to Karl Popper (falsability and scientific progress), Kuhn-Popper "debate" on established order in science versus recurrent critique, where the philosophy is stretching my own thinking beyond its usual bounds (Bertrand Russell, Piaget in the stack of books).&lt;br /&gt;&lt;br /&gt;I encourage peers to read and try to understand books in problem solving and Hofstadter's &lt;a href="http://www.amazon.com/Godel-Escher-Bach-Eternal-Golden/dp/0465026567/sr=8-2/qid=1163335145/ref=sr_1_2/002-6330146-0446459?ie=UTF8&amp;s=books"&gt;GEB&lt;/a&gt;, for instance, in order to extend themselves intellectually and to learn new approaches to problem solving (eg. induction, depth first, work backwards) to add to their own personal toolkit of &lt;a href="http://www.amazon.com/exec/obidos/tg/detail/-/0486284336/qid=/sr=/ref=cm"&gt;problem solving techniques&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Gerald Weinberg introduced the concept of &lt;span style="font-style: italic;"&gt;egoless programming&lt;/span&gt; in The Psychology of Computer Programming, originally published in 1971 and re-released in 1998. Weinberg recognized that people tie much of their &lt;a href="http://www.processimpact.com/articles/humanizing_reviews.html"&gt;perceived self-worth&lt;/a&gt; to their work.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/36773268-1194636286339404429?l=systecit.blogspot.com'/&gt;&lt;/div&gt;</content><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=36773268&amp;postID=1194636286339404429&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/36773268/posts/default/1194636286339404429'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36773268/posts/default/1194636286339404429'/><link rel='alternate' type='text/html' href='http://systecit.blogspot.com/2006/11/peer-review-and-problem-solving.html' title='Peer Review and Problem Solving'/><author><name>Daniel Berinson</name><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='01530541075595598284'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-36773268.post-6125818826921878835</id><published>2006-11-12T10:57:00.000+08:00</published><updated>2006-11-12T20:36:10.361+08:00</updated><title type='text'>Lessons and Licensing</title><content type='html'>I had the great pleasure of meeting and having several extended conversations with the renowned Prof. David Parnas who I met at the &lt;a href="http://aswec.org/"&gt;Australian Software Engineering Conference&lt;/a&gt; where he was guest speaker in Brisbane, 2005.&lt;br /&gt;&lt;br /&gt;The chats I had with Prof. Parnas reinforced the unchanging nature and lessons of software development.   He talks about loose coupling between modules, software engineering as a profession and attention to fundamentals.  We both have strong, personal interests in the quality of undergraduate education, postgraduate and continuing professional education and licensing.&lt;br /&gt;&lt;br /&gt;In Australia, there is ongoing discussion between the Australian Computer Society and the ITEE College of Engineers Australia about licensing arrangements.  The likely outcome is hopefully a joint board that offers national accreditation, similar to those that operate in Canada and Ireland where Prof. Parnas is himself involved in these activities.&lt;br /&gt;&lt;br /&gt;He must have influenced more than I had realised because I have been hammering on these points ever since!&lt;br /&gt;&lt;br /&gt;Note that while I am a competent engineer my professional standing does not compare to &lt;a href="http://en.wikipedia.org/wiki/David_Parnas"&gt;David Parnas&lt;/a&gt; who is widely regarded as a &lt;a href="http://en.wikipedia.org/wiki/Software_engineering"&gt;pioneer&lt;/a&gt; in software engineering.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/36773268-6125818826921878835?l=systecit.blogspot.com'/&gt;&lt;/div&gt;</content><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=36773268&amp;postID=6125818826921878835&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/36773268/posts/default/6125818826921878835'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36773268/posts/default/6125818826921878835'/><link rel='alternate' type='text/html' href='http://systecit.blogspot.com/2006/11/aswec-2005.html' title='Lessons and Licensing'/><author><name>Daniel Berinson</name><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='01530541075595598284'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-36773268.post-7540943166796224538</id><published>2006-11-12T10:49:00.000+08:00</published><updated>2006-11-12T20:29:31.164+08:00</updated><title type='text'>What is Software Engineering?</title><content type='html'>Half the battle in any discussion is nailing down what is the same and what is different. It is easy to disagree about pretty much everything while having lots of common ground, or conversely to agree in words while having significant underlying differences.&lt;br /&gt;&lt;br /&gt;The &lt;a href="http://www.swebok.org/"&gt;Guide to the Software Engineering Body of Knowledge&lt;/a&gt; serves as a foundation for the accreditation of university curricula, the licensing and certification of practicing software engineers, and raising software engineering toward a professional status.&lt;br /&gt;&lt;br /&gt;Lessons learned and sometimes forgotten include Coplien's Commonality Variability Analysis (*). David Parnas warns about forgetting the past and being doomed to repeat the same mistakes. Tom Demarco, Barry Boehm, Fred Brooks, Edward Yourdon, in addition to Grady Booch, Martin Fowler, Robert Martin and others, have much to teach us through their writing.&lt;br /&gt;&lt;br /&gt;It is important that software engineers recognise the context in which they work:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Management.  In particular, risk management, mitigation and minimisation.&lt;/li&gt;&lt;li&gt;Metrics.  Formal and informal.  How to measure success at each step of the way.&lt;/li&gt;&lt;li&gt;Planning, estimation and reporting.  Keeping stakeholders informed, onboard and happy. &lt;/li&gt;&lt;/ul&gt;(*) My good friend and colleague Gian introduced me to Commonality-Variablity and taught me a lot about interface and class design, among other lessons in life.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/36773268-7540943166796224538?l=systecit.blogspot.com'/&gt;&lt;/div&gt;</content><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=36773268&amp;postID=7540943166796224538&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/36773268/posts/default/7540943166796224538'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36773268/posts/default/7540943166796224538'/><link rel='alternate' type='text/html' href='http://systecit.blogspot.com/2006/11/what-is-software-engineering.html' title='What is Software Engineering?'/><author><name>Daniel Berinson</name><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='01530541075595598284'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-36773268.post-7943249317797509319</id><published>2006-11-11T22:10:00.000+08:00</published><updated>2006-11-13T08:09:03.653+08:00</updated><title type='text'>Refactoring</title><content type='html'>Some people may disagree however I believe that if you read &lt;a href="http://www.martinfowler.com/articles/designDead.html"&gt;Is Design Dead?&lt;/a&gt; and &lt;a href="http://www.artima.com/intv/refactorP.html"&gt;Refactoring with Martin Fowler&lt;/a&gt; the fair reader should get the idea that Martin Fowler supports some upfront design.&lt;br /&gt;&lt;br /&gt;The absence of some design thought up front and lack of visible design effort before refactoring is that the programming effort may be just adhoc coding and rework rather than directed refactoring. The mitigating practice in XP is pair programming. But what about those not doing XP?&lt;br /&gt;&lt;br /&gt;Any in-depth discussion about interface contracts, abstraction and encapsulation, Liskov and open-closed principles, state and invariants with regard to elements of design can be more than a little surreal. These are fundamental object-oriented design principles that some post-modern developers choose to ignore based on &lt;span style="font-style: italic;"&gt;their&lt;/span&gt; understanding of Agile development.&lt;br /&gt;&lt;br /&gt;Martin Fowler and Kent Beck allow for top-down, architectural refactorings in addition to smaller, finer-grained bottom-up refactorings. Most of the smaller refactorings can go either way while the bigger refactorings have &lt;span style="font-style: italic;"&gt;bigger&lt;/span&gt; cost-benefit tradeoffs.&lt;br /&gt;&lt;br /&gt;Baby steps do not always cut it.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.amazon.com/Refactoring-Improving-Design-Existing-Code/dp/0201485672/sr=8-1/qid=1163333262/ref=pd_bbs_sr_1/002-6330146-0446459?ie=UTF8&amp;amp;s=books"&gt;Refactoring&lt;/a&gt;, Chapter 12: Big Refactorings (from Amazon summary):&lt;br /&gt;&lt;blockquote&gt;Kent Beck co-wrote this chapter with Mr. Fowler. They discuss what they call the 4 Big Refactorings: Tease Apart Inheritance, Convert Procedural Design to Objects, Separate Domain from Presentation, and Extract Hierarchy. These refactorings are of a more all-encompassing type than the smaller individual refactorings from the preceding chapters. The co-authors do a great job at putting in a nutshell what would normally take very long explanations.&lt;/blockquote&gt;The problem with taking only baby steps during refactoring is getting stuck in a local minimum within the phase space of possible designs and having no way of getting out. The question in reality is to ask when the Big Refactorings turn into simply a code rewrite.&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/36773268-7943249317797509319?l=systecit.blogspot.com'/&gt;&lt;/div&gt;</content><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=36773268&amp;postID=7943249317797509319&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/36773268/posts/default/7943249317797509319'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36773268/posts/default/7943249317797509319'/><link rel='alternate' type='text/html' href='http://systecit.blogspot.com/2006/11/refactoring.html' title='Refactoring'/><author><name>Daniel Berinson</name><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='01530541075595598284'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-36773268.post-2585629839657909955</id><published>2006-11-11T21:59:00.000+08:00</published><updated>2006-11-26T12:04:54.661+08:00</updated><title type='text'>Simple Agile</title><content type='html'>Continuing the previous exchange in the form of a Socratic dialogue&lt;br /&gt;&lt;span style="font-style: italic;"&gt;&lt;br /&gt;Why are you talking about Karate and JKD?&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;The ability to draw analogies sets sentient beings apart. I was using Karate and JKD (if it exists) as similar creative and technical analogies for software engineering. Life in general. Primary school; secondary school; tertiary education; post-education independence is another which fits this context. Fundamentals followed by application, plus understanding, then extension.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;I conclude that you now completely agree with my points, which is very fine since I believe I have spoken absolutely sensibly. Please confirm this.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;You indeed have spoken sensibly. I neither expect to agree with all of your points, nor you with mine. Nor could it be so if we are thinking and developing independently without following a common dogma.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;We agree with Fowler and Kent's opinions as I have quoted them. We both agree that a simple agile approach to software engineering is the most likely approach.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Not clear to the first assertion. We certainly disagree on interpretation of Fowler's words, among others. The "simple agile approach" needs a little more elaboration and definition if you want to pick-and-choose parts rather than specify to which agile approach (eg. scrum, xp) you are referring.&lt;br /&gt;&lt;span style="font-style: italic;"&gt;&lt;br /&gt;We both agree that a very disciplined approach is necessary, and that this discipline need only be applied to a very few&lt;/span&gt;&lt;span style="font-style: italic;"&gt; rules.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Again, we disagree on intent and degree.  How much discipline is too much or too little?&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;Pay attention to the current circumstances, decide your next small step using the information to hand, always trying to improve things.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Here we agree. I think. Perhaps we have different definitions of small step. For me, three days is a small step compared to an iteration or closure over three or four weeks.&lt;span style="font-style: italic;"&gt;&lt;br /&gt;&lt;br /&gt;We agree that if something appears difficult, hard, convoluted, and complex it is not well understood. We agree that if something is simple it is understandable and communicable (even when encapsulating a great deal of complexity).&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Here we are in agreement.  No qualification.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/36773268-2585629839657909955?l=systecit.blogspot.com'/&gt;&lt;/div&gt;</content><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=36773268&amp;postID=2585629839657909955&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/36773268/posts/default/2585629839657909955'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36773268/posts/default/2585629839657909955'/><link rel='alternate' type='text/html' href='http://systecit.blogspot.com/2006/11/simple-agile.html' title='Simple Agile'/><author><name>Daniel Berinson</name><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='01530541075595598284'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-36773268.post-6846728293971423315</id><published>2006-11-11T21:47:00.000+08:00</published><updated>2006-11-12T20:27:07.529+08:00</updated><title type='text'>Design-Code Strange Loop</title><content type='html'>Partly inspired by Hofstadter's GEB, this exchange loosely follows the form of a Socratic dialogue, probably best known as the form of Plato's Republic.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;Hmmm I have some major concerns with these statements.  First of all, there is no separation between design and implementation (coding).  Each step of coding is detailed design.  Each part of design is influenced by the code.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.xprogramming.com/xpmag/books20021009.htm"&gt;Ron Jeffries&lt;/a&gt; and I both agree with you that the way should be as you say it is.&lt;br /&gt;&lt;blockquote&gt;XP does support up-front design--it's just that it recommends that design always proceed in the presence of code. The more effort we spend on design without feedback, the more likely that our design is incorrect. Design is done during the planning game, in addition to being done constantly throughout development. XP by no means prohibits us from sketching out UML diagrams prior to beginning an iteration, a task, or a test case. But we learn as we repeat, and our need to physically sketc diminishes as our understanding of good OO design and the system increases.&lt;/blockquote&gt;&lt;span style="font-style: italic;"&gt;Abstractions and ideas.  A body of actual code contains and includes its working existant design.  They are one and cannot be separated.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;I disagree with you about how well the code expresses its intent, hence the value and need to focus on OO and UML.&lt;br /&gt;&lt;br /&gt;Quoting &lt;a href="http://www.xprogramming.com/xpmag/docBigPictureAndSpec.htm"&gt;Ron Jeffries&lt;/a&gt; again:&lt;br /&gt;&lt;blockquote&gt;[1] The design is treated similarly. The main place for the design to be is in the code. An Agile project is producing a number of "living documents", the most important of which is the program itself, which is produced in a growing, fully integrated form, from the beginning of the project right on until the end. [2] Working together, the team communicates design essentials through conversation supported by pictures and documents as needed.&lt;/blockquote&gt;My insertions of the numbers into Jeffries' words: [1] is essentially a restatement of what you have said; [2] is a restatement of what I have said.&lt;br /&gt;&lt;br /&gt;I add that developer-to-developer communication and collaboration is essential for success but that it is inadequate for the customer.  I also emphasise that the "supported by pictures and documents as needed" is contentious and applies equally if not more so to design as to the code.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;As soon as the first line of code is written you have software.  It has a design, it has functionality.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Indeed.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;Any statement which lowers the supposed worth of code to "least-important" is fatally flawed in my view.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;As you noted above, the code is inseparable from the design.  I suggest that the design is actually a specification for the code, as is the test suite, as are the requirements; demonstrably we can implement the same design in more than one way.&lt;br /&gt;&lt;br /&gt;The worth in monetary terms is in the contract.  Okay, that is a bit cheeky! But the customer does not care about the code whatever we do.  The customer cares about what it does for them.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;You appear to be saying the scaffolds on the building site are more important than the building itself.  Surely the entire point is to deliver a working system (working code) to a customer.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;The designs and specifications are more important than the building itself is a statement I would unhesitatingly make.  Any qualification would be for each stakeholder; the builder thinks the permits are more important, the subcontractors want to finish by 3pm, the kids want a backyard, Mom wants a kitchen and Dad a shed, okay, a study.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/36773268-6846728293971423315?l=systecit.blogspot.com'/&gt;&lt;/div&gt;</content><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=36773268&amp;postID=6846728293971423315&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/36773268/posts/default/6846728293971423315'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36773268/posts/default/6846728293971423315'/><link rel='alternate' type='text/html' href='http://systecit.blogspot.com/2006/11/design-code-strange-loop.html' title='Design-Code Strange Loop'/><author><name>Daniel Berinson</name><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='01530541075595598284'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-36773268.post-3060439885791155726</id><published>2006-11-11T21:36:00.000+08:00</published><updated>2006-11-13T08:13:04.138+08:00</updated><title type='text'>Be Like Water</title><content type='html'>&lt;span style="font-weight: bold;"&gt;Sensei:&lt;/span&gt; The Bruce Lee movie I allude to is Game of Death, where Bruce's character finally defeats Kareem Abdul-Jabbar because he realises there are no set forms, no correct response.&lt;br /&gt;&lt;br /&gt;"Don't get set into one form, adapt it and build your own, and let it grow, be like water. When water gets into a cup, it becomes the cup, when it goes into a teapot, it becomes the teapot. It can flow, or it can crash. Be water my friend. Adapt!" Bruce Lee.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Student:&lt;/span&gt; Similar to OOD, what is the purpose of XP? Why is it used and followed? Because it is believed by some to aid in reaching the final goal of workingsoftware. Again, the practices of XP are not the point in and of themselves.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Sensei:&lt;/span&gt; At one extreme, any formalism can provide a crutch and a barrier to progress. Just as Lee regarded the practice of traditional style like Wing Chun as dogmatic. For most practitioners, and indeed for Jeet Kune Do (JKD) as taught by Lee to his latter-day students, it was vital to master the fundamentals.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Student:&lt;/span&gt;  The purpose of OOD is simply to:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Manage complexity.&lt;/li&gt;&lt;li&gt;Divide the problem.&lt;/li&gt;&lt;li&gt;Hide details.&lt;/li&gt;&lt;li&gt;Model the real world.&lt;/li&gt;&lt;/ul&gt;&lt;span style="font-weight: bold;"&gt;Sensei:&lt;/span&gt; These concepts predate OO-practice in software development by decades and are vprobably fundamental to most fields, like mathematical and econometric modelling, financial and marketting planning and execution.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Student:  &lt;/span&gt;If we do not follow XP exactly then my question would be: so what? As with coding and design, a decision to follow XP more closely would be made if it was thought it could actually *help*.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Sensei:&lt;/span&gt; Like in Karate where the three Ks, Kihon (fundamentals), Kumite (free-fighting) and Kata (forms) are all necessary, perhaps OO principles, XP and formal processes, like Kihon and Kata, are key to Kumite, the free-flowing practise you espouse.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/36773268-3060439885791155726?l=systecit.blogspot.com'/&gt;&lt;/div&gt;</content><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=36773268&amp;postID=3060439885791155726&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/36773268/posts/default/3060439885791155726'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36773268/posts/default/3060439885791155726'/><link rel='alternate' type='text/html' href='http://systecit.blogspot.com/2006/11/be-like-water.html' title='Be Like Water'/><author><name>Daniel Berinson</name><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='01530541075595598284'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-36773268.post-7395495899187635909</id><published>2006-11-11T21:25:00.000+08:00</published><updated>2006-11-13T09:21:00.634+08:00</updated><title type='text'>Bad Tests are a Joke</title><content type='html'>Bad tests resemble the Microsoft joke about their help desk giving perfectly correct but useless information. Joke reproduced below to help our readers find the humour in this otherwise serious subject.&lt;br /&gt;&lt;br /&gt;The Turing Theorem has something to say about this, too.  Can anyone tell me what?&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.4to40.com/jokes/index.asp?category=category2001&amp;counter=190"&gt;&lt;span style="font-size:130%;"&gt;&lt;span style="font-weight: bold;"&gt;My Helicopter Is Lost&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;A helicopter was flying around above Seattle yesterday when an electrical malfunction disabled all of the aircraft's electronic navigation and communications equipment. Due to the clouds and haze, the pilot could not determine the helicopter's position and course to steer to the airport.&lt;br /&gt;&lt;br /&gt;The pilot saw a tall building, flew toward it, circled, drew a handwritten sign, and held it in the helicopter's window. The pilot's sign said "WHERE AM I?" in large letters. People in the tall building quickly responded to the aircraft, drew a large sign, and held it in a building window.&lt;br /&gt;&lt;br /&gt;Their sign said "YOU ARE IN A HELICOPTER OVER SEATTLE." The pilot smiled, waved, looked at his map, determined the course to steer to SEATAC airport, and landed safely.&lt;br /&gt;&lt;br /&gt;After they were on the ground, the co-pilot asked the pilot how the "YOU ARE IN A HELICOPTER" sign helped determine their position.&lt;br /&gt;&lt;br /&gt;The pilot responded "I knew that had to be the MICROSOFT building because, similar to their help-lines, they gave me a technically correct but completely useless answer."&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/36773268-7395495899187635909?l=systecit.blogspot.com'/&gt;&lt;/div&gt;</content><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=36773268&amp;postID=7395495899187635909&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/36773268/posts/default/7395495899187635909'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36773268/posts/default/7395495899187635909'/><link rel='alternate' type='text/html' href='http://systecit.blogspot.com/2006/11/bad-tests-microsoft-help-desk-and.html' title='Bad Tests are a Joke'/><author><name>Daniel Berinson</name><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='01530541075595598284'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-36773268.post-3672560930031153917</id><published>2006-11-11T18:16:00.000+08:00</published><updated>2006-11-12T20:19:32.861+08:00</updated><title type='text'>Happy Path Tests</title><content type='html'>Someone posted an article to the relevant company internal news group at which I was consulting, referring to &lt;a href="http://www-128.ibm.com/developerworks/opensource/library/os-junit/"&gt;JUnit Antipatterns&lt;/a&gt; and happy path testing.  Another colleague replied and started off by saying, "You'll find that he only uses the term 'bad test' in the conclusion."&lt;br /&gt;&lt;br /&gt;He continues by saying the author states that "Writing good tests is the hard part," implying that many of the easy tests may be bad tests and goes on to show illustrative examples.  He could define 'bad test' as 'not(good test)' I suppose.&lt;br /&gt;&lt;br /&gt;After referring to the section Easy Tests my colleague quotes the article, "The result is lots of passing tests that don't exercise the system, which leads to a misrepresentation of the code's health," and this is a bad outcome which need not be spelled out.&lt;br /&gt;&lt;br /&gt;He goes on to say that he can only assume that the author was referring to tests that don't work. e.g. 1000 assert(true)'s. "That is, it's hard to say whether he's considering a 'happy path' test to be a *bad* test.  You can't be serious.  You did read the examples and make such a trivial assertion(asserting(1000 assert(true)'s))) as satire of some sort, right?"&lt;br /&gt;&lt;br /&gt;Well no, actually.&lt;br /&gt;&lt;br /&gt;The author is quite explicit and says,  "Actually, happy path tests aren't an antipattern. The antipattern is when the developer stops at happy path tests."&lt;br /&gt;&lt;br /&gt;After a couple of examples showing why "happy path tests" are necessary but are not themselves sufficient for adequate testing, the author states, "The point is, it isn't difficult to get a test to pass coincidentally," and this is a bad outcome as well.&lt;br /&gt;&lt;br /&gt;I disagree with the assertion that "One single test of one component that tests the 'Happy Path' gives a massive, massive gain in confidence in the system.  Even if it only tests 5% of the system in one ideal case it actually *proves* something about the behaviour of the system, where before you knew absolutely nothing."&lt;br /&gt;&lt;br /&gt;Such tests prove nothing and in fact are worse than having no tests because such a view engenders a false sense of security and confidence in the system that is misplaced.  One counter-example, quoted directly from the article:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;One happy path test verifies that Factorial.eval(3) returns 6.&lt;/span&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;public class Factorial {&lt;br /&gt;  public int eval(int _num) {&lt;br /&gt;      return 6;&lt;br /&gt;  }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;How's that for a false positive? If you've never encountered test-driven development, you might object that no one would write such a simple-minded implementation. One of the practices of test-driven development (TDD) is to write the tests first, then "do the simplest thing that could possibly work" -- in this case, return 6.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;In answer to my other colleague I choose to borrow from the legal profession, "If the facts are on your side, bang on the facts. If the law is on your side, bang on the law. If neither the facts nor the law is on your side, bang on the table."&lt;br /&gt;&lt;br /&gt;Good tests demonstrate a requirement (user or discovered, user-actor or controller-actor) of the system, usually asserting on an invariant of the class.  I disagree that tests are especially useful for construction and other static tests, and these are taken care of by the compiler and linker anyway, by default giving us the underhyped benefit of static-type safety.&lt;br /&gt;&lt;br /&gt;The place for static setup is in, you guessed it, setUp(), so the test fixture is not polluted by such detail.&lt;br /&gt;&lt;br /&gt;So what do we test in the fixture itself?  Dynamic behaviour.  Specifically, scenarios of unit tests, or bits of user stories, to test that the software works as expected.  From the junit cookstour, "We found that the most challenging application of JUnit was testing its own behavior."&lt;br /&gt;&lt;br /&gt;I can certainly believe it.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/36773268-3672560930031153917?l=systecit.blogspot.com'/&gt;&lt;/div&gt;</content><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=36773268&amp;postID=3672560930031153917&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/36773268/posts/default/3672560930031153917'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36773268/posts/default/3672560930031153917'/><link rel='alternate' type='text/html' href='http://systecit.blogspot.com/2006/11/happy-path-tests.html' title='Happy Path Tests'/><author><name>Daniel Berinson</name><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='01530541075595598284'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry></feed>