1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297
|
<html>
<head>
<META http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>History</title>
</head>
<body bgcolor="#ffffff" marginheight="4" marginwidth="4" leftmargin="4" topmargin="4" alink="#023264" vlink="#023264" link="#525D76" text="#000000">
<table border="0" cellpadding="0" cellspacing="0" width="100%">
<tr>
<td align="left" valign="top"><a href="http://jakarta.apache.org/index.html"><img src="images/jakarta-logo.gif" border="0" vspace="0" hspace="0"></a></td><td bgcolor="#ffffff" align="left" valign="top" width="100%"><img src="images/header.gif" align="right" border="0" vspace="0" hspace="0"></td>
</tr>
<tr>
<td colspan="2" height="2" width="100%">
<hr size="1" noshade="">
</td>
</tr>
</table>
<table border="0" cellpadding="0" cellspacing="0" width="100%">
<tr>
<td valign="top" width="1%"></td><td nowrap="1" valign="top" width="14%">
<br>
<font face="arial,helvetica,sanserif">
<br>
<br>
<a href="../"><font size="+1" color="#F3510C">Jakarta main</font></a>
<br>
<br>
<font size="+1" color="#000000">About</font>
<br>
<font size="-1">
<ul>
<li>
<a href="../index.html"><font size="-1">Overview</font></a>
</li>
<li>
<a href="../features.html"><font size="-1">Features</font></a>
</li>
<li>
<a href="index.html"><font size="-1">History</font></a>
</li>
<li>
<a href="../developing/index.html"><font size="-1">Developing with Avalon</font></a>
</li>
<li>
<a href="../license.html"><font size="-1">License</font></a>
</li>
<li>
<a href="../mail.html"><font size="-1">Mail Archive</font></a>
</li>
<li>
<a href="../authors/index.html"><font size="-1">Contributors</font></a>
</li>
<li>
<a href="../code-standards.html"><font size="-1">Coding Standards</font></a>
</li>
</ul>
</font>
<br>
<br>
<font size="+1" color="#000000">Sub-Projects</font>
<br>
<font size="-1">
<ul>
<li>
<a href="../framework/index.html"><font size="-1">Framework</font></a>
</li>
<li>
<a href="http://jakarta.apache.org/avalon/excalibur/index.html"><font size="-1">Excalibur</font></a>
</li>
<li>
<a href="http://jakarta.apache.org/avalon/phoenix/index.html"><font size="-1">Phoenix</font></a>
</li>
<li>
<a href="http://jakarta.apache.org/avalon/cornerstone/index.html"><font size="-1">Cornerstone</font></a>
</li>
<li>
<a href="http://jakarta.apache.org/avalon/testlet/index.html"><font size="-1">Testlet</font></a>
</li>
<li>
<a href="http://jakarta.apache.org/avalon/logkit/index.html"><font size="-1">LogKit</font></a>
</li>
</ul>
</font>
<br>
<br>
</font></td><td align="left" valign="top" width="*">
<title>History</title>
<center>
<table width="80%">
<tr>
<td bgcolor="#F3DD61">
<br>
<center>
<b><font face="arial,helvetica,sanserif" color="#000000">History</font></b>
</center>
<br>
</td>
</tr>
</table>
</center>
<br>
<font size="-2" face="arial,helvetica,sanserif" color="#000000">
<p>
<a href="mailto:"></a>
</p>
</font><font face="arial,helvetica,sanserif" color="#000000"></font>
<br>
<div align="right">
<table cellspacing="0" cellpadding="2" border="0" width="100%">
<tr>
<td bgcolor="#525D76"><font face="arial,helvetica,sanserif" color="#ffffff" size="+1"><b>Hardware vs. Software</b></font></td>
</tr>
<tr>
<td><font face="arial,helvetica,sanserif" color="#000000">
<br>
<p align="justify">
One thing that always puzzled me is the different quality meters used
on hardware and software by users: little flaws in software systems
are accepted as inevitable, while hardware flaws (even small ones) may
even create market panic if discovered. It's hard to tell why this is
so, but today's software quality standards are becoming more and more
selective, especially when monopolies are broken and users are able to
judge the differences between products and solutions.
</p>
</font></td>
</tr>
</table>
</div>
<br>
<div align="right">
<table cellspacing="0" cellpadding="2" border="0" width="100%">
<tr>
<td bgcolor="#525D76"><font face="arial,helvetica,sanserif" color="#ffffff" size="+1"><b>Open Source as Quality Management</b></font></td>
</tr>
<tr>
<td><font face="arial,helvetica,sanserif" color="#000000">
<br>
<p align="justify">
The open source development model has emerged as a powerful way to
control and improve software quality. The most important assumption,
in this case, is the fact that debugging and code testing are
parallelizable tasks. For this reason, different individuals are able
to track down problems right into the source code, independently from
one another. In open source projects, compared to closed source ones,
the complexity of the software system grows slower than the ability to
debug it, due to this parallelizable effort.
</p>
<p align="justify">
Open source processes are auto-organizative: when a seed of ideas
and goals is thrown in the right place at the right time, it catalyzes
the development process. Usually, when this happens, the user base
expands, the complexity of the software system grows to meet the
requirements of this bigger user base, incorporating new ideas,
solutions and code and creating a positive feedback that keeps the
process going.
</p>
</font></td>
</tr>
</table>
</div>
<br>
<div align="right">
<table cellspacing="0" cellpadding="2" border="0" width="100%">
<tr>
<td bgcolor="#525D76"><font face="arial,helvetica,sanserif" color="#ffffff" size="+1"><b>Software Engineering and Open Source</b></font></td>
</tr>
<tr>
<td><font face="arial,helvetica,sanserif" color="#000000">
<br>
<p align="justify">
Software engineering doesn't fit well into an auto-organized system
driven by user requirements. Still, I believe that careful software
design may allow the development process to <em>know</em> the ability
of its developers and to provide them guidelines to reduce the work
and to increase parallel capabilities. Of course, due to the extreme
flexibility that open source projects show, software engineers should
carefully design the system to match this flexibility and to avoid any
restriction that may create friction with users and developers.
</p>
<p align="justify">
It is evident how the use of modern object oriented programming
languages like Java helps the development and reduces the debugging
efforts because most error prone tasks are handled automatically by
the language itself. Still, the most important object oriented
solutions (such as Interfaces and abstract classes) are very much
unused in auto-organized project, where the work is usually done with
the smallest possible effort to get something working.
</p>
<p align="justify">
The incredible improvement in time-to-market offered by these
programming languages that reduce the debugging process to logical
bugs rather than developer's programming mistakes, is a great feature
and it's well appreciated, but it may lead, on the longer term, to
code maintenance problems.
</p>
<p align="justify">
In all software systems, the maintenance costs greatly exceed the
first development ones. In open source software systems, the cost is
measured in terms of <em>time</em> and <em>energy</em> spent by
developers to meet the new requirements and to expand the complexity
of the software system. It has been shown (in the Apache JServ
project) that the wrong use of object oriented features may lead to
project stall and create friction between developers and users about
the need for <em>revolutions</em> instead of <em>evolutions</em>
driven by the need of a complete code redesign.
</p>
<p align="justify">
The rules "if it works it's good enough" and "if it
works don't change it" may fit well in those programming contexts
where developers need to design the code on their own to make it work.
In object oriented systems, more than ever, working code is not
automatically good code.
</p>
</font></td>
</tr>
</table>
</div>
<br>
<div align="right">
<table cellspacing="0" cellpadding="2" border="0" width="100%">
<tr>
<td bgcolor="#525D76"><font face="arial,helvetica,sanserif" color="#ffffff" size="+1"><b>Frameworks and Patterns</b></font></td>
</tr>
<tr>
<td><font face="arial,helvetica,sanserif" color="#000000">
<br>
<p align="justify">
The solution I propose is the introduction of coding guidelines to
place new requirements to meet the "working" state: by
introducing the use of software frameworks and design patterns, we are
able to <em>shape</em> the work of developers without restricting
their creativity. While object oriented languages don't pose such
limitations or guidelines, the introduction of carefully designed
engineering rules, contracts and patterns would create some additional
requirements to the development process, but will allow better code
maintenance, a more coherent parallel development process and, in the
longer run, easier maintenance.
</p>
</font></td>
</tr>
</table>
</div>
<br>
<div align="right">
<table cellspacing="0" cellpadding="2" border="0" width="100%">
<tr>
<td bgcolor="#525D76"><font face="arial,helvetica,sanserif" color="#ffffff" size="+1"><b>Conclusions</b></font></td>
</tr>
<tr>
<td><font face="arial,helvetica,sanserif" color="#000000">
<br>
<p align="justify">
The use of development guidelines and frameworks is proposed as a way
to reduce internal tensions that produce revolutionary development
processes rather than evolutionary ones. Even if such ability is yet
to be demonstrated, it has been shown how object oriented languages
require different approaches and more careful design stages to be
successful in the long run.
</p>
</font></td>
</tr>
</table>
</div>
<br>
</td>
</tr>
</table>
<br>
<table cellpadding="0" cellspacing="0" border="0" width="100%">
<tr>
<td>
<hr size="1" noshade="">
</td>
</tr>
<tr>
<td align="center"><font color="#525D76" size="-1" face="arial,helvetica,sanserif"><i>
Copyright ©1999-2002 by the Apache Software Foundation.
All Rights Reserved.
</i></font></td>
</tr>
</table>
</body>
</html>
|