asp tutorials, asp.net tutorials, sample code, and Microsoft news from 15Seconds
Data Access  |   Troubleshooting  |   Security  |   Performance  |   ADSI  |   Upload  |   Email  |   Control Building  |   Component Building  |   Forms  |   XML  |   Web Services  |   ASP.NET  |   .NET Features  |   .NET 2.0  |   App Development  |   App Architecture  |   IIS  |   Wireless
 
Pioneering Active Server
 Power Search





Active News
15 Seconds Weekly Newsletter
• Complete Coverage
• Site Updates
• Upcoming Features

More Free Newsletters
Reference
News
Articles
Archive
Writers
Code Samples
Components
Tools
FAQ
Feedback
Books
Links
DL Archives
Community
Messageboard
List Servers
Mailing List
WebHosts
Consultants
Tech Jobs
15 Seconds
Home
Site Map
Press
Legal
Privacy Policy
internet.commerce














internet.com
IT
Developer
Internet News
Small Business
Personal Technology
International

Search internet.com
Advertise
Corporate Info
Newsletters
Tech Jobs
E-mail Offers

HardwareCentral
Compare products, prices, and stores at Hardware Central!

Achieving Reuse in ASP .NET - Part 1: Barriers to Reuse
By Scott Bellware
Rating: 3.4 out of 5
Rate this article


  • email this article to a colleague
  • suggest an article

    Code-Free

    Not writing code is a driving force behind reuse initiatives. In the spirit of being code-free, this article has no code! Part two of this article will be full of code.

    The importance of reuse can't be overstated, especially in light of the degree to which we seem to go out of our way to avoid reuse. So, let's peal back the kid gloves and talk about it.

    Living in the Shadow of Your Own Extinction

    As an industry at large we're rivaled perhaps only by government for institutionalized incompetence. Quality is low, defects are high, and communication is a myth. On average, we achieve success 50% of the time yet we expect 100% of our salaries. Our employers and our managers are fed up with getting a 50% return on 100% of their investment and yet we have the audacity to complain when they give our jobs to developers in other countries who are willing to do the work for half the cost. We suck.

    It's unlikely that the whole software development industry in America will shrivel up and fall off, but it's likely that the American programmer gene pool will continue to be significantly thinned.

    The domestic programmer role will be whittled away from the bottom-up as the offshore shops achieve greater levels of competency. This will continue for years as each successive skill level of the work force is shifted offshore until only the right slope of the software competency bell curve is left operating on American shores.

    Personally, I have mixed feelings about the commoditization of programmer skills and the eventual expatriation of American programming jobs. I want my American brother and sister coders to have as many professional opportunities as they can handle. However, if they can't step up quality, I'd just as soon see `em sent back to the minors.

    Software development is a service that we provide to enable and empower the business units that we support. I certainly don't want to see the end of the custom application development industry in America, but there are limits to how far we can expect our sponsors to bend. Once programming and programmers become the obstructions to business progress, then it's time to start looking for alternatives.

    It may turn out that offshore development is indeed the chosen alternative. It may not end up being the right choice, but learning that lesson is going to be costly beyond imagination for our industry. In the very least, offshore outsourcing presents a cost structure that is more in line with the level of quality currently delivered by the domestic programmer. Even as a coder I can't deny that it's simply one hell of a compelling value proposition.

    Saving Your Hide

    A couple of turning point experiences I've had in the past couple or years have convinced me of a few kill skills that will make the difference between the haves and the have-nots of the domestic software development job market. Here are a few of the key predispositions that are presently missing en masse from our current practices that I'm convinced are going to characterize the American software development workforce on the backside of the onset gutting of our industry:

    Unit Testing. In a recent conversation with Michael Kennedy, maker of the HarnessIt unit testing framework for .NET, we talked about how mind boggling it is that the majority of applications programmers do little-to-nothing to repeatably validate that their software will do what they assume it will do. With the mainstreaming of simple yet incredibly powerful quality-focused methodologies like Test Driven Development (TDD) as well as comprehensive and reasonably priced tools like HarnessIt (or NUnit if you're willing to forgo a few features), it's unconscionable that we still have so many defects and unproven assumptions deployed into production.

    Frankly, I don't even trust developers anymore who don't use some sort of test-code-test-code cycle in their software development practice. If you can't prove that your code works, why in name of J. Jonah Jamison would anyone want to trust their business to it?

    Once you embrace TDD you will wonder how you could have ever fulfilled your software development responsibilities in any other way. TDD is one of those things, like OO, that fundamentally rearranges the hard-wiring of your programming mind. You'd have an easier time coaxing a butterfly to return to caterpillar form than to convince me that I could go back to software development sans the TDD approaches.

    Scenario-Based Analysis. Far too many .NET developers are still stuck on data-centric analysis. They will often try to communicate their understanding and intentions through the use of data models and entity-relationship diagrams. The dangerous aspect of this approach is the implicit assumption that everyone reviewing the data model will arrive at the same conclusions about a system's behavior. After all, a data model does nothing to explicitly describe behavior.

    Data-centric specification implies that a momentary understanding of behavior was arrived at during the analysis (perhaps during an interview with a stakeholder, or from a developer's experience in a business domain), and summarily excluded from the specification once a data model had been derived. Rather than capture the behavior in a user story, use case, or even a conceptual class diagram, the knowledge is simply discarded.

    The enduring data-centric specification compulsion in .NET is a hold-over from the VB 6 days when the lack of object orientation in the language (and the developer culture) meant that behavior was frequently a second-class element of software specification.

    Use case or user story analysis is simply a great way to examine, understand, capture, and communicate the expected behavior of software. Scenarios lead to an understanding of data AND behavior. A view to both of these is crucial to object-oriented development. Even if you're doing conceptual or agile modeling, expressing behavior is still requisite.

    Asset-Based Software Engineering (ASE). You might know ASE by its street name, "Reuse". Far too few programmers engage in reuse. As Flashline's C.E.O. Charles M. Stack puts it, "We must transform our view of software development to a new model -- Asset-based Software Engineering -- where appropriate engineering and asset management principles govern the creation and management of software assets for long-term economic benefit." [Stack]

    The lack of reuse in our lives as programmers isn't simply a technology or implementation issue. Systematic reuse requires management. Far too few development managers have been able to pry their minds from the habitual view that our software artifacts are only ever a liability, rather than a portfolio of assets that are subject to the same portfolio management practices as any other portfolio of assets. With a view to reuse and ASE pervasively absent from the two organizational tiers closest to the implementation effort -- the programmers and their line managers -- the odds are stacked against reuse efforts.

    Overcoming Inertia

    Typically, we can reuse (unmodified) existing software for 20% the cost of new development [Poulin]. However, programmers are likely to resist reusing anything that doesn't come with evidence of its quality.

    The credibility of a product's developers is usually all the credibility we need. However, if you're trying to prove the quality of a reusable artifact, being able to demonstrate that you follow Test-Driven Development will go a long way to establishing your credibility as a developer and the quality of your artifact.

    As well, the presence of a means to describe an artifact's behavior is crucial to its ability to be understood. If you have no idea what an artifact is supposed to do, it's often altogether impractical to learn whether the artifact's behavioral profile matches your requirements.

    Without software validation, there is little credibility. Without behavior specification, we have systems whose intentions are ultimately questionable, and we end up with artifacts whose meaning has no visibility except to those who created it. Without either of these, we have approximately a snowball's chance in hell of achieving reuse.

    Without achieving the economics of reuse, Programmerus Americus can look forward to a nice comfy bath in the La Brea Tar Pits with the other extinct dinos. At some point in the history of Homo Sapiens, we shared the Earth with the Neanderthal. We're all pretty clear on who won that land dispute.

    We simply cannot continue to justify the existence of the vast American code production workforce and its ingrained disregard for economics while the attractive face of offshore programming shops shine upon us from far-flung places such as Poland, Hungary, India, The Philippines, Malaysia, The Russian Federation, China, Ireland, Canada, and Israel. The offshore programmer species is here today. It's not a myth. It's a clear and present threat. It remains to be seen as to whether the domestic American programmer has the awareness and will to evolve into a competitive member of the global software development ecosystem.

    We can either get better at what we do, or be made redundant. And like everything redundant in software, being factored out of the system is a nearly unavoidable eventuality.

    Arriving at Quality

    There's a large computer manufacturer and e-commerce giant in my area that recently committed to .NET. They also standardized on C#. I spoke to one of their folks at an architecture roundtable a few weeks ago about the formalization effort around C#. We talked about the challenges of moving a staff of procedural VB 6 and VB Script coders from linear, procedural thinking to abstract, object-oriented thinking. I asked him if the standardization on C# was something that they see as an enabler of their transition to .NET and OO.

    He said that they wanted their coders to be "shocked into knowing that they were in an object-oriented language." He suggested that they want their coders to have no vestigial connection in their coding efforts to linear VB in hopes that they can free themselves of that mindset. He also said something about wizard-based coding that I have quoted often in the intervening weeks:

    "We had better quality when coding was harder."

    There was a time in recent history when we needed programmers and lots of `em. We accelerated training programs. We transferred business analysts into software development roles.  We even called up people from the call center and hung programmer hats on their heads. This is like calling up your local t-ball team to play against the Yankees. We do such things and we still have the audacity to wonder why our jobs are going offshore.

    Entry-level web coders were fetching upwards of $70k. That was supply and demand at its best (or its worst depending on where you draw your ethical lines). Back in the day, as the story goes, if you could spell "HTML" you could be ushered into the fold and set to work building the user interfaces for man kind's first ubiquitous, global e-business infrastructure.

    Building Web UIs meant using a hodge-podge of cobbled together tools that demanded not so much hard-core coding experience but a high level of tolerance for tedium. Middle tiers were built by "serious" coders with serious tools and real experience that dated (if you were lucky) from before the boom. From the OO developer's perspective, the "UI guy" was often something to be tolerated in public, and shunned in private (as in, "That.s a job for a beginner, give it the "the UI guy".). OO developers had better things to do with their minds than muddle about in linear script.

    The Web UI builders were effectively quarantined and culturally isolated from the OO caste, and accordingly developed a programming culture whose values are often at odds with the values of OO culture.

    Overcoming Legacy

    In "Asset-based Software Engineering ", Charles Stack writes, "it's ironic that outside of its use in the software context the word 'legacy' has very positive connotations. It is what a mother leaves to her daughter, a father to his son, or a citizen leaves to his or her society. But in software, legacy has come to mean 'old, incomprehensible, inflexible software written by people who are no longer here.'"

    The legacy of classic ASP is much more daunting than the mess of server-side includes, copy-and-past layout, spaghetti script, and business rules living inside otherwise harmless HTML pages. Entropic, legacy code artifacts can be mitigated. The linear thinking that characterizes the world view of the average classic ASP developer is going to be a much more stubborn problem than any of the legacy code.

    ASP .NET introduces opportunities for the holy grail of object-oriented reuse: framework-level reuse. There have been a slew of articles on .NET portals over the last year on custom page frameworks for Web forms. Each has done a darned good job of explaining the how's of creating such a framework, but there has been little talk of the why's of creating such a framework, or better yet why you should just use one of the available frameworks.

    Earlier this evening I had a conversation with Roger Sessions, author of "Software Fortresses: Modeling Enterprise Architectures". Roger is one of those guys who can poke holes in most people's most vociferous software dogma. While waxing unsympathetic about quality and low levels of reuse, Roger rightly pointed out that we engage in reuse all the time without knowing it. He suggested that relational databases are a ubiquitous yet often overlooked case of reuse.

    Unconscious reuse is certainly better than no reuse at all, but it's still unconscious.

    You can't achieve intentional systematic reuse by being unaware of either leveraging a reusable artifact, or by being unaware that you're crafting a reusable artifact. Quality and reusability are about personal responsibility. Creating validated code that is a well-factored asset is an expression of your sense of responsibility to your co-workers and to your company or client as a whole.

    Engaging in Reuse

    In part two of this article, I.m going to implement yet another framework for content reuse in Web forms. Rather than reiterate everything you've already read about how to do templating in ASP .NET, I'm going to do my best to use a common, approachable example of reuse in object-oriented programming to talk about different types of reuse, as well as why you'd want to engage in reuse.

    My ultimate hope is that you might begin to explore object-orientation beyond the basics and make reuse a willful, conscious part of your programming practice that fully engages your intent to provide more value to your employer or customer.

    About the Author

    Scott Bellware is consultant and mentor with developerLabs. Scott is the Director of Operations and co-founder of the Austin NET User Group, Director of Technology and co-founder of the Austin Software Architecture User Group, and the Chairman of the International .NET Association.s (INETA) Speaker Committee.  He is the Architect and Developer of the Norpheme object relational persistence framework for .NET.  He has given talks for central-Texas groups on software quality, reuse, and object relational mapping, and recently spoke at the DevTeach conference in Montreal Canada.

    Bibliography

    Asset-based Software Engineering (How to gain the next level of software development productivity), Charles M. Stack, Flashline, Inc.

    Metrics for Object-Oriented Reuse, Jeffrey S. Poulin, Lockheed Martin Federal Systems

    The UML Profile for Framework Architectures, Marcus Fontoura, Woflgang Pree, Bernard Rumpe

    Test-Driven Development By Example, Kent Beck

    Developing Software with UML, Object-Oriented Analysis and Design in Practice, Bernd Oestereich

    Managing Enterprise Content: A Unified Content Strategy, Ann Rockley

  • Rate This Article
    Not HelpfulMost Helpful
    1 2 3 4 5
    Other Articles
    Aug 31, 2005 - The X-Factor in SOA
    In this article, Joseph Poozhikunnel examines the importance of the three X's -- namely XML, XML Schema, and XSLT -- in a service oriented architecture (SOA). He then defines the design considerations that need to be adopted when designing a system based on SOA and examines the pitfalls that can arise if they're not followed.
    [Read This Article]  [Top]
    May 19, 2005 - Building an Enterprise Service Bus to Support Service Oriented Architecture
    In this article, Joseph Poozhikunnel defines an Enterprise Service Bus (ESB) that can be created to support any Service Oriented Architecture (SOA) adopted by an organization. The type of ESB required could vary as there is no "one size fits all", therefore the article examines a few of the mechanisms available that could be adopted to implement an ESB.
    [Read This Article]  [Top]
    Apr 14, 2005 - Building an End User Defined Data Model - Part 2
    In the seconmd part of his series on building an end user defined data model, Peter Scheffler gets into the actual meat of the model and discusses real-world implementation details and the actual table layouts.
    [Read This Article]  [Top]
    Mar 24, 2005 - Building an End User Defined Data Model - Part 1
    In the first article in this series, Peter Scheffler introduces the concept of a rules-based database engine that allows clients to make changes to their database structure without breaking the applications that access the database.
    [Read This Article]  [Top]
    Jan 19, 2005 - Developing a Simple Service Oriented Architecture
    The basic premise of a Service Oriented Architecture (SOA) system is to decouple applications from each other in order to make them autonomous. In this article, Joseph Poozhikunnel presents a simple SOA framework that can be used as a starting point for a system that addresses your specific business needs.
    [Read This Article]  [Top]
    Nov 3, 2004 - 10 Steps to a Successful Versioning and Deployment Strategy for .NET
    A well rounded versioning and deployment strategy considers several overlapping and interdependent .NET Framework concepts. In this article, Michele Leroux Bustamante will take you through a ten step program that reviews these core concepts, their relationship, and provides guidance for successful application deployments for the .NET Framework.
    [Read This Article]  [Top]
    Oct 27, 2004 - Business Intelligence with Microsoft SQL Server Reporting Services - Part 2
    Adnan Masood continues his discussion of Microsoft SQL Server Analysis services and Microsoft SQL Server Reporting services. In this part, he discusses the steps that go into building more advanced reports.
    [Read This Article]  [Top]
    Oct 13, 2004 - Business Intelligence with Microsoft SQL Server Reporting Services - Part 1
    Adnan Masood discusses Microsoft's comprehensive integrated business intelligence, data mining, analysis and reporting solution: Microsoft SQL Server Analysis services and Microsoft SQL Server Reporting services.
    [Read This Article]  [Top]
    Dec 15, 2003 - Realizing a Service-Oriented Architecture with .NET
    Chip Irek examines the architectural issues and component design issues of building a .NET application in a service-oriented architecture.
    [Read This Article]  [Top]
    Jun 16, 2003 - The .NET Architect: Enterprise Template Dynamic Help
    One of the most critical components of any application is the help file collection. The fourth article in Brian Korzeniowski's Enterprise Template series examines Dynamic Help in Visual Studio .NET and focuses on the logical process of creating help content.
    [Read This Article]  [Top]
    Mailing List
    Want to receive email when the next article is published? Just Click Here to sign up.

    Support the Active Server Industry

    internet.comearthweb.comDevx.commediabistro.comGraphics.com

    Search:

    Jupitermedia Corporation has two divisions: Jupiterimages and JupiterOnlineMedia

    Jupitermedia Corporate Info

    Legal Notices, Licensing, Reprints, Permissions, Privacy Policy.
    Advertise | Newsletters | Tech Jobs | Shopping | E-mail Offers