myTaxiService

Software Engineering 2

2015/2016


Andrea Gussoni - 853423

Federico Amedeo Izzo - 791188

Niccolò Izzo - 852226

# Introduction
## About this presentation - This is an overview of what we learned during the project - We did *not* want to repeat what is in the documents These slides are available at https://se2.gussoni.ovh
### Our task: ## Create and plan a project #### following the given assignment

A complex project

This was our second time in the development of a complex project. However we faced new challenges and acquired useful knowledge.


But first things first.

Requirement Analysis

What we were asked to realize:

## myTaxiService a taxi management service.

Objectives

  • Simplify access to taxis
  • Fair queue management

Functions

Passengers

  • Simple taxi request
  • Incoming taxi notification
  • Waiting time notification
  • Taxi reservation
  • Shared ride

Functions

Drivers

  • Automatic taxi allocation
  • Queue handling

Interfaces

  • Passenger Web-App
  • Passenger Mobile Application
  • Driver Mobile Application
  • Programmatic Interfaces (APIs)

Code Inspection

Why is code inspection necessary?

Because, in particular under deadline, we write code like this

Code inspection is not devoted to find issues and errors at an high abstraction level. It is used to check that the best-practices and the code-style of the organization are respected.
## Our Assignment

The first thing that we did was to search the documentation of the assigned classes in the JavaDoc.

Obviously the classes weren't documented.

So we opened the source code searching for comments.

Nothing.

So we said "We coded an entire game 6 months ago for the SE1 course, we know everything about Java"

And then we found a block of code, with a strange syntax


                            HelloWorld frenchGreeting = new HelloWorld() {
                                        String name = "tout le monde";
                                        public void greet() {
                                            greetSomeone("tout le monde");
                                        }
                                        public void greetSomeone(String someone) {
                                            name = someone;
                                            System.out.println("Salut " + name);
                                        }
                                    };
                        

So we searched on StackOverflow and we discovered that that was an Anonymous Class.

We learned that Code Inspection can be also a moment for learning new things like: - New constructs of the language. - Other ways to implement things. - Good coding habits.

Integration Testing

### Let's write all the code and do all the integrations at the end, what could possibly go wrong?

EVERYTHING

### A much more reliable approach is: - Write __JavaDoc__ along code - Perform __unit testing__ for every component - Do __code inspection__ - Finally: __Integration testing__
We think that is important to decide and define in advance the strategy to follow in the testing phase. Particularly relevant decisions are: - Testing framework to be used. - Tools to automate the testing and the building operation. - A detailed schedule of the integration plan.

System Testing

Performance testing?

What tool to use?

JMeter!

We use RESTful APIs, we can test all the functions.

Mobile app testing

How to test some mobile apps together?

Virtualization power activate!

Genymotion lets us virtualize android clients and script them.

Project Management

How difficult can it be to manage a bunch of developers?

A LOT.

Even before starting the real work...

Guy 1: "Let's use pure LaTeX!!!"

Guy 2: "No let's use LyX, it has a friendly interface!!!"

Guy 3: "Let's use both and use a tool to convert one format to the other!!!"

Really

I was Guy 3

## Problems that we encountered: - Choice of the development framework - Choice of the communication platform - Scheduling of the cooperative work Note: FOSS alternatives vs closed ones (Slack), work on the weekends vs in the week, night and day,
### If a relatively small project like this, with few people *already knowing* each other, had all this kind of *disagreements*, how difficult could it be in a real world project to choose the IDE for a hundred of people? Note: Think of the big corporations like Oracle, difficulties in the decision of the common framework.

We learned the importance of:

A good project manager

Like him?

Good manager

Or like him?

Angry Manager

We learned the importance of:

  • A good project manager
  • A good project management
  • A exhaustive and complete project planning at the beginning of the project

Project Planning

Difficult and delicate job

To predict a project size and effort given few data in advance

The accuracy of the prediction rises over time

Techniques like Function Points and COCOMO can help,

and we used them in our delivery.

We noticed

that we weren't able to answer in a complete and precise way to all the questions of the COCOMO technique,

so we are aware that the estimation can be biased...

Still it can be useful to make a first approximation.

The project planning doesn't end in this phase, but must be reviewed and adjusted during all the development of the project.

Success

#Thank you These slides are released under [Creative Commons Attribution-ShareAlike 4.0 International](http://creativecommons.org/licenses/by-sa/4.0/legalcode). ![alt text](images/ccbysa.png) Andrea Gussoni, Federico Amedeo Izzo, Niccolò Izzo.