-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy path527.txt
1651 lines (1268 loc) · 181 KB
/
527.txt
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
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
Cairo University
Faculty of Computers and Information
Information Systems Department
Methodology to convert specification to implementation in information systems
A thesis submitted in partial fulfillment of the requirements for the degree of
Master of Science in Computers and Information Systems
Submitted by
Shaimaa Mohamed Galal
Supervised by
Dr. Ehab Ezzat Hassanein
Lecturer of Information Systems
Faculty of Computers and Information
Cairo University
Prof. Dr. Galal Hassan Galal-Edeen
Professor of Information Systems
Faculty of Computers and Information
Cairo University
Faculty of Computers and Information
Cairo University - Egypt
2012
Abstract
Agile development of database and application systems especially web based systems is highly productive activity; it reduces the time consumed, cost and effort invested in project development by producing parts of working software modules after each development iteration, but many agile projects do not apply agile practices to database development and still consider it in serial manner as heavyweight methodologies, while agile methodologies were introduced to overcome the problems experienced with the heavyweight methodologies, such as having overbuilt database schema that may contain a great deal of data fields that will not be used in the future, consequently causing performance degradation and increases the database schema complexity.
On the other hand, although agile methodologies have replaced producing dozens of documents through the software development process to reduce the time consumed and cost via increasing the customer and the development team members’ interactions instead, this caused minimizing the amount of software documentation more than required, and thus caused a gap when it comes to maintenance and testing processes.
This thesis provides a framework for generating final software product through automated process supporting agility in both directions of coding and data modeling as well, following such framework will provide high level of customer collaboration and help data professionals to work in an agile manner to avoid the problem of having overbuilt systems along with automatically generating parts of the software code based on the available modern software architecture models. A tool prototype –named iAgile- is also presented to help applying the proposed framework, thus producing the software generated code and database schema that are capable of evolving smoothly far in the future to adapt requirements changes during the project iterations.
In addition this framework provides a solution to speed up and facilitate the legacy systems migration process in order to migrate software products that were written in old programming languages to web services architecture, as it provides rapid agile development process in which the system analyst can place the extracted requirements from the legacy system and place it on iAgile while refactoring the database schema, hence iAgile automatically generates the main web services for this legacy system.
Table of Contents
List of Figures 6
List of Tables 8
List of Abbreviations 9
Acknowledgements 10
Chapter 1 : Introduction 11
1.1. Background and Motivation 12
1.2. Problem Statement 12
1.3. Aim and Objectives 14
I. Aim 14
II. Objectives 14
1.4. Methodology and Limitation 14
1.5. Thesis Structure 16
Chapter 2 : Trends in Software Development 18
2.1. Software Development Trends 19
2.2. Heavyweight Software Development Models (Traditional Software Development Models) 20
2.3. Lightweight Software Development Models (Agile Software Development Models) 21
2.3.1. Closer Look to Agile Methods 24
2.3.1.1. Extreme Programming (XP) 24
I. Extreme programming process 24
II. Extreme programming roles and responsibilities 26
III. Extreme programming practices 27
IV. Extreme programming scope of use 28
2.3.1.2. Scrum 30
I. Scrum process 30
II. Scrum roles and responsibilities 31
III. Scrum practices 32
IV. Scrum scope of use 33
2.3.1.3. Software Development Model Suitability 33
2.3.1.4. A Closer Look to Agile Practices 33
I. Test first programming practice 34
II. Code refactoring practice 35
2.3.2. Software Development between Agility and Prototyping 36
Chapter 3 : The Enhanced Early User Interface Development Practice’s Framework 38
3.1. Introduction to Agile Development Environment 39
3.2. Related Work 39
3.2.1. WebRatio 40
3.2.2. iRise 40
3.3. The “Early User Interface Development” Practice 41
3.4. Towards a Framework for Evolutionary Database Development 44
3.4.1. The Enhanced Early User Interface Development Framework 44
3.4.1.1. The EEUID Framework’s Components 45
3.4.1.2. The EEUID Process 47
3.4.1.3. The EEUID Framework Outputs’ Software Architecture Models 49
3.4.1.4. The EEUID Framework’s Primarily Outputs 53
1) Database Schema 53
2) Data Access Layer 55
3) Agile Documentation Templates 56
3.4.2. The EEUID benefits 61
Chapter 4 : Case Study 63
4.1. Foreword 64
4.2. iAgile Overview 64
4.2.1. iAgile Advantages and Disadvantages 64
4.2.2. iAgile in Action 66
How iAgile works? 67
Can all agile methods make use of iAgile? 68
Which projects can use iAgile? 69
How to construct system screens and generate the expected outputs using iAgile? 69
What about the database refactoring? 70
iAgile support for EUID practice’s components 71
4.3. The "EMR application" Case Study 72
4.3.1. Functional Requirements 72
4.3.2. Project Development using iAgile 74
4.3.2.1. First Iteration 74
I. First screen development details 74
II. Second screen development details 77
III. Third screen development details 78
IV. Forth screen development details 79
V. Fifth screen development details 79
VI. Sixth screen development details 80
4.3.2.2. Second Iteration 90
I. First screen development details 91
II. Second screen development details 93
4.3.2.3. Third Iteration 94
I. First screen development details 94
II. Second screen development details 96
4.3.3. Applying the Bidirectionality of the EEUID 97
4.3.4. iAgile Software Architecture’s Design 98
The “XML class description” file’s structure: 99
The “XML behavior” file’s structure: 100
4.4. Conclusion 102
Chapter 5 : The Enhanced Early User Interface Development Evaluation 103
5.1. The EEUID Framework’s Theoretical Feasibility 104
5.2. The EEUID Framework’s Technical Feasibility 105
5.3. The EEUID Framework’s Evaluation 105
Chapter 6 : Conclusion and Future Work 107
8.1. Conclusion 108
8.2. Future Work 109
Publications Arising from This Research 110
References 111
Appendix A: Countries Factory Class Implementation 117
List of Figures
Figure 1.1: The research methodology 15
Figure 2.1: The Extreme Programming process, adapted from (Abrahamsson, et al. 2002) 25
Figure 2.2: Extreme programming set of values, adapted from (Holcombe 2008) 28
Figure 2.3: The Scrum process, adapted from (Cohen, Lindvall and Costa 2004) 31
Figure 3.1: EUID process, adapted from (Labib, Hassanein and Hegazy 2009) 42
Figure 3.2: The EEUID Framework’s Components 46
Figure 3.3: The EEUID Process 47
Figure 3.4: The Available Modern Software Architecture Models, adapted from (Doroshenko and Romanenko 2004) 50
Figure 4.1: EEUID process 66
Figure 4.2: iAgile Layout and Content Editor 70
Figure 4.3: Countries screen 74
Figure 4.4: Onerecord_Insert component class settings 75
Figure 4.5: Multirecord_View component class settings 76
Figure 4.6: Countries screen after building using iAgile 76
Figure 4.7: Cities screen 77
Figure 4.8: Actions part in iAgile 77
Figure 4.9: Dynamic data loading action input details 78
Figure 4.10: Dynamic data loading action output details 78
Figure 4.11: Clinics screen 79
Figure 4.12: Clinic Services screen 79
Figure 4.13: Scientific degree screen 79
Figure 4.14: Specialties screen 80
Figure 4.15: First iteration generated class diagram 81
Figure 4.16: Generated physical database diagram 82
Figure 4.17: iAgile database generation screen 82
Figure 4.18: Countries domain class 83
Figure 4.19: Countries hbm file 84
Figure 4.20: Physical database driver configuration 85
Figure 4.21: Manage quality document template screen 85
Figure 4.22: the functional requirements document template main sections 87
Figure 4.23: Suggested list of data elements for the “patient name” field 89
Figure 4.24: iAgile generated detailed design document 89
Figure 4.25: Data dictionary sample 90
Figure 4.26: Patient regesteration screen 91
Figure 4.27: The search button's inputs 92
Figure 4.28: The search button's outputs 93
Figure 4.29: Doctor registeration screen 94
Figure 4.30: Patient visits screen 95
Figure 4.31: Patient visits' class details 95
Figure 4.32: Patient visits search screen 96
Figure 4.33: The search component input details 97
Figure 4.34: The search component output details 97
Figure 4.35: iAgile software architecture’s component diagram 98
Figure 4.36: XML class description file's structure 100
Figure 4.37: XML behavior file's structures 101
Figure 4.38: iAgile UML sequence diagram 102
List of Tables
Table 4.1: System’s functional requirements 72
Table 4.2: Project iterations’ tasks 74
Table 4.3: XML class description file mapping schema 99
List of Abbreviations
BPMN Business Process Modeling notation
CLASSOID Class Object Identifier
DB Database
DBMS Database Management System
EEUID Enhanced Early User Interface Development
EMR Electronical Medical Record
ERD Entity Relationship Diagram
EUID Early User Interface Development
GUI Graphical User Interface
HTML Hypertext Markup Language
LCM Lifecycle Model
NHDD National Health Data Dictionary
OOPL Object Oriented Programming Language
OQL Object Query Language
ORDB Object Relational Database
ORDBMS Object Relational Database Management System
ORM Object Relational Model
RDB Relational Database
RE Requirements Elicitation
SQL Structured Query Language
TDD Test Driven Development
UDT User Defined Datatype
UML Unified Modeling Language
VSS Visual Source Safe
WebML Web Modeling Language
XML Extensible Markup Language
XP Extreme Programming
Acknowledgements
Working on the master has been an overwhelming experience. I am deeply grateful to my supervisors Dr. Ehab Ezzat Hassanein, and Dr. Galal Hassan Galal E-deen who both supported and influenced my personal character and career. Moreover, i am deeply grateful to my husband who encouraged me all the time and helped me to finalize this work.
Chapter 1 : Introduction
1.1. Background and Motivation
1.2. Problem Statement
1.3. Aim and Objectives
1.4. Methodology and Limitation
1.5. Thesis Structure
1.1. Background and Motivation
Modern software development processes, are mostly evolutionary in nature, via working iteratively and incrementally following what is called “Agile methodologies”. Consequently, the information system project is divided into several iterations by distributing the main project’s requirements to those iterations. Through each iteration, a part of each project development activity is performed to satisfy the current iteration functional requirements such as modeling, development, testing, or deployment at a time, then move to the next iteration[ CITATION Sco \l 2057 ].
Agile methodologies are software engineering methodologies that exist to allow functional requirements’ changes through the entire project’s lifecycle via working iteratively and applying some of software engineering practices that cope with the project’s circumstances and constraints [ CITATION Pau02 \l 1033 ].
Development of information systems involves the development of both software application and database system. The evolutionary database development, such as the evolutionary development of software systems, contributes significantly to schema quality, correctness and adaptability. Research and experience in both commercial software development and academic projects have demonstrated the reasonableness and efficacy of this approach[ CITATION Mor \l 1033 ].
A data oriented technique is a way for building the database schema; most of data-oriented techniques are being implemented in serial manner that results in building a mostly detailed database schema before the development process starts; this database schema is baselined and few changes are allowed to be implemented to keep the system stable (Scott. W. Ambler, 2006). Consequently, the concept of agile data modeling has been introduced to adopt the evolutionary approach while building the database schema to increase the system’s database schema quality.
1.2. Problem Statement
• Agile methodologies have arisen to solve some of the traditional software methodologies’ problems in which that they do not cope with rapid requirements and technology changes. Many projects failed to use traditional software development methodologies and some projects stopped at the end of producing the huge required documentation before the coding process starts [ CITATION Lin \l 1033 ]; thus agile methodologies have demonstrated great success as being highly productive activity as the customer is not required to wait till the end of the project to have a running software system, instead each phase or few phases can produce a part of the system that can be placed on the customer production server; Meanwhile many agile projects do not apply agile practices to database development and still consider it in sequential manner via producing almost complete database schema before starting the coding process, exactly as the traditional software development life cycle models, using such combination made the enterprise data professionals, including both data architects and data administrators frustrated, as project developers within the same teams ignore their advice, standards and guidelines. Developers will be also frustrated as they hardly are allowed to implement changes on the database schema in order to cope with their written code [ CITATION Sco \l 2057 ].
• Another problem is that as agile methodologies are not documentation centered, most of the important documents needed after the software development completion are not produced during the software development process. In Agile, documentation is mostly limited to source code and a set of user stories or UML diagrams; developers consider the well organized code is the best documentation can be created; meanwhile testers and developers need more than documented code. Although reducing the amount of documentation can increase productivity and save time, it causes risk and may increase the project costs, as documentation is considered crucial when transitioning the project to a maintenance team as it serves as a domain knowledge repository for maintenance and testing purposes [ CITATION Lin02 \m Cor05 \l 2057 ].
• Finally, there is a gap between business requirements and IT goals in which customers always need to apply their changes in a glance to cope with new business changes and IT goals are to provide applications in standard environment that is affordable, scalable and securable along with reducing the development and maintenance cost.
1.3. Aim and Objectives
I. Aim
This thesis aims to cover the gap between applying agile software process models to the software development process and the database development process, by applying evolutionary approaches to database development that will in turn cover the gap between enterprise data professionals and software developers.
Another aim is to increase the level of documentation when using agile methodologies that will give competitive advantage just as traditional software development methodologies.
And the final aim is to bridge the gap between business requirements and IT goals by generating the application code in which will reduce development and maintenance cost while delivering running application to the customers in the shortest time.
II. Objectives
This thesis objectives are to provide a framework for generating a final software product through automated process supporting agility in both directions of coding and data modeling as well, following such framework will provide high level of customer collaboration and help data professionals to work in an agile manner to avoid the problem of having overbuilt systems along with automatically generating portions of the software code based on the available modern software architecture models.
This thesis also presents a software tool that will help in the software generation process by generating the database schema, the data access layer and the possible associated quality documents that will reduce waste, rework, and cost; moreover it will build database schema that is capable of evolving smoothly far in the future to adapt requirements’ changes during the project iterations.
1.4. Methodology and Limitation
• Research Methodology:
Firstly a literature review for software development methodologies is held to give a demonstration for its advantages and disadvantages, focusing on the two software development methodologies' categories that are: the traditional (sequential) software development methodologies, and the lightweight software development methodologies. Secondly, a conclusion showing some existing problems in agile methodologies. Thirdly, a framework –the enhanced early user interface development practice's framework- is proposed to solve some issues related to agile methodologies usage. Finally, a software tool is proposed to automate the enhanced early user interface development process during the software development process along with illustrating a case study to present how this software tool can be used to automate this proposed framework. Figure 1.1 depicts this research methodology.
Figure 1.1: The research methodology
• Research limitation:
There have been few issues that are considered limitations to this research that are:
1. Normalization: by following the EEUID framework normalization cannot be performed during the database design phase through different iterations, as the database is being built in accumulative and incremental way, this leads to losing the normalization benefits for optimizing the database schema quality.
2. Distributed systems: the EEUID offers a fertile environment to develop one unit software system. Distributed systems cannot be developed using the EEUID framework.
3. Development team limitation:
• Team size: The proposed tool with the EEUID framework -iAgile- is a single user application prototype; this made a limitation to the team size. During the system analysis phase only one user is allowed to build the user interface screens through iAgile. Another choice is that two system analysts can use iAgile at the same time to build the user interface screens as one system analyst make the user interface design and the other will be considered as his/her peer review. Thus, only the system analyst is one or two persons but there is no limitation to the developer, testers or the system implementers.
• Distributed team: iAgile does not allow distributed working environment which places a limitation that the development team should exists in one place.
• Team skills: For teams following the proposed practice in this research, the team should be self-managed with highly communication skills as the project manager's role in teams following agile methods is to coach the team to reach the targeted goals not just assigning tasks, thus each team member should be keen to reach his own targets and finish his/her tasks.
4. The developed system complexity:
iAgile is most suitable for “database applications”; those are applications that depend on the famous database operations e.g. operations for adding, deleting, updating and searching for information from the database.
Other applications with highly business requirements complexity such as calculating salaries based on wages, vacations, and overtime days is not recommended to follow the proposed practice.
1.5. Thesis Structure
This thesis is organized as follow:
Chapter 1- Introduction: Introduction that acts as an entry point to the whole thesis helping readers to understand the motivation of this work and benefit from it.
Chapter 2– Trends in software developments: This chapter holds a demonstration for the different software development life cycle models presenting strength points and drawbacks from using it; moreover it provides a closer look to the insights of agile practices, and at last provides a demonstration for the prototyping and rapid application development techniques.
Chapter 3 – The Enhanced early graphical user interface framework: This chapter holds a demonstration for the proposed framework that helps solving some agile methodologies’ problems.
Chapter 4- Case Study: This chapter holds a demonstration for a proposed software tool to automate the enhanced early development of graphical user interface practice’s process.
Chapter 5- The Enhanced Early User Interface Development Practice’s Framework Evaluation: This chapter holds a theoretical and technical evaluation for the EEUID practice’s framework.
Chapter 6- Conclusion and future work: This chapter holds a conclusion that includes the results extracted from this thesis along with any future work suggestions.
Chapter 2 : Trends in Software Development
1.
2.
2.1. Software Development Trends
2.2. Heavyweight Software Development Models (Traditional Software development Models)
2.3. Lightweight Software Development Models (Agile Software Development Models)
2.
2.1. Software Development Trends
Software development has been part of the society from decades. It has been started as a chaos activity called “Code and Fix” that is dependent on building the software without much planning in the beginning, and system design was not mature enough for further features’ improvements. This style of working worked fine in small systems; but approved inefficiency for bigger systems; consequently, a new style of development called “Methodology” has been introduced to the world[ CITATION Awa05 \l 1033 ]. Earlier methodologies called “Traditional methodologies”; their lifecycle models were dependent on sequentially working via four phases: requirements gathering, designing, developing the software, and testing the results; once each phase has been finished it is not possible to return to it. This type of working has proved inefficiency in many projects, as formal requirements definition addressed the problem of that requirements were incomplete or/and did not reflect exactly the customer’s needs; Formal design before implementation addressed the code reuse problem and thus reducing rework; moreover, there were dozens of documentation that must be done before any code being written or producing a deliverable to the customer.
There is no doubt that this type of software development has accomplished a great rate of success in some projects; meanwhile the additional process steps, roles, and artifacts caused many projects to fail attempting to use the same techniques, and others got lost in the documents and never implemented any code, while others did not leave enough time at the end for implementation and testing, and delivered systems inconsistent with the documents and designs on which most of the project time was spent [ CITATION Lin \l 1033 ]. The nature of heavy aspects of the traditional software development activities caused it to be called “Heavyweight software development models”.
Consequently, a new school of software development models called the “Lightweight software development models” have arisen with the view that production teams should start with simple, knowable approximations to the final requirements, and then continue to increment the detail of these requirements throughout the life of the development[ CITATION Ree02 \l 1033 ].
Thus, up till now there are two schools of software development models, the “heavyweight” software development lifecycle models’ school that requires the comprehensive planning, thorough documentation, and expansive design, and the “lightweight” software development lifecycle models’ school (agile) which subsumes individuals over processes, working software over documentation, collaboration over negotiation, and responding to change over following a plan [ CITATION Pre09 \l 1033 ].
In this chapter an insight for the lightweight and heavyweight lifecycle models will be illustrated.
2.2. Heavyweight Software Development Models (Traditional Software Development Models)
The traditional software development lifecycle models (LCMs) were called “Heavyweight LCMs” due to the heavy aspects of the process activities, those LCMs depend on planning out a large part of a project in a great detail over a long span of time. Project managers tend to predict every possible project milestone in order to foresee every technical detail to ensure project success. This leads managers to demand all types of specifications, plans, reports, checkpoints and schedules[ CITATION Whi04 \l 1033 ]. Examples of those LCMs are: waterfall model, spiral model, incremental model, and the V-model (Sommerville 2011).
2.3. Lightweight Software Development Models (Agile Software Development Models)
The lightweight LCMs have arisen as solution to the heavyweight LCMs. The term “agile” appeared in February 2001 by a group of leading lightweight methodologies’ developers such as Kent Beck, Jim Highsmith, Martine Fowler and others [ CITATION Ala05 \l 1033 ]. From that time the term “agile” has been populated stating four important issues, which are:
1. An agreement has been held to substitute the term ”lightweight” with the “Agile” term, as there was a need for software development models that accepts changing requirements during the software development process.
2. The Agile manifesto: “We are uncovering better ways of developing software by doing it and helping others to do it. Through this work we have come to value:
• Individuals and interactions over processes and tools
• Working software over comprehensive documentation
• Customer collaboration over contract negotiation
• Responding to change over following a plan
That is, while there is a value in the items on the right, we value the items on the left more [ CITATION Bec01 \l 1033 ] ”.
3. There are twelve core principles to comply with, when an agile method is introduced.
4. Some actions are left to each methodology to decide on, in order to facilitate this methodology’s road and helps towards producing the software to be developed e.g. many agile practices exist on agile methodology’s ground such as pair programming and test first programming, each methodology applies a collection of those principles during the development time to help the development process to reach its goals quicker and easily.
• Agile core principles
Agile methods exhibit twelve principles that are considered the main advantages for it, that are [ CITATION Ala05 \m ElS08 \l 1033 ]:
1. Agile methods merits reside in the twelve principles behind it. Agile methods avoid the long time that the customer should wait to start working on the required system, this is by producing the system in iterations and each iteration produces a valuable part of the system that can be placed on the customer’s production server for real usage. Each iteration produces a functionality increment to the system that must integrate without any problems with the previous produced functionality increments; Koch stated the first principle as “Our highest priority is to satisfy the customer through early and continuous delivery of valuable software” [ CITATION Ala05 \l 1033 ].
2. The main difference between traditional software development models and agile methods is that in the first once all requirements have been approved, it cannot be changed till the project ends, conversely agile methods welcome changes during all the software development lifecycle. The main reason for requirements’ changes is that the customer may not be able to fully identify his requirements at the beginning of the project, but once he starts to see a part of the system, he can identify what has been missing. Working in iterations helps to avoid huge changes to apply the customer’s modifications and continue building the software on what the customer actually needs; Koch stated the second principle as “Welcome changing requirements, even late in development” [ CITATION Ala05 \l 1033 ].
3. Agile method’s iterations are highly recommended to be short periods in order to deliver functionality increments to the customer as fast as possible, the iteration period should last from couple of weeks to couple of months; Koch stated the third principle as “Deliver working software frequently, from a couple of weeks to a couple of months, with a preference to the shorter time scale” [ CITATION Ala05 \l 1033 ].
4. Customer involvement is a crucial factor to all agile methods for continual review and testing for the system requirements from the customer side; Koch stated the forth principle as “Business people and developers must work together daily throughout the project” [ CITATION Ala05 \l 1033 ].
5. The project manager’s job in agile methods is limited for coaching the team members and directs them to reach their goal, rather than the conventional project manager’s role that is known to specify each team member what to do. This entails that the team members must be efficient and self-motivated to help the project move in the appropriate drawn road for it; Koch stated the fifth principle as “Build projects around motivated individuals. Give them the environment and support their needs, then trust them to get the job done” [ CITATION Ala05 \l 1033 ].
6. Agile methods focus on producing working software as fast as possible; face-to-face interaction reduced the amount of documents that should be produced and thus shortened the project development’s time; Koch stated the sixth principle as “The most efficient and effective method of convoying information to and within a development team is face-to-face conversation” [ CITATION Ala05 \l 1033 ].
7. Agile methods’ main goal is producing working software and it is considered the main measure of project progress; Koch stated the seventh principle as “Working software is the primary measure of progress” [ CITATION Ala05 \l 1033 ].
8. Agile methods impose working in sustainable manner. Mostly forty hours per week – eight hours per day rule is applied; Koch stated the eighth principle as “Agile processes promote sustainable development. The sponsors, developers and users should be able to maintain a constant pace indefinitely” [ CITATION Ala05 \l 1033 ].
9. Agile methods perform continuous validation and verification; this enhances the produced software quality and design; Koch stated the ninth principle as “Continuous attention to technical excellence and good design enhances agility” [ CITATION Ala05 \l 1033 ].
10. One of the core principles of agile methods is to keep the functionality as simple as possible; this accelerates the development process and only targets the needed functionality instead of producing a huge system in which users get lost; Koch stated the tenth principle as “Simplicity – the art of maximizing the amount of work not done – is essential” [ CITATION Ala05 \l 1033 ].
11. Management role in agile methods has different meaning other than the one used in other traditional methods. Management’s role in agile methods moves towards coaching and leading the team members to reach their goals, meanwhile controlled management is applied when using traditional software development models; Koch stated the eleventh principle as “The best architectures, requirements, and designs emerge from self-organizing teams” [ CITATION Ala05 \l 1033 ].
12. In agile methods, breakpoints are placed to review the feedbacks and learn from it, this helps to enhance the software design and the team capabilities as well; Koch stated the twelfth principle as “At regular intervals, the team reflects on how to become more effective, then tunes and adjusts its behavior accordingly” [ CITATION Ala05 \l 1033 ].
2.3.1. Closer Look to Agile Methods
There are many agile methods presented since 1995; each one of them has different processes, roles and responsibilities, practices, and scope of use [ CITATION Abr02 \l 1033 ]. In this thesis, a demonstration for the extreme programming and the scrum methods will be viewed.
2.3.1.1. Extreme Programming (XP)
Extreme programming method is considered the most famous agile software development method, it was popularized by Kent Beck in 2000[ CITATION Bec00 \t \l 1033 ]. The word “Extreme” came from taking the method’s practices and principles to the extreme levels, examples of those are [ CITATION Bec00 \t \l 1033 ]:
• Code review is a good activity; extreme programming review code all the time via the pair programming practice.
• Testing is a good activity; all stakeholders will perform unit tests all the time via the unit testing practice.
• Design is a good activity; it will be part from the entire developers’ daily job via the refactoring practice.
• Architecture is a crucial activity; all stakeholders will define and refine the architecture all the time via the metaphor practice.
• Integration testing is a crucial activity; integration and integration testing will be done several times a day via the continuous integration practice.
• Short iterations are good; extreme programming exposes truly short iterations, may be in minutes and hours via planning the game practice.
I. Extreme programming process
Early requirement is a simple place to start, and successive portions of requirements can be added for implementation consequently through a set of iterations. Projects attempted to gather all the customer requirements at the beginning of the project, faced errors and long development process [ CITATION Tom02 \l 1033 ]. This was the initial place extreme programming started from to perform the job on subsequent iterations, through those iterations a set of processes took place that are:
1. The exploration phase: Through this phase requirements are written down in the form of story cards, each story card describes the features to be added to the software as well as choosing the software architecture to be used for the project development. The most usual items appearing in any story card are [ CITATION Ree02 \l 1033 ]:
• User story number or ID.
• User story title.
• Person responsible for the story, typically a customer.
• Date.
• Estimate of implementation time, typically in days.
• Risk level of the technology used.
• User story description.
• Other optional information includes: unit test description, user interface needs.
• Other related story numbers.
However, in practice each development team decides on their own set of fields that best suits their requirements representation [ CITATION Ree02 \l 1033 ].
Figure 2.2: The Extreme Programming process, adapted from[ CITATION Abr02 \l 1033 ]
2. The planning phase: Through this phase, story cards are prioritized and time estimates are decided for each story card. A schedule is prepared for the work being done and a plan is being produced for the first iteration to produce the first software component release.
3. The iterations to release phase: Several iterations before the first release take place. Schedule that has been created in the planning phase is broken down into several iterations, and the customer decides on the story cards to be selected for each iteration. The first iteration includes building the system architecture as a whole and contains the main building blocks of the system as a whole.
4. The product ionizing phase: Testing and system performance checks are being performed before releasing the whole system to the customer; meanwhile changes can be received from the customer even through this phase for further adjustments.
5. The maintenance phase: Through this phase, a new member from the customer side joins the development team to be trained, and the development team maintains the system to meet the final customer needs.
6. The death phase: A project reaches a death phase when it meets the customer requirements and there are no more stories to implement, or when the project is not producing the desired outputs, or even if the project cost will exceed the limits if the development team performed further development.
II. Extreme programming roles and responsibilities
According to agile concepts of performing projects in self-managed team, there are certain roles in this methodology, and each role has a set of certain responsibilities, which are [ CITATION Abr02 \l 1033 ]:
a. The programmer: Is responsible for running the functional tests and writing the code in a way that keeps it as simple as possible.
b. The customer: Writes the functional tests, prioritizes the story cards, and decides on whether the implemented story card is accepted or not.
c. The tester: Helps the customer in writing the functional tests, runs the functional tests, and broadcasts the testing results to the development team.
d. Tracker: This is a similar kind to the project manager role, he\she tracks the iteration progress and whether it reached its milestones or not. Give feedback to the programmers on whether they are following the implementation schedule or not.
e. The coach: As the XP team must be self-managed; the project manager role has turned into a coach role that guides the whole team of how to work instead of producing orders to the team members.
f. The consultant: Is a consultant for the used technology and guides the team through problems.
g. The manager (Big boss): Some of the decision must be taken by single person to move the team towards the success road; the manager is the responsible one for this type of decisions.
III. Extreme programming practices
XP method has decided on twelve practices to follow, in order to achieve the method goals that are [ CITATION Abr02 \m Coh04 \l 1033 ]:
• The planning game: The development team decides on the story cards time estimates for implementation, and the customer decides on which stories to be selected for each iteration, and the releases timing.
• Small releases: The initial release is produced rapidly, and then subsequent releases are being produced on small periods to reflect new story cards.
• Metaphor: A metaphor is placed by the entire stakeholders to describe how the system works.
• Simple design: Simplicity is a must when applying the XP method, any extra complex features or extra code is being removed from the system.
• Tests: The development is test driven, a set of functional tests and acceptance tests are written by the customer and developers must be committed to it during the development process.
• Refactoring: Is a form of restructuring for the system to remove complex features and maintain the code simplicity.
• Pair programming: Two programmers are committed for one machine, one of them writes the code and the other reviews what is written, and this ensures keeping the system code as simple as possible while performing the functional tests all the time.
• Continuous integration: When developers integrate the new added or the modified stories with the rest parts of the system, the acceptance tests must be passed to maintain the system integrity.
• Collective ownership: Any developer can modify any part of the system, the code is owned by all the developers.
• On-site customer: A customer representative is preferably to work with the development team to ensure that requirements are correctly implemented, perform acceptance tests, and answer the development team questions.
• 40-hour weeks: The extreme programming considers the human extreme working capacity as well, the working capacity for any worker is eight hours per day and average of five days per week, extra overtime hours are not accepted while applying the XP.
• Open workspace: An open area is the best room structure for the whole team to be able to collaborate easily.
IV. Extreme programming scope of use
Practitioners that had put the baselines for the XP method had put as well the conditions that make such method succeed to reach its planned goals, which are [ CITATION Coh04 \l 1033 ]:
Team size: XP imposes that the working team is co-located in a single room, for this to succeed and does not turn into a mess, the team size should be from two to ten.
Iteration length: The recommended shortest iteration is not less than two weeks.
Support for distributed teams: The XP team should be co-located for communication purposes, and this does not work with distributed teams.
System criticality: There is no limit on systems criticality being developed with the XP method.
Moreover, the extreme programming method initiated five crucial values to give and insight on how this method can achieve success when being used; the five values are as shown in figure 2.3 [ CITATION Hol08 \m Bec00 \t \l 1033 ]:
1. Communication
Communication is the most important factor in agile methodologies; it keeps all stakeholders up to date with the project plans, objectives, schedules and even project changes. It was the part that replaced some certain documents following other traditional software development models.
2. Feedback
Communication and feedback are two sides for one coin, up to date feedback from the customer ensures that the project is going on the adequate track and a truly progress is being done towards the main joint project objectives.
3. Simplicity
Extreme programming always emphasizes on providing the simplest features; many existing software projects may expose features that are not needed for the user and only have been built to reach some goal in the used technology. Those extra unneeded features make the system more complex rather than it is a threat to the project success especially if the deadline is approaching.
4. Courage
There are two types of people: People that are adventurous and people that are not adventurous. Extreme programming moves its members to be adventurous in applying the customer’s needed changes through anytime in the project development process. Extreme programming stakeholders should promote their courage to be able to do so taking a complete responsibility to reach stable state after performing such changes.
5. Respect
All stakeholders are involved during the whole phases of the project development lifecycle; a mutual respect must exist between the entire stakeholders for the XP projects, in order to reach a calm reasonable environment that targets doing a successful job mainly as project members here fall under the self-management not the controlled management.
2.3.1.2. Scrum
Scrum method was populated by Ken Schwaber [ CITATION Sch02 \l 1033 ]. The name “scrum” is taken from the “rugby” game in which all the team members work in parallel lines towards the main goal and all team members should keep themselves updated with the other members status in order to cover gaps on the field ground, this is exactly what should the scrum method does, working towards the main goal and when requirements changes appear (that is most likely to happen) all the team members should work to cover the gaps created by that change. This requires a high level of team unity in order to perform scrum properly.
Scrum is based on flexibility, adaptability and productivity; flexibility to handle project changes, adaptability to apply those changes and productivity to work in an efficient way to quickly and smoothly manipulate those changes [ CITATION Abr03 \l 1033 ].
Scrum is adequate for small projects because of the less emphasis on the process driven framework that is needed for large projects, and also the central command structure can cause power struggles in large teams [ CITATION Rup10 \l 1033 ]. On contrary to XP, scrum can be applied to projects of distributed teams across the countries [ CITATION Sut07 \l 1033 ].
I. Scrum process
As shown in figure 2.5, the main idea for the scrum method is built on creating the release backlog at the beginning of the project, that contains all the customer requirements from a high level point of view, the iteration occurs during the development process; at each iteration a set of requirements is selected to be put in the sprint backlog (the iteration requirements log), hence the team starts the development process to implement the requirements in the sprint backlog. At end of each iteration, a set of new requirements or modified requirements may appear, and the development team revises the release backlog and starts new iteration till there are no left items in the release backlog. At the same time a fifteen minutes meeting takes place every day during the development process to discuss what have been done and what obstacles might faced the team members, and also what should be reviewed in the next day meeting [ CITATION Abr02 \m Coh04 \l 1033 ].
Scrum process is divided into three phases that are [ CITATION Abr02 \l 1033 ]:
1. Pre-game phase: through this phase the release backlog is built and decisions regarding the team members selecting, technology selection and risk management plans are taken.
2. Development phase: this phase cycles with a new sprint backlog each time to be implemented.
3. Post-game phase: this phase is reached when there are no items left in the release backlog, consequently activities related to releasing begins from here such as system integration, testing and documentation.
Figure 2.4: The Scrum process, adapted from [ CITATION Coh04 \l 1033 ]
II. Scrum roles and responsibilities
There are different roles and responsibilities in teams following the scrum method that are [ CITATION Abr02 \l 1033 ]:
1. Scrum master: It is a new management role presented by scrum to keep the team members on the scrum track during the whole project lifecycle. Scrum master ensures that the team members are following the scrum practices, values and rules properly. And he/she is responsible for tuning the team working behavior to get a higher productivity as much as possible.
2. Product owner: Is elected by the customer, the management and the scrum master as well to control the release backlog.
3. Scrum team: Is the development team responsible for implementing the sprint backlog. The sprint creation, tasks time estimates and suggesting issues related to the release backlog are from the scrum team responsibilities.
4. Customer: Ensures that requirements are implemented as requested and runs acceptance tests.
5. Management: Makes the final decisions for the project, and shares in building the release backlog.
III. Scrum practices
Scrum does not impose a specific set of practices per-se; meanwhile it imposes only a set of management practices to help scrum reach its main goals that are [ CITATION Abr02 \l 1033 ]:
Product backlog: it is one of the most important scrum practices, it relates to creating and managing the product backlog. The product backlog is backlog for the project tasks issues such as bug fixes, what have been implemented and what should be implemented, solution to current project problems. The product owner is the one responsible for maintaining the product backlog.
Effort Estimation: Through each development iteration, a time estimate is placed for current iteration tasks in the product backlog.
Sprint: It is the procedure of planning to change an environmental variable such as time, requirements, technology. Sprint planning meeting is held to create a new sprint at every thirty days.
Sprint planning meeting: It is a two stages meeting, the first stage decides the new sprint main functionalities and goals; the customer, users, top management and the product owner participate in this meeting. The second stage includes the scrum master and the scrum team to decide on how this sprint will be technically implemented.
Sprint backlog: It is a subset of the product backlog contains the next development iteration main tasks. This backlog lasts for thirty days.
Daily scrum meeting: It is a daily meeting that takes around fifteen minutes to discuss what have been done through the last working day and what will be done the same day. It also discusses the difficulties faced the scrum team and proposed solutions for it.
Sprint review meeting: It is a meeting that should be held in the last day of each sprint, to review the final sprint results and the work has been done to the product owner, top management, users and the customer. This meeting may produce changes to the product backlog to be handled through the next iterations.
IV. Scrum scope of use
Scrum method works successfully for the small teams of less than nine or ten engineers [[ CITATION Abr02 \l 1033 ]], the team should include at least a developer, quality assurance engineer, and a documenter[ CITATION Coh04 \l 1033 ].
2.3.1.3. Software Development Model Suitability
As presented previously in this thesis, there are numerous software development models. Each one of them suits certain projects[ CITATION Jia08 \l 1033 ]. This leads the reader to the fact that there is no best software development model, but there is a suitable software development model that copes with the project circumstances; hence at the beginning of each project, a study should be done to assess the project circumstances and which software development model that is suitable for those circumstances. This may lead an organization to coexist agile and traditional software development models within the same development organization as some projects are successfully development via agile software development models and others are successfully developed via the traditional software development models[ CITATION Vin06 \l 1033 ].
2.3.1.4. A Closer Look to Agile Practices
Agile practices exist to facilitate the software development process and help agile method to reach its main goals. Each agile method can be applied in the real life using a variety of practices that best suits the development team and the project circumstances. This section will provide a detailed illustration for agile practices that will be used in the enhanced early development of graphical user interface practice’s framework that are: the test first programming and code refactoring practices.
I. Test first programming practice
A test is an application for a system functionality given specified inputs in a specific context to produce an output. The test first programming practice depends on writing the system functionalities’ tests before any coding can take place; this approach replaces the requirements and design documents in the traditional approaches [ CITATION Hol08 \l 1033 ].
Most of agile methods depend on a common set of practices that helps promoting the produced code quality. Those include refactoring and the test first programming (Ambler 2005). The test driven development helps developers to:
• Reduce code bugs before writing any line of the code.
• Focus on the business problem’s solution that leads to the expected outputs, this approach avoids over-written code by writing only the needed code segments.
• Facilitate the maintenance process by providing a test suite that can be checked at anytime there is a modification or new system functionality, to assure that the new or the modified code did not break the code integrity[ CITATION Coh04 \m Lan07 \l 1033 ].
This led the software engineers to produce what is called “acceptance test”, which is a set of tests that if the code passed it, then the code would be considered complete for this functionality [ CITATION Amb07 \t \l 1033 ]. Meanwhile formulating those tests is a complicated process as any person can write a test, but only qualified software engineers can provide high quality tests[ CITATION Hol08 \l 1033 ].
The tests formulation process should be done by the customer and the development team; the customer provides the basic functionality work flow; while the development team provides the computer related issues’ tests. An example, if there is a process that inserts a new patient to a hospital list; the customer would suggest a test input of entering a patient name “x patient” then the system should record this person if it has not been recorded before in the system, otherwise it should retrieve the old patient’s data. In contrast, a developer should suggest some tests to validate the patient name by considering the following examples of data inputs (supposing that the patient name maximum length is 20 characters) [ CITATION Bec00 \t \l 1033 ]:
a) Empty string.
b) One-character string.
c) String of 21 characters.
d) Strings containing one character that is “illegal”.
In addition the tests should cover all code paths in the program, an example of this: if there is a “view patients’ data screen” with Add, Save, Delete and Exit buttons, some paths may be:
a) ViewPatients; ClickDelete ; ClickCancel on the confirmation message box.
b) ViewPatients; ClickDelete ; ClickSave on the confirmation message box; ClickExit
c) ViewPatients; ClickAdd ; ClickCancel on the confirmation message box
d) ViewPatients; ClickAdd ; ClickSave on the confirmation message box; ClickExit
II. Code refactoring practice
Code refactoring according to Martin Fowler: “Refactoring is the process of improving the design of code without affecting its external behavior. We refactor so that our code is kept as simple as possible, ready for any change that comes along”. Code refactoring provides many benefits that are [ CITATION Ast02 \m Coh04 \l 1033 ]:
• Speeding up the software.
• Improving the software code design.
• Making the code easier to understand.
• Helping to find code problems.
• Facilitating the maintenance process.
Refactoring does not add a new functionality, it improves the design of existing functionality only, an example of code refactoring is to rename the method of GetPersons() to GetPatients() in a health care software. The refactoring process is cohesively coupled with the unit testing process, as the refactoring cannot be completed successfully until the code runs again as before without any logic changes, this process needs what is called “Regression test”, which is a complete unit tests for the software to ensure that the code has not been broken.
There are two types of refactoring:
1. Code refactoring: That has been introduced by Martin Fowler to improve the design of the software code itself.
2. Database refactoring: That has been introduced by Scott Ambler (Ambler 2003) to improve the design of the database, database refactoring relates to changes that intend improving data quality such as imposing a constraint to certain column or improving the structural database design such as renaming a column, changing a stored procedure to a view, splitting a table into two tables; database refactoring in more complicated process than code refactoring because of that many sources depend on this database schema such as the basic application source code, other applications dealing with this database source code, data loads source code, data extracts source code, testing code and the documentation (Ambler 2003).
There are a set of existing commercials tools supports code refactoring such as ProjectAnalyzer to refactor visual basic code [ CITATION Placeholder2 \l 1033 ] and Visustin that supports many of object oriented programming languages [ CITATION Vis12 \t \l 1033 ]; meanwhile those kinds of tools help developers to perform a small scale granularity of refactoring such as renaming a method, finding a repeated pieces of code, and hiding methods that are not used in global scope by making it private or split complex code into smaller functions. The large scale granularity of refactoring still needs to be done manually on behalf of the developer himself.
To facilitate the refactoring process, the best way is to apply the needed changes in small increments, this will keep the developer on the track to reach his goals and bugs that appears due to these changes can be easily contained[ CITATION Bec00 \t \l 1033 ].
2.3.2. Software Development between Agility and Prototyping
Confusion between the agile methods and the prototyping approach may take place because both of them are based on producing part of the software product at certain point of time; meanwhile there is a significant variation between both of them.
Prototyping is a technique to generate early working prototypes for a part of a software product that will be developed in the future [ CITATION Lic94 \l 1033 ].
The prototype plays several roles in the software development process, some of them are [ CITATION Chu10 \l 1033 ]: Experimentation and learning, testing and proofing, communication and interaction, and synthesis and integration. To construct a prototype, there are two techniques:
• Horizontal prototyping: In this type of prototyping, only certain layer of the system is produced, for example the graphical users interface layer or the business logic layer for a certain module to demonstrate the module logic.
• Vertical prototyping: In this type, a selected part of the system is implemented completely; mostly this type of prototyping is used to test an implementation option or a specific technology [ CITATION Lic94 \l 1033 ].
Meanwhile agile methods work iteratively to build a software product, through each iteration a functionality increment is being added to the system till reaching a complete software product that satisfies all the customer’s requirements. By contrast a prototype is built to demonstrate a part of the system that is implementing a set of non-completed features or a technology option as a proof of concept .For example before the development process takes place, some of those prototypes are thrown away and some of them are used during the development process later as part of the software code after the prototyping process ends and the development process starts.
The prototyping technique demonstrated many advantages thus it is being applied to some of the agile methodologies to validate a given set of requirements and sometimes for calculating the new projects risks [ CITATION Lic94 \l 1033 ]; a famous example is the dynamic system development methodology uses a set of prototypes during the project lifecycle for different goals that are:
1. Business prototypes: They demonstrate the system functionalities to give an insight for what the system is required to do and how will the system perform it.
2. Usability prototypes: They demonstrate and review the user interface.
3. Performance and capacity prototypes: They check that the system will perform appropriately on different users’ access capacity.
4. Capability prototypes: They are used to demonstrate different implementation techniques and different technology choices to aid in the decision making process to select a technical option for the system to be built.
Chapter 3 : The Enhanced Early User Interface Development Practice’s Framework
1.
2.
3.
3.1. Introduction to Agile Development Environment
3.2. Related Work
3.3. The “Early User Interface Development“ Practice
3.4. Towards a Framework for Evolutionary Database Development
3.
3.1. Introduction to Agile Development Environment
Early in this thesis, there was a preview for some traditional software development models and some other agile methods. It was concluded that many agile projects do not apply agile practices to database development and still consider it in serial manner exactly as the traditional software development techniques by building the whole detailed data model at the project beginning.
Another problem is that agile methods are not documentation centered. In agile, developers consider the well-organized code is the best documentation can be created. Despite of the fact that reducing the amount of documentation can increase productivity, it does come at some risk and cost as documentation is considered crucial when transitioning the project to a maintenance team as it serves as a domain knowledge repository for maintenance and testing purposes [ CITATION Lin02 \m Cor05 \l 2057 ].
Finally, there is a gap between business requirements and IT goals in which customers always need to apply their changes in a glance to cope with new business changes and IT goals is to provide applications in standard environment that is affordable, scalable and securable along with reducing the development and maintenance cost.
Through this chapter, a proposed framework will be illustrated to solve these three issues through:
1. Formulating the database schema automatically in an iterative manner guided by GUI to finally produce the exact required database schema instead of having overbuilt schema that will in turn increase the schema quality.
2. Automatically generating documentation for quality purposes.
3. Providing a fertile environment to generate the application needed code based on modern architecture models that are considered affordable, securable and scalable.
3.2. Related Work
Many efforts have invested in the IT field to cover the previously mentioned issues to some extent; examples of those are WebRatio and iRise. Next sections will provide more illustration for those examples.
3.2.1. WebRatio
WebRatio is an innovative model-driven development environment for building custom enterprise applications in a Web/SOA environment. The tool allows capturing requirements in abstract models and automatically generating a full-featured, and industrial-strength, business application. The models are based on the BPMN (Business Process Modeling Notation) standard and the WebML modeling language. The result is a standard Java Web application. WebRatio allows process analysts and application functional analysts to work together with web designers and developers, thus optimizing collaboration within the work team. WebRatio works in three steps to produce the application by first model the functional requirements, second customize the rules and start to build pages based on these models, finally produce the application[ CITATION htt11 \l 2057 ].
Although WebRatio is a fertile development environment, it did not solve the mentioned problems all together, it only produces working application but still depends on UML and models for capturing requirements from the customer, that have proven not to be the optimum method to validate customer requirements, as customers have no idea about the UML and requirements validation process comes after building the application web pages, which consumes more time. Another issue is that still there is not any documentation for the generated application.
3.2.2. iRise
iRise is a product for building high fidelity prototypes. A high fidelity prototype is a prototype that gives the stakeholders realistic prototype that simulates the real application to validate requirements with customers before any investments in the project are done. iRise builds prototypes through three levels of modeling: high-level page flow, screen design and text view. The high-level page flow modeling is more similar to storyboards in which it provides the pages interaction with each other, screen design allows system analysts and semi-technical users to build user interfaces of the prototype through designing the web pages using the standard set of controls provided by current available development environment such as Text boxes, and Combo boxes. Text view modeling is a textual description for the main application functionalities. [ CITATION Mem07 \l 2057 ].
iRise helps in building running prototypes guided by user interface, which is considered a very effective method to validate requirements as it closes the picture to the customers by giving an insight of what the application will look like and how it will behave. Meanwhile, it does not produce a generated code or generated database schema, also in spite of having the text view modeling level, it does not produce any documentation for the product.
3.3. The “Early User Interface Development” Practice
The requirement Elicitation (RE) process is the first step in any agile method; meanwhile each method does not impose using a specific RE technique per-se otherwise each company selects the most adequate set of agile practices to achieve the agile principles[ CITATION Pae03 \l 1033 ]. Still there are preferred set of practices for each method’s requirements elicitation process, examples of these are: story cards for extreme programming method[ CITATION Pae03 \m Ric01 \l 1033 ], backlog, sprints, and daily scrums for scrum method [ CITATION CRK11 \m Pae03 \l 1033 ], project mission, constraints, objectives, project organization and system requirements for adaptive software development method [ CITATION Pae03 \l 1033 ], feasibility study and business study dynamic system development method[ CITATION Pae03 \l 1033 ] and domain model for feature driven development method [ CITATION Pae03 \l 1033 ].
All agile methods mentioned above use either UML diagrams or textual descriptions to represent system requirements, while Graphical User Interface (GUI) is one of the most successful ways to represent requirements for customers as they are not experts in UML diagrams and mostly forget details when textual description is used, this is compliant to Albert Einstein say “If I can’t picture it, I can’t understand it”.
There is a practice recently introduced – Early User Interface Development practice (“EUID” practice for short) – this practice is used to represent and validate user requirements through the formulation of the screens user interfaces in order to validate requirements before any new iteration begins [ CITATION Lab08 \t \l 1033 ].
As shown in figure 3.1, the system analyst gathers the requirements from the customer at the beginning of each iteration to develop the user interface prototype and validate it with the customer to obtain feedbacks till having an approved user interface for the current iteration, then begin the software development phase to produce an iteration release [ CITATION Lab08 \t \l 1033 ].
Figure 3.5: EUID process, adapted from [ CITATION Lab08 \t \l 1033 ]
The EUID practice offered a set of common components used generally in the most of the web applications. This set of components is [ CITATION Lab09 \t \l 1033 ]:
1. Search component
One important task in information system applications is to allow the users to search for certain data. This may come in different forms, for example a combobox or a set of editable controls with a button. There are three templates for this component; which are:
• Button_search template: In this template, the user is given a set of user controls and a button to perform the search operation.
• Combobox_search template: In this template, the user is given a combobox filled with data and upon selection of any value in that combobox, the search action is performed; for example filling another combobox with data according to the selected value or display a record of data based on this selection.
• Tree_search template: This type of template has been used for desktop applications and presented recently to web applications. It allows the user to explore hierarchal data such as table of contents of a book. When the user clicks any node, its descendant appears or related information for that node is displayed.
2. One record component
Another important component that can be found in almost all information systems applications, is the “one record” component that is responsible for adding, editing, or viewing a one record data. One famous form for that component is a set of controls in columnar representation. There are three templates for this component, which are:
• View_onerecord template: This type is used to display data records one by one. Through this type, the user is not allowed to edit or delete any data and a navigation panel is provided for data navigation purposes.
• Edit_onerecord template: This type is used to view and/or edit data records one by one.
• Insert_onerecord template: In this type, the user inserts data records in columnar representation.
3. Multi record component
The Datagrid is the standard format for the “multi record “component, where data is represented in tabular form. It can be used to view, edit or delete an existing set of data. The most famous form for editing or deleting records in that component is through adding link buttons in the datagrid. There are three templates for this component; that are:
• View_multirecord template: This type is used to view data in the form of datagrid and does not allow the user to edit its records.
• Edit_multirecord template: This type is used to view and/or edit data records in the datagrid.
4. Navigator component
It is used to trigger several events on any web page; for example a link that moves the user to another page or make changes on the same page. The “navigator” component can come in the form of a word, sentence, paragraph, picture or even a button on the page.
3.4. Towards a Framework for Evolutionary Database Development
In the EUID practice, automation level stops at the point of generating the GUI structure in HTML format associated with the behavior file that contains textual description for the given events for each page in the application.
This section proposes a framework for the EUID practice –the Enhanced Early User Interface Development- in order to reach a final product that is based on n-tier architecture along with system detailed design documents. One extreme importance of the proposed framework is generating the database schema at the end of the development process to avoid overbuilt databases and illustrate a new insight for the agile data modeling.
3.4.1. The Enhanced Early User Interface Development Framework
As illustrated before in this thesis, the main agile development environment’s problems are:
1. Many agile projects do not apply agile practices to database development and still consider it in serial manner.
2. Agile methods are not documentation centered.
3. The gap between business requirements and IT goals.
The “Enhanced Early User Interface Development” (EEUID framework for short) practice framework has come to provide a solution to those problems.
This framework works in an evolutionary manner, at each iteration beginning, the system analyst should arrange meetings with the customer representatives to acquire full system requirements in short. Through those meeting the system analyst will distribute the main project modules into iterations according to their priorities defined by the customer.
Hence at each project development process’s iteration beginning, the system analyst should acquire the current iteration’s requirements details, and begin to construct the system screens in front of the customer representatives for requirements validation purposes. At the meeting closure, the system analyst will have an output represented in the form of constructed web pages’ GUI. At this stage, the framework will be able to generate the class diagram for this iteration, the GUI files and the expected behavior of the system screens. Consequently, development tasks can be delegated to developers to start the development process, and produce an iteration release that is demonstrated to the customer for having new and/or modified requirements in order to produce a final iteration release that the customer can put into production as a working part of the system, then proceed to next iteration till producing the whole system.
3.4.1.1. The EEUID Framework’s Components
The EEUID framework proposed three components in order to automate the previously illustrated process, as shown in figure 5.2, these components are:
1. The EEUID generator:
The framework starting point is the EEUID generator which is an enhanced version for the EUID generator illustrated in section 3.3, this is an engine used to formulate the system screens’ user interface through the usage of the templates presented by the EUID practice, at the end of each iteration this component will be able to generate this iteration class diagram as it is from the crucial UML diagrams that should exist for every system, also it will be used to generate the database schema that contains only the required data fields of the system to avoid having overbuilt database schema.
The EEUID generator produces three types of outputs:
I. GUI files: Those are set of ASP.NET files representing the screens GUI.
II. The XML behavior files: Those are set of XML files storing the main functionalities of each screen in the system; those are used to formulate the system class diagram in later stage.
III. The XML class diagram description files: Those are set of files each class properties, operations and relationships to other classes in the system.
Figure 3.6: The EEUID Framework’s Components
2. The UML Diagram Generator:
UML (Unified Modeling Language) is a visual language helps to understand the structure and the dynamic behavior or action for the business or the various systems. Moreover, object-oriented design by UML promotes modularization effectively. The UML class diagram has been chosen as a method of representation for this framework because of the considerable relevance between a class and each screen GUI for the application development; the UML Diagram Generator generates the class diagram from the given XML class diagrams’ description files directly as it contains full class definition. The class diagram will be used later to generate the database schema through each project development iteration.
3. The UML Transformer:
After generating the UML diagram, the UML transformer component will utilize it in producing the main framework outputs, which are:
• The database schema.
• The data access layer files.
• The available agile document templates for the system.
Each output will be considered closely in the next sections.
3.4.1.2. The EEUID Process
A question comes to mind when the user thinks about applying the EEUID framework that is “How the EEUID can be applied utilizing the proposed components?” the answer is depicted in figure 3.3.
Figure 3.7: The EEUID Process
As shown in figure 3.3, the framework works in an evolutionary manner; at each iteration beginning, requirements acquired from the customer, then GUI is developed using the EEUID generator producing this component outputs, hence the class diagram is generated using the UML diagram generator. From this point, the framework will automatically generate the data access layer, DB schema and detailed design documents needed for this iteration. Consequently, developers can start the development process and produce an iteration release that is unit tested. For each successive iteration, a complete regression test should be applied for this iteration release to assure that the new iteration release did not break the code integrity. If the regression test passed, refactoring should be done to produce optimized code design. Hence, an iteration release is presented to the customer for feedback, and then proceeds to the next iteration upon customer approval.
Utilizing the test driven development and acceptance tests in the EEUID practice’s framework:
Test Driven Development (TDD) is a software development practice that focuses on software design by first writing unit-tests followed by production code in short that passes those unit-tests, then iterate till reaching a final code that passes all the given unit-tests. TDD focuses the developer’s attention on software’s interface and behavior, while growing the software architecture smoothly [ CITATION Jan05 \l 1033 ]. Those unit tests for a given functionality should formulate the functionality’s acceptance test that is assigned to the customer role. Acceptance tests reflect the system functionality that is in the customer mind [ CITATION Ara07 \l 1033 ], following this practice in the software development process is considered beneficial from several points of views[ CITATION Ara07 \m Geo03 \m Erd \l 1033 ]:
• Maintain the system integrity: each time there is a modified, new business requirement or a new module –part of the system- is released, after modifications are performed a regression test can be run to assure that modifications did not breach the code integrity.
• System scope completeness: Guarantee customer's project scope is attended fully and correctly.
• Functionality: Avoid overbuilt functionality in which programmers unintentionally develop more functionalities than are actually needed.
• Work assessment: Make developers have a basic idea of how much implementation is still unfinished.
• Feedback: Tests provide the programmer with instant feedback as to whether new functionality has been implemented as intended and whether it interferes with old functionality.
• Task-orientation: Tests drive the coding activity, encouraging the programmer to decompose the problem into manageable, formalized programming tasks, helping to maintain focus and providing steady, measurable progress.
• Quality assurance: Having up-to-date tests in place ensures a certain level of quality, maintained by frequently running the tests.
• Time optimization: Practical experiments have proved that, programmers used to code using the test driven development code faster than developers who use waterfall-like development.
How the test-first and acceptance test practices utilized in the EEUID framework?
From the benefits illustrated above, it was very useful to include the test first and acceptance test practices in our framework. Although the EEUID provides the system analyst with a predefined set of actions that is used widely in the current web applications such as inserting, saving, deleting data or simple math calculations on the page; meanwhile definitely the customer will need more functionality in the system. For those unknown functionalities, the customer will provide the system analyst with the set of tests for this functionality that will formulate the “acceptance test” for this function. This is done by providing textual descriptions and the system analyst transforms it later to the developers in an adequate format in the development phase. Using the test first development practice will help to evolve the code smoothly without breaking the integrity of the code classes.
3.4.1.3. The EEUID Framework Outputs’ Software Architecture Models
The main target from the proposed framework is to automatically generate the database schema, the data access files and the system detailed design documents; meanwhile the framework goal is to provide better both application architecture and business process for the agile methodologies.
The classical architecture for applications is client-server architecture which later proved deficiency in many areas, the most successful architecture for nowadays application is the n-tier architecture. The greatest competitive advantage of this architecture is that it easily separates the different coding layers in the application. For example, an application can be composed of a GUI tier that exposes the screens graphical user interface, a data access tier that exposes the functionalities for the GUI tier and a database tier that holds the main data fields that is considered the application repository.
The EEUID framework generated application architecture will be based on three tiers architecture as a baseline, and more tiers can be added smoothly later to handle further functionalities such as the security tier.
Figure 3.8: The Available Modern Software Architecture Models, adapted from [ CITATION Dor04 \l 1033 ]
As shown in figure 3.4, the available modern software architecture models demonstrated by the EEUID are four models [ CITATION Dor04 \l 1033 ]:
1) GUI layer and relational data access layer above relational database
This model biggest problem is that 35% - 55% of the object oriented application resources were wasted on rework generated by changes to the relational database for the changing business environment. The EEUID framework has solved this problem via following the framework’s evolutionary approach which reduces customer’s changing requirements after the whole product release by dividing the project to several parts and providing several releases. Meanwhile, this model still suffers from the famous impedance mismatch problem [ CITATION Zha01 \l 1033 ], that is performing the task of mapping complex object structures and navigational data processing at the object oriented programming layer to the set-oriented, and descriptive query language such as the structured query language, which supports just a simple, flat data model. Despite of this considerable mapping overhead, mature RDBMS technology contributes to keep the overall system performance acceptable and it is still the most widely used model for object oriented applications.
2) GUI layer and object relational data access layer above relational database
Before discussing the advantages and disadvantages of this model, an illustration for the Object Relational Mapping (ORM for short) will be reviewed.
What is the Object Relational Mapping?
It is a modern technique for solving the problem of impedance mismatch by persisting objects to flat data that is database tables, and retrieve data from flat pattern then form it in objects pattern. Such type of technology has encouraged developers to think in terms of objects rather than thinking how to transform objects data to and from the database tables that is necessary for object oriented languages [ CITATION Obj \l 1033 ]. Many ORM tools exist in market by now such as Hibernate/NHibernate (18), Entity Framework[ CITATION Mic11 \l 1033 ], Subsonic[ CITATION Sub11 \l 1033 ], Light [ CITATION Bus11 \l 1033 ], Data Objects.Net[ CITATION Dat11 \l 1033 ], and Hera Framework[ CITATION Her11 \l 1033 ]. These tools work via adding the ORM engine to the application as an ORM layer and providing mostly mapping files for mapping the classes to objects, this helps developers to perform methods regardless of how the database organized, an example is that if an application has a patient class and patient visits class where each patient has one or several patient visits; the developer can then update a patient visit information using the patient object regardless of how to apply this to the database; the developer will only issue a (patient.visitsUpdate(….)) command and the query will be performed on the developer behalf. This is similar to the database SQL language (structured query language), when the user writes (Select … From … Where …) the DBMS retrieves the result without the need to provide a procedure of how the DBMS should perform this task.
Consequently, the great benefit from the ORM layer is to provide developers with one environment to work on that is the objects environments, which exists in all current object oriented programming languages and also saving the developer’s time to think of how to perform those database queries by querying objects directly.
Much effort has been invested recently in software architectures based on ORM tools due to the benefits gained from using relational databases, which are:
1. Most of nowadays applications built on relational databases.
2. Relational database management systems (RDBMS) existing commercial systems are mature and stable.
3. National data standards are built for relational databases which made data integration and translation a feasible accurate process, as data integration and translation have become a problem facing many organizations that wish to utilize data from heterogeneous sources. For example the National Health Data Dictionary (NHDD) is used in many countries to collect patients’ information and perform health care statistics that save much money and effort. The idea of national data standards encourages software companies to follow a specific data formats for the data fields. For example if there is an application for patient’s registration, a patient address should be of data type text of 180 characters.
Moreover the NHDD provides minimum data sets for health care application, for example, if there is an application for patient’s registration, it is a must to provide the patient address, phone, and name.[ CITATION AIHNa \l 1033 ].
In addition to benefits gained from using the relational database, there are benefits from using the object-relational DB-technology which are:
1. It solves the famous problem of impedance mismatch.
2. It supports both Object Query Language (OQL) and standard SQL.
3. ORM tools provide performance optimization techniques as well in order to speed up the software performance such as object indexes, lazy and eager loading, and cashing[ CITATION Zyl09 \l 1033 ].
3) GUI layer and object relational access layer above object relational DB
Object relational databases are the next generation of the relational databases, but till now it supports objects via User Defined Data types (UDT) that does not support multiple inheritance and cause unsatisfactory system performance. Besides, it is by no means clear how a given object oriented design can be mapped to a given ORDB efficiently. In addition, if a complex data type has been stored in ORDBMS, the developer will have to issue several queries from the Object Oriented Programming Language (OOPL) to get simple fragments and later rebuild complex object structure at the OOPL that is time consuming.
4) GUI layer and object access layer above object oriented database
Object oriented databases are best suited for complex database applications these applications generally involve highly interrelated data such as product definition, and bills of materials, and/or data that is not easily accommodated in the built-in relational data types such as images, multimedia, and documents. Such complex data cause unsatisfactory performance in relational databases, but still object oriented databases do not have stable or mature commercial products.
3.4.1.4. The EEUID Framework’s Primarily Outputs
This section will illustrate the EEUID framework main outputs in details that are:
1) Database Schema
According to figure 3.4, there are three types of database schemas (relational database schema, object relational database schema, and object oriented database schema). The EEUID framework is proposed to generate the different three types of schemas.
For the object relational database schema and object oriented database schema; this can be directly generated as the system already represents the system screens in the form of classes, this thesis will only demonstrate an insight for the relational database schema due to the importance of using this type of databases previously highlighted.
For relational database the case is different, to store an object in a relational database the developer need to flatten it, that is create a data representation of the object. To retrieve the object the data should be read from the database and then create the object — often referred to as restoring the object — based on that data (Ambler 2003). There are existing approaches to generate the relational database (RDB) schema from a given class diagram (Ambler 2003, Ambler 2000), but still it is complicated task as mappings can be done in several ways, and choices for which mapping way to use should be defined. From the previous generated class diagram the RDB schema can be extracted smoothly according to the following mapping choices:
1. Mapping Meta-data: Class properties are mapped to table columns.
2. Inheritance Relationships: Are best mapped by mapping each class to table, due to the simplicity in implementation and understanding.
3. Relationships between classes: Will be maintained in relational databases through the use of foreign keys.
4. Object Identifiers: Will be maintained in relational databases through the use of primary keys.
Database schema mapping rules:
There are existing techniques to extract the database schema from a given class diagram (Ambler 2000, Vara, et al. 2007). The technique chosen in this thesis is the demonstrated one by Scott W. Ambler.
The fundamental mapping options required to successfully map objects into relational databases are:
I. Mapping class attributes to columns:
A class attribute will map to either zero or a number of columns in a relational database. It is essential to remember that not all attributes are persistent (exist in the database). For example, a patient class may have an age attribute that is used by its instances for calculation purposes, but this will not be saved in the database. The important thing is that this is a recursive definition: at some point, the attribute will be mapped to zero or more columns. It is also possible that several attributes could map to a single column in a table. For example, a class representing a “Patient vital signs” may have three attributes (body temperature, pulse rate and the blood pressure); each one represents part of the vital signs but all of them can be stored in one column in the database table.
II. Mapping classes relationships and classes references:
The table schema uses keys whereas the object schema indicates references. Rows in database tables are uniquely identified through primary keys and relationships are maintained through foreign keys. To map a class instance or to uniquely identify a class instance, this will be done through using additional information “shadow information”, by adding a “class object identifier” -OID for short- to each class to uniquely identifies its objects, and this will be mapped to a primary key in the database schema; and thus to foreign keys in related tables. For example if there is a “Patients” class, it will have a “POID” class attributes (which is Patient Object Identifier), this will be mapped to primary key in the main “Patients” table in the database, and if there is a “Patient vital signs” class references the “Patients” table, the “POID” will be mapped to foreign key in that class.
III. Mapping different data types from classes to database schema:
A dictionary for the different data types’ mappings should be maintained to facilitate the mapping process. For example a currency class stereo type can be mapped to float data type in the database.
IV. Mapping classes to tables:
Building the tables in this framework is the most straightforward step, as all referencing details are provided through building the classes. Each class will be mapped to a single table, with one column per business attributes and adding the needed additional information such as shadow information.
V. Mapping inherited classes to relational tables:
The parent class and the children classes each will be represented as a single data table, with one column per business attributes and adding the needed additional information such as shadow information
2) Data Access Layer
According to figure 5.4, there are three types of data access layers (relational data access layer, object relational data access layer, and the object data access layer). The EEUID framework is proposed to generate the different three types of schemas.
For the relational data access layer, this is the classical approach used nowadays containing SQL statements to perform database operations. For the object data access layer, this will contain OQL statements to perform database operations, both types mentioned previously are straightforward generated without any kind of transformation.
The object relational data access layer is a new generation of data access layers, in which it covers the gap between the object oriented programming languages that is based on the objects concepts, and the relational database management systems that are based on the set operations[ CITATION Zha01 \l 1033 ]. In addition, this type of data access layer promotes performance comparing to other types of data access layers where all ORM tools cashes the object’s data on the server and this reduces the amount of database server access times, as only the initial result set from any query is fetched from the database, and further elaboration on the result set would then be done by traditional traversing on the object model.
This type of data access layer always uses an object relational mapping tool (ORM tool) that automates the object querying process and translates object queries into relational statements. The Hibernate/NHibernate ORM tool has been chosen to be applied through the EEUID framework due to its popularity and supporting both C# and java object oriented programming languages.
For the EEUID framework to automatically generate the object relational access layer fits for relational database schema using the NHibernate engine, the following file should be generated as well:
• Domain object (classes) – contains class properties getters and setters and main class operation.
• Hibernate/NHibernate hbm files – these files represent Mapping Metadata between objects properties and relational table columns.
• Physical database driver configuration – necessary pieces of information in order to connect to data source.
3) Agile Documentation Templates
Before presenting the EEUID framework’s third output, some critical questions regarding agile documentation will be presented.
• Why documentation is needed in agile projects?
Documentation provides the ultimate benefits during the software development lifecycle for many reasons, some extreme points of it are:
• Documentation is important for contracting purposes [ CITATION Amb \t \l 1033 ].
• When transitioning the project to the maintenance team, documentation serves as a domain knowledge repository and is necessary to retain critical information over time [ CITATION Lin02 \m deS05 \t \l 1033 \m Cor05].
• Avoid losing project critical information when some of the team members leave in the middle or even at the end of the project[ CITATION Rup03 \l 1033 ].
• Agile methods are built on communication, while some team members may be introverted. Documents help people to clear issues that might have not been fully described during the meetings. Moreover, people vary in grasping information at different speeds; documentation helps to go back to material when they need [ CITATION Rup03 \l 1033 ].
• Agile documentation provides project higher scalability by allowing working in distributed teams [ CITATION Rup03 \l 1033 ].
• Do agile projects need documentation?
The Oxford paper book dictionary defines Agile as: Agile adj. nimble, and for a project development to be nimble, traditional documentation may be bypassed because it will be thrown away eventually, for example all current web forums, content management systems and most of the web application that contains few issues for the application members, like managing job offers. Those types of projects just require minimum documentation for requirements specifications, detailed design documents, test specification and installation manual[ CITATION Hun05 \l 1033 ]. For bigger projects another kinds of documentation should be considered to be produced for long-time availability.
• What kind of documents should be produced in order to document agile projects?
There is no standard answer for this question, an ultimate effort has been made in this field to reach a standardized set of documents, but the result was always that there is not a perfect set of documents that should be produced, rather than there is a suitable set of documents can be produced for each agile project. This is based on many factors such as the stakeholders’ needs, the project scale, and the project environment and sometimes on the development team itself. Consequently, there are almost no guidelines for incorporating into agile documentation. Some of the leaders commented on this issue as follows:
• Thomas and Tilley stated that “no one really knows what sort of documentation is truly useful to software engineers to aid system understanding” [ CITATION Tho01 \l 1033 ].
• Scott Ambler commented “document your system effectively, but not so much that it becomes a burden” [ CITATION Amb055 \t \l 1033 ] .
• Additionally Alistair Cockburn agrees with that as well, as he recommends that “documentation be ‘light but sufficient’ “and also commented by “The correct amount of documentation is exactly that needed for the receiver to make her next move in the game [ CITATION Coc02 \l 1033 ].
This made documentation a mean, but not an end per-se.
To determine the needed documentation for an agile project, break down the project’s needs based on [ CITATION Rup03 \l 1033 ]:
• The stakeholders’ needs.
• The amount of documentation needed for the team members to communicate.
• The amount of documentation the project will need in a later stage like the testing process.
• The amount of documentation a follow-up project will probably need.
Thus to guarantee that each produced document will have a real value thus it must target a certain reader from the stakeholders and address a need for this reader as well. To ensure that each produced document is a high quality document, this can be done through the targeted reader involvement to validate this document.
A recommended practice is that the development organization standardizes a documentation portfolio that is necessary for various types of projects depending on several factors such as the project scope, the project size, and the team size[ CITATION Rup03 \l 1033 ]. The development organization must also review the produced documents quality, this is according to Gerald Weinberg’s say “The value of documentation is only to be realized if the documentation is well done. If it is poorly done, it will be worse than no documentation at all”.
• What are the agile documentation problems?
The most important problem that agile documentation suffers from, are:
1. Nonexistent or poor quality[ CITATION deS06 \t \l 1033 \m Bri03]: agile documentation is left on behalf of the developers, while developers have the belief that the source code is the most important document in the project and hardly pay attention to any other type of documentation.
2. Outdated documentation [ CITATION deS06 \t \m For02 \l 1033 ]: According to changing agile projects environment, documents have to be updated continually to be kept up to date. This process might take much time which is against the agile manifesto principle of focusing on producing effective software over taking care of documentation, thus mostly this process is ignored as Scott Ambler commented that documentation becomes out of date and updated only “when it hurts”[ CITATION Lin02 \l 1033 ].
3. Difficult to access[ CITATION deS06 \t \l 1033 ]: Agile documentation often exists on scattered places (different computers) and in different formats such as text documents, and UML diagrams. Typically, this is because there are no guidelines to follow when producing documentation in agile projects.
Few solutions have been presented to solve those problems. The first problem is related to the organizational standards imposed on the developers. A documentation portfolio is the most appropriate solution for this problem to produce higher quality documentation that preserves the high quality via following the document templates provided by the development organization’s quality assurance department, also producing the minimum amount of documentation depending on the project nature.
The second problem can be solved via choosing the best time to document. The third problem is solved via using one shared place for storing documents that is easily accessible by the project team members, a famous product facilitating this process, is Microsoft Visual Source safe [ CITATION VSS12 \l 1033 ], where it places all documents on one main server that is accessible by all the team members and even can be accessed online. In addition it is a versioning control system and this will be beneficiary while keeping the software products versions of documents till all documents get stabilized.
• When should Agile Projects start the Documenting Process?
Agile documentation can be categorized into two categories:
1. Formal documentation: That has to be read from start till end to get a thorough understanding for the whole software product such as the functional requirements document.
2. Occasional documentation: That is needed in special occasions such as detailed design documents.
There are two approaches to solve the famous problem of “outdated” agile documentation, which are:
1. Incremental documentation [ CITATION The03 \l 1033 ]: Formal documentation must start from the project beginning, and being updated either during the development process or as late as possible to avoid consuming much time in the updating process.
This incremental documentation encourages the usage of documentation generators that extract documents from the source code like JavaDoc, or from the software requirements such as Accompa. Consequently, preserving the software documentation up to date and reflect the real nature of the software.
2. Document late [ CITATION Amb12 \l 1033 ]: This practice has been introduced to postpone the creation of all documents as much as possible, it depends on creating the documents when needed, an example is to write support documentation towards the development process end to avoid updates. By following this practice, the cost will be reduced by avoiding wasting time in documents updating and risk of having outdated documents will be reduced as well.
• Does the Documentation Layout and Typography matter?
A well-organized document is an ultimate importance for easing the reading process of that document, this allows people to grasp information more quickly and avoid getting lost into too much unneeded details; meanwhile most readers are unaware of what makes a document more readable.
A good looking document imposes two issues:
1. Organizing the document structure per-se that is what information should be contained in that document. The document structure can be identified in the document template for the organization documentation portfolio to ensure having a specified structure. Make the document template drives its writer, and never let the writer drive the document. This eventually will lead to non frustrating useful documentation.
2. Establishing a document layout helps in having more readable document such as page spacing, line width, text spacing, and text colors; guidelines help to produce more readable documents especially for people suffering from visual impairments. Andreas in the book of “Agile documentation – a pattern guide to producing lightweight documents for software projects” recommended document layout guidelines for this purpose[ CITATION Rup03 \l 1033 ].
From the few questions that have been illustrated in this section, it was very useful to include generating the detailed design documents in the EEUID framework; this will help to have more documentation that assists agile methodologies with competitive advantage as it is a written description for the software product’s screens that a system analyst writes in order to give the software development team and maintenance team an overall guidance of the structure of the software’s screens. Practically, a design document is required to coordinate a large team under a single vision that outlines all the screens of the software and how they will work.
Data included in the design documents exist in the prototype generator files, such as HTML page, XML behavior file, XML class diagram description, RDB schema and test first file used for testing.
3.4.2. The EEUID benefits
The EEUID practice provides the following benefits:
• Developers will focus on application business problems.
• Having database schema that has exactly data fields representing the real need of the application instead of overbuilt database schema.
• Code refactoring can be done easily as the product architecture is n-tier, where GUI is separated from the business logic and the DB as well.
• Having automatically generated system documentation is a competitive advantage for any agile methodology as agile is not documentation centered in itself according to the agile manifesto [ CITATION Fow01 \m Kel03 \l 1033 ].
• Reducing time consumed, effort done and budget invested in the project[ CITATION Kel03 \l 1033 ].
• Through the given product architecture developers can freely and easily build reusable artifacts, where it has been a limitation on agile methods [ CITATION Fra02 \l 1033 ].
Chapter 4 : Case Study
1.
2.
3.
4.
4.1. Foreword
4.2. iAglie Overview
4.3. Case Study
4.4. Conclusion
4.
4.1. Foreword
Agile data modeling allows data professionals to adopt evolutionary approaches to all aspects of their work[ CITATION Sco \t \l 1033 ]. The proposed framework of the enhanced early user interface development practice was presented to provide data professionals with an agile data modeling technique that supports agility in both directions of coding and data modeling as well. Applying such framework is impossible task to be done manually; therefore, a proposed case tool will be illustrated through this chapter to put the EEUID in action. A case study for pilot software will be conducted as well using this tool, to illustrate how system analysts can reach the final expected results from applying such framework, which in turn will provide the whole development team members with many benefits that will be illustrated through the chapter too.
4.2. iAgile Overview
iAgile is a software case tool proposed to apply the EEUID practice framework during the software development process, in order to support agility in both directions of coding and data modeling as well, it is used to quickly assemble working previews of business software to produce the look, feel and behavior of the final product. iAgile helps stakeholders interact with the business software before any coding being done, which eliminates confusion about what to build, cuts project cost and accelerates delivery.
4.2.1. iAgile Advantages and Disadvantages
The iAgile software tool provides the following advantages:
I. Avoiding the problem of having overbuilt databases and generates the only needed structures in the database schema; thus it removes the frustration that happens during the development process, as developers ignore data professionals’ advice, standards, guidelines, and enterprise models, while developers often do not even know about these people and things in the first place.
II. Accelerating the development process by automatically generating code portions that formulate essential parts of the system.
III. Increasing the documentation level for agile methods which is considered a competitive advantage, as it generates different temples of documentation needed for maintenance and testing purposes.
IV. Reducing the project budget, as it cuts off the planned time for the developed project by supporting rapid development.
V. Fewer defects in the final product, as some of the essential parts of the software architecture is automatically generated, not manually coded.
VI. Fewer “surprises” (scope changes) as iAgile helps analysts apply changes in the business software and regenerates the outputs again by a button click only.
VII. Providing higher level of customer collaboration as customers are highly involved during the development process.
Although iAgile provides several competitive advantages, it also suffers from potentially several disadvantages, which are:
I. When changes come through project iterations, new project layers must be regenerated to reflect those changes in the generated code, which in turn will not comply with the past used layer’s files, as not all functionalities are generated through iAgile that represents the complicated business functions. Those are only included as set of instructions to the developers to be implemented provided with Test-First cases. Such differences between different versions of code must be refactored to put each change in its accurate place, which is not an easy task and need to be done very carefully to avoid time slipping in performing this task.
II. Only limited set of documentation types can be generated using iAgile according to the stored information during the GUI building process; thus it can never reach the same level of documentation as the heavyweight software development models; nevertheless it can get close to its level and provide the most important documentation needed for maintenance and testing purposes.
III. iAgile lacks the advanced GUI components part, as it should be integrated with additional application of a picture editing tool, such as the one used for sketching UI widgets. When more sophisticated UI behavior is necessary, embeddable objects such as Adobe Flash need to be generated separately. iAgile only helps to model ordinary UIs, but otherwise needs to become part of an interrelated tool-chain.
4.2.2. iAgile in Action
The EEUID process works in an evolutionary manner as shown in figure 4.1.
Figure 4.9: EEUID process
At each iteration beginning, partial requirements acquired from the customer, then GUI will be developed using the enhanced EUID generator producing three outputs (GUI structure, XML behavior file, XML class diagram description), hence class diagram is generated using UML diagram generator. From this point, the framework automatically generates the data access layer, DB schema and the needed agile documentation templates for this iteration, and then developers can start the development process and produce release for this iteration. For each successive iteration a complete regression test should be applied for the iteration release if it fails, changes should be made to fix the software code. If it passes, code refactoring should be done to maintain the code design simplicity; hence an iteration release is presented to the customer for feedback, hence proceeding to next iteration.
The main target from the previous illustrated process is to generate the main three outputs of data access layer, DB schema and agile documentation templates. Through iAgile rest of generated files from this process are considered meta-data for the tool and will not be generated such as XML behavior file and XML class diagram description; consequently, using iAgile will make the analysis and design processes shorter for system analysts which make it more easier to apply.
1.
2.
3.
4.
5.
6.
6.1.
6.2.
6.2.1.
6.2.2.
Chapter 1 -
• How iAgile works?
For developing a new project using iAgile, a set of predefined steps should be followed precisely in order to reach the accurate final results, the iAgile automates the EEUID practice framework, according to the framework explained in previous chapter, those steps are:
Step 1: Partial requirements elicitation
Upon starting a new project, partial requirements elicitation process is done first, each agile method has its own set of practices for the requirements elicitation phase, for those methods which will flow the EEUID framework, then requirements elicitation phase target will be to determine the iteration screens and full detailed description for its functionalities.
Step 2: Plan project iteration main functionalities and set its priorities
A list of the iteration functionalities and screens is listed in this step using any type of simple agile practices such as using post-it notes, writing on whiteboards or writing on papers and put a priority order for each screen.
Step 3: Develop the screens’ GUI using iAgile
During this step the system analyst should start designing the screens user interface using iAgile set of tools, which will make each screen constructed from a set of the EUID components that can be modified thorough project iterations and reflect those changes on the generated components.
Step 4: Generate the iteration database schema, data access layer and detailed design documents.
Upon completion of the screens GUI development process, iAgile will be ready to generate its outputs to complete the rest of functionalities that were not generated via iAgile. The generated output will be based on the generated class diagram resulted from each iteration.
Step 5: Assess the rest of tasks to be done that were not generated by iAgile.
A set of not coded functionalities then appear, the project manager starts to assign those tasks to developers in order to produce an iteration release.
Step 6: Start development process.
Developers can start developing the not coded functionalities making use of the test first examples generated from iAgile to produce the iteration release.
Step 7: Perform regression test and produce iteration release.
After producing the iteration release, a regression test must be done to assure maintaining the code integrity, if the new release passes the regression test, then an iteration release can be installed on the customer production environment, if the release did not pass the regression test, code changes must be done till the new release passes the regression test, finally code refactoring may be performed to enhance the software code quality.
Step 8: Consider customer feedback.
Customer feedback is a crucial step in this practice, as it is the main step that will determine modifications for current release and/or initiate the next iteration requirements.
Step 9: loop starting from step two, if there are successive iterations.
After finishing the current iteration successfully and there is still new requirements to implement, process will start over from step two till all requirements are fulfilled.
• Can all agile methods make use of iAgile?
All agile methods use either UML diagrams or textual descriptions to represent system requirements; replacing any of these preferred practices to use the EUID practice is possible and will not affect how each method works, consequently, making use of iAgile will be beneficially if applied under the right circumstances of the project.
• Which projects can use iAgile?
iAgile is most suitable for “database applications”; those are applications that depend on the famous database operations e.g. operations for adding, deleting, updating and searching for information from the database.
• How to construct system screens and generate the expected outputs using iAgile?
According to the iAgile layout and content editor displayed in figure 4.2, the visual specification of the project pages is constructed through three sets of controls:
1. The Early User Interface Development practice components (EUID components for short): Which are components of several types that are used to build main parts of the web page. In the next section, more details for this set of components will be explained.
2. Typical Web Development Controls: Examples including Textboxes, Comboboxes and images are used for further addition/modification of the web page controls. Meanwhile, when a user drags and drops any of these, it must be attached to a particular page component, then events can be added to different types of controls. The tool offers a set of specified predefined actions such as saving, searching, adding, deleting data or moving to other page as an initial set of most used actions. For further actions, the system analyst should write the Test First examples that will be implemented manually in the iteration development phase.
3. iAgile Studio Tools: Help to build more interactions on the page, such as simple math calculator that is used to produce an output in a field from performing simple math calculations on other inputs of the same page, such as calculating a person’s age from his\her date of birth.
Figure 4.10: iAgile Layout and Content Editor
At the beginning of each project iteration, the system analyst should start to construct the web pages GUI through the previously mentioned sets of tools; upon completion of this step, the tool will be able to generate the system accumulated class diagram up to this project iteration making use of the generated XML behavior file and XML class diagram description file. From this point, the system analyst can generate the database schema, the data access layer and agile documentation templates for this iteration according to the chosen software architecture model; consequently, further development should start to complete the not coded functionalities guided by the test first examples generated from iAgile. Finally, system analyst can proceed to next iteration after considering the customer feedback.
• What about the database refactoring?
The database refactoring process: is the process of improving the database design without affecting its behavioral and informational semantics. As mentioned earlier in this thesis one of the most important deficiencies for the EEUID practice is "Incapability to perform database normalization", this can be mitigated if a database refactoring process has been performed after building the user interface screens at each iteration, this will help to improve the current database design and applying changes before the iteration coding phase starts, thus increasing the database schema quality.
• iAgile support for EUID practice’s components
According to similarities between information systems’ web applications, the EUID components were proposed as essential constructs for each web page applying the EUID practice, there are four types of these components, which are[ CITATION Lab08 \t \m Lab09 \t \l 1033 ]:
1. Search component: It allows users to search for certain data. This may come in different forms. For example, a combobox or a set of editable controls with a search button.
2. One record component: It is responsible for adding, editing, or viewing a one record data. One famous form for that component is a set of controls in columnar representation.
3. Multi record component: The Multi record component can be referenced to be a datagrid where data is represented in tabular form. It can be used for viewing data only or for editing or deleting. The most famous form for editing or deleting records in that component is through adding links for each record in the datagrid.
4. Navigator component: There are several actions occur when a link is clicked. For example, on clicking a link the user can move to another page or make changes on the same page.
iAgile supports these types of components via the idea of that for every screen there is at least a conceptual master class and potential set of dependant classes. The properties of each class will be added from every screen to those classes in order to form the final class definition.
4.3. The "EMR application" Case Study
In this section a case study will be demonstrated to verify iAgile usage, and illustrate how systems analysts can work using this tool, the case study issues a simple Electronic Medical Record (EMR), which is a computerized medical record created in an organization that delivers information about patient’s health history and progress. Paper based records were and still the most common method of recording patient information for most hospitals. However, it is easier for the doctor to record medical data at the point of care, and be able to retrieve and view this information anywhere, at any time. This type of applications is recommended to use the EEUID framework, as this type of applications is intensive input\output manipulation applications and changes in screens’ fields are expected during the whole development process.
4.3.1. Functional Requirements
In the considered case study, after passing the requirements’ elicitation step, the system analyst considers the main functional requirements in system’s screens as stated in table 4.1.
Table 4.1: System’s functional requirements
Screen
Main features
Setup screens
1
Countries
• Add, delete, update and print.
2
Cities
• Add, delete, update and print.
3
Clinics
• Add, delete, update and print.
4
Clinic services
• Add, delete, update and print.
5
Scientific degree
• Add, delete, update and print.
6
Specialty
• Add, delete, update and print.
Main system screens
7
Patient registration
• Add, delete, update and print.
• Search by all fields.
• View patient visits.
8
Doctor registration
• Add, delete, update and print.
• Search by all fields.
9
Patient’s visits
• Search patient’s visits.
• Add new visit.
• Transfer patient’s case to another doctor (send the patient’s case details by mail to another doctor).
10
Patient’s visit details
• Save the visit.
4.3.2. Project Development using iAgile
According to previously stated functional requirements, assume that the project has been split into three iterations; iterations’ tasks stated in table 4.2.
Table 4.2: Project iterations’ tasks
Iteration number
Main tasks
Iteration 1
Develop countries screen
Develop cities screen
Develop clinics screen
Develop clinic services screen
Develop scientific degree screen
Develop specialty screen
Iteration 2
Develop patient registration
Develop doctor registration
Iteration 3
Develop patient’s visits
Develop patient’s visit details
4.3.2.1. First Iteration
Through this iteration six screens of the basic setup data for the EMR application will be developed.
I. First screen development details
The first screen (countries screen) shown in figure 4.3.
Figure 4.11: Countries screen
To build any screen using iAgile, the system analyst has to decide which components should be used to construct the page; to consider the countries screen, the screen will have two components OneRecord_Insert and Multirecord_View as shown in figure 4.3, when using any type of EUID components, the user must determine the class type for that component, it is either master class or dependant class, also it can be either new class or existing class that has shown up before in previously developed screen.
For the first component, the user will drag the “OneRecord_Insert” component to the working area, a screen will appear to get more details about the used class for the first component, and screen details are included in figure 4.4.
Figure 4.12: Onerecord_Insert component class settings
For more usability, iAgile offers “filter condition tab” in the settings screen to enable data filtration for datagrids in multi record components and for one record components, this if the user has chosen to add a navigation button to navigate back and forward in records upon checking the “add navigation buttons checkbox”.
For the countries screen, the screen does not need to have an object identifier for the class, which is “Country ID”, therefore if the user added class to the system and did not include any object identifier for the class objects, the tool includes an automatic object identifier which is kept hidden in the screens and used later to identify objects for the designed screens. In this case, the user will add only one field for the “Country” name, details of adding such field illustrated in figure 6.4. For the second component, the user will drag the “Multirecord_View” component to the working area, a screen will appear to get more details about the used class for the second component, and screen details are included in figure 4.5.
Figure 4.13: Multirecord_View component class settings
After adding the two components to iAgile working area, the page is constructed as shown in figure 4.6.
Figure 4.14: Countries screen after building using iAgile
II. Second screen development details
The second screen (cities screen) is shown in figure 4.7.
Figure 4.15: Cities screen
To build the cities screen, the screen will have two components OneRecord_Insert and Multirecord_View as shown in figure 6.7. Meanwhile, this screen has an extra functionality to be added, which is “Loading dynamic data in the countries combobox”. iAgile offers few predefined extra functionality for controls’ events, this can be done after constructing the page via the actions part at the most bottom section of the tool, this will enable system analysts to add different extra functionalities to existing components’ controls. If the user wants to present another functionality that is not predefined via iAgile, the user should add his test-first examples and their descriptions in order to guide developers while coding the missing functionalities during the development phase. The actions part is shown in figure 4.8.
Figure 4.16: Actions part in iAgile
To dynamically load the countries data in the countries combobox, the system analyst will select the combobox and set its action from the action panel, in order to appropriately doing this, the user must define the inputs and outputs for this action as follows:
• Input: As the goal is to display all the countries data without filtration, the user should check the “Match all radio button” in the action panel as shown in figure 4.9.
Figure 4.17: Dynamic data loading action input details
• Output: As the goal is to retrieve data from the countries class in the countries combobox, the user should set the output details in action panel as shown in figure 4.10.
Figure 4.18: Dynamic data loading action output details
III. Third screen development details
The third screen (clinics screen) will have two components OneRecord_Insert and Multirecord_View as shown in figure 6.11.
Figure 4.19: Clinics screen
IV. Forth screen development details
The forth screen (clinic services screen) will have two components OneRecord_Insert and Multirecord_View as shown in figure 4.12.
The user should add “On_Load” action to the clinics combobox, in order to retrieve all clinic names in the combobox after the page loading event.
Figure 4.20: Clinic Services screen
V. Fifth screen development details
The fifth screen (scientific degrees screen) will have two components OneRecord_Insert and Multirecord_View as shown in figure 6.13.
Figure 4.21: Scientific degree screen
VI. Sixth screen development details
The sixth screen (specialties screen) will have two components OneRecord_Insert and Multirecord_View as shown in figure 4.14.
Figure 4.22: Specialties screen
• Generate the class diagram, the database schema, the data access files and the detailed design documentation
After finishing the project pages’ UI formulation, iAgile is ready to move to next step and start generating the following outputs:
1) Class Diagram
iAgile will generate the class diagram in the first iteration and apply changes to it during the successive iterations according to new/modified iterations’ requirements. The generated class diagram for the case study is shown in figure 4.15. The generated class diagram has been formulated through the project pages’ UI construction step, via storing screens’ details in iAgile metadata files then processing them to produce this class diagram. For each class, the class properties are stored directly from the page controls and the user has set each control data type during the previous step. The class operations are divided into four categories:
1. Class properties getters and setters: For later use of the NHibernate tool, to enable the object persistence process, for example in the “countries” class, there is a class property “country”, therefore the class must contain GetCountry() and SetCountry(String) methods.
2. Child classes getters and setters: This enables modifying related data stored in dependant classes, for example the “Countries” class has an association relationship with the “Cities” class, therefore the “Countries” class must contain GetCities() and RemoveCity(City); in addition, the dependant class must have methods for accessing the countries class as well, the “Cities” class must have GetCountry() and SetCountry(Country).
3. iAgile predefind actions: These are predefined actions in which the implementation code will be generated in the data access layer. These are the famous CRUD actions such as insert, update, search, and delete an object from a class.
4. Unknown actions: These actions are not from the iAgile predefind set of actions and exhibit a specific behavior for the page. For such actions, the user should provide the function description and a set of Test-First examples for later development.