File: need-for-avalon.html

package info (click to toggle)
avalon-framework 4.1.2-2.1
  • links: PTS
  • area: contrib
  • in suites: sarge
  • size: 5,428 kB
  • ctags: 621
  • sloc: xml: 8,817; java: 3,535; makefile: 42
file content (297 lines) | stat: -rw-r--r-- 10,831 bytes parent folder | download | duplicates (2)
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 &copy;1999-2002 by the Apache Software Foundation.
              All Rights Reserved.
            </i></font></td>
</tr>
</table>
</body>
</html>