Department of Computer and Information Science TDT4290

Transcription

Department of Computer and Information Science TDT4290
Department of Computer and Information Science
TDT4290 Customer Driven Project
Adresseavisen AS
Automatic Import of Completed Ads
Group 15
Audun Skjervold
Erlend Løkken Sigholt
Hong-Dang Lam
Truls Hamborg
Supervisor
Meng Zhu
Customer Representatives
Asle Dragsten Liebech
Jostein Danielsen
Hans Kristian Ormberg
Abstract
This paper describes the process of developing a framework for Automatic Importing of Completed Ads, on request from Adresseavisen AS, which is a major
regional newspaper. It will describe the project, from the preliminary study phase
and project management/organization, to implementation and completion.
The goal is to create a framework which will facilitate automatic importing of
completed real estate ads in the form of pdf-files and associated data, with the
possibility to expand to other types of ads. The accompanying data will be placed
into the internal database of Adresseavisen and their internal order system for ads,
and the pdf is to be saved in their archives.
Adresseavisen, as a customer, is interested in the framework in itself, with
accompanying developer documentation for possible further development. In addition to this, we will produce full documentation of the process as a deliverable
in the course which this project is for.
i
Preface
This document was written for the project-based course TDT4290 Customer Driven
Project, at the Norwegian University of Technology and Science, NTNU during the
fall semester of 2013.
The project team consisted of four students from Computer Science at the
Department of Computer and Information Science at NTNU. The project was
Automated Import of Completed Ads, on behalf of Adresseavisen AS.
The team would like to thank customer representative Asle Dragsteen Liebech
for great support and technological guidance, as well as our supervisor Zhu Meng
for excellent supervising.
ii
Contents
I
Project Introduction
1
1 Introduction
1.1 Project name - Automatic Import
1.2 Customer - Adresseavisen AS . .
1.3 Project Purpose . . . . . . . . . .
1.4 Project Background . . . . . . . .
1.5 Problem Description . . . . . . .
1.6 Existing Technology . . . . . . .
1.7 Stakeholders . . . . . . . . . . . .
1.7.1 Customer . . . . . . . . .
1.7.2 Group Members . . . . . .
1.7.3 Course Staff . . . . . . . .
1.8 Measure of Project Effects . . . .
1.9 Duration . . . . . . . . . . . . . .
of Completed Ads
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
2 Project Management
2.1 Roles . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2.2 Time schedule . . . . . . . . . . . . . . . . . . . . . . . .
2.3 Work Breakdown Structure . . . . . . . . . . . . . . . .
2.3.1 Estimation methods . . . . . . . . . . . . . . . .
2.3.2 Pre-Study . . . . . . . . . . . . . . . . . . . . . .
2.3.3 Requirements . . . . . . . . . . . . . . . . . . . .
2.3.4 General Project Management . . . . . . . . . . .
2.3.5 Architecture . . . . . . . . . . . . . . . . . . . . .
2.3.6 Technical/API documentation . . . . . . . . . . .
2.3.7 Documentation - Weekly report . . . . . . . . . .
2.3.8 Final Report . . . . . . . . . . . . . . . . . . . .
2.3.9 Implementation - Webassistenten . . . . . . . . .
2.3.10 Implementation - Import-System Service . . . . .
2.3.11 Implementation - Miscellaneous . . . . . . . . . .
2.3.12 Setup and Maintenance of Development Tools and
iii
.
.
.
.
.
.
.
.
.
.
.
.
2
3
3
3
3
4
4
4
4
5
5
5
6
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
Resources
7
8
10
10
10
11
12
12
13
13
14
14
15
16
17
18
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
2.4
2.5
2.6
2.7
2.8
2.9
2.3.13 Totals . . . . . . . . . . . . . . . . .
Gantt . . . . . . . . . . . . . . . . . . . . .
Burndown Chart . . . . . . . . . . . . . . .
Issues . . . . . . . . . . . . . . . . . . . . .
2.6.1 C# Compiler . . . . . . . . . . . . .
2.6.2 GitHub DDoS . . . . . . . . . . . . .
2.6.3 SDM . . . . . . . . . . . . . . . . . .
2.6.4 MSSQL . . . . . . . . . . . . . . . .
2.6.5 ASP.NET Web API . . . . . . . . . .
2.6.6 Naming conventions . . . . . . . . .
2.6.7 LATEX . . . . . . . . . . . . . . . . .
2.6.8 Disk Space . . . . . . . . . . . . . . .
2.6.9 File Transferring . . . . . . . . . . .
2.6.10 Construction Work . . . . . . . . . .
Internal Risks . . . . . . . . . . . . . . . . .
2.7.1 Low experience with the development
2.7.2 Unfamiliarity with technology . . . .
2.7.3 Unfamiliarity with tools . . . . . . .
2.7.4 Illness . . . . . . . . . . . . . . . . .
2.7.5 Other engagements . . . . . . . . . .
2.7.6 Other subjects . . . . . . . . . . . .
2.7.7 Underestimation of implementation .
External Risks . . . . . . . . . . . . . . . . .
2.8.1 Deaths . . . . . . . . . . . . . . . . .
2.8.2 Unreachable Customer . . . . . . . .
Procedures for Quality Assurance . . . . . .
2.9.1 Documentation and report . . . . . .
2.9.2 Group dynamics . . . . . . . . . . .
2.9.3 Customer relations . . . . . . . . . .
2.9.4 Advisor relations . . . . . . . . . . .
3 Preliminary Studies
3.1 Development Methodology
3.1.1 Waterfall . . . . . .
3.1.2 Scrum . . . . . . .
3.1.3 Our choice . . . . .
3.1.4 In Practice . . . . .
3.2 Technology . . . . . . . .
3.2.1 Windows 7, 8 . . .
3.2.2 Ubuntu Linux . . .
3.2.3 OS X . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
iv
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
process
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
18
19
20
21
21
21
21
22
22
23
23
23
23
24
25
25
25
25
26
26
26
27
28
28
28
29
29
29
29
29
.
.
.
.
.
.
.
.
.
30
31
32
33
34
38
39
39
39
39
3.3
3.4
3.5
3.6
3.7
3.8
II
3.2.4 Visual Studio 2012 . . . . . . . . . .
3.2.5 .NET and Mono . . . . . . . . . . . .
3.2.6 MonoDevelop . . . . . . . . . . . . .
3.2.7 Google Chrome with Developer Tools
3.2.8 Doxygen . . . . . . . . . . . . . . . .
3.2.9 LATEX . . . . . . . . . . . . . . . . .
3.2.10 Git . . . . . . . . . . . . . . . . . . .
3.2.11 Trello . . . . . . . . . . . . . . . . .
3.2.12 Web API . . . . . . . . . . . . . . .
3.2.13 Dropbox . . . . . . . . . . . . . . . .
3.2.14 Google Drive . . . . . . . . . . . . .
3.2.15 Microsoft SQL server . . . . . . . . .
3.2.16 Entity Framework . . . . . . . . . . .
3.2.17 Microsoft ASP.NET Web API . . . .
3.2.18 Server . . . . . . . . . . . . . . . . .
3.2.19 Database . . . . . . . . . . . . . . .
Extra Tools . . . . . . . . . . . . . . . . . .
3.3.1 LATEX Editors . . . . . . . . . . . . .
3.3.2 LATEX Compilers . . . . . . . . . . .
3.3.3 Git Tools . . . . . . . . . . . . . . .
3.3.4 LibreOffice Calc . . . . . . . . . . . .
3.3.5 Raw Text Editors . . . . . . . . . . .
3.3.6 Communication . . . . . . . . . . . .
Templates . . . . . . . . . . . . . . . . . . .
Documents . . . . . . . . . . . . . . . . . .
Coding . . . . . . . . . . . . . . . . . . . . .
3.6.1 Documentation . . . . . . . . . . . .
3.6.2 Naming and variables . . . . . . . . .
3.6.3 Comments and layout . . . . . . . .
3.6.4 Variables, types, and declaration . .
3.6.5 Try-catch, exceptions and using . . .
Static Members . . . . . . . . . . . . . . . .
3.7.1 Clean Coding . . . . . . . . . . . . .
APIs . . . . . . . . . . . . . . . . . . . . . .
3.8.1 ASP .NET Web API . . . . . . . . .
Requirements and Architecture
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
39
40
40
40
40
40
41
41
42
42
43
43
43
43
43
44
44
44
45
45
45
45
45
45
46
46
46
47
47
48
49
50
50
51
51
52
4 Requirements
53
4.1 Functional Requirements . . . . . . . . . . . . . . . . . . . . . . . . 54
v
4.2
4.3
Non-Functional Requirements . . . . . . . . . . . . . . . . . . . . . 55
User Stories . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56
5 Architecture
5.1 Stakeholders . . . . . . . . .
5.1.1 Customer . . . . . .
5.1.2 Implementers . . . .
5.1.3 Course Staff . . . . .
5.2 Quality Attributes . . . . .
5.2.1 Modifiability . . . . .
5.2.2 Performance . . . . .
5.2.3 Availability . . . . .
5.2.4 Interoperability . . .
5.2.5 Readability . . . . .
5.3 Views . . . . . . . . . . . .
5.3.1 Process View . . . .
5.3.2 Logical View . . . .
5.3.3 Scenario View . . . .
5.3.4 Physical View . . . .
5.4 Class diagram . . . . . . . .
5.5 Patterns . . . . . . . . . . .
5.6 Tactics . . . . . . . . . . . .
5.6.1 Modifiability . . . . .
5.6.2 Performance . . . . .
5.6.3 Availability . . . . .
5.6.4 Interoperability . . .
5.6.5 Readability . . . . .
5.7 Changes to the architecture
III
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
58
59
59
59
59
59
59
59
60
60
60
60
60
61
61
62
63
63
63
64
64
64
64
64
64
Implementation
69
6 Sprint 1
6.1 Time Frame . . . .
6.2 Original Plan . . .
6.3 Revised Plan . . .
6.4 Development . . .
6.5 Other Work . . . .
6.6 Backlog . . . . . .
6.7 Customer Meeting
6.8 Retrospective . . .
70
71
71
71
71
72
72
72
73
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
vi
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
7 Sprint 2
7.1 Time Frame . . . .
7.2 Original Plan . . .
7.3 Revised Plan . . .
7.4 Development . . .
7.5 Other Work . . . .
7.6 Backlog . . . . . .
7.7 Customer Meeting
7.8 Retrospective . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
74
75
75
75
76
76
76
77
77
8 Sprint 3
8.1 Time Frame . . . .
8.2 Original Plan . . .
8.3 Revised Plan . . .
8.4 Development . . .
8.5 Other Work . . . .
8.6 Backlog . . . . . .
8.7 Customer Meeting
8.8 Retrospective . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
78
79
79
79
79
79
80
80
80
9 Sprint 4
9.1 Time Frame . . . .
9.2 Original Plan . . .
9.3 Revised Plan . . .
9.4 Development . . .
9.5 Other Work . . . .
9.6 Backlog . . . . . .
9.7 Customer Meeting
9.8 Retrospective . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
81
82
82
82
82
82
83
83
83
10 Web Application Implementations
84
10.1 Microsoft ASP.NET MVC . . . . . . . . . . . . . . . . . . . . . . . 85
10.2 Microsoft ASP.NET Web API . . . . . . . . . . . . . . . . . . . . . 85
11 Testing
11.1 Testplan . . . . . . . . . . . . . .
11.2 Testing Methodology . . . . . . .
11.3 Testing . . . . . . . . . . . . . . .
11.3.1 Functionality and MVC .
11.3.2 WebAPI and Finalization
11.4 Test Results . . . . . . . . . . . .
vii
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
87
88
88
88
88
89
89
11.4.1 Functionality- and MVC-Results . . . . . . . . . . . . . . . . 89
11.4.2 WebAPI-Results and Finalization . . . . . . . . . . . . . . . 90
11.4.3 Implications of Test Results . . . . . . . . . . . . . . . . . . 90
IV
Evaluation and Conclusion
12 Evaluation
12.1 The Process . . . . . . . . . . .
12.2 Quality Assurance . . . . . . .
12.2.1 External Communication
12.2.2 Internal communication
12.3 Implementation . . . . . . . . .
12.3.1 Testing . . . . . . . . . .
12.4 Group dynamics . . . . . . . . .
12.5 Risk management . . . . . . . .
.
.
.
.
.
.
.
.
91
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
92
93
93
93
94
94
95
95
95
13 Conclusion and Future Work
97
13.1 Conclusion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 98
13.2 Future Work . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 99
Bibliography
100
V
Appendices
101
A Database setup
102
B Templates
104
B.1 Supervisor meeting . . . . . . . . . . . . . . . . . . . . . . . . . . . 104
B.2 Customer meeting . . . . . . . . . . . . . . . . . . . . . . . . . . . . 105
B.3 Weekly report . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 106
C Dictionary
108
D Test view
111
D.1 ModuleAPI response . . . . . . . . . . . . . . . . . . . . . . . . . . 112
D.2 API help page . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 113
D.3 Upload successful . . . . . . . . . . . . . . . . . . . . . . . . . . . .
viii
List of Figures
2.1
2.2
2.3
Gantt Chart . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
Project Burndown Chart . . . . . . . . . . . . . . . . . . . . . . . . 20
SDM error . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
3.1
3.2
3.3
3.4
Unmodified Waterfall Model [6]
Agile Methods [2] . . . . . . . .
Example Scrum Board [5] . . .
Example Trello Board . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
32
33
36
42
5.1
5.2
5.3
5.4
5.5
5.6
5.7
5.8
Logical View . . . . . . . . . . . . . . . . . . . .
Scenario View . . . . . . . . . . . . . . . . . . .
Physical View . . . . . . . . . . . . . . . . . . .
Digital class diagram . . . . . . . . . . . . . . .
Temporary process view . . . . . . . . . . . . .
Process View of Final Architecture . . . . . . .
Logical View of Final Architecture of MVC . . .
Logical View of Final Architecture of Web API
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
61
62
62
63
65
66
67
68
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
D.1 The Web API help page . . . . . . . . . . . . . . . . . . . . . . . . 113
D.2 The response from Web API, success . . . . . . . . . . . . . . . . .
D.3 The local html file we used to test against the server . . . . . . . .
ix
List of Tables
1.1
1.2
1.3
Customer Representatives . . . . . . . . . . . . . . . . . . . . . . .
Group Members . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Course Staff . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2.1
2.2
2.3
2.4
2.5
2.6
2.7
2.8
2.9
2.10
2.11
2.12
2.13
2.14
2.15
2.16
2.17
2.18
2.19
2.20
2.21
2.22
2.23
2.24
2.25
Overview of Roles and Responsibilities . . . . . . .
Revised List of Roles and Responsibilities . . . . .
WBS: Pre-Study . . . . . . . . . . . . . . . . . . .
WBS: Requirements . . . . . . . . . . . . . . . . .
WBS: General Project Management . . . . . . . . .
WBS: Architecture . . . . . . . . . . . . . . . . . .
WBS: Technical Documentation . . . . . . . . . . .
WBS: Weekly Report . . . . . . . . . . . . . . . . .
WBS: Final Report . . . . . . . . . . . . . . . . . .
WBS: Implementation - Webassistenten . . . . . . .
WBS: Implementation - Import-System Service . .
WBS: Implementation - Miscellaneous . . . . . . .
WBS: Setup and Maintenance of Tools . . . . . . .
WBS: Totals . . . . . . . . . . . . . . . . . . . . . .
Size of WBS Packages in Whole Days . . . . . . . . .
Gantt Packages and Time Frames . . . . . . . . . . .
Risk: Low experience with the development process
Risk: Unfamiliarity with technology . . . . . . . . .
Risk: Unfamiliarity with tools . . . . . . . . . . . .
Risk: Illness . . . . . . . . . . . . . . . . . . . . . .
Risk: Other engagements . . . . . . . . . . . . . . .
Risk: Other subjects . . . . . . . . . . . . . . . . .
Risk: Underestimation of implementation . . . . . .
Risk: Deaths . . . . . . . . . . . . . . . . . . . . .
Risk: Unreachable Customer . . . . . . . . . . . . .
4.1
Requirements Key
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
4
5
5
8
9
11
12
12
13
13
14
14
15
16
17
18
18
19
19
25
25
25
26
26
26
27
28
28
. . . . . . . . . . . . . . . . . . . . . . . . . . . 54
x
4.2
4.3
4.4
4.5
4.6
4.7
4.8
4.9
Functional requirements . .
Non-functional requirements
User Story: C1 Customer . .
User Story: C2 Customer . .
User Story: D1 Developer .
User Story: D2 Developer .
User Story: D3 Developer .
User Story: C3 Customer . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
xi
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
54
55
56
56
56
56
57
57
Part I
Project Introduction
1
Chapter 1
Introduction
This chapter gives a brief introduction to our project, including the customer,
project purpose, project background, problem description among other subjects.
2
1.1 Project name - Automatic Import of Completed Ads
The project is named Automated Import of Completed Ads by the
customer; Adressavisen AS. The team is to create a framework for automatic
import of real estate ads into Adresseavisen’s internal database and order system.
1.2 Customer - Adresseavisen AS
Adresseavisen is a regional newspaper in the Norwegian city Trondheim, and the
surrounding area. It publishes it’s newspaper in Trøndelag and Nordmøre on a
daily basis except on Sundays. It is an independent, conservative newspaper with
a daily circulation of approximately 85000 NOK.
"In addition to the main newspaper, Adresseavisen owns several smaller local
newspapers in the Trøndelag region. They also own and operate a local radio
station, Radio-Adressa, and a local TV station, TV-Adressa (prior to 30 January
2006: TVTrøndelag). They also have a stake in the national radio channel Kanal
24. In addition, the newspaper owns the local newspapers Fosna-Folket, HitraFrøya, Levanger-Avisa, Sør-Trøndelag, Trønderbladet and Verdalingen." [7]
1.3 Project Purpose
The purpose of this project is to create a framework for automated import of
complete ads in the form of pdf-files. The pdf-files will be accompanied by data,
which shall be added to the database and used to create an order in Adresseavisens internal order system for ads. This framework will also be able to provide
customers with certain information that is to be supplied when they wish to have
an ad featured in Adresseavisen, such as available dates and ad-packages.
1.4 Project Background
Adresseavisen currently uses a system where ads to be featured on their website
or published in newspapers are created in their internal order system, with the use
of one of very many templates. This is very complex and an increasing amount of
customers use their own fully completed ads, in the form of pdf-files.
Adresseavisen now has the need for a system which can automate and simplify
the process of receiving these ads into the system, with the purpose of eventually
replacing the old system.
3
1.5 Problem Description
Our plug-in to Webassistenten will take a completed ad in the form of a pdf file
and save it to the appropiate folder. These folders could for instance have the ID
of the customer so that Adressa can easily identify which pdf belongs to which
customer.
Webassistenten will require certain data along with the pdf, such as date to
publish, module type (what kind of format it should be printed as in the newspaper) and which newspaper it will be printed in (known as product). In the case
of real estate ads, the required data also includes locations, zip code, zip area,
address, responsible realtor, phone number of aforementioned realtor, email etc.
These data will be saved into a database internally in their system.
1.6 Existing Technology
There currently exists no technology equivalent to ours that we are aware of. The
technology that Adressa uses today in Webassistenten is different from the product
we’re developing for them in that the current solution doesn’t accept a pdf as input.
Instead it takes in pictures in addition to the accompanying data, and generates
a pdf based on this input.
The already existing alternative that Webassistenten utilizes isn’t as automated
as they would like it to be, and the real estate agents might not get the perfectly
designed ad in the pdf through this auto-generation.
1.7 Stakeholders
1.7.1 Customer
Customer: Adresseavisen AS
Name
Asle Dragsten Liebech
Jostein Danielsen
E-mail
[email protected]
[email protected]
Table 1.1: Customer Representatives
The customer is, along with our group, the most important stakeholder of our
project. The project supplies the customer with a product that hopefully will
improve their business, as well as saving them money they would otherwise have
had to spend developing the product themselves.
4
It is important for the customer that we have a successful project resulting in
a good product because delivering a poor product would require unnecessary work
on their end.
1.7.2 Group Members
Name
Audun Skjervold
Erlend Løkken Sigholt
Hong-Dang Lam
Truls Hamborg
E-mail
[email protected]
[email protected]
[email protected]
[email protected]
Table 1.2: Group Members
The members of our group are the other most important stakeholders of the
project. This is mainly because the course gives course credit equivalent to two
regular courses, making it more important to achieve a good grade.
1.7.3 Course Staff
Name
Meng Zhu
Reidar Conradi
Role
Group Supervisor
Course Responsible
E-mail
[email protected]
[email protected]
Table 1.3: Course Staff
The course staff are the final stakeholders. The staff wants satisfied customers, and
they want the students who participate in the course to achieve good results. To
accomplish this, we need to deliver a well written report with good documentation
of the project. We also need to keep our supervisor satisfied throughout the project,
supplying him with good under-way documentation.
1.8 Measure of Project Effects
The completed ads produced through our product will in theory not be distinguishable from completed ads produced without it, although the design might
differ from the auto-generated versions that would otherwise have been made. For
this reason, we do not expect to see any effects of this project.
5
We do however hope that Adressa and their customers will see effects in the
form of time and money saved. We also believe that the real estate agents to a
larger extent will find the submitted ads being accepted in the format and design
they want them to be.
1.9 Duration
The introduction to the course started on Wednesday 21.08.2013 when we all met
in S6 for information and were introduced to the customer and the project.
The final delivery is three months after the course start, on 21.11.2013, at which
point we will have a short 45 minute presentation where we introduce the product
and our experience with this course.
6
Chapter 2
Project Management
This chapter contains information about the management of our project. It describes our plans through the Work Breakdown Structure and Gantt diagram, as
well as role distribution, issues we had during the project, and risk analysis. It
also contains our procedures for quality assurance.
7
2.1 Roles
In the beginning of the project we defined the team roles as in the following table.
Role
Scrum Master
Name
Truls Hamborg
Documentation Manager
Truls Hamborg
Product Owner (scrum role)
Adressa
Lead coder
Erlend Sigholt
Secretary
Erlend Sigholt
Implementation manager
Audun Skjervold
Customer and supervisor contact
Hong-Dang Lam
System Architect
Hong-Dang Lam
Test Manager
Everyone
Responsibility
Scrum master/process manager leads the stand-up
meeting. Makes sure the
team follows the agreedupon process.
Ensures documentation coherency.
The customer, owns the
product
Oversees coding conventions and makes sure we
follow the "clean coding"
principles.
Takes notes during meeting(s)
Takes care of learning the
framework and implementation of the code.
Contact-person for customer and supervisor
Create and maintain the architecture of the system
Responsible for testing the
code.
Table 2.1: Overview of Roles and Responsibilities
As the project progressed, the actual roles we fell into changed. Our development methodology changed from the planned scrum to a more sequential method
(see sections 3.1.3 and 3.1.4 for more on this), and as a result roles such as the
Scrum Master were dropped. A table of the new role division can be seen below.
8
Name
Truls Hamborg
Role
Documentation Manager
Hong-Dang Lam
System Architect
Lead Coder
Customer and Supervisor Contact
Erlend Løkken Sigholt
Project Manager
Implementation Manager
Secretary
Audun Skjervold
Head of Quality Assurance
Technical Advisor
Responsibility
Ensures good design and
structure in internal and external documentation.
Create and maintain the architectural documentation.
Ensure implementation adheres to the documentation and prevent architectural drift/erosion.
Main contributor of code to
the implementation.
Main point of contact between the group and the
customer and supervisor.
Keep track of progress and
keep the group updated and
on course, coordinate the
team and prioritize tasks.
Making final decisions regarding implementation.
Responsible for taking notes
during meetings.
Chief responsible for the
quality of produced documentation.
Help achieve good technical solutions through advice
and guidance based in familiarity with the technology.
Table 2.2: Revised List of Roles and Responsibilities
9
2.2 Time schedule
In this section follows the time planning and schedule, in the form of a Work Breakdown Stucture (WBS), and a Gantt diagram. The Gantt diagram contains the
implementation packages in the form of sprints, seeing as the project plan called for
an agile-like organization of the implementation phase, with multiple iterations on
each implementation package, and the corresponding detailed architecture. More
information on that can be found in the overall project plan chapter.
2.3 Work Breakdown Structure
In this section you will find the main packages of our revised work breakdown
structure.
2.3.1 Estimation methods
The method used to split work into packages, and estimate the total work hours of
the packages was mostly one of cooperative iteration. Work was split into packages
by consensus in a group discussion after analysis of the project, and then assigned
work hours.
Hours were assigned by each member submitting a suggestion, and then the
average of those values was selected, possibly after some discussion if the discrepancies were large. When all packages were assigned such values, they were compared
to each other and adjusted if inconsistencies were found. Then, at the end, the
total sum of all hours were compared to the expected total of hours. This process
was then repeated a few times until a satisfactory result was achieved.
10
2.3.2 Pre-Study
This package contains sub-packages for most the basic work done in the preliminary
studies phase, before the start of implementation. The total number of hours in
this package is 174, or about 9 person days per person.
#
Sub-package
# persons
Hours/person
Total # of
hours
1.1
Choice
and
study of software/tools
Technology
learning
and
acclimatization
Overall
planning/management
Role
distribution
Process/Sprint
planning
Standards
Milestone planning and review
4
2
8
Person-days (ca
5h)/persons assigned
0.4
4
25
100
5
4
8
32
1.6
4
1
4
0.2
4
5
20
1
1
4
2
2
2
8
0.4
0.4
1.2
1.3
1.4
1.5
1.6
1.7
Table 2.3: WBS: Pre-Study
11
2.3.3 Requirements
This package consists of the gathering and analysis of functional and non-functional
requirements. The total number of hours in this package is 10, or 1 person day
per person.
#
Sub-package
# persons
Hours/person
Total # of
hours
2.1
Functional
requirements
Non-functional
requirements
4
2.5
10
Person-days(ca
5h)/persons
assigned
0.5
4
2.5
10
0.5
2.2
Table 2.4: WBS: Requirements
2.3.4 General Project Management
This package contains sub-packages related to project and group management,
such as meetings and managing plans. The total number of hours in this package
is 152, or 7.6 person days per person.
#
Sub-package
# persons
Hours/person
Total # of
hours
3.1
Meetings with
customer(s)
Advisor meetings
Meeting
with
the group (internal meetings not
directed towards
other packages)
Underway administration
Plan
maintenance/updating
4
3
12
Person-days(ca
5h)/persons
assigned
0.6
4
5
20
1
4
5
20
1
4
20
80
4
4
5
20
1
3.2
3.3
3.4
3.5
Table 2.5: WBS: General Project Management
12
2.3.5 Architecture
This package contains sub-packages for the design and documentation of the software architecture. The total number of hours in this package is 55, or 5 person
days per person.
#
Sub-package
# persons
Hours/person
Total # of
hours
4.1
Overall architecture
Detailed architecture
Patterns
Quality
Attributes
2
10
20
Person-days(ca
5h)/persons
assigned
2
3
5
15
1
2
2
5
5
10
10
1
1
4.2
4.3
4.4
Table 2.6: WBS: Architecture
2.3.6 Technical/API documentation
This package contains the sub-packages related to the creation and review of the
technical documentation. The total number of hours in this package is 33, or 3.4
person days per assigned person.
#
Sub-package
# persons
Hours/person
Total # of
hours
5.1
5.2
5.3
Standards
Writing
Review
1
2
4
5
10
2
5
20
8
Table 2.7: WBS: Technical Documentation
13
Person-days(ca
5h)/persons
assigned
1
2
0.4
2.3.7 Documentation - Weekly report
This package contains all sub-packages related to the creation of the weekly reports
for the meetings with our advisor. The total number of hours in this package is
16, or 0.8 person days per person.
#
Sub-package
6.1.1 Agenda
6.1.2 Hours planned &
work done
6.1.3 Finalization
# persons
Hours/person
Total # of
hours
4
4
1
2
4
8
Person-days(ca
5h)/persons
assigned
0.2
0.4
4
1
4
0.2
Table 2.8: WBS: Weekly Report
2.3.8 Final Report
This package consists of the writing of the various parts of this final report. The
total number of hours in this package is 210, or about 11.5 person days per person.
#
Sub-package
# persons
Hours/person
Total # of
hours
7.1
7.2
7.3
7.4
Pre-study
Architecture
Documentation
Implementation
4
2
4
4
12.5
10
20
15
50
20
80
60
Table 2.9: WBS: Final Report
14
Person-days(ca
5h)/persons
assigned
2.5
2
4
3
2.3.9 Implementation - Webassistenten
The sub-packages in this package are the parts of implementation related to the
interoperability of our product with the customer’s already existing system
Webassistenten. The total number of hours in the package is 30, or 3 person days
per assigned person.
#
Sub-package
# persons
Hours/person
Total # of
hours
8.1
Enable display
of
available
products
(no
GUI is to be
implemented)
Listing the next
5 available booking dates for a
selected product
Listing modules
available for a
selected product
2
5
10
Person-days(ca
5h)/persons
assigned
1
2
5
10
1
2
5
10
1
8.2
8.3
Table 2.10: WBS: Implementation - Webassistenten
15
2.3.10 Implementation - Import-System Service
This package contains the sub-packages that are the parts of implementation related to importing files and data, and placing the data into the database. The
total number of hours in the package is 60, or 6 person days per assigned person.
#
Sub-package
# persons
Hours/person
Total # of
hours
9.1
Receiving pdffile and save in
correct folder
Putting accompanying data in
Webassistenten
database (table
“prospekt”)
Checking
accompanying
data for required fields
Placing an order
in the internal
order system
2
5
10
Person-days(ca
5h)/persons
assigned
1
2
10
20
2
2
5
10
1
2
10
20
2
9.2
9.3
9.4
Table 2.11: WBS: Implementation - Import-System Service
16
2.3.11 Implementation - Miscellaneous
This package contains the rest of the sub-packages related to implementation. The
total number of hours in the package is 200, or 17 person days per assigned person.
#
Sub-package
10.1 Database communication
interface (Entity
Framework)
10.2 Bugfixing
10.3 Workarounds
10.4 Testing
10.5 Underway learning
# persons
Hours/person
Total # of
hours
2
10
20
Person-days(ca
5h)/persons
assigned
2
2
2
4
4
30
30
15
20
60
60
60
80
6
6
3
4
Table 2.12: WBS: Implementation - Miscellaneous
17
2.3.12 Setup and Maintenance of Development Tools and Resources
Because of the sheer number of various development tools and versions of those
tools we had to install and use, we created a package for the installation and
maintenance of these tools. The total number of hours in this package is 88, or
4.4 person days per person.
#
Sub-package
11.1 Database Setup
11.2 Visual
Studio Setup and
Installation
11.3 Version control
system
11.4 Configuration
and
maintenance of software packages
etc.
# persons
Hours/person
Total # of
hours
4
4
10
5
40
20
Person-days(ca
5h)/persons
assigned
2
1
4
2
8
0.4
4
5
20
1
Table 2.13: WBS: Setup and Maintenance of Tools
2.3.13 Totals
The total time in in all our packages are listed in the following table.
# persons
4
Hours per person
279.5
Total # of hours
Person days per person
1118
55.9
Table 2.14: WBS: Totals
18
2.4 Gantt
#
1
2
3
4
5
6
7
8
9
10
11
WBS Package
Pre-study
Requirements
General project management
Architecture
Technical/API documentation
Documentation
Report
Implementation - Webassistenten
Implementation - import-system service
Implementation - Misc.
Setup and Maintenance of Development
Tools and Resources
Size (Whole days)
9
1
8
5
4
1
12
3
6
18
4
Total:
71
Table 2.15: Size of WBS Packages in Whole Days
Gantt package name
Pre-study (Includes requirements)
Requirements
General project management and
documentation
Sub-package: Overall architecture and Quality Attributes
Technical/API documentation
Report
Sprint 1 (8, 9, 10, 4.2 and 4.3)
Sprint 2 (8, 9, 10, 4.2 and 4.3)
Sprint 3 (8, 9, 10, 4.2 and 4.3)
Sprint 4 (8, 9, 10, 4.2 and 4.3)
Setup and Maintenance of Development Tools and Resources
Size (Whole days)
9
Start
21.08
Finish
30.08
1
9
30.08
21.08
6.09
21.11
2
9.09
13.09
4
12
10
10
10
10
4
28.1
30.08
16.09
30.09
14.1
28.1
21.08
7.11
20.11
27.09
11.1
25.1
8.11
Table 2.16: Gantt Packages and Time Frames
19
Figure 2.1: Gantt Chart
2.5 Burndown Chart
Figure 2.2: Project Burndown Chart
Red: Planned hours worked. Blue: Hours worked
20
2.6 Issues
The project did not go as smoothly as we had hoped. The group agreed on pretty
much everything, but the issues we had were mostly related to the software and
tools not cooperating or working as we expected.
2.6.1 C# Compiler
When we tried to add the database to our project via the Entity Framework we had
troubles with the C# compiler not being found. This was due to the installation
of the Visual Studio 2012 Release Candidate edition (which had expired), so we
had to uninstall this RC version to install the "normal" Visual Studio 2012 which
lead to the compiler not working - we couldn’t add new items, compile or make a
new project.
There was however a quickfix to repair the compiler by using the gacutil utility
software included with Visual Studio 2012. This command in cmd fixed it:
gacutil /u Microsoft.VisualStudio.CSharp.Services.Language.Interop
2.6.2 GitHub DDoS
On October 14, the day of the midterm delivery, GitHub experienced a DDoS
attack. This resulted in some of the files we were working on for the report
becoming locked mid-commit and mid-pull, and preventing us from performing a
new git pull. This also prevented some of us from compiling, due to a previous
commit containing errors having been pulled.
2.6.3 SDM
NTNU’s Gurutjenesten offers a free MSDNAA account which we can use to download Microsoft software from MSDN software center (Microsoft Developer Network). To download software from MSDN we had to use Secure Download Manager (henceforth referred to as SDM), by opening the .SDX file obtained from the
MSDN webpage. The download went fine however the unpacking of the files gave
us an unknown error without any further information.
21
Figure 2.3: SDM error
2.6.4 MSSQL
The installation of MSSQL did not go as smoothly as we had hoped for, we tried
to install the MSSQL Management Studio Express first, but this did not install a
server instance of the database so we couldn’t restore the backup dump we received
from the customer. When we had installed a server instance there was problem
finding the database dump file - the database dump file needs to be in the correct
folders, otherwise the management studio software won’t be able to see it. The
backup dump was also too big for an express version.
2.6.5 ASP.NET Web API
During our adaptations of functions from ASP.NET MVC to Web API, we ran
into several problems. The first one was that our unfamiliarity with the technology required us to do some testing before we managed to follow the API conventions, which were different from most similiar conventions that we were familiar
with. The next issue was that WebAPIs model binding feature does not play
well with Entity Framework classes, something which proved to be the cause of a
large amount of time spent troubleshooting. Finally, we ran into issues with data
formatters when Web API was supposed to automatically parse input data from
HTTP Request bodies, but didn’t, which also was a timesink for troubleshooting
and solutions.
22
2.6.6 Naming conventions
A table in the database was named "System" which collided with the namespace
"System" in C#. This was due to the EF generating a System.cs file which was
used instead of the actual System namespace whenever there was a
using System .*;
statement in our code.
2.6.7 LATEX
Most of the group members had previous experience with LATEX beforehand,
though none of us have used it to create as large a report as this current one.
Most of us have used sections and subsections, but in this report we needed stuff
like subsubsubsections which do not exist in LATEX. We also had problems with
placing figures/pictures at the correct position in the document, because LATEX
tries to optimize the text and figures so there’s less blank space in the document,
however this jumbled our ordering of chapters, figures and text. We also had
problems with tables to make them appear decent looking.
2.6.8 Disk Space
SSDs tend to be very expensive compared to normal HDD (when comparing cost
per byte - however the average SSD are somewhere around 30% faster than the
average HDD). Because all of the members in our group have an SSD as their
system drive, we experienced problems with limited disk space. Because Windows
isn’t the main OS for everyone, we had to install it on top of the main OS on some
of the computers. Windows 7 needs 30 GiB disk space, and including all the tools
needed to get the code up and running (all the development tools and database
import etc.) there need to be somewhere around 60 GiB of free space on the disk.
2.6.9 File Transferring
Because the database backup dump was 10.8GiB it was not feasible to download
the file via Adressa’s server. The customer brought a copy of the file for us on an
external USB HDD. We ended up with a copy of the file on one of our computers,
but had trouble transferring it to another machine without an external HDD. USB
memory sticks were not viable because they are usually less than 10GiB and FAT32
format which has a maximum file size limit of 4GiB.
23
2.6.10 Construction Work
The IT building at NTNU has been under construction work since the summer
of 2013, and has therefore been affected by a lot of construction noise. This was
quite a disturbance when we were attempting to work.
Some of the rooms in the building were also off limits during certain periods,
thus limiting our possible workplaces drastically. We were only able to book a
room on Wednesdays between the hours of 10 and 14 and Thursdays from 10 to
16, leaving us to search for available rooms whenever we wanted to work together
during other time slots.
24
2.7 Internal Risks
2.7.1 Low experience with the development process
What:
Probability:
Impact:
Action:
The group doesn’t have much experience with lengthy projects
High
Low-High
Reduce by regularly reviewing progress and making use of
supervisor meetings etc.
Table 2.17: Risk: Low experience with the development process
2.7.2 Unfamiliarity with technology
What:
Probability:
Impact:
Action:
Some members of the group have no experience with the
programming language in use, and only one has used the
relevant framework. Will require extra time for learning.
Moderate
Low-Moderate
Reduce by group members with experience
coaching others in the relevant technology
and practices. Set time aside for learning.
Table 2.18: Risk: Unfamiliarity with technology
2.7.3 Unfamiliarity with tools
What:
Probability:
Impact:
Action:
Some members of the group have no experience with
the tools we’re using, it’s complicated to
install due to the different versions of the tools.
Additionally, there are a lot of tools needed to start.
Moderate
Low-Moderate
Reduce by group members with experience
coaching others in the relevant technology
and practices. Set time aside for learning.
Debugging via Google.
Table 2.19: Risk: Unfamiliarity with tools
25
2.7.4 Illness
What:
Probability:
Impact:
Action:
As winter approaches, the probability of group members becoming
ill increases. Being a small group, this might be critical.
Moderate
Low-High
Do not tailgate deadlines. Work steadily, and have margins
and practices. Expect some members to not produce at 100%
every week.
Table 2.20: Risk: Illness
2.7.5 Other engagements
What:
Probability:
Impact:
Action:
Group members have extracurricular activities that require time
on certain dates during the semester.
This might cause absence and/or reduced work-output.
Moderate
Low
Plan for it well in advance. It seems however that the time required
is fairly concentrated and/or pre-planned, so it should be easy to
plan around.
Table 2.21: Risk: Other engagements
2.7.6 Other subjects
What:
Probability:
Impact:
Action:
Customer driven projects isn’t the only subject we’re assigned to
this semester. The other subjects might have projects too so we
might not be able to allocate enough time for the project.
High
Moderate
Try to plan for it in advance. All the courses have
clear deadlines and we should be able to plan ahead.
Table 2.22: Risk: Other subjects
26
2.7.7 Underestimation of implementation
What:
Probability:
Impact:
Action:
We have estimated that the implementation scope is
not a significant majority of the project, and possibly
even smaller than the process and documentation parts.
If we somehow have misjudged this, we will face
significant delays/increased workload when the plan will have to
be adjusted.
Low
High
Ensure to plan for more time for the project than we expect to need.
Do not rush the pre-study, and familiarize ourselves sufficiently with
all aspects.
Ensure we have time to work overtime if necessary during the
implementation period/sprints.
Table 2.23: Risk: Underestimation of implementation
27
2.8 External Risks
2.8.1 Deaths
What:
Probability:
Impact:
Action:
There’s always a chance of a family member passing away, leading to
absence.
Low
High
Be understanding, try to reschedule working hours.
Table 2.24: Risk: Deaths
2.8.2 Unreachable Customer
What:
Probability:
Impact:
Action:
Customer might be on vacation, in a meeting or not able to respond
instantly.
This affects development and database setup the most.
Medium
Low
Wait and call again or send and email or short message service
Set up our own local database
Table 2.25: Risk: Unreachable Customer
28
2.9 Procedures for Quality Assurance
This section is about our routines to ensure the quality of the project - both
including the product and its report.
2.9.1 Documentation and report
All written material produced by the group should be proof-read by at least one
of the other group members. All meeting agendas and minutes will follow the
template as shown in Appendix B on page 104.
2.9.2 Group dynamics
Inside the group, all the communication will be done in Norwegian. We have
working hours each weekday from 10:15 except Tuesdays. We start each working
day with a status report from each member. Communication is done by email,
Skype, SMS and Facebook.
2.9.3 Customer relations
There will be meetings with the customer regularly to keep in contact and be sure
that we don’t miss important details about the product. All the communication
with the customer will be done in Norwegian. They can be translated to English
if need be.
2.9.4 Advisor relations
There will be meetings with the Advisor regularly. We started out weekly, but
when the sprints started we decided to have them between every sprint. Any
information which the Advisor should comment on or read should be sent to him
24 hours before the meeting. All contact with the Advisor will be done in English.
29
Chapter 3
Preliminary Studies
This chapter contains the information we found in our preliminary studies, and
the choices we made from the information we gathered. Covered here are processrelated topics such as development methodology, pros and cons of these, and which
we chose, as well as technology-related topics such as frameworks and standards.
30
3.1 Development Methodology
The course compendium proposes two types of development methodologies: the
sequential method Waterfall, and the agile method Scrum. This section supplies a
brief introduction to these two approaches, followed by our argumentation for and
against the two approaches in the case of our particular project. This subsequently
followed by a conclusion as to which approach(es) we chose for our project.
31
3.1.1 Waterfall
The Waterfall development method is a sequential design process. It is divided
into clearly defined, mostly separated phases, although there often is some overlap
between them.
The first phases focus on gathering requirements and writing initial documentation like design/architecture. Later phases move on to actual implementation,
then testing and verification, followed by final report. Maintenance after a "completed" project is also in some cases a part of the process.
The unmodified waterfall model is shown in the following figure.
Figure 3.1: Unmodified Waterfall Model [6]
32
3.1.2 Scrum
The scrum development method is an agile approach to development. It is an
iterative process consisting of several cycles or iterations. Each cycle, called a
Sprint, lasts a set length of time, typically one week to one month (7-30 days).
Within each of these cycles, most of the phases of a sequential method are
covered. A sprint starts with a sprint planning session, where tasks to be completed
in the sprint are planned and prioritized. The majority of the sprint consists of
completing these tasks, which usually are parts of the solution that then needs to
be integrated into the complete product. The sprint should result in a functioning
prototype, presented to the customer at the end of the sprint to receive feedback
for the next sprint, and concludes with a sprint review meeting.
The following figure depicts the typical flow in agile methods.
Figure 3.2: Agile Methods [2]
33
3.1.3 Our choice
Each of the proposed methods have their own advantages and disadvantages, that
make each of the methods respectively a better or worse fit for our project than
the other.
While the different methods have various advantageous features, not all of these
are applicable to our particular project, and others are negligible.
Below we have highlighted the most important advantages and disadvantages
of each method, while discussing whether or not the particular point is relevant to
our project, leading to a conclusion and our choice of method.
Waterfall
The following points are advantages of using the Waterfall method for projects,
both in general and for ours specifically.
• Waterfall is suitable for small projects because they are manageable to fully
plan up front. This fits our project description.
• It is easier to get every involved party on the same page with a thorough
plan, such as provided through the Waterfall method’s early phases. This
is beneficial to any project, but even more so in one such as ours, where
the team consists of students who may have other projects in other courses
running in parallel with this.
These next points are generally advantages of the Waterfall method, but are mostly
not applicable for our project for various reasons.
• Waterfall is a good method if you know everything about the project beforehand, or are able to acquire the required information and the full project
specification before the implementation phase. Due to the course schedule
and the relatively limited time frame of our project, we felt we needed to
start implementation earlier than a long planning and requirements phase
would allow.
• Sequential methods require little under-way feedback. This gives them the
edge over agile methods when access to the customer is restricted but specifications are expected to remain the same. While the specifications for our
project were expected to remain unchanged, our goal was to include the
customer in the process.
• The method supplies strong documentation as the first phases are focused entirely on creating these documents. However, while the course relies heavily
34
on documentation, the customer had no use for most of this documentation,
making this point less important for our project.
Lastly we have the biggest disadvantage of following a sequential method, which
applies to any project doing so.
• Sequential methods don’t handle change to the requirements particularly
well, making this approach risky in the case of the customer wishing to
modify the requirements during the implementation phase.
Scrum
Advantages of agile methods such as scrum include the following:
• Agile methods support rapid production of prototypes to present to the customer. This allows for easier correction of misunderstandings, because they
become apparent earlier in the process through the functioning prototypes.
• The method utilizes stand-up meetings, a scrum master, and optionally (and
preferably) a scrum board. These things do carry overhead, but provide both
the team and customer with frequent feedback, making the benefit much
greater than the disadvantage of the overhead.
35
Figure 3.3: Example Scrum Board [5]
• The approach is highly supported by online tools - e.g. Trello for the scrum
board - that let both parties (the team and the customer) stay up-to-date
on the planning and prioritizing of tasks during implementation.
While the next point generally is an advantage of agile development over a sequential process, it does contain some risks for a small project such as ours, as
explained below.
36
• Agile methods handle change to requirements very well, due to the high level
of underway involvement of the customer. The risk of weighting this point
when deciding on an approach is the possibility that there simply will not
be many changes, making this point irrelevant. Because we expected there
to be necessary changes to the requirements and specification during the
implementation, we decided this was important for our project.
There is one major disadvantage - or rather, risk - of choosing an agile approach.
• Agile methods rely on team members - or at least the project manager having experience with the full development process, assuming the entire
project is to be completed in agile fashion.
There is another important point when using an agile method, which can be the
deciding factor for some projects.
• Iterative approaches are heavily reliant on easy access to the customer for
continuous feedback and extraction of requirements. This is okay for our
project, as our customer is readily available through both e-mail and phone.
From our analysis of the two methods, we concluded that neither were a perfect
fit for every part of our project. We felt that our inexperience with projects such
as this one made it too difficult to complete the entire project through an agile
process, but we felt too unsure about the scope of the project to plan everything
ahead and do a straight sequential process. We did, however, wish to plan an
outline for the project, create a general architectural overview and gather the
most important requirements before we started implementation.
This led us to a decision of employing the waterfall method (or at least something similar) for the overarching process, with a relatively long period of planning
before starting implementation.
The customer suggested using an agile approach for implementation because it
is the same as they use. Using the same method as the customer might be beneficial
to the project, as it improves communication and work flow. We decided to complete the implementation phase as an agile process, divided into two-week sprints,
each consisting of a sprint planning meeting, then several days of implementation,
with semi-daily stand-up meetings, and ending in a sprint review meeting and a
functioning prototype.
37
3.1.4 In Practice
While we planned to utilize a combination of the two methods as described above,
we ended up with something a little different in practice.
The product proved to not be trivial to implement in agile fashion, because it
could not easily be divided into small parts or tasks. Because of this, we ended
up with very much a top-down approach, having to spend a lot of time on the big
things before we could do the little things. This led to a sequential type of process
also during implementation, as opposed to the agile iterative process we wanted
to employ.
While the process didn’t go quite as we had planned, we did manage to employ
some parts of scrum. We didn’t have official stand-up meetings, but the way we
started each day of development by letting each other know how things were going
and what we’d been working on was indeed very reminiscent of this aspect of agile
development.
We also kept a scrum board updated during each sprint to keep track of the
smaller tasks we were able to separate out from the rest, as well as the larger parts
that needed to be completed, such as figuring out the data flow and creating the
structure needed to satisfy this.
The most important aspects of agility that we utilized in our process were the
sprint planning meetings and end-of-sprint feedback sessions. We ended each sprint
with a customer meeting - as one should when working agile - to both figure out if
we were on the right track and what we had produced so far was satisfactory, and
to ascertain whether there would be changes in the requirements. The planning
meetings allowed us to more loosely plan the project because we were only focusing
on a relatively short period of time when making those plans.
Each customer meeting was followed by an internal sprint review session. These
sessions consisted of discussing both what we learned in the customer meeting and
otherwise during the sprint - such as the fact that we had been overly optimistic
in our planning of Sprint 1.
While we didn’t produce functioning prototypes for each sprint, the iterations
still served a purpose. The repeated process of planning, implementing and then
reviewing the previous period let us continuously improve, making better estimates
of how much we’d be able to do in a single sprint. The frequent contact with the
customer let us know when we were on track and figure out crucial changes in
time. Had we not kept the customer as involved, we might not have been able to
finish the product with as high quality and degree of customer satisfaction.
38
3.2 Technology
This subsection covers the technology we utilized during our project. It covers
the various operating systems our group members have been working on, editors
and IDEs for documents and code, as well as frameworks and platforms used
in development. Additionally it covers tools for version control and file sharing
between the group members, as well as communication platforms.
3.2.1 Windows 7, 8
Microsoft Windows 7 and Windows 8 are operating systems by the Microsoft
Corporation. They logically provide good support for .NET developments, seeing
as .NET targets the Windows platform and is made by Microsoft. Visual Studio
is made for Windows, and was our main IDE, so all group members had access to
PCs with Windows installed.
3.2.2 Ubuntu Linux
This OS is perhaps the most widely used distribution of Linux, developed by
Canonical Ltd. It provides good support for many development tools, except of
course Windows development. However we did find support for using it for some
Windows development. This operating system was used by one group member on
a laptop, when working on-site at NTNU. For coding, Mono with MonoDevelop
was used, while other tasks were mostly unaffected. The operating system provides
good support for other parts of the process, such as Git and LATEX.
3.2.3 OS X
OS X1 is the main operating system for the Macs developed by Apple. It is
based on the Mach kernel and as Ubuntu Linux it provides good support for many
development tools, except Windows development. One of our group members is
running OS X. He used OS X for writing documentation and rebooted to Windows
when writing code.
3.2.4 Visual Studio 2012
Visual Studio is Microsoft’s IDE for development for their platforms. This is the
main IDE we developed the framework on, seeing as it has very good integration
with C# and .NET platforms, which we were required to use. We decided to use
the Ultimate version because this version provides everything we might need.
1
http://en.wikipedia.org/wiki/OS_X
39
3.2.5 .NET and Mono
We were required to use ASP .NET MVC for our framework. ASP .NET MVC
is a framework for web applications which enables the use of the Model View
Controller (MVC) pattern. It is part of Microsofts .NET Framework suite, which
is the preferred way of interactiong with Windows systems and OSes.
Mono is the open source-, cross-platform version of the .NET suite, which we
used when not developing on Windows machines. It is available both for Windows,
OS X, most Linux Distributions, Android, and various other operating systems.
3.2.6 MonoDevelop
This is an open source IDE for development with Mono, available for OS X and
most Linux distributions. This was the IDE used when not developing on Windows
machines.
3.2.7 Google Chrome with Developer Tools
In the course of the project we made use of Google Chrome’s Developer Tools to
examine the HTTP messages that were sent in the testing of the project. Chrome’s
Developer Tools is one of many similar tools that allows examination of HTTP
requests and replies, and was chosen merely for convenience, because group members already had it installed. The console in the developer’s view can be used to
write JS in realtime.
3.2.8 Doxygen
Doxygen is a documentation generator that generates software reference documentation directly from source file comments and tags. It supports multiple programming languages, and outputs documentation in several formats, including, but not
limited to: HTML, LaTeX, and man pages.
We used Doxygen in our project to generate the API documentation requested
by the customer. It was chosen due to easy setup and configuration, support
for C#’s XML-comments and tags, as well as multi-platform support (Windows,
Linux and Mac OS X).
3.2.9 LATEX
We quickly chose LATEX for our typesetting, due to it being the de-facto standard for academic typesetting, with good support for both code snippets, tables,
references and bibliography.
40
Most of our group also had at least some experience using it, and some were
quite experienced, which made the choice easier.
3.2.10 Git
For our version control and source repository, we chose Git. This because we had
most experience with it, and found it easy to set up via GitHub (where we all
had accounts already). It also has the advantage of being distributed, so we could
avoid a single point of failure, and having a staging area where one can selectively
commit files according to whether they’re ready or not, instead of risking accidental
changes which might break something.
Both the source code and the entirety of the report source files were stored on
GitHub, since both would be catastrophical to lose, and were quite important to
have under version control in case we needed to track problematic changes.
To communicate with GitHub, we used various tools. Some of us used the built
in terminal with git installed, and some of us used GitBash. Git for windows was
also used on rare occasion.
3.2.11 Trello
To support our agile process and sprints, we used Trello for planning and control
of work flow. It is an online Scrum Board tool, where we can create work packages
and issues, while tracking who does what, and tracking backlog, finished modules,
and work in progress.
41
Figure 3.4: Example Trello Board
The above figure shows an example Trello board. You create cards (tasks) and
lists to contain and separate those cards into categories, such as Backlog, ToDo,
In Progress, Testing and Completed. The tasks can be assigned to the members
of the board, and there are handy functions available such as adding checklists to
cards to keep track of sub-tasks.
3.2.12 Web API
ASP.NET Web API is a framework for building web APIs on top of the .NET
Framework, it lets you create calls from the browser to the methods in the code,
this can be done via parameters or via JSON. The web API framework returns a
JSON-format of the given item, table or whatever was requested.
3.2.13 Dropbox
Dropbox is a syncing service that let you choose a local folder on your machine
that will be synced to the cloud. Dropbox lets you share folders and files inside a
shared Dropbox folder.
We used Dropbox for sharing and synchronizing internal documents that usually were only useful for a limited time, but might be referenced later.
42
3.2.14 Google Drive
Google Drive is Google’s productivity suite/office pack. The difference between
Drive and other office solutions (like Microsoft Office, OpenOffice/LibreOffice) is
that Drive exists in the cloud and lets the user simultaneously work on a document.
Google Drive was used for simultaneous collaboration on documents, where the
content was up for discussion, or it was advantageous to see what the others where
writing, as well as for dynamic internal documents like work logs.
3.2.15 Microsoft SQL server
The customer uses Microsoft SQL server as their database, and we received a
backup dump of their database. MSSQL is a relational database management
system developed by Microsoft. The first version of MSSQL was released in 1989
- a 16 bit version for OS/2 2 . The latest version of MSSQL is MSSQL version
11 (called MSSQL Server 2012 - codename Delali). There will be a new version
coming out in 2014 - MSSQL Server 2014 (version 12).
3.2.16 Entity Framework
The customer’s preference was that we utilized Microsoft’s Entity Framework to
connect to the database. The Entity Framework is an object-relational mapper
that enables .NET developers to access the database without writing the typical
data-access code that developers typically need to write. EF lets the developer
work with domain specific object and properties without worrying about the underlying database table.
3.2.17 Microsoft ASP.NET Web API
Web API is a framework for building request-reply web services from Microsoft.
The customer requested that we make use of this framework to ensure smooth
integration in their systems. It will be covered in detail in appropriate sections
later in this report.
3.2.18 Server
To run the Web API framework there’s IIS Express that comes with visual studio
2012. The express version is meant to be used for developing purposes, when
deploying the product a full version of IIS should be used.
2
http://en.wikipedia.org/wiki/OS/2
43
3.2.19 Database
We had a lot of problems with the database, the customer said he’d put up a
database server for us to use. However this turned out to be difficult to achieve
due to the security/confidentiality issues on their server. We had to try to set up
the database server ourself on our local machine. This proved to be rather difficult
due to Microsoft tools not giving enough information, and thereby not installing
the necessary tools. Some of us communicated via SMS and phone services.
The customer uses an MSSQL server and they provided an 11 GiB .bak file
which we could use to restore the database.
3.3 Extra Tools
3.3.1 LATEX Editors
We have used several editors for our LATEX documents. Some members have used
TeXstudio, others have used TeXworks, while others again have used Gummi.
TeXworks is a simple, lightweight working environment for LATEX documents,
and is modeled on TeXShop. It provides several compilers, and a raw text editor,
as well as a pdf viewer, but little else.
TeXstudio, a fork of Texmaker, is better described as an integrated development
environment (IDE). Relative to TeXworks, it better supports simultaneous work
on several LATEX documents. It also supplies multiple compilers, a pdf viewer and
a text editor, but it includes some nice-to-have features that are not available in
TeXworks. Some examples of these features are:
• Easy navigation between included files
• Compilation of main document directly from included files
• View included images through hover
• Keyboard shortcuts for often used functions
Gummi is a free, open-source, lightweight working environment for LATEX which
is available in the repositories of most widely used Linux distributions, and for
Windows as well. It provides live preview of the document without manual compilation, support for multiple compilers, bibliography management, and SyncTeX
support. It also provides easy insertion of tables and images.
44
3.3.2 LATEX Compilers
We have also used several LATEX compilers, most notably pdfLaTeX and BibTeX.
We have used BibTeX specifically to handle citations and references, and pdfLaTeX
for general compilation of our documents.
3.3.3 Git Tools
We have used various tools for Git, such as Git Bash and GitHub For Windows, as
well as Git for Linux. GitHub For Windows is a graphical user interface for Git,
and provided good visualization of branching, while Git Bash and Git for Linux
were used for straight-forward commit, pull and push.
3.3.4 LibreOffice Calc
Is an open source version of MS Excel. LibreOffice is a spread sheet software used
for organizing data. We used this to organize the parameters that we needed in
our implementation and as a temporary copy-paste buffer to get access to different
data in certain columns for easier macro editing in sublime.
3.3.5 Raw Text Editors
A variety of raw text editors were used, mainly for meeting notes and similar small
and temporary documents. Sublime Text was used by most of the group, allowing
us to read and edit text files with no file ending. Some also chose to use gedit.
3.3.6 Communication
Various software was used for communication when the group members were at
separate locations. Foremost of these were Facebook Messenger and e-mail. We
also used IRC, to which some connected through means such as PuTTY, to connect
through ssh to a server running irssi in screen, while others ran mIRC locally or
connected through ssh in another terminal (such as the native terminal of their
OS).
3.4 Templates
We have created the following templates for documents used in the process:
• Supervisor meeting agenda template, found in B.3 on page 106
45
• Naming standards for documents, found in B.1 on page 104
• A spreadsheet template for logging hours worked, which automatically showed
the last thing we worked on, the sum of total hours per person, the total sum
of working hours for all and the last date we had worked (not included in
this report)
We have established several standards for the project, as seen in the rest of this
section.
3.5 Documents
For internal documents we have established the naming standard:
MM_DD_<Description>_<Version if applicable>
This is to ensure documents are properly sorted, and that they are easily identifiable.
3.6 Coding
We will be using C# as a programming language, and will consequently be following the C# coding standards, as outlined by Microsoft. [4]
The guidelines are summarized in the following section.
3.6.1 Documentation
All public classes, methods, and preferably properties/fields shall be documented
with comments which will enable generation of documentation. Example:
// / < summary >
// / This is a summary of what the class contains and
its intended function
// / </ summary >
// / < author > Author Name </ author >
public class ExampleClass
{
// / < summary >
// / This summary tells what the method does ,
any side - effects , and how / why to use it .
46
// / It should NOT say how the method does what
it does , unless this is absolutely
neccessary .
// / </ summary >
// / < param name =" intName " > int </ praram >
// / < param name =" stringName " > String </ praram >
// / < returns > String </ returns >
// / < author > Author Name </ author >
public abstract String ExampleMethod ( int
intName , String stringName ) ;
}
3.6.2 Naming and variables
Use CamelCase for classes, method names and properties. Example:
public class ExampleClass
{
public abstract void ExampleMethod ( int intName ,
String stringName ) ;
private int ExampleProperty { get ; set ; }
}
Variables shall be named after the lowerUpper scheme, where the first word is
in lowercase, and any others starts with an uppercase letter. Example:
int exampleVariable = 1;
int stringExample = " This is an example " ;
3.6.3 Comments and layout
Blocks shall start and end with curly brackets on their own line.
Comments shall have a space between the double slashes and the actual comment. Continuation lines shall be indented. All comments shall start with a capital
letter, and end with a period.
There shall be only one statement per line. The same goes for declarations.
Parantheses shall be used to separate clauses in expressions, to ease understanding.
// This is a single line comment
void Foo ()
47
{
// The following is correct :
int x ;
int y ;
// The following is incorrect :
int x , y ;
// This is a multi line comment , with more text
this is line two of a multi line comment
if ( true )
{
StatementOne () ;
StatementTwo () ;
if (( var1 && var2 ) || ( var3 && var4 ) )
{
Bar () ;
}
}
}
3.6.4 Variables, types, and declaration
Implicitly typed local variables can be used when the right hand side clearly indicates type, or it’s not important.
Use in-line instantiation with constructors when possible, instead of instantiation and assignment.
Short strings shall be appended with the use of the + operator. Longer ones
in loops shall use StringBuilder.
Example:
// Apparent use of string . Use of var ok :
var name = " SampleString " ;
// Type inconsequential :
foreach ( var v in collection )
{
48
// Type - independent method :
handleVar ( v ) ;
}
// Array instantiation with constructor :
int [] numbers = { 1 , 2 , 3 , 4 };
// Use of var requires explicit instantiation
var numbers2 = new int [] { 1 , 2 , 3 , 4 };
// Avoid this if you could have used the above :
int [] numbers3 = new int [4];
numbers3 [0] = 1;
numbers3 [1] = 2;
// Etc .
// Short string example
string simpleString = " This is our " + var1 +
" test - string . " + var2 + " something . "
// String builder example
string longString = " LongLongLong " ;
var longBuilder = new StringBuilder () ;
for ( int i = 0; i < 1000; i ++)
{
longBuilder . Append ( longString ) ;
}
3.6.5 Try-catch, exceptions and using
Exception handling shall be done by try-catch statements. Code shall not unexpectedly throw exceptions; only when something unrecoverable has happened.
In the case of a try-finally statement, a using statement shall be used instead,
if the only function of the finally-block is disposing/closing of the used object.
Socket socket = new Socket () ;
try
{
socket . SomeMethod () ;
}
49
finally
{
socket . Close () ;
}
// Can be replaced by :
using ( Socket socket = new Socket () ;)
{
socket . SomeMethod () ;
}
3.7 Static Members
Static members shall always be called by class name, and never accessed in a
derived class when defined in a base class.
3.7.1 Clean Coding
We have also endeavored to follow the ten Clean Coding principles, as outlined by
one extra pixel’s post. [3] The ten principles are as following:
1. Revise your logic before coding
2. Clearly expose the structure of the page
3. Use the correct indentation
4. Write explanatory comments
5. Avoid abusing comments
6. Avoid extremely large functions
7. Use naming standards of functions and variables
8. Treat changes with caution
9. Avoid indiscriminate mixing of coding languages
10. Summarize your imports
50
3.8 APIs
3.8.1 ASP .NET Web API
One of the agreed upon requirements for the project was that we conform to ASP
.NET Web API. This to make it easier to interact with our framework from other
systems (both existing and future ones). An introduction to using this API can
be found at Asp.net3 or at Microsoft’s webpage4 .
3
4
http://www.asp.net/web-api
http://msdn.microsoft.com/en-us/library/hh833994(v=vs.108).aspx
51
Part II
Requirements and Architecture
52
Chapter 4
Requirements
This chapter presents the requirements specification for the project with functional
requirements, non-functional requirements and user stories. The goal of this chapter is to present the functions and behavior of the product. The contents of this
chapter consists mainly of listed requirements and their categories, seeing as the
customer provided a comprehensive and textual detailed description of requirements, which was well supplemented with additional details in the first customer
meeting.
There was not much need for discussion or evaluation of possible requirements
due to this fact, so as was mentioned earlier: the following is mostly lists and
classifications.
53
Key
F
M
P
A
I
R
Requirement Type
Functional
Modifiability
Performance
Availability
Interoperability
Readability
Table 4.1: Requirements Key
4.1 Functional Requirements
The purpose of functional requirements is to split up and define the functions of
a system.
ID
F1
F2
F3
F4
F5
Requirements
Recieve PDF-files over the Internet by
ASP.NET Web API
Save PDF-files to a location which is easy to
modify later
Recieve data supplied with the ad over the
Internet by ASP.NET Web API
Save the data supplied with the ad into an
existing for real estate ads
Create an order in the internal order system
for a submitted ad
Table 4.2: Functional requirements
54
Priority
H
Complexity
M
H
L
H
M
H
H
H
M
4.2 Non-Functional Requirements
The purpose of non-functional reqiurements is to describe qualities of how the
operations of a system can be judged.
ID
M1
P1
A1
I1
I2
R1
R2
Requirements
Support easy addition of other types of ads
Function with a satisfactory performance.
Provide a high degree of stability, so the customer can meet their availability demands
when our product is integrated into their systems
Be able to communicate with the existing
system Webassistenten
The software must be developed using modern .NET technologies
The code must be easy to read and understand
The code and product must be accompanied
by documentation of functionality
Priority
H
M
M
Complexity
M
M
M
H
M
H
L
H
L
H
L
Table 4.3: Non-functional requirements
55
4.3 User Stories
We created the following user stories from the customer-provided project description, and meetings with the customer.
Actor
Description
Example
C1.Customer
Customer submits a completed ad
Real estate agent sends a completed ad in pdf-format to the system,
with accompanying data. The data is automatically put in the correct
databases/tables
Table 4.4: User Story: C1 Customer
Actor
Description
Example
C2.Customer
Customer reviews and selects product options
A Real estate agent wants to insert an ad in the system.
The system displays available products, and when one is selected,
will list the next five available booking dates for this product,
and its options.
Table 4.5: User Story: C2 Customer
Actor
Description
Example
D1.Developer
Decides to develop a plugin for the system
Starts IDE of choice, and develops a plugin/extension,
using the interfaces and polymorphism provided.
Table 4.6: User Story: D1 Developer
Actor
Description
Example
D2.Developer
Developer wishes to use framework in/with other application
The developer, being already familiar with Microsoft Web API, quickly
integrates the Web API compliant framework with his intended target.
Table 4.7: User Story: D2 Developer
56
Actor
Description
Example
D3.Developer
Wishes to quickly understand system components for extension
Reads attached developer documentation in IDE, or as attached html/xml.
Quickly sees what each individual method does, and can easily
extend the system.
Table 4.8: User Story: D3 Developer
Actor
Description
Example
C3.Customer
Customer tries to submit an ad with insufficient information
The customer tries to add a pdf-file, but doesn’t provide the necessary data;
I.e. didn’t specify a price or place. The system rejects the ad.
The database remains coherent.
Table 4.9: User Story: C3 Customer
57
Chapter 5
Architecture
This chapter describes the software architecture of the product. It defines stakeholders, quality attributes, views, class diagram, patterns and tactics.
58
5.1 Stakeholders
5.1.1 Customer
Our goal with this course was to create a product that not only works the way
the customer intended, but does so with satisfactory performance. It also needed
a clear, logical and functional architecture to make it easy to maintain. Our
code needed to be written following the clean coding standard and make use of
interfaces and general polymorphism, so that their developers could further develop
this solution with ease.
5.1.2 Implementers
We wanted an architecture that would be easy to implement and would make sense
to the coders of our own team as well as to those of the customer.
5.1.3 Course Staff
The course staff wants a clear and well-documented architecture that is easy to
understand and evaluate.
5.2 Quality Attributes
The customer was very specific when it came to what they wanted when it came
to the product. They didn’t specify any quality attributes but we could deduce
the most common ones that we felt needed to be a part of the Quality attributes
of our implementation. The following were deduced: Modifiability, Performance,
Availability, Interoperability and Readability.
5.2.1 Modifiability
While we were the create the solution for real estate ads specifically, the solution
will be used for other ads as well. Therefore we need to make it modifiable so that
other developers later on can further develop using our solution as a base.
5.2.2 Performance
We wanted the system to function with a satisfactory performance, even though the
customer did not set any specific requirements for performance. For this reason,
we decided to merely strive to achieve this goal by writing as efficient code as
59
we could manage, making necessary changes to keep performance at a reasonable
level.
5.2.3 Availability
The system should be available for the users when they need it. Therefore we
needed to minimize the possible points of failure and the probability of these
failing.
5.2.4 Interoperability
Our solution was only a part of the larger Webassistenten solution, and needed
to inter-operate with already-existing order system. To achieve this goal, we used
the same technology as requested by the customer, including Web API, MSSQL
and so on.
5.2.5 Readability
The customer wanted us to write readable code. They requested that we used
polymorphism by creating interfaces so that other developers can easily develop it
further by developing plug-ins for the system. Readability is therefore important
for easier further development of this system.
5.3 Views
Views are a way to display the implementation of a system by showing separate
points of view associated with the various stakeholder concerns. We’ve tried to
follow the 4+1 architectural views model.1
5.3.1 Process View
When we started out by designing the architecture, we didn’t know how the information flow was supposed to be, and therefore didn’t create a process view for
the system. We also did not know how the internal system of Adressa works and
how the processes in their system inter-operate. However we did create a new
architecture to reflect on the changes we made during the project.
1
http://en.wikipedia.org/wiki/4+1_architectural_view_model
60
5.3.2 Logical View
The logical view concerns the functionality the system provides by displaying it
as a high level structure that shows how the components interact with each other.
The logical view is usually a class diagram or sequence diagram. We’ve decided
to use a class diagram because it’s easier to see how the classes interact with each
other and implement. Our logical view is based on the pattern Pipe and filter2
due to the requirement of modifiability.
Figure 5.1: Logical View
5.3.3 Scenario View
This view is also known as a use case view, which basically shows an example of
an imagined and expected use of the system. The main purpose of this view is to
show how the objects (in this case a client or a person) interacts with the processes
and system.
2
http://en.wikipedia.org/wiki/Pipeline_(software)
61
Figure 5.2: Scenario View
5.3.4 Physical View
The physical view shows how the physical components interacts with each other.
Figure 5.3: Physical View
We are to implement the bold arrows
62
5.4 Class diagram
From these views, we made this class diagram as a first draft of how we felt the
system should be. However this later turned out to not fit into how the framework
is supposed to be, and we had to change the architecture.
Figure 5.4: Digital class diagram
5.5 Patterns
Due to the project being a MVC.NET and Web API application we decided to use
MVC pattern because the project might have this pattern built in already. We
also wanted to use Pipe & Filter to filter the data and to satisfy the modifiability
requirement.
5.6 Tactics
Architectural tactics are common strategies used to achieve the quality attributes
required. These tactics should be kept in the back of ones head when developing
63
this product.
5.6.1 Modifiability
• Increase semantic cohesion
• Decrease coupling
• Split modules
5.6.2 Performance
• Write optimal code
5.6.3 Availability
• Our code should not crash the customer’s system, but it’s their responsibility
that the system is available.
5.6.4 Interoperability
• The technology and tools we’re using should be sufficient to ensure interoperability.
5.6.5 Readability
• We will follow the clean coding principle and use camelCase coding and
structure the code logically. The naming of classes and files should also be
clear. Refer to 3.4 Templates and Standards section on page 45.
5.7 Changes to the architecture
When we started to implement the system we quickly found out that the we had
architectural erosion because the architecture we designed in the start didn’t fit
well into the Web API framework. After we got an overview of the system we had
to change the architecture to a MVC pattern.
64
Figure 5.5: Temporary process view
We tried to follow this MVC pattern when we implemented the system, however
we quickly found out that the getView-Controller was not necessary.
65
Figure 5.6: Process View of Final Architecture
6 calls the upload method with files and data
7 is the upload method redirecting either to a FailView or a SuccessView
66
Figure 5.7: Logical View of Final Architecture of MVC
This is the logical view of the MVC architecture.
67
Figure 5.8: Logical View of Final Architecture of Web API
68
Part III
Implementation
69
Chapter 6
Sprint 1
This chapter describes the activites we planned, the time frame, what we have
done and the retrospective of the first sprint.
70
6.1 Time Frame
The time frame for Sprint 1 was week 38 and 39. We started the sprint on September 16th with a weekly supervisor meeting, followed by a sprint plan meeting. We
finished the sprint on September 27th, with the sprint review meeting postponed
to the following Monday.
6.2 Original Plan
Prior to the sprint, we had the following tasks planned for this sprint:
• Project set-up
• Database restoration
• Database connection interface
• Data object creation
6.3 Revised Plan
At the sprint plan meeting, we added more tasks to our Trello board (see section
3.2.11 in the chapter on Technology) beyond those from our original plan. Most
notably, we added the following:
• Database submission logic
We did not revise the plan for the first sprint beyond adding more tasks. Being
quite unfamiliar with the process and technology, we were unaware at the time
that we would not be able to complete all - or even any - of the planned tasks.
6.4 Development
The development started off with the creation of an ASP.NET MVC project. In
this project we created data objects for the ad info described in the assignment.
Towards the end of the sprint, we received a database dump from the customer,
which we spent the entire rest of the sprint attempting to restore. Please refer to
Appendix A on page 102 for more information on this.
71
6.5 Other Work
In addition to the development, we also completed a draft of the outline for this
report and improved on our architectural documentation by adding new and removing unused views.
6.6 Backlog
Of the tasks planned at the beginning of the sprint, the following remained in our
backlog at the end of the sprint:
• Enable display of available products (no GUI is to be implemented)
• Listing the next 5 available booking dates for a selected product
• Listing modules available for a selected product
• Database connection interface
• Database submission logic
These tasks were incidentally all of the tasks we had planned for the sprint,
as we were a bit optimistic in our planning. Some of these were included in the
revised plan for sprint 2, while others were postponed to be included in a later
sprint.
6.7 Customer Meeting
This customer meeting which took place on Friday 20 September had 2 customer
representatives; Asle Dragsteen and Hans Kristian Ormberg. Both of them are
involved with this technology at Adressa.
We started the customer meeting by going through our preliminary study phase
and its documents; the architecture and user stories documentation. The customer
was satisfied with the documentation we had created.
The customer proceeded by giving us the database dump and showed us the
database structure and which tables we are supposed to work with.
We also discussed which set of Clean Coding principles we should follow (refer
to 3.7.1 Clean Coding principle on page 50 for more info). The customer requested
that we adhere to "Uncle Bob Clean Code"1 standards.
1
cleancoders.com
72
6.8 Retrospective
While we had initially planned to complete some of the "easy" parts of the implementation during this sprint, this turned out to be a lot harder than expected. We
only managed to get started before we ran into problems related to unfamiliarity
with the technology. We mostly used this sprint to set up various tools needed for
the implementation, and to debug issues we encountered during the setup.
We also spent less time both on development and on the project in general
than we had originally planned, partly due to projects in other courses also taking
up a lot of our time.
What we learned from this sprint was more about how much we would actually
be able to do in a single sprint, and that we were still quite far away from being
able to implement specific parts of the requirements. We started doubting that we
would be able to finish in three sprints, but remained hopeful. We also learned a
lot about the tools we used.
73
Chapter 7
Sprint 2
This chapter describes the activites we planned, the time frame, what we have
done and the retrospective of the second sprint.
74
7.1 Time Frame
The time frame for Sprint 2 was week 40 and 41. We started the sprint on September 30th with a weekly supervisor meeting, followed by a sprint plan meeting. We
finished the sprint on October 11th with a customer meeting and sprint review
session.
7.2 Original Plan
From our Work Breakdown Structure, we had the following tasks planned for this
sprint:
• Receiving pdf-file and save in correct folder
• Checking accompanying data for required fields
• Putting accompanying data in the Webassistenten database (table “prospekt”)
• Placing an order in the internal order system
Additionally, the following tasks were carried from the previous sprint:
• Database connection interface
• Database submission logic
7.3 Revised Plan
At the sprint plan meeting, we planned the following for this sprint:
• Set up Entity Framework
• Modify start page
• Implement saving of pdf-files
• Prepare report for midterm delivery
75
7.4 Development
At the end of the first sprint, we received a database dump from the customer.
The majority of sprint 2 development was centered around setting up the database
so we could use it in our project. Refer to Appendix A: Database setup on page
102.
We managed to set up an instance of MSSQL server and restore the database
dump we received from the customer. We then connected the project in Visual
Studio 2012 with the database server instance. This connection to the database
via EF created a model of every single table in the database, which then let us
generate controllers for the tables we needed.
Near the end of sprint 2, we realized that we had created the wrong type of
project. We had missed the fact that the solution was supposed to use Web API,
and had created an MVC project. Some time was therefore spent creating a new
Web API project, and porting the code from the previous project into the new
one.
7.5 Other Work
The deadline for the mid term delivery of the report was originally October 14th,
but was at one point in time moved to October 8th. This date coincided with the
middle of sprint 2, so a relatively big part of the sprint was spent preparing the
report for this delivery. When the deadline was moved back to its original date,
more time was spent on improving the report.
7.6 Backlog
Of the tasks planned at the beginning of the sprint, the following remained in our
backlog at the end of the sprint:
• Modify start page
• Implement saving of pdf-files
We were able to complete some of the planned tasks in Sprint 2. The tasks in
Sprint 1 were postponed to later Sprints due to the fact that we weren’t able to
communicate with the database server yet due to our lack of familiarity with the
technology.
76
7.7 Customer Meeting
This customer meeting took place on Friday 11 October 2013. We showed the
customer what we had done since last time - setting up the database and generate
the controllers for the appropriate classes and tables.
There were also a few things we were confused about in the database structure.
This was mainly which table to put the data into and which tables to get the
necessary data from.
Due to the issues we had, the customer was told that picture upload was not
possible due to time constraint. This was not an issue according to the customer
because it wasn’t part of the original plan/assignment. The customer was impressed with how far we had come with the project so far.
At the end of the meeting, we were given notice that he was going on vacation
for 3 weeks. There was still a possibility to contact him via mail and customer
meetings could be arranged via Skype in this period.
7.8 Retrospective
We had a lot of trouble setting up the database and connect it to our project
via EF this Sprint. When we finally did get it set-up and were able to generate
controllers for the classes, we had trouble with naming conventions due to one
of the database tables. When we deleted the System class that was generated
from EF, the problems went away and we could finally launch the project with IIS
Express and view it through a web browser.
This was a good turn for us, because we felt that we finally could have some
visual feedback when we ran the code - other than an error message. It gave us
an overview of the project and how the controllers, views, models and Web API
work together.
The fact that we spent so much of the sprint preparing the report for mid-term
delivery was less than ideal. We lost a lot of development time due to this, as all
of the group members had to focus on the report. Had we not moved all resources
over to this, we might have been able to finish implementation a little earlier than
we did in the end.
77
Chapter 8
Sprint 3
This chapter describes the activites we planned, the time frame, what we have
done and the retrospective of the third sprint.
78
8.1 Time Frame
The time frame for Sprint 3 was week 42 and 43. We started the sprint on October
14th with a weekly supervisor meeting, followed by a sprint plan meeting. We
finished the sprint on October 25th with a sprint review meeting.
8.2 Original Plan
From our Work Breakdown Structure, we had the following tasks planned for this
sprint:
• Bugfixing
• Testing
8.3 Revised Plan
This sprint we had originally planned to be fixing and polishing the finished product. Due to the issues we had encountered in previous sprints, many of the originally planned tasks were pushed to Sprint 3. Sprint 3 thus became a "finish
everything that needs to be finished"-Sprint.
8.4 Development
We started development in this sprint by creating the master controller which
communicated with the database through the entity framework. It also took care
of passing models to the view(s) and handle user requests. This master controller
was a MVC-type controller which is mostly used as a prototype and for us to test
that the data we submit actually reached the system.
8.5 Other Work
After creating and finishing the master controller, the final architecture was made
to reflect the implementation of the system. We had architectural erosion due to
the framework working differently from what we expected.
The first Friday of this sprint we attended a technical writing course organized by the course staff, where we received pointers on writing our report. These
included both general tips as well as concrete improvements for our report specifically.
79
We started to create the documentation for the customer in Doxygen by XML
commenting our code (this was done by adding three slashes "///" in front of all
the methods). Doxygen read the implemented code and created the documentation
document in HTML.
8.6 Backlog
Originally we planned to finish the product in Sprint 3. However, we had a lot of
issues/problems in both Sprint 1 and 2 so we couldn’t start implementing most of
the code before Sprint 3.
When the problems were sorted out, we actually got down to implementing and
communicate with the database. We created a MVC controller of the assignment
so we were able to test database connection, through insert/select and various
other SQL commands via the EF. This MVC controller let us check how the
implementation works and gave us a better overview of the framework we were
using. However the assignment was to create a Web API controller, so we had to
convert it.
8.7 Customer Meeting
We decided to not have a customer meeting for sprint 3 due to our customer
representative, Asle, not being physically available. Asle was on a 3 week vacation
this period, and we didn’t feel it was necessary to go to the trouble of setting up
a video conference.
However, we felt that we were in control of the implementation or knew how
to fix the issues we had stumbled upon. We didn’t have much new to show either,
because we were in the middle of implementing the MVC controller.
8.8 Retrospective
Sprint 3 was a good Sprint for us, we felt that we finally were able to understand
the framework and that we actually were progressing forward. We were able to
communicate with the database, modify rows inside tables, insert data into tables
etc.
We also figured out how to serve Razor’s view files (.cshtml) as web pages
through IIS Express by launching the project via VS, and how these views were
connected to the controllers. This was enough for us to be able to invoke methods
in our controllers, which was heavily used for testing that our written code worked
as expected.
80
Chapter 9
Sprint 4
This chapter describes the activites we planned, the time frame, what we have
done and the retrospective of the fourth sprint.
81
9.1 Time Frame
When we didn’t finish implementation by the end of Sprint 3, we had to add
another sprint.
The time frame for Sprint 4 was week 44 and 45. We started the sprint on
October 28th with a weekly supervisor meeting. On November 6th we had a
Skype meeting with the customer. We finished the sprint on November 8th. After
the sprint, on November 13th, we held an acceptance meeting with the customer.
9.2 Original Plan
Because we had planned to finish within three sprints, there were originally no
plans for Sprint 4. However we quickly realized that we were going to need a
Sprint 4 due to having an incomplete product at the end of Sprint 3.
9.3 Revised Plan
The fact that we knew this would be the last sprint we had time for let us skip
the sprint planning meeting because we knew that everything that was to be
implemented that had not yet been, had to be done during this sprint.
9.4 Development
In this sprint, we converted the existing MVC controller of our implementation to
a Web API controller, and generated documentation with Doxygen.
9.5 Other Work
We made the final outline of the report, and discussed which sections (including
chapters and subsections) that we needed to include or rework before the final
delivery.
The technical documentation needed to be completed along with the product,
so we had to go through each method and write XML Documentation Comments
on each of them.
The architectural documentation that was created in the beginning did not
reflect the changes we had made to the product due to architectural erosion, and
needed to be updated to better the reflect the actual system implemented.
82
9.6 Backlog
In the sprint, we finished the implementation and had the acceptance meeting with
the customer. Therefore, the most important thing to focus on after Sprint 4 is
the report.
9.7 Customer Meeting
We had a customer meeting with the Asle on November 6th where we showed him
the MVC controller we made, how it interacted with the database and how data
was sent from one view to another. Due to the fact that Asle was still on vacation
we had to do the customer meeting through Skype (video conferencing software).
9.8 Retrospective
We weren’t happy that we had to do a Sprint 4, because we had hoped that we
would be finished with the implementation after Sprint 3. The conversion of the
MVC controller to the API controller yielded problems we didn’t expect, and it
should have gone more smoothly. Unfortunately we had to rewrite a lot of the
code due to big differences between the controllers.
83
Chapter 10
Web Application Implementations
This section will contain information and reasoning about our use of two of Microsofts web application technologies: ASP.NET MVC, and ASP.NET Web API.
Our use of these technologies stems from requirements by the customer, who
already uses Microsoft technology, and required that this project also made use
of MS technology in order to fit into their systems. In particular this was to ease
interaction with Entity Framework, which was another requirement for technology
to be used in database communication.
84
10.1 Microsoft ASP.NET MVC
ASP.NET MVC was used for easy, fast testing, and enabled easy visualization
data flow, and event sequences during the testing process. We also used it to
ease into the technology we needed to use, seeing as it was more familiar to us.
One group member already had previous experience with ASP.NET MVC, which
enabled us to easily set up the project and get started without any trial-and-error
in the setup. This enabled more focus on database setup and interaction, as well
as the business logic of the project.
There are three other reasons other than internal and product specific reasons that made an ASP.NET MVC test product worth the time spent on it. The
first reason being to more efficiently communicate functions and progress to the
customer, who also obviously benefited from our ability to visualizefunctions and
sequences as we progressed. We believe that this helped a great deal in ensuring
efficient and fast communication, and to prevent misunderstandings. The second
reason was that it doubles as an effective demonstration tool at the end presentation of the project, where we would have had to create some form of visual
presentation aid for the product anyhow, in order to demonstrate the product as
actually functioning. The third and final of these reasons was that it might give
added value to the customer in the form of a visual guide and overview for future
API users of the overall structure of the product. At least the customer agreed
with us when we presented this idea. They can potentially use it as a guide on how
to use the Web API functions in a full product, at least in the minimally required
sense.
10.2 Microsoft ASP.NET Web API
ASP.NET Web API was the main outward technology interface of our product, as
specified by the customers initial specifications. None of the team had any previous
experience with this technology, so we postponed the implementation until late in
the development cycle, when everything else was implemented. In doing so we
hoped to remove any other points of failure during this implementation.
Web API turned out to be a bit lacking in modularity, so it limited our ability
to implement the non-functional requirement of modifiability. There were few
meaningful ways to implement polymorphism and interfaces in the code; most
possibilities were redundant or trivial when knowledge of Web APIs design and
purpose is taken into account. That is to say that any meaningful modifications
will have to be done to Web API itself, and not to the product. The product
does fullfill criteria for modifiability as such, when the use of Web API is taken
into account; however that was not a consequence of any design or effort on our
85
part, merely a by-product of following the functional requirement of Web API
implementation and use.
Our implementation mostly follows the specifications for Web API, except for
one method which does not follow best practice due to issues with Web APIs
automatic argument parsing and model binding. As a result, that method implementation and the function it fulfills is slightly fragile, and harder to maintain. It
was however neccessary in order to achieve the desired function at all, and still
keep the much more important attribute of outward simplicity and ease of testing.
Any other solution would most likely have sacrificed the atomicity of the function,
which would have complicated testing a great deal, and introduced new sources
for bugs. Further discussion on that can be found in the issues section 2.6.5 on
page 22.
86
Chapter 11
Testing
This chapter will describe the methods used for testing the requirements, the
reasoning behind their choice, the testing methodology, and the results of the
testing.
87
11.1 Testplan
Due to the nature of the technology we used in the product, we judged TDD or
Unit Testing to be unsuitable for our project. The reasoning behind this is that
our unfamiliarity with WebAPI, as well as the products limited modularity (see
10.2 on page 85), meant that it would be hard to write good Unit Tests that tested
functionality and errors sufficiently. Instead we focused on writing clean, readable
code, with subsequent high level testing of entire modules at once.
The test plan consisted of testing module functionality, and when modules functioned according to specifications, testing the system as a whole with all currently
implemented modules.
11.2 Testing Methodology
As discussed in the previous section, TDD and Unit Testing was deemed unsuitable
for our project, and as a result we settled on a practical testing of each module
followed by integration testing of modules once they completed individual tests. All
of the tests of modules and higher levels were done by the person that completed it
in cooperation with another team member, for independent oversight and checking.
Tests were done manually, following the specifications for each module or the
overall system specification, as appropriate.
The main testing sequence consisted of first testing of method logic in the
IDE itself for each method once completed, by examining the state and output
during runtime. The next part consisted of testing a each module as they were
completed, and the final part was the overall system test for each phase of the
product implementation.
11.3 Testing
The testing consisted of two main phases, with two sub-phases to each main phase.
The first phase consisted of testing the data objects, method logic, EF connection,
EF saving and by extension database saving. The second phase consisted of testing
the WebAPI implementation, its function, errors, and the modified auto-generated
API-documentation. It also finished with the complete system level test, where
the system was tested in its entirety.
11.3.1 Functionality and MVC
The functionality tests consisted of state examination during runtime, with breakpoints in the execution, set by Visual Studio, supported by console printouts during
88
debug runs of the code. Once all the logic for a module fulfilled its required functionality the module was tested with simple MVC views for browsers, which were
made for testing and minimal examples of API use.
Once all the modules completed testing, the system level test for the MVCphase was run, where our MVC testing-views reperesented a minimal working
product for the project specifications.
11.3.2 WebAPI and Finalization
In the testing of our Micrsoft Web API implementation for the project, we were
limited to testing of functionality for each individual API method, and some simulated testing of possible use by Adresseavisens end users for the product (software
developers working for real estate agents). The handling of data by the API users
was not something we could simulate, so in testing we merely gave the inputs the
methods require, since it is up to the users of an API to give the correct input, and
handle data replies correctly, in accordance with the API documentation. With
that in mind we tested each method individually, inputting the data for the methods directly into the web requests or by crafting requests by script in the Developer
Tools in Google Chrome, and examining the replies. We simulated the proper sequence of data requests and submission by testing methods in proper order, and
submitting the appropriate data from the last method reply to the next request.
11.4 Test Results
In this section we will discuss the results of the completed tests, successes, failures,
their implications, and how we handled the results.
11.4.1 Functionality- and MVC-Results
Functionality tests started in Sprint 2, where they were mostly completed. They
were wholly completed in the start of Sprint 3, where all of the required functionality and modules were tested. All modules worked according to specification, and
we started testing all modules together in an ASP.NET MVC project in the middle of Sprint 3. The tests completed satisfactorily by the end of Sprint 3, and the
project was deemed suitable for implementation in Microsoft Web API as was required by specification. The MVC-testing gave a good overview of the interaction
between the various modules, something which was very useful in the implementation of Web API for the project, because as an API it wouldn’t allow for the
same level of comprehensive sequence testing for the entire ad order process.
89
11.4.2 WebAPI-Results and Finalization
Web API testing was conducted during Sprint 4, and finished during the same.
The first Web API test results were merely a confirmation of the functionality
tests from the previous phase, since the method functionality was the same, just
used in a slightly different context. Unsuprisingly the results were satisfactory, and
consistent with the previous results. After that came the Web API implementation
testing, where quite a few tests failed. For reasons undetermined (though not
for lack of trying), the refence implementation of Web API methods failed to
function as advertised. Interplay between Entity Framework, Web API and JSON
was suspected, but not confirmed. After that there was an extended period of
iteraterative workarounds and tests, until required functionality was achieved.
11.4.3 Implications of Test Results
The failure of our reference implementation of Web API methods forced us to use
a non-standard, and less transparent implementation to achieve the desired functionality, something which placed greater importance on both our integrated and
detached API documentation. This added some extra work with the documentation outside of what we expected, in addition to the not unsignificant amount of
work that had to be devoted to testing of potiential fixes and workarounds.
90
Part IV
Evaluation and Conclusion
91
Chapter 12
Evaluation
In this chapter we will evaluate the whole project and our process during the
project to see how what we felt was done correctly and what could have been done
better. This chapter will also take a look at our group dynamic and analyze how
we handled issues and risks.
92
12.1 The Process
12.2 Quality Assurance
12.2.1 External Communication
This sub chapter is mainly about communication with people outside of our group.
12.2.1.1 Communication with the Customer
The customer was always available via e-mail and whenever we needed him urgently we could call him via mobile phone, which was available via the assignment
text in the compendium.
The customer answered rapidly (usually with minutes), but there was one occurrence during his vacation when we didn’t receive a response to our e-mails for
a couple of days. We thought that he didn’t have an internet connection available,
however it soon turned out to be our mail having ended up in his spam folder.
Asle, the customer’s main representative, is a computer scientist himself, which
was beneficial for us because he could give precise answers to our questions, rather
than the more vague answers one often gets from less technologically inclined
customers. He was also a student at NTNU a few years back, which turned out
to be quite beneficial for us because he was familiar with the university and its
processes. This saved us time and trouble e.g. when letting him know where
meetings would take place.
In the customer meeting in Sprint 1 we got an demonstration of the database
structure. The other customer representative, Hans Ormberg, suggested that picture upload to the database was also a good idea to implement which Asle agreed
with. We on the other hand kept this in the backlog and would implement it if
we had the time to do so. When it turned out that we didn’t, we let Asle know
that we had to drop the picture upload implementation due to time constraints.
He understood the situation, and let us know it was not a problem, because this
was not a requirement in the original assignment.
12.2.1.2 Supervisor
Our supervisor, Meng Zhu, was in the beginning not very responsive via mail. It
would typically take a couple of days before we received a response from him. We
mentioned it to him in a supervisor meeting that we wanted a mail response within
24 hours of him receiving the mail. He let us know he would fix this issue, and
after that, all the mails that needed a response was responded to in less than 24
hours after we sent the mail. Most of our communication with Meng was through
93
the supervisor meetings where he went through our weekly report and minutes
from the previous meeting. He also asked us if there were any unresolved issues
we need help with to fix.
Meng was also concerned with how our report would turn out, and asked us
if we could make a draft layout of the final report so he could double check that
we had included all the chapters and sections we needed for a well written and
complete report. If we needed resources to fulfill a chapter in our report Meng
gladly offered to lend us one of his system development books.
When we had the first meeting with our supervisor we received a template that
we should use for the weekly reports. This template saved us time whenever we
created a weekly report for the supervisor meeting, and it made it easier for to be
more efficient on the meeting so we could focus on the assignment, although we
sometimes forgot to remove parts from the template that weren’t applicable for
that particular weekly report.
12.2.2 Internal communication
We had no set rules in our group, and instead followed common group sense, e.g.
notifying the other group members if we were late. We didn’t have issues with
people being 2 hours late, because we knew that they might have other subjects
that might need to be prioritized at that time. Deliveries in other subjects might
lead to sleepless nights, making meeting the group for working on the project at
8:00 in the morning not feasible. We did however call or contact the person if he
didn’t appear after a while when we had agreed to meet, in case he had simply
overslept, or to make sure he would be in time for a meeting with the customer
or our supervisor. We didn’t punish any late arrivals due to all of us being late in
turn, and experience no problems with this. There were no issues in our internal
group, and usually agreed on everything.
12.3 Implementation
Our implementation followed the clean code principle and template written on 3.4
Templates and Standards on page 45. This ensured that the code followed the
standard and was readable for other developers. All the methods we implemented
had XML Style Comments for documentation purposes.
We would hope the implementation of our code had went more smoothly than
"error message per third line of written code", but when we finally got somewhat
of a grasp of C# and Web API, things started to go a little more smoothly.
Due to our version control system with Git and GitHub we could easily experiment with the code without ruining the project, because Git let us revert the
94
changes made. Even if we wrote on the same file we had no large Git conflicts that
needed a lot of rework to fix the merge. It was usually just removing the "< < <
< <HEAD" section that Git added.
12.3.1 Testing
We had no specific test plan. The implementation of our code needed a pdf
accompanied by a lot of data. These data had to be checked against the database
and we had to make sure that all the data was in the correct format both to the
database and the input data. We had to make sure to give an appropriate error
message otherwise. The testing was done while developing, and we usually got a
lot of error messages, but when the code ran we could easily check if the result
was as expected or not by sending data to the IIS Express server via a web form
we created locally for testing.
12.4 Group dynamics
Our group had issues with people being late, but because we all were late now and
then it was not a problem that irritated any of us. The group was also fortunate
that all the group members are from the same class (Computer Science fourth
year), so everyone knew each other before we started working. The whole group
had also been together on a class trip to Japan before this project, where we got
to know each other better outside of school. This helped immensely on the group
dynamic. We therefore felt that the group dynamic course didn’t give us as much
as we had hoped for. The group dynamic course did however give us insight of our
group and helped us defining roles and responsibility amongst us.
12.5 Risk management
All group projects have risks, this is inevitable. Check 2.7 Internal Risks on page
25 and 2.8 External Risks on page 28. The most important risks are mentioned
below.
• The highest risk was our unfamiliarity with the technology
We faced this problem by using Googling the problem at hand if possible
and if this didn’t work out we asked our customer Asle if he knew how to fix
the problem.
• Development and Implementation
Development didn’t go as we had hoped. There were a lot of bugs and
95
hiccups when we implemented the code due to familiarity of the system.
However tons of debugging helped us get a better grasp of the whole project
and system.
• Other subjects
Due to all of us being a forth grader, we have a lot of other subjects which
tends to have big deliveries and/or projects which counts toward the final
score in that course. Therefore other subjects had to be prioritized now and
then. We mostly had to accept this and try to compensate for the lost time.
• Illness
There’s not much one can do with illness, the risk of being ill is especially
high in the fall semester due to the weather change from summer to winter.
The best thing to do as an ill person is to stay at home and fully recover as
fast as possible.
These risks that were the most risky ones was not a big factor for the end product.
We had a buffer in Sprint 3 and Sprint 4 was added as another buffer in case we
needed it.
96
Chapter 13
Conclusion and Future Work
In this chapter we make conclusions based on what we have learned and experienced in this project during this semester. We will also list future work which
we did not manage to finish and which could be a basis for further work on this
project.
97
13.1 Conclusion
The project we were given did not contain any questions regarding thing to evaluate, so there are nothing to conclude in that respect. However, as a group we have
come to several conclusions regarding the technology we used, and the project as
a whole.
While Web API has really practical automated functionality, when it works, it
is a disadvantage that it requires tweaks and setup to work according to specific
needs. It is also severly lacking in comprehensive and collected documentation
and tutorials, and most of the available learning materials come in the form of
videos and blog posts. This makes it a much harder technology to come to grips
with than it initially seems. The use of Web API in the system might still be the
most appropriate due to ease of integration into Adresseavisens systems. However:
the group feels the need to make a note that other technologies might be more
apppropriate, and easier to implement for the same type of service, if they provide
better documentation. This especially applies in cases where the developers are
not familiar with Web API, but might very well be more familiar with technological
concepts used by other more widely used, or more general alternatives.
In terms of the project overall, we have come to some conclusions as well. The
objective of modifiability and extensibility was not as easily achievable in some
main parts of the project as initially thought, and as a consequence it was left
more to aspects inherent in the technology (more on that in the Future Work
section). The reason behind this is that the nature of such an application is
rather intimately connected with its data types, class implementations, and the
data communication interface (i.e. the database connection, which in our case was
Entity Framework).
All in all, we conclude that the project has been moderately successful, with a
potential for improvement in several aspects: The technology study, learning, and
acclimatization parts probably should have been more emphasized, and included
as a larger part of the project. The modifiability and extensibility part is possibly
a whole project in itself to properly implement according to proper coding standards and practies. As a consequence, the part of the product that concerns that
requirement could use some improvement. And finally, following the last point,
the work required for modifiability and general implementations in Web API is
more of a project in extending and covering up missing features in Web API than
it is a subproject of the ad import system.
98
13.2 Future Work
In terms of future work, we as a group have several items we could suggest for a
future improvement of the product, after we have completed our part with this
report.
We did not have the time to implement accepting and adding pictures in
the database. This will require a module with some integration into our current
project, but should not be hard to accomplish.
Secondly we have mostly relied on the integrated extensibility in Web API
to provide the desired modularity and extensibility in the product. Any future
additions of modules could be added via modification of WebAPI settings, and
using our completed work as templates, but there is room for improvement in this
regard. It’s possible to generalize our API more, for support of other ad types,
though it would require significant work or much more experience with Web API
than our group have had. The required work would possibly involve generalized
Controller templates who can handle various types of input and operations, and
in that regard are extensible to usable Controllers for ads. This would also probably require generalized model binders and data formatters, which require more
understanding of Web API than we have been able to get; it should nonetheless
be achievable as a project in its own sense.
The project could also have benefited from a more purpose-built database,
and by extension: a more straigthforward way to communicate with data storage.
However, this would perhaps not be feasible to follow through on, due to the
current database serving other functions and possibly serving other systems as
well.
99
Bibliography
[1] Yusuf Arslan. Is agile and scrum really better than waterfall? http://
yusufarslan.net/agile-and-scrum-really-better-waterfall. Read on
26 August, 2013.
[2] BinaryHash.
Agile methods.
http://binaryhash.com/assets/agile_
process-d6666e8f6b47340f7117a3d149bce69c.png. Image found on 18
November, 2013. Slightly modified by us.
[3] Pamela Rodríguez Domínguez.
10 principles for keeping your programming code clean.
http://www.onextrapixel.com/2011/01/20/
10-principles-for-keeping-your-programming-code-clean/. Read on 2
September, 2013.
[4] Microsoft. C# coding conventions (c# programming guide). http://msdn.
microsoft.com/en-us/library/vstudio/ff926074.aspx. Read on 26 August, 2013.
[5] WikiMedia.
Scrum board.
http://en.wikipedia.org/wiki/Scrum_
(software_development). Image found on 18 November, 2013.
[6] WikiMedia. Waterfall model. http://en.wikipedia.org/wiki/Waterfall_
model. Image found on 18 November, 2013.
[7] Wikipedia. Adresseavisen. http://en.wikipedia.org/wiki/Adresseavisen.
Accessed 7 October, 2013.
100
Part V
Appendices
101
Appendix A
Database setup
The database dump we got from the customer was a 10.8GiB .bak file which contained the existing internal database of the adressa system - a MSSQL database.
We thus had to install MSSQL locally on our own computers to be able to restore this backup file before we could integrate the database into our project via
the entity framework. To manage and restore the database, we had to use SQL
Management Studio.1
This package let us install the 2012 version of the management studio, or choose
to update from an existing 2008 version of MSSQL Management Studio which it
claimed was already installed. However, this package did only the install the SQL
management studio but no SQL server instance was installed.
It was therefore impossible to connect to a MSSQL server instance because
none existed, which made it impossible to restore the .bak file (database backup
dump), because there were no SQL server instances to restore to. We then tried
to install "SQL server with tools express" which did in fact install a SQL server
instance and we were allowed to connect to a it via the management studio, and
we were able to click "restore database". We then navigated to the appropriate
folder and chose the .bak file to restore. When we clicked "OK", it started to
restore the database, but after a few minutes we got an error message saying that
the database was too big to be restored, this was due to the express version can
only restore a database up to 10.2GiB while the .bak file we got was 10.8GiB. Thus
we had to install the non-express version to be able to restore the database. The
last tool we tried to install was "Microsoft SQL Server 2012 Developer 32/64-bit",
this installation had a server instance which we could restore the database to.2 To
integrate the database into our development tools (Visual studio using web api)
we had to use the entity framework by adding an ADO.NET Entity data model3 of
1
http://www.microsoft.com/en-us/download/details.aspx?id=8961
http://www.katieandemil.com/sql-server-2012-restore-database-backup-file
3
http://www.entityframeworktutorial.net/
2
102
the database. This let us treat database tables as objects, and it converts objects
manipulation to SQL query syntax for the particular database.
103
Appendix B
Templates
B.1 Supervisor meeting
All the notes from the supervisor meeting was named following the template:
MM_DD_Supervisor_meeting
The document itself usually contained the members who attended the meeting (if
there was anyone missing). The document itself was made in plain text.
104
B.2 Customer meeting
All the notes from the customer meeting was named following the template:
MM_DD_Customer_meeting
The document itself usually contained the members who attended the meeting (if
there was anyone missing). The document itself was made in plain text and was
usually written in Norwegian, but was usually translated to English when needed.
105
B.3 Weekly report
<frontpage>
Weekly status report, week 36.
Project
Project name:
Customer:
Customer Driven Project - Group 15
Adresseavisen.
Participants
Audun Skjervold
Erlend Løkken Sigholt
Truls Hamborg
Hong-Dang Lam
1.0 Summary
In this week ...
2.0 Work done this period
In the previous week we have ...
2.1 Status of documents
2.2 Meetings
These are the meetings we have planned (disregarding internal meetings):
• date1
• date2
Week
37
Activity
<Activity>
<Activity>
..
.
Total
Estimated
<Number>
<Number>
..
.
Actual
<Number>
<Number>
..
.
<total>
<total>
3.0 Problems and issues
In the previous week we have had some problems with ...
4.0 Planning for the following period
In the following week we have plans to ...
4.1 Meetings
106
5.0 Meeting agenda
• Time: 12:00-13:00 (or 12pm to 13pm).
• Place:
• Attendees: Group 15 - <Names here>
Advisor: Meng Zhu
• Agenda:
– Approval of agenda
– Approval of minutes from previous advisor meeting
– Comments to the minutes from last customer meeting (or other meetings)
– Approval of the status report
∗
∗
∗
∗
∗
Summary
Work done this period
Problems
Planning of work for the next period
Other
– Review/approval of attached phase documents
– <add other agenda items here>
107
Appendix C
Dictionary
.
Adressa
Adresseavisen AS (customer)
API
Application Programming Interface
IDE
Integrated Development Environment
NTNU
Norwegian University of Scienceand Technology (Norges
Teknisk-Naturvitenskapelige Universitet)
IDI
Department of Computer and Information Science (Institutt for Data og Informatikk)
IME
Faculty of Information Technology, Mathematics and
Electrical Engineering (Fakultet for Informasjonsteknologi, matematikk og elektronikk)
SQL
Structured Query Language
DB
Database
MS
Microsoft
EF
Entity Framework
MSSQL
Microsoft SQL
108
PDF
Portable Document Format
HTML
Hyper Text Markup Language
JS
JavaScript
JSON
JavaScript Object Notation
C# or CS
C-sharp
ASP
Active Server Pages
WBS
Work Breakdown Structure
MVC
Model View Controller
VS
Visual Studio
IIS
Internet Information Services
OS
Operating System
USB
Universal Serial Bus
HDD
Hard Disk Drive
SSD
Solid-state drive
FAT
File Allocation Table
GiB
GibiByte - 1024 MiB
MiB
MibiByte - 1024 KiB
KiB
KibiByte - 1024 Bytes
IT
Information Technology
TDD
Test-driven development
109
SMS
Short Message Service
ID
Identification
110
Appendix D
Test view
This section contains pictures and responses of the product.
111
D.1 ModuleAPI response
This is the response of the ModuleAPI controller when we run a GET-request to
it with a partnerId of 2.
{"$id":"1","modulId":[101,101,102,102,103,103,104,104,105,105,281,317,318,319,
320,321,322,357,448,449,461,462,463,526,526,527,527,528,528,529,529,530,530,531
,532,533,534,800,800,801,801,802,802,803,803,804,804,805,805,806,806,807,808,809
,810,836,861,861,862,863,863,864,865,865,866,867,867,868,869,869,870,870,974,975]
,"modulNavn":["1/5 side","1/5 side","2/5 side","2/5 side","3/5 side","3/5
side","1/1 s (7 bilder)","1/1 s (7 bilder)","1/1 s (4 bilder)","1/1 s (4
bilder)","1/10 side","1/10 side","1/5 side","2/5 side","3/5 side","1/1 s (7
bilder)","1/1 s (4 bilder)","1/20 side","2/5 side","1/10 side","1/10 Tobb","2/5
Tobb","1/1 Tobb","1/16 side","1/16 side","1/8 side","1/8 side","1/4 side","1/4
side","1/2 side","1/2 side","1/1 side","1/1 side","1/16 Tobb","1/8 Tobb","1/4
Tobb","1/2 Tobb","1/12-side","1/12-side","1/6-side","1/6-side","2/6-side
2b","2/6-side 2b","2/6-side 3b","2/6-side
3b","1/2-side","1/2-side","1/1-side 3b","1/1-side 3b","1/1-side
5b","1/1-side 5b","1/12-side Tobb","1/6-side Tobb","2/6-side 2b
Tobb","1/2-side Tobb","2/6-side 3b Tobb","1/12 s","1/12 s","1/12 s
Tobb","1/6 s","1/6 s","1/6 s Tobb","2/6 s","2/6 s","2/6 s Tobb","1/2
s","1/2 s","1/2 s Tobb","1/1 s 5b","1/1 s 5b","1/1 s 4b","1/1 s
4b","1/2 s 3b","1/2 s Tobb
3b"],"dimensjoner":["248x66","248x66","248x135","248x135","248x204","
248x204","248x342","248x342","248x342","248x342","122x66","122x66","2
48x66","248x135","248x204","248x342","248x342","60x66","248x135","122
x66","122x66","248x135","248x342","122x41","122x41","122x85","122x85"
,"122x173","122x173","248x173","248x173","248x349","248x349","122x41"
,"122x85","122x173","248x173","122x55","122x55","248x55","248x55","24
8x113","248x113","248x113","248x113","248x171","248x171","248x345","2
48x345","248x345","248x345","122x55","248x55","248x113","248x171","24
8x113","122x55","122x55","122x55","248x55","248x55","248x55","248x113
","248x113","248x113","248x171","248x171","248x171","248x345","248x34
5","248x345","248x345","248x171","248x171"],"datoTilgjengelig":["23.1
1.2013","30.11.2013","7.12.2013","24.12.2013"]}
112
D.2 API help page
This page is auto generated by the framework.
Figure D.1: The Web API help page
113
D.3 Upload successful
The response from Web API when we get a successful upload and with correct
data which is verified by the code.
Figure D.2: The response from Web API, success
Figure D.3: The local html file we used to test against the server
This is the html file we used for passing data and pdf to the Web API, we expect
the customer to create something similar when they create an interface for the real
estate agents.