-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathindex.html
More file actions
1500 lines (1351 loc) · 102 KB
/
index.html
File metadata and controls
1500 lines (1351 loc) · 102 KB
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
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>CIT316 — Advanced Software Design | Complete Textbook</title>
<link href="https://fonts.googleapis.com/css2?family=Playfair+Display:ital,wght@0,400;0,700;0,900;1,400&family=DM+Sans:wght@300;400;500;600&family=JetBrains+Mono:wght@400;600&display=swap" rel="stylesheet">
<link rel="stylesheet" href="style.css">
</head>
<body>
<!-- ── NAVIGATION ── -->
<nav class="nav">
<div class="nav-brand"><span>CIT</span>316 — Advanced Software Design</div>
<ul class="nav-links">
<li><a href="#ch1">Ch1 Intro</a></li>
<li><a href="#ch2">Ch2 User-Oriented</a></li>
<li><a href="#ch3">Ch3 Dev Approaches</a></li>
<li><a href="#ch4">Ch4 DBTF</a></li>
<li><a href="#ch5">Ch5 SE Design</a></li>
<li><a href="#ch6">Ch6 EDP Audit</a></li>
<li><a href="#ch7">Ch7 Maintenance</a></li>
<li><a href="#ch8">Ch8 Cost Estimation</a></li>
<li><a href="#quickref">Quick Ref</a></li>
</ul>
</nav>
<!-- ── HERO ── -->
<section class="hero">
<div class="hero-bg"></div>
<div class="hero-grid"></div>
<div class="hero-content">
<div class="hero-badge">📘 Complete Textbook · All Levels</div>
<h1 class="hero-title">Advanced<br><span class="accent">Software Design</span></h1>
<p class="hero-subtitle">CIT316 — A comprehensive, visually rich textbook covering every topic from SDLC to COCOMO II, designed for all skill levels.</p>
<div class="hero-stats">
<div class="stat-pill"><span class="num">8</span><div class="label">Core Chapters</div></div>
<div class="stat-pill"><span class="num">4</span><div class="label">Learning Outcomes</div></div>
<div class="stat-pill"><span class="num">40+</span><div class="label">Key Concepts</div></div>
<div class="stat-pill"><span class="num">∞</span><div class="label">Real Examples</div></div>
</div>
<div class="chapter-pills">
<a href="#ch1" class="chapter-pill"><span class="ch-num">1</span> Introduction to SDLC</a>
<a href="#ch2" class="chapter-pill"><span class="ch-num">2</span> User-Oriented & Outsourcing</a>
<a href="#ch3" class="chapter-pill"><span class="ch-num">3</span> RAD, JAD, XP, CASE</a>
<a href="#ch4" class="chapter-pill"><span class="ch-num">4</span> DBTF Technology</a>
<a href="#ch5" class="chapter-pill"><span class="ch-num">5</span> SE Design</a>
<a href="#ch6" class="chapter-pill"><span class="ch-num">6</span> EDP Auditing</a>
<a href="#ch7" class="chapter-pill"><span class="ch-num">7</span> Software Maintenance</a>
<a href="#ch8" class="chapter-pill"><span class="ch-num">8</span> Cost Estimation</a>
</div>
</div>
</section>
<!-- ════════════════════════════════════════════════════════
CHAPTER 1
═══════════════════════════════════════════════════════════ -->
<div id="ch1" class="book-section">
<div class="chapter-header ch1">
<div class="ch-number">01</div>
<div class="ch-meta">
<div class="ch-label">Chapter One</div>
<div class="ch-title">Introduction to Software Development</div>
<div class="ch-subtitle">Lifecycle · Models · Methodologies · Standards · Metrics · Documentation · Training</div>
<span class="ch-lo">📌 LO1 — Software Development Lifecycle & Methodologies</span>
</div>
</div>
<h2 class="section-title" data-num="1.1">What is Software Development?</h2>
<p class="body-text">Software development is the systematic, disciplined process of conceiving, designing, programming, testing, and maintaining applications, frameworks, or other software components. It combines engineering rigor with creative problem-solving to produce reliable, useful systems.</p>
<div class="analogy-box">
<div class="ab-label">🏗️ Real-World Analogy</div>
<p>Think of software development like constructing a building. You need a <strong>blueprint</strong> (requirements & design), <strong>workers following building codes</strong> (methodology & standards), <strong>inspectors at each stage</strong> (testing), and a <strong>maintenance crew</strong> after handover (maintenance). Skip any stage and the building — or the software — may collapse.</p>
</div>
<h2 class="section-title" data-num="1.2">The Software Development Life Cycle (SDLC)</h2>
<p class="body-text">The SDLC provides a structured framework that defines exactly what needs to happen, in what order, and why — transforming a vague idea into a reliable, delivered product.</p>
<div class="phases-flow animate-on-scroll">
<div class="phase-item">
<div class="phase-block ph1">
<div class="phase-icon">🔭</div>
<div class="phase-num">1</div>
<div class="phase-name">Planning</div>
</div>
</div>
<div class="phase-item">
<div class="phase-block ph2">
<div class="phase-icon">📋</div>
<div class="phase-num">2</div>
<div class="phase-name">Requirements</div>
</div>
</div>
<div class="phase-item">
<div class="phase-block ph3">
<div class="phase-icon">✏️</div>
<div class="phase-num">3</div>
<div class="phase-name">Design</div>
</div>
</div>
<div class="phase-item">
<div class="phase-block ph4">
<div class="phase-icon">💻</div>
<div class="phase-num">4</div>
<div class="phase-name">Implementation</div>
</div>
</div>
<div class="phase-item">
<div class="phase-block ph5">
<div class="phase-icon">🧪</div>
<div class="phase-num">5</div>
<div class="phase-name">Testing</div>
</div>
</div>
<div class="phase-item">
<div class="phase-block ph6">
<div class="phase-icon">🚀</div>
<div class="phase-num">6</div>
<div class="phase-name">Deployment</div>
</div>
</div>
<div class="phase-item">
<div class="phase-block ph7 last">
<div class="phase-icon">🔧</div>
<div class="phase-num">7</div>
<div class="phase-name">Maintenance</div>
</div>
</div>
</div>
<table class="info-table animate-on-scroll">
<thead><tr><th>#</th><th>Phase</th><th>Key Activities</th><th>Key Question</th></tr></thead>
<tbody>
<tr><td>1</td><td>Planning</td><td>Feasibility study, scope definition, risk ID, resource allocation, schedule creation</td><td><em>CAN we build it?</em></td></tr>
<tr><td>2</td><td>Requirements Analysis</td><td>Stakeholder interviews, use cases, user stories, requirements specification document</td><td><em>WHAT should it do?</em></td></tr>
<tr><td>3</td><td>System Design</td><td>Architecture diagrams, database schema, UI wireframes, technology selection</td><td><em>HOW will it work?</em></td></tr>
<tr><td>4</td><td>Implementation</td><td>Source code writing, version control, code reviews, unit test writing</td><td><em>Build it now</em></td></tr>
<tr><td>5</td><td>Testing & Integration</td><td>Unit, integration, system, UAT testing; bug tracking; regression testing</td><td><em>Does it work correctly?</em></td></tr>
<tr><td>6</td><td>Deployment</td><td>Phased rollout, parallel running, user training, go-live</td><td><em>Release to users</em></td></tr>
<tr><td>7</td><td>Maintenance</td><td>Bug fixes, enhancements, performance tuning, security patching</td><td><em>Keep it working</em></td></tr>
</tbody>
</table>
<h2 class="section-title" data-num="1.3">SDLC Models — Choosing the Right Approach</h2>
<p class="body-text">Different projects need different structures. SDLC models define HOW phases are organized — sequentially, iteratively, or spirally.</p>
<h3 class="sub-title">Waterfall Model</h3>
<p class="body-text">The oldest, most linear model. Each phase must be 100% complete before the next begins. Best for projects with fixed, well-understood requirements.</p>
<div class="comparison-grid animate-on-scroll">
<div class="cmp-card good">
<div class="cmp-title">✅ Advantages</div>
<ul>
<li>Simple, easy to understand and manage</li>
<li>Clear milestones and deliverables</li>
<li>Extensive documentation produced</li>
<li>Works well for fixed-scope projects</li>
<li>Easy for new team members to onboard</li>
</ul>
</div>
<div class="cmp-card bad">
<div class="cmp-title">❌ Disadvantages</div>
<ul>
<li>No working software until late in cycle</li>
<li>Cannot accommodate changing requirements</li>
<li>Integration issues found very late</li>
<li>Customer sees product only at the end</li>
<li>Errors discovered late are extremely costly</li>
</ul>
</div>
</div>
<h3 class="sub-title">Agile / Scrum Model</h3>
<p class="body-text">Agile is a flexible, iterative approach delivering working software in short <strong>sprints</strong> (1–4 weeks). Built on 4 core values from the Agile Manifesto:</p>
<div class="info-box blue">
<div class="ib-title">⚡ The Agile Manifesto — 4 Core Values</div>
<ul>
<li><strong>Individuals & interactions</strong> OVER processes and tools</li>
<li><strong>Working software</strong> OVER comprehensive documentation</li>
<li><strong>Customer collaboration</strong> OVER contract negotiation</li>
<li><strong>Responding to change</strong> OVER following a plan</li>
</ul>
</div>
<div class="scrum-grid animate-on-scroll">
<div class="scrum-card"><div class="sc-role">Product Owner</div><p>Represents stakeholders; owns and prioritizes the product backlog</p></div>
<div class="scrum-card"><div class="sc-role">Scrum Master</div><p>Facilitates the process; removes obstacles; coaches the team</p></div>
<div class="scrum-card"><div class="sc-role">Development Team</div><p>Cross-functional, self-organizing team that does the actual work</p></div>
<div class="scrum-card"><div class="sc-role">Sprint (1–4 weeks)</div><p>Time-boxed iteration producing a potentially shippable increment</p></div>
<div class="scrum-card"><div class="sc-role">Daily Standup</div><p>15-min meeting: What did I do? What will I do? Any blockers?</p></div>
<div class="scrum-card"><div class="sc-role">Sprint Retrospective</div><p>Team reflects on what went well and what to improve next sprint</p></div>
</div>
<h3 class="sub-title">Spiral Model</h3>
<p class="body-text">Combines iteration with systematic risk analysis. Each loop of the spiral covers 4 quadrants: Planning → Risk Analysis → Development → Evaluation. Best for large, high-risk projects.</p>
<h3 class="sub-title">V-Model (Verification & Validation)</h3>
<table class="info-table animate-on-scroll">
<thead><tr><th>Development Phase (Left V)</th><th>↔</th><th>Test Phase (Right V)</th></tr></thead>
<tbody>
<tr><td>Requirements Analysis</td><td>validates</td><td>Acceptance Testing (UAT)</td></tr>
<tr><td>System Design</td><td>validates</td><td>System Testing</td></tr>
<tr><td>Architectural Design</td><td>validates</td><td>Integration Testing</td></tr>
<tr><td>Module Design</td><td>validates</td><td>Unit Testing</td></tr>
<tr><td colspan="3" style="text-align:center;font-style:italic;color:#6b7280">↕ Implementation (bottom of the V)</td></tr>
</tbody>
</table>
<h2 class="section-title" data-num="1.4">Standards and Metrics</h2>
<table class="info-table animate-on-scroll">
<thead><tr><th>Metric</th><th>Definition</th><th>What It Tells You</th></tr></thead>
<tbody>
<tr><td>Lines of Code (LOC)</td><td>Count of source code lines</td><td>Rough size measure; language-dependent</td></tr>
<tr><td>Function Points (FP)</td><td>Functionality from user perspective</td><td>Language-independent size measure</td></tr>
<tr><td>Cyclomatic Complexity</td><td>Number of independent code paths</td><td>Higher = harder to test & maintain</td></tr>
<tr><td>Defect Density</td><td>Defects per 1000 LOC (KLOC)</td><td>Lower = better quality</td></tr>
<tr><td>MTTF</td><td>Mean Time to Failure</td><td>Higher = more reliable system</td></tr>
<tr><td>Code Coverage</td><td>% of code executed during tests</td><td>Higher = more thorough testing</td></tr>
</tbody>
</table>
<h2 class="section-title" data-num="1.5">Procedures, Installation & Documentation</h2>
<div class="steps-grid animate-on-scroll">
<div class="step-card">
<div class="step-num" style="background:var(--blue)">1</div>
<div class="step-content">
<div class="step-title">Pre-Installation Planning</div>
<p>Review hardware requirements, verify compatibility, back up existing data, notify stakeholders of downtime window, prepare rollback plan.</p>
</div>
</div>
<div class="step-card">
<div class="step-num" style="background:var(--teal)">2</div>
<div class="step-content">
<div class="step-title">Environment Preparation</div>
<p>Configure servers, install dependencies and runtimes, set up databases, configure network access and firewall rules.</p>
</div>
</div>
<div class="step-card">
<div class="step-num" style="background:var(--amber)">3</div>
<div class="step-content">
<div class="step-title">Software Installation</div>
<p>Run installer or deploy packages, configure application settings, set up user accounts, assign permissions and roles.</p>
</div>
</div>
<div class="step-card">
<div class="step-num" style="background:var(--rose)">4</div>
<div class="step-content">
<div class="step-title">Testing & Verification</div>
<p>Run smoke tests to verify basic functionality, test critical business workflows, confirm all integrations work correctly.</p>
</div>
</div>
<div class="step-card">
<div class="step-num" style="background:var(--purple)">5</div>
<div class="step-content">
<div class="step-title">User Training & Handover</div>
<p>Train end users on the new system, distribute user manuals, hand over to operations team with full documentation.</p>
</div>
</div>
</div>
<h3 class="sub-title">Types of Documentation</h3>
<table class="info-table animate-on-scroll">
<thead><tr><th>Document Type</th><th>Primary Audience</th><th>Contents</th></tr></thead>
<tbody>
<tr><td>Requirements Specification</td><td>PM, developers, clients</td><td>Use cases, user stories, functional & non-functional specs</td></tr>
<tr><td>Architecture Document</td><td>Developers, architects</td><td>System diagrams, database schemas, API specifications</td></tr>
<tr><td>User Manual</td><td>End users</td><td>Step-by-step instructions, screenshots, FAQs</td></tr>
<tr><td>API Documentation</td><td>Integrating developers</td><td>Endpoints, parameters, example requests and responses</td></tr>
<tr><td>Test Documentation</td><td>QA team</td><td>Test plans, test cases, test results, defect reports</td></tr>
<tr><td>Operations Manual</td><td>IT/DevOps team</td><td>Deployment guide, monitoring setup, backup & recovery</td></tr>
</tbody>
</table>
<div class="chapter-summary">
<h3>📚 Chapter 1 — Key Takeaways</h3>
<ul>
<li>The SDLC provides 7 structured phases: Planning → Requirements → Design → Implementation → Testing → Deployment → Maintenance</li>
<li>Different SDLC models (Waterfall, Agile, Spiral, V-Model) suit different project types and risk profiles</li>
<li>Scrum implements Agile using Product Owner, Scrum Master, Development Team, and time-boxed Sprints</li>
<li>Standards (ISO 25010, CMMI) and metrics (LOC, Function Points, Cyclomatic Complexity) provide objective quality measures</li>
<li>Good documentation — requirements, architecture, user manuals, test docs — is the lifeline of software</li>
</ul>
</div>
</div>
<div class="section-sep"></div>
<!-- ════════════════════════════════════════════════════════
CHAPTER 2
═══════════════════════════════════════════════════════════ -->
<div id="ch2" class="book-section">
<div class="chapter-header ch2">
<div class="ch-number">02</div>
<div class="ch-meta">
<div class="ch-label">Chapter Two</div>
<div class="ch-title">User-Oriented Systems & Outsourcing Decisions</div>
<div class="ch-subtitle">UCD · Personas · Build vs Buy · Vendor Assessment · Implementation</div>
<span class="ch-lo">📌 LO2 — User-Oriented Approach & Outsourcing Analysis</span>
</div>
</div>
<h2 class="section-title" data-num="2.1">Tailoring Systems for End Users</h2>
<p class="body-text">A user-oriented approach places the <strong>end user at the absolute center</strong> of the design process. Systems built without considering real users often fail — not due to technical problems, but because users find them confusing, slow, or irrelevant to their actual work.</p>
<div class="metrics-row animate-on-scroll">
<div class="metric-card">
<span class="m-value">70%</span>
<span class="m-label">of software failures</span>
<p class="m-desc">are caused by poor requirements & user involvement — NOT technical issues</p>
</div>
<div class="metric-card">
<span class="m-value">5×</span>
<span class="m-label">cheaper to fix early</span>
<p class="m-desc">Finding a usability issue in design vs. after release</p>
</div>
<div class="metric-card">
<span class="m-value">↑84%</span>
<span class="m-label">higher adoption rate</span>
<p class="m-desc">When users are involved in the design process throughout</p>
</div>
</div>
<h3 class="sub-title">User-Centered Design (UCD) Process</h3>
<div class="steps-grid animate-on-scroll">
<div class="step-card">
<div class="step-num" style="background:var(--teal)">1</div>
<div class="step-content">
<div class="step-title">Understand Context of Use</div>
<p>Research who users are: their jobs, goals, skill levels, frustrations, and environments. Use interviews, observations (contextual inquiry), and surveys.</p>
</div>
</div>
<div class="step-card">
<div class="step-num" style="background:var(--teal)">2</div>
<div class="step-content">
<div class="step-title">Specify User Requirements</div>
<p>Turn user research into specific, measurable requirements. Create personas, user stories ("As a [user], I want [goal], so that [reason]"), and use cases.</p>
</div>
</div>
<div class="step-card">
<div class="step-num" style="background:var(--teal)">3</div>
<div class="step-content">
<div class="step-title">Produce Design Solutions</div>
<p>Create wireframes (structure), mockups (visual), and interactive prototypes. Focus on solving user problems before aesthetics.</p>
</div>
</div>
<div class="step-card">
<div class="step-num" style="background:var(--teal)">4</div>
<div class="step-content">
<div class="step-title">Evaluate Against Requirements</div>
<p>Test with real users. Observe where they struggle. Fix problems. Repeat until users can accomplish their goals easily and efficiently.</p>
</div>
</div>
</div>
<h3 class="sub-title">User Personas — Bringing Users to Life</h3>
<p class="body-text">A persona is a fictional but realistic representation of a key user group. Personas help design teams make decisions by asking: "What would <em>Sarah</em> need here?"</p>
<div class="persona-grid animate-on-scroll">
<div class="persona-card">
<div class="persona-avatar" style="background:#e8f0fd">👩⚕️</div>
<div class="persona-name">Sarah, 34</div>
<div class="persona-role">Hospital Nurse — Primary User</div>
<div class="persona-row"><strong>Goals:</strong><span>Quick access to patient records during rounds</span></div>
<div class="persona-row"><strong>Frustrations:</strong><span>Complex navigation, too many clicks, slow load times</span></div>
<div class="persona-row"><strong>Tech Level:</strong><span>Moderate — uses phone and basic PC daily</span></div>
<div class="persona-row"><strong>Quote:</strong><span style="font-style:italic">"I just need the medicine schedule fast. No time for complex menus."</span></div>
</div>
<div class="persona-card">
<div class="persona-avatar" style="background:#e0f5f4">👨💼</div>
<div class="persona-name">James, 52</div>
<div class="persona-role">IT Administrator — Power User</div>
<div class="persona-row"><strong>Goals:</strong><span>Maintain uptime, manage user accounts, run compliance reports</span></div>
<div class="persona-row"><strong>Frustrations:</strong><span>Systems that don't integrate with existing tools</span></div>
<div class="persona-row"><strong>Tech Level:</strong><span>Expert — manages servers and networks daily</span></div>
<div class="persona-row"><strong>Quote:</strong><span style="font-style:italic">"I need admin tools that don't require a PhD to operate."</span></div>
</div>
</div>
<h2 class="section-title" data-num="2.2">Outsourcing Analysis & Evaluation</h2>
<p class="body-text">Outsourcing means hiring external organizations to perform work that could be done internally. The fundamental decision is <strong>Build vs. Buy vs. Outsource</strong>.</p>
<table class="info-table animate-on-scroll">
<thead><tr><th>Option</th><th>When to Use</th><th>Key Benefit</th><th>Key Risk</th></tr></thead>
<tbody>
<tr><td>Build (In-house)</td><td>Core competitive advantage; full IP control needed</td><td>Exact fit to needs; full ownership</td><td>High cost; long timeline</td></tr>
<tr><td>Buy (COTS)</td><td>Standard functionality; faster deployment needed</td><td>Lower cost; faster to deploy</td><td>May not fit exactly; vendor dependency</td></tr>
<tr><td>Outsource</td><td>Specialized skills needed; non-core functionality</td><td>Access to expertise; cost savings</td><td>Communication; quality control</td></tr>
<tr><td>Hybrid</td><td>Large enterprises with diverse needs</td><td>Best of all approaches</td><td>Coordination complexity</td></tr>
</tbody>
</table>
<h3 class="sub-title">Outsourcing Analysis Framework — 5 Key Questions</h3>
<div class="info-box teal animate-on-scroll">
<div class="ib-title">🔍 Before Outsourcing — Ask These Questions</div>
<ul>
<li><strong>Core Competency Test:</strong> Is this function what makes your organization unique? If YES, keep in-house.</li>
<li><strong>Cost Analysis:</strong> Calculate Total Cost of Ownership (TCO) for both in-house and outsourced over 3–5 years.</li>
<li><strong>Risk Assessment:</strong> Evaluate vendor lock-in, data security, quality control, and communication barriers.</li>
<li><strong>Capability Gap:</strong> Do you lack the skills internally? Outsourcing brings expertise you don't have.</li>
<li><strong>Time to Market:</strong> External vendors with ready teams can often deliver 40–60% faster initially.</li>
</ul>
</div>
<h2 class="section-title" data-num="2.3">Vendor Assessment & Selection</h2>
<table class="info-table animate-on-scroll">
<thead><tr><th>Evaluation Criterion</th><th>Weight</th><th>What to Assess</th></tr></thead>
<tbody>
<tr><td>Technical Capability</td><td style="color:var(--blue);font-weight:700">30%</td><td>Technology stack, architecture skills, certifications, portfolio of similar projects</td></tr>
<tr><td>Experience & References</td><td style="color:var(--blue);font-weight:700">25%</td><td>Years in business, similar projects completed, verifiable client testimonials</td></tr>
<tr><td>Cost Structure</td><td style="color:var(--blue);font-weight:700">20%</td><td>Pricing model (fixed/T&M), hidden costs, payment terms, change request handling</td></tr>
<tr><td>Communication & Culture</td><td style="color:var(--blue);font-weight:700">15%</td><td>Language, time zone, responsiveness, methodology alignment (Agile vs Waterfall)</td></tr>
<tr><td>Legal & Compliance</td><td style="color:var(--blue);font-weight:700">10%</td><td>Data protection, IP ownership clauses, NDAs, SLA terms and penalty clauses</td></tr>
</tbody>
</table>
<h2 class="section-title" data-num="2.4">Vendor Implementation & Management</h2>
<div class="info-box blue">
<div class="ib-title">🤝 Key Success Factors for Outsourced Projects</div>
<ul>
<li><strong>Clear SLA:</strong> Document response times, uptime requirements, quality standards, and penalty clauses for failure</li>
<li><strong>Regular Communication:</strong> Weekly status meetings, shared dashboards, open Slack/Teams channels</li>
<li><strong>Knowledge Transfer Plan:</strong> Your team must gain enough knowledge to support the system after vendor leaves</li>
<li><strong>Change Management:</strong> Formal process for scope changes to prevent scope creep and cost overruns</li>
<li><strong>Exit Strategy:</strong> Always plan for transitioning away from the vendor — whether at contract end or in case of failure</li>
</ul>
</div>
<div class="chapter-summary">
<h3>📚 Chapter 2 — Key Takeaways</h3>
<ul>
<li>User-oriented design puts end users at the center — leading to 70%+ reduction in requirements-related failures</li>
<li>Personas make user research tangible; UCD process (4 steps) ensures continuous user validation</li>
<li>Outsourcing decisions require analysis of core competency, TCO, risk, and capability gaps</li>
<li>Vendor selection uses weighted criteria: technical (30%), experience (25%), cost (20%), communication (15%), legal (10%)</li>
<li>Successful outsourcing requires SLAs, regular communication, knowledge transfer, and an exit strategy</li>
</ul>
</div>
</div>
<div class="section-sep"></div>
<!-- ════════════════════════════════════════════════════════
CHAPTER 3
═══════════════════════════════════════════════════════════ -->
<div id="ch3" class="book-section">
<div class="chapter-header ch3">
<div class="ch-number">03</div>
<div class="ch-meta">
<div class="ch-label">Chapter Three</div>
<div class="ch-title">Software Development Approaches</div>
<div class="ch-subtitle">RAD · JAD · GSS · CASE Tools · Structured Methodologies · Extreme Programming</div>
<span class="ch-lo">📌 LO3 — Software Development Approaches in Practice</span>
</div>
</div>
<h2 class="section-title" data-num="3.1">Rapid Application Development (RAD)</h2>
<p class="body-text">RAD, created by James Martin in 1991, emphasizes <strong>speed and iterative development</strong> over rigid planning. Instead of designing everything upfront, RAD uses rapid prototyping and continuous user feedback to build software in 60–90 days.</p>
<div class="analogy-box">
<div class="ab-label">🚀 Core RAD Philosophy</div>
<p>Get a working prototype in front of users FAST. Let them react. Refine. Repeat. Ship.<br>Traditional Waterfall timeline: 12–18 months. RAD timeline: <strong>60–90 days</strong>.</p>
</div>
<h3 class="sub-title">RAD Phases</h3>
<div class="steps-grid animate-on-scroll">
<div class="step-card">
<div class="step-num" style="background:var(--amber)">1</div>
<div class="step-content">
<div class="step-title">Requirements Planning</div>
<p>Executives, managers, and users define business functions, data needs, and constraints. Focus on high-level agreement — not detailed specs. Think workshop, not formal document.</p>
</div>
</div>
<div class="step-card">
<div class="step-num" style="background:var(--amber)">2</div>
<div class="step-content">
<div class="step-title">User Design</div>
<p>Users and analysts collaborate intensively to build interactive models using CASE tools. Prototypes built rapidly and refined with immediate user feedback — multiple iterations happen here.</p>
</div>
</div>
<div class="step-card">
<div class="step-num" style="background:var(--amber)">3</div>
<div class="step-content">
<div class="step-title">Construction</div>
<p>Developers build the full system using the approved prototype as a guide. Heavy use of code reuse and component libraries. Less emphasis on "building from scratch."</p>
</div>
</div>
<div class="step-card">
<div class="step-num" style="background:var(--amber)">4</div>
<div class="step-content">
<div class="step-title">Cutover</div>
<p>Testing, user acceptance, data migration, and go-live. Similar to Waterfall's deployment phase but significantly compressed due to earlier validation.</p>
</div>
</div>
</div>
<h2 class="section-title" data-num="3.2">Joint Application Design (JAD)</h2>
<p class="body-text">JAD brings all stakeholders — users, managers, developers, and facilitators — into <strong>intensive, structured workshops</strong> to define and design systems rapidly. Developed at IBM in the 1970s, JAD cuts requirements time by up to 50% compared to one-on-one interviews.</p>
<table class="info-table animate-on-scroll">
<thead><tr><th>JAD Role</th><th>Who</th><th>Responsibilities</th></tr></thead>
<tbody>
<tr><td>Facilitator</td><td>Neutral leader (often consultant)</td><td>Runs sessions, ensures full participation, keeps focus on objectives, resolves conflicts</td></tr>
<tr><td>Executive Sponsor</td><td>Senior manager</td><td>Opens sessions, provides authority, resolves high-level conflicts, communicates importance</td></tr>
<tr><td>Users</td><td>End users & domain experts</td><td>Provide domain knowledge, validate requirements, define workflows and business rules</td></tr>
<tr><td>Developers</td><td>Technical team members</td><td>Assess technical feasibility, raise constraints, estimate complexity, suggest alternatives</td></tr>
<tr><td>Scribe</td><td>Dedicated recorder</td><td>Documents all decisions, agreements, and action items in real-time during sessions</td></tr>
</tbody>
</table>
<h2 class="section-title" data-num="3.3">Group Support Systems (GSS)</h2>
<p class="body-text">GSS are computer-based systems supporting group decision-making. Used in JAD sessions to collect ideas anonymously, vote on priorities, and reach consensus faster.</p>
<div class="info-box teal animate-on-scroll">
<div class="ib-title">🖥️ How GSS Works in a JAD Session</div>
<ul>
<li>Each participant types answers simultaneously — <strong>anonymously</strong> — preventing dominant personalities from suppressing ideas</li>
<li>System collects, organizes, and displays all responses to the group instantly</li>
<li>Group votes or ranks ideas electronically — fast, unbiased prioritization</li>
<li><strong>Result:</strong> More ideas, less social bias, faster consensus, automatic documentation</li>
</ul>
</div>
<h2 class="section-title" data-num="3.4">CASE Tools</h2>
<p class="body-text">Computer-Aided Software Engineering (CASE) tools provide automated support for software development activities — from diagramming to code generation.</p>
<table class="info-table animate-on-scroll">
<thead><tr><th>CASE Type</th><th>Examples</th><th>What It Does</th></tr></thead>
<tbody>
<tr><td>Upper CASE (Front-end)</td><td>IBM Rational Rose, Enterprise Architect</td><td>Analysis & design tools; create UML diagrams, data models, use cases</td></tr>
<tr><td>Lower CASE (Back-end)</td><td>Visual Studio generators, JUnit</td><td>Code generation, testing automation; turn designs into runnable code</td></tr>
<tr><td>Integrated CASE (I-CASE)</td><td>IBM Engineering Lifecycle Mgmt</td><td>Full lifecycle support from planning through deployment</td></tr>
<tr><td>Diagramming</td><td>Lucidchart, Draw.io, Visio</td><td>Create flowcharts, ERDs, DFDs, UML diagrams</td></tr>
<tr><td>Version Control</td><td>Git, SVN, Mercurial</td><td>Track code changes, enable team collaboration, support branching</td></tr>
</tbody>
</table>
<h2 class="section-title" data-num="3.5">Extreme Programming (XP)</h2>
<p class="body-text">XP, created by Kent Beck in 1996, takes good Agile practices "to the extreme." It is designed for projects with rapidly changing requirements and emphasizes <strong>technical excellence above all</strong>.</p>
<div class="xp-grid animate-on-scroll">
<div class="xp-card">
<div class="xp-icon">👥</div>
<div class="xp-name">Pair Programming</div>
<div class="xp-desc">Two devs share one keyboard. Driver writes; Observer reviews. Switch often. Fewer bugs, better design.</div>
</div>
<div class="xp-card">
<div class="xp-icon">🧪</div>
<div class="xp-name">Test-Driven Development</div>
<div class="xp-desc">Write the test BEFORE the code. Code only to make tests pass. Results in thorough coverage.</div>
</div>
<div class="xp-card">
<div class="xp-icon">🔄</div>
<div class="xp-name">Continuous Integration</div>
<div class="xp-desc">Merge code to main branch multiple times per day. Catch integration bugs immediately.</div>
</div>
<div class="xp-card">
<div class="xp-icon">📦</div>
<div class="xp-name">Small Releases</div>
<div class="xp-desc">Release working software frequently in small increments rather than one big bang.</div>
</div>
<div class="xp-card">
<div class="xp-icon">🎯</div>
<div class="xp-name">Simple Design</div>
<div class="xp-desc">Design only what's needed now. YAGNI: "You Ain't Gonna Need It." Avoid over-engineering.</div>
</div>
<div class="xp-card">
<div class="xp-icon">♻️</div>
<div class="xp-name">Refactoring</div>
<div class="xp-desc">Continuously improve code structure without changing behavior. Reduce technical debt.</div>
</div>
<div class="xp-card">
<div class="xp-icon">🤝</div>
<div class="xp-name">Collective Ownership</div>
<div class="xp-desc">Any developer can modify any code. No silos. Everyone owns everything together.</div>
</div>
<div class="xp-card">
<div class="xp-icon">👤</div>
<div class="xp-name">On-Site Customer</div>
<div class="xp-desc">A real customer representative is present with the team throughout development for instant feedback.</div>
</div>
<div class="xp-card">
<div class="xp-icon">⏰</div>
<div class="xp-name">40-Hour Week</div>
<div class="xp-desc">No overtime. Tired developers make more mistakes. Sustainable pace is a productivity principle.</div>
</div>
<div class="xp-card">
<div class="xp-icon">📖</div>
<div class="xp-name">Coding Standards</div>
<div class="xp-desc">All code follows the same style and conventions so any developer can read and modify any file.</div>
</div>
<div class="xp-card">
<div class="xp-icon">🎮</div>
<div class="xp-name">Planning Game</div>
<div class="xp-desc">At iteration start, customers choose features from a list based on business value within the team's capacity.</div>
</div>
<div class="xp-card">
<div class="xp-icon">🔖</div>
<div class="xp-name">Metaphor</div>
<div class="xp-desc">Use a simple shared story/analogy to explain how the entire system works to all stakeholders.</div>
</div>
</div>
<div class="chapter-summary">
<h3>📚 Chapter 3 — Key Takeaways</h3>
<ul>
<li>RAD delivers working software in 60–90 days using prototyping, user workshops, and component reuse</li>
<li>JAD uses structured, intensive workshops with a neutral facilitator to gather requirements 50% faster than interviews</li>
<li>GSS enables anonymous parallel input in group sessions, reducing social bias and accelerating consensus</li>
<li>CASE tools automate engineering tasks from diagramming (Upper CASE) to code generation (Lower CASE)</li>
<li>XP's 12 practices — including pair programming, TDD, and continuous integration — ensure technical excellence</li>
</ul>
</div>
</div>
<div class="section-sep"></div>
<!-- ════════════════════════════════════════════════════════
CHAPTER 4
═══════════════════════════════════════════════════════════ -->
<div id="ch4" class="book-section">
<div class="chapter-header ch4">
<div class="ch-number">04</div>
<div class="ch-meta">
<div class="ch-label">Chapter Four</div>
<div class="ch-title">Development Before the Fact (DBTF) Technology</div>
<div class="ch-subtitle">Integrated Modelling · Primitive Structures · FMaps · TMaps · Universal Primitive Operations</div>
<span class="ch-lo">📌 LO3 — Software Development Approaches in Practice</span>
</div>
</div>
<h2 class="section-title" data-num="4.1">What is DBTF?</h2>
<p class="body-text">Development Before the Fact (DBTF) is a software engineering paradigm created by <strong>Margaret Hamilton</strong> — the engineer who led NASA's Apollo software development team. The core philosophy is radical:</p>
<div class="info-box purple animate-on-scroll">
<div class="ib-title">🎯 The DBTF Core Principle</div>
<ul>
<li><strong>Traditional approach:</strong> Build → Test → Find bugs → Fix → Test again → (repeat endlessly)</li>
<li><strong>DBTF approach:</strong> Design with mathematical completeness → Build once → Errors were never introduced</li>
<li>DBTF builds <strong>correctness into the system from the beginning</strong>, rather than testing it out afterwards</li>
</ul>
</div>
<div class="analogy-box">
<div class="ab-label">🚀 The NASA Connection</div>
<p>Hamilton's team at MIT developed the software for NASA's Apollo Guidance Computer — the system that landed humans on the Moon in 1969. The software had to be <strong>perfect</strong>. There was no way to patch a bug when astronauts were 240,000 miles from Earth. This requirement for absolute correctness led Hamilton to develop DBTF. She was awarded the Presidential Medal of Freedom in 2016 and is credited with coining the term <em>"software engineering."</em></p>
</div>
<h2 class="section-title" data-num="4.2">The Integrated Modelling Environment (001 Tool Suite)</h2>
<p class="body-text">DBTF is implemented through the <strong>001 Tool Suite</strong> — a formal software specification environment that generates complete, error-free software from mathematical models.</p>
<table class="info-table animate-on-scroll">
<thead><tr><th>Component</th><th>Role</th><th>What It Does</th></tr></thead>
<tbody>
<tr><td>FMap (Function Map)</td><td>Behavior definition</td><td>Defines the control structure — HOW functions sequence and relate to each other</td></tr>
<tr><td>TMap (Type Map)</td><td>Data definition</td><td>Defines the types and structure of ALL data that flows between functions</td></tr>
<tr><td>001AXES</td><td>Code generator</td><td>Automatically generates complete, compilable code from validated FMap+TMap models</td></tr>
<tr><td>RAT (Analyzer)</td><td>Verifier</td><td>Checks specifications for completeness and consistency before any code is generated</td></tr>
</tbody>
</table>
<h2 class="section-title" data-num="4.3">Primitive Structures — The Building Blocks</h2>
<p class="body-text">DBTF defines a small set of primitive structures — fundamental patterns that ALL systems can be decomposed into. Every function or data type is either a primitive, or a combination of these:</p>
<table class="info-table animate-on-scroll">
<thead><tr><th>Structure</th><th>Symbol</th><th>Meaning</th><th>Real Example</th></tr></thead>
<tbody>
<tr><td><strong>Leaf (Primitive)</strong></td><td><code style="color:var(--purple)">P</code></td><td>Cannot be decomposed further — directly implemented in code</td><td>A function that reads a card number</td></tr>
<tr><td><strong>Include (AND)</strong></td><td><code style="color:var(--blue)">A</code></td><td>ALL sub-functions must execute; they share the same input/output space</td><td>To process payment: validate AND debit AND receipt</td></tr>
<tr><td><strong>Or (OR)</strong></td><td><code style="color:var(--teal)">OR</code></td><td>EXACTLY ONE sub-function executes based on a condition</td><td>Error type: EITHER warning OR critical halt</td></tr>
<tr><td><strong>Input Join</strong></td><td><code style="color:var(--amber)">IJ</code></td><td>Multiple inputs must all be present before the function executes</td><td>Only process order when BOTH payment AND stock confirmed</td></tr>
<tr><td><strong>Output Join</strong></td><td><code style="color:var(--rose)">OJ</code></td><td>One input produces multiple outputs sent to different consumers</td><td>Order confirmed → notify customer AND update inventory</td></tr>
</tbody>
</table>
<div class="comparison-grid animate-on-scroll">
<div class="cmp-card" style="border-top: 3px solid var(--blue)">
<div class="cmp-title" style="color:var(--blue)">🔵 Include (AND) Structure</div>
<p style="font-size:0.85rem;margin-bottom:0.5rem">Like a recipe — ALL steps must happen:</p>
<ul>
<li>Process Payment [Include]</li>
<li style="list-style:none;padding-left:1rem">├── 1. Validate card details</li>
<li style="list-style:none;padding-left:1rem">├── 2. Check account balance</li>
<li style="list-style:none;padding-left:1rem">├── 3. Authorize transaction</li>
<li style="list-style:none;padding-left:1rem">└── 4. Update ledger</li>
<li><em>All 4 must happen. None skipped.</em></li>
</ul>
</div>
<div class="cmp-card" style="border-top: 3px solid var(--teal)">
<div class="cmp-title" style="color:var(--teal)">🟢 Or Structure</div>
<p style="font-size:0.85rem;margin-bottom:0.5rem">Like a menu — EXACTLY ONE option chosen:</p>
<ul>
<li>Handle Error [Or]</li>
<li style="list-style:none;padding-left:1rem">├── 1. Show warning popup</li>
<li style="list-style:none;padding-left:1rem">├── 2. Show critical error page</li>
<li style="list-style:none;padding-left:1rem">├── 3. Log silently</li>
<li style="list-style:none;padding-left:1rem">└── 4. Halt system</li>
<li><em>Only ONE executes based on error type.</em></li>
</ul>
</div>
</div>
<h2 class="section-title" data-num="4.4">FMaps (Function Maps)</h2>
<p class="body-text">An FMap is a <strong>hierarchical tree structure</strong> that defines ALL functions in a system and their control relationships. It shows WHAT the system does and in what order/structure — from system level down to individual primitive operations.</p>
<div class="info-box purple animate-on-scroll">
<div class="ib-title">🏧 ATM Withdraw Cash — FMap Example</div>
<ul style="font-family: var(--font-mono); font-size: 0.82rem; line-height: 1.9;">
<li>Withdraw Cash [Include — ALL must execute]</li>
<li style="list-style:none;padding-left:1.5rem">├── Authenticate User [Include]</li>
<li style="list-style:none;padding-left:3rem">├── Read Card [Primitive P]</li>
<li style="list-style:none;padding-left:3rem">├── Request PIN [Primitive P]</li>
<li style="list-style:none;padding-left:3rem">└── Validate PIN [Or]</li>
<li style="list-style:none;padding-left:4.5rem">├── Grant Access [Primitive P]</li>
<li style="list-style:none;padding-left:4.5rem">└── Deny & Eject Card [Primitive P]</li>
<li style="list-style:none;padding-left:1.5rem">├── Select Amount [Primitive P]</li>
<li style="list-style:none;padding-left:1.5rem">├── Dispense Cash [Primitive P]</li>
<li style="list-style:none;padding-left:1.5rem">└── Update Account Balance [Primitive P]</li>
</ul>
</div>
<h2 class="section-title" data-num="4.5">TMaps (Type Maps)</h2>
<p class="body-text">A TMap defines the <strong>data types and their structure</strong> that flow between functions. Where FMaps define behavior, TMaps define data — they are two sides of the same specification coin. The 001 Tool verifies type compatibility at EVERY function interface automatically.</p>
<div class="info-box purple animate-on-scroll">
<div class="ib-title">📊 BankAccount TMap Example</div>
<ul style="font-family: var(--font-mono); font-size: 0.82rem; line-height: 1.9;">
<li>BankAccount [Include]</li>
<li style="list-style:none;padding-left:1.5rem">├── AccountNumber : String (exactly 10 digits)</li>
<li style="list-style:none;padding-left:1.5rem">├── AccountHolder : Person</li>
<li style="list-style:none;padding-left:3rem">├── Name : String</li>
<li style="list-style:none;padding-left:3rem">└── DateOfBirth : Date</li>
<li style="list-style:none;padding-left:1.5rem">├── Balance : Real (≥ 0.00)</li>
<li style="list-style:none;padding-left:1.5rem">└── AccountType [Or]</li>
<li style="list-style:none;padding-left:3rem">├── Savings : SavingsAccount</li>
<li style="list-style:none;padding-left:3rem">├── Checking : CheckingAccount</li>
<li style="list-style:none;padding-left:3rem">└── Investment : InvestmentAccount</li>
</ul>
</div>
<h2 class="section-title" data-num="4.6">Universal Primitive Operations (UPOs)</h2>
<p class="body-text">DBTF defines Universal Primitive Operations — the atomic actions that all system behavior ultimately reduces to. By limiting operations to these primitives, DBTF ensures every action is explicitly defined with no hidden side effects.</p>
<table class="info-table animate-on-scroll">
<thead><tr><th>UPO</th><th>Definition</th><th>Example</th></tr></thead>
<tbody>
<tr><td>Create</td><td>Bring a new object into existence</td><td>Create a new bank account record</td></tr>
<tr><td>Access</td><td>Read the value of an existing object</td><td>Read the current account balance</td></tr>
<tr><td>Modify</td><td>Change the value of an existing object</td><td>Update balance after a transaction</td></tr>
<tr><td>Delete</td><td>Remove an object from existence</td><td>Delete a closed account record</td></tr>
<tr><td>Evaluate</td><td>Perform a computation and return a result</td><td>Calculate interest on balance</td></tr>
<tr><td>Enable/Disable</td><td>Activate or deactivate a function</td><td>Enable overdraft protection on account</td></tr>
</tbody>
</table>
<div class="chapter-summary">
<h3>📚 Chapter 4 — Key Takeaways</h3>
<ul>
<li>DBTF builds correctness INTO the design (before the fact), rather than testing it out afterwards</li>
<li>The 001 Tool Suite implements DBTF with FMaps (behavior), TMaps (data), 001AXES (code generator), and RAT (verifier)</li>
<li>5 primitive structures: Leaf (P), Include (AND), Or, Input Join, Output Join — ALL systems reduce to these</li>
<li>FMaps define hierarchical function trees; TMaps define type-safe data structures; together they form a complete specification</li>
<li>6 Universal Primitive Operations: Create, Access, Modify, Delete, Evaluate, Enable/Disable — the atoms of any system</li>
</ul>
</div>
</div>
<div class="section-sep"></div>
<!-- ════════════════════════════════════════════════════════
CHAPTER 5
═══════════════════════════════════════════════════════════ -->
<div id="ch5" class="book-section">
<div class="chapter-header ch5">
<div class="ch-number">05</div>
<div class="ch-meta">
<div class="ch-label">Chapter Five</div>
<div class="ch-title">Software Engineering Design</div>
<div class="ch-subtitle">Design Specification · OOD · UI Design · Re-engineering · Software Testing</div>
<span class="ch-lo">📌 LO3 — Software Development Approaches in Practice</span>
</div>
</div>
<h2 class="section-title" data-num="5.1">The Design Specification</h2>
<p class="body-text">The Software Design Document (SDD) is the <strong>blueprint of the system</strong>. It translates requirements into a technical plan developers can implement. A great SDD eliminates ambiguity and enables parallel development.</p>
<div class="info-box teal animate-on-scroll">
<div class="ib-title">📄 Key Sections of a Design Specification</div>
<ul>
<li><strong>System Overview:</strong> High-level description, purpose, major components and their responsibilities</li>
<li><strong>Architecture Design:</strong> How components are organized (layered, microservices, MVC) and how they interact</li>
<li><strong>Database Design:</strong> ER diagrams, table schemas, indexing strategy, normalization</li>
<li><strong>Interface Design:</strong> API contracts, message formats, communication protocols (REST, gRPC)</li>
<li><strong>UI Design:</strong> Screen layouts, navigation flows, wireframes, interaction patterns</li>
<li><strong>Security Design:</strong> Authentication, authorization, encryption, audit logging strategy</li>
</ul>
</div>
<h2 class="section-title" data-num="5.2">Object-Oriented Design (OOD)</h2>
<p class="body-text">OOD organizes software around <strong>objects</strong> — entities combining data (attributes) and behavior (methods). OOD mirrors the real world: a <code>Car</code> object has <em>color</em> and <em>speed</em> (data) and can <em>accelerate()</em> and <em>brake()</em> (methods).</p>
<h3 class="sub-title">The 4 Pillars of OOP</h3>
<div class="metrics-row animate-on-scroll" style="flex-wrap:wrap">
<div class="metric-card" style="background:linear-gradient(135deg,#1a4fa8,#0f2244)">
<span class="m-value" style="font-size:1.5rem">Encapsulation</span>
<span class="m-label">Bundle + Hide</span>
<p class="m-desc">Bundle data & methods together; hide internal details. BankAccount hides balance; expose only deposit() and withdraw().</p>
</div>
<div class="metric-card" style="background:linear-gradient(135deg,#0e7c7b,#055a5a)">
<span class="m-value" style="font-size:1.5rem">Inheritance</span>
<span class="m-label">IS-A Relationship</span>
<p class="m-desc">Child classes inherit from parent. SavingsAccount IS-A BankAccount. Reuse code; extend behaviour.</p>
</div>
<div class="metric-card" style="background:linear-gradient(135deg,#d4800a,#8b5503)">
<span class="m-value" style="font-size:1.5rem">Polymorphism</span>
<span class="m-label">Many Forms</span>
<p class="m-desc">Same interface, different behaviour. draw() on Circle, Square, Triangle each draw differently — same call, different result.</p>
</div>
<div class="metric-card" style="background:linear-gradient(135deg,#6c3483,#4a235a)">
<span class="m-value" style="font-size:1.5rem">Abstraction</span>
<span class="m-label">Essential Features</span>
<p class="m-desc">Show only what matters; hide complexity. You drive a car without knowing how the combustion engine works.</p>
</div>
</div>
<h3 class="sub-title">SOLID Principles</h3>
<table class="info-table animate-on-scroll">
<thead><tr><th>Letter</th><th>Principle</th><th>Meaning in Plain English</th></tr></thead>
<tbody>
<tr><td><strong style="color:var(--blue)">S</strong></td><td>Single Responsibility</td><td>Each class should have exactly ONE reason to change. Don't mix data access with business logic.</td></tr>
<tr><td><strong style="color:var(--teal)">O</strong></td><td>Open/Closed</td><td>Open for extension; closed for modification. Add features by extending, not editing existing code.</td></tr>
<tr><td><strong style="color:var(--amber)">L</strong></td><td>Liskov Substitution</td><td>Subclasses must be substitutable for parent class without breaking behaviour.</td></tr>
<tr><td><strong style="color:var(--rose)">I</strong></td><td>Interface Segregation</td><td>Many small, specific interfaces are better than one large, generic interface.</td></tr>
<tr><td><strong style="color:var(--purple)">D</strong></td><td>Dependency Inversion</td><td>Depend on abstractions (interfaces), not concrete implementations. Use dependency injection.</td></tr>
</tbody>
</table>
<h2 class="section-title" data-num="5.3">User Interface Design</h2>
<p class="body-text">A well-designed UI is <strong>invisible</strong> — users accomplish goals without thinking about the interface. Nielsen's 10 Heuristics are the gold standard for evaluating usability.</p>
<table class="info-table animate-on-scroll">
<thead><tr><th>#</th><th>Heuristic</th><th>Meaning & Example</th></tr></thead>
<tbody>
<tr><td>1</td><td>Visibility of System Status</td><td>Always tell users what's happening — loading spinners, progress bars, confirmation messages</td></tr>
<tr><td>2</td><td>Match the Real World</td><td>Use words and icons familiar to users, not technical jargon. Use a trash can icon for delete.</td></tr>
<tr><td>3</td><td>User Control & Freedom</td><td>Provide Undo, Redo, and clear "cancel" paths. Users make mistakes constantly.</td></tr>
<tr><td>4</td><td>Consistency & Standards</td><td>Follow platform conventions. "Save" should always look and behave the same way throughout the app.</td></tr>
<tr><td>5</td><td>Error Prevention</td><td>Design to prevent problems. Disable a "Submit" button until required fields are filled.</td></tr>
<tr><td>6</td><td>Recognition over Recall</td><td>Make options visible. Don't force users to remember information from a previous screen.</td></tr>
<tr><td>7</td><td>Flexibility & Efficiency</td><td>Allow experts to use keyboard shortcuts that don't slow novices.</td></tr>
<tr><td>8</td><td>Aesthetic & Minimal Design</td><td>Remove irrelevant information. Every element on screen must serve a purpose.</td></tr>
<tr><td>9</td><td>Help Users Recover from Errors</td><td>Error messages must be in plain language, describe the problem, and suggest a solution.</td></tr>
<tr><td>10</td><td>Help & Documentation</td><td>Even great interfaces may need help. Make it easy to search and find task-oriented help.</td></tr>
</tbody>
</table>
<h2 class="section-title" data-num="5.4">Software Re-Engineering</h2>
<p class="body-text">Re-engineering analyzes and rebuilds existing software to improve quality, maintainability, or performance — without necessarily changing its external functionality.</p>
<div class="steps-grid animate-on-scroll">
<div class="step-card">
<div class="step-num" style="background:var(--sage)">1</div>
<div class="step-content">
<div class="step-title">Reverse Engineering</div>
<p>Analyze existing code to extract its design. Understand what it does and how, without the benefit of documentation (which often doesn't exist for legacy systems).</p>
</div>
</div>
<div class="step-card">
<div class="step-num" style="background:var(--sage)">2</div>
<div class="step-content">
<div class="step-title">Restructuring / Refactoring</div>
<p>Reorganize and clean up code to improve internal structure without changing external behavior. Eliminate duplication, simplify logic, improve naming.</p>
</div>
</div>
<div class="step-card">
<div class="step-num" style="background:var(--sage)">3</div>
<div class="step-content">
<div class="step-title">Forward Engineering</div>
<p>Build the new, improved system using recovered design information plus enhancements. May involve new technology, framework migration, or full rewrite.</p>
</div>
</div>
</div>
<h2 class="section-title" data-num="5.5">Software Testing</h2>
<p class="body-text">Testing verifies software meets requirements and finds defects. Remember: <em>Testing can prove the presence of bugs, but cannot prove their absence.</em></p>
<table class="info-table animate-on-scroll">
<thead><tr><th>Testing Level</th><th>Who</th><th>What Is Tested</th><th>Tool Examples</th></tr></thead>
<tbody>
<tr><td><strong>Unit Testing</strong></td><td>Developers</td><td>Individual functions/methods in isolation — the smallest testable unit</td><td>JUnit, pytest, NUnit</td></tr>
<tr><td><strong>Integration Testing</strong></td><td>Developers/QA</td><td>How units work together — interfaces, data flows, module interactions</td><td>Postman, Selenium</td></tr>
<tr><td><strong>System Testing</strong></td><td>QA team</td><td>Complete integrated system against specified requirements</td><td>JMeter, LoadRunner</td></tr>
<tr><td><strong>Acceptance (UAT)</strong></td><td>End users</td><td>Real-world scenarios to confirm system meets business needs before go-live</td><td>Manual, Cucumber</td></tr>
</tbody>
</table>
<div class="chapter-summary">
<h3>📚 Chapter 5 — Key Takeaways</h3>
<ul>
<li>The SDD (Software Design Document) is the technical blueprint translating requirements into implementable plans</li>
<li>4 OOP pillars: Encapsulation (bundle+hide), Inheritance (IS-A), Polymorphism (many forms), Abstraction (essential features)</li>
<li>SOLID principles guide maintainable OO design: Single Responsibility, Open/Closed, Liskov, Interface Segregation, Dependency Inversion</li>
<li>Nielsen's 10 Heuristics are the standard for evaluating UI usability — visibility, consistency, error prevention, etc.</li>
<li>4 Testing levels: Unit → Integration → System → Acceptance (UAT), using both black-box and white-box techniques</li>
</ul>
</div>
</div>
<div class="section-sep"></div>
<!-- ════════════════════════════════════════════════════════
CHAPTER 6
═══════════════════════════════════════════════════════════ -->
<div id="ch6" class="book-section">
<div class="chapter-header ch6">
<div class="ch-number">06</div>
<div class="ch-meta">
<div class="ch-label">Chapter Six</div>
<div class="ch-title">EDP Auditing</div>
<div class="ch-subtitle">Systematic Auditing · Security · Quality · Ergonomics · Customer Service · Legality</div>
<span class="ch-lo">📌 LO4 — Auditing in Software Design & Management</span>
</div>
</div>
<h2 class="section-title" data-num="6.1">What is EDP Auditing?</h2>
<p class="body-text">Electronic Data Processing (EDP) Auditing — now called IT Auditing — is the examination and evaluation of an organization's information systems, infrastructure, and management to ensure they are <strong>effective, secure, and legally compliant</strong>.</p>
<div class="analogy-box">
<div class="ab-label">🏢 Building Inspection Analogy</div>
<p>An EDP audit is like a building safety inspection. The inspector checks: Are all systems functioning? Is the building (system) safe for occupants (users)? Does it meet building codes (regulations)? The auditor reports findings to management — who must fix any violations found.</p>
</div>
<h2 class="section-title" data-num="6.2">The Audit Process — 6 Phases</h2>
<div class="steps-grid animate-on-scroll">
<div class="step-card">
<div class="step-num" style="background:var(--rose)">1</div>
<div class="step-content"><div class="step-title">Audit Planning</div><p>Define scope, objectives, and methodology. Identify key systems, risks, and controls to evaluate. Set timeline and team assignments.</p></div>
</div>
<div class="step-card">
<div class="step-num" style="background:var(--rose)">2</div>
<div class="step-content"><div class="step-title">Preliminary Review</div><p>Gather background: system documentation, previous audit reports, organizational charts, risk assessments.</p></div>
</div>
<div class="step-card">
<div class="step-num" style="background:var(--rose)">3</div>
<div class="step-content"><div class="step-title">Audit Fieldwork</div><p>Execute the plan: test controls, review evidence, observe operations, interview staff, sample transactions.</p></div>
</div>
<div class="step-card">
<div class="step-num" style="background:var(--rose)">4</div>
<div class="step-content"><div class="step-title">Evidence Evaluation</div><p>Analyze findings against audit criteria. Assess adequacy of controls. Identify deficiencies and root causes.</p></div>
</div>
<div class="step-card">
<div class="step-num" style="background:var(--rose)">5</div>
<div class="step-content"><div class="step-title">Reporting</div><p>Document findings, recommendations, and management responses in a formal audit report. Present to leadership.</p></div>
</div>
<div class="step-card">
<div class="step-num" style="background:var(--rose)">6</div>
<div class="step-content"><div class="step-title">Follow-Up</div><p>Verify that management has implemented agreed corrective actions from the previous audit before closing findings.</p></div>
</div>
</div>
<h2 class="section-title" data-num="6.3">COBIT Framework</h2>
<p class="body-text">COBIT (Control Objectives for Information and Related Technologies) is the most widely used framework for IT governance and auditing, developed by ISACA.</p>
<table class="info-table animate-on-scroll">
<thead><tr><th>COBIT Domain</th><th>Focus</th><th>Key Processes</th></tr></thead>
<tbody>
<tr><td>Plan & Organise (PO)</td><td>Strategic alignment</td><td>IT strategy, risk management, quality management, HR planning</td></tr>
<tr><td>Acquire & Implement (AI)</td><td>Solution delivery</td><td>Software acquisition, change management, installation procedures</td></tr>
<tr><td>Deliver & Support (DS)</td><td>Operations</td><td>Service desk, performance mgmt, security, continuity, data management</td></tr>
<tr><td>Monitor & Evaluate (ME)</td><td>Oversight</td><td>Performance monitoring, internal control, regulatory compliance</td></tr>
</tbody>
</table>
<h2 class="section-title" data-num="6.4">Security — The CIA Triad</h2>
<p class="body-text">The CIA Triad is the foundational framework for all information security decisions. Every security control exists to protect at least one of these three properties:</p>
<div class="cia-grid animate-on-scroll">
<div class="cia-card c">
<div class="cia-letter">C</div>
<div class="cia-word">Confidentiality</div>
<div class="cia-desc">Only authorized users can access sensitive data.<br><br>Tools: Encryption (AES-256), access controls (RBAC), authentication (MFA), data masking</div>
</div>
<div class="cia-card i">
<div class="cia-letter">I</div>
<div class="cia-word">Integrity</div>
<div class="cia-desc">Data is accurate and has not been tampered with.<br><br>Tools: Checksums (SHA-256), hashing, digital signatures, version control, audit logs</div>
</div>
<div class="cia-card a">
<div class="cia-letter">A</div>
<div class="cia-word">Availability</div>
<div class="cia-desc">Systems are accessible when users need them.<br><br>Tools: Redundancy, load balancing, backups, DDoS protection, failover systems</div>
</div>
</div>
<h2 class="section-title" data-num="6.5">Ergonomics</h2>
<p class="body-text">Ergonomics examines whether IT environments support healthy, efficient, and comfortable use of information systems.</p>
<div class="comparison-grid animate-on-scroll">
<div class="cmp-card" style="border-top:3px solid var(--blue)">