Lab#SE03-2: Library/Book, Sprint Zero

Java SE Lab 03 part 2

javase
lab
composition
plan
Java SE Lab 03, part 2 Sprint Zero, plan
Authors

albertprofe

Marc P.

Published

Tuesday, June 1, 2021

Modified

Tuesday, September 26, 2023

📘 Linux Lab#SE03-2: Library/Book Sprint Zero

Before define what a Sprint Zero really is, let’s see what it isn’t.

  • A Sprint Zero is not the phase in which:

    • the team is put together: a team must already be in place.
    • for setting up infrastructure which should already be implemented or easily implemented on demand.
    • should not involve adding products to a backlog or consider planning as classical project management.

The main goal of a Sprint Zero is to deliver some usable value that can be built upon by the next team. Sprint Zeros are required to:

  • Create the project’s skeleton, including research spikes.
  • Keep design minimal.
  • Develop a small number of stories to completion.
  • Be low velocity and lightweight.

More specifically, the deliverables of a Sprint Zero should be as follows:

  • A usable piece of code, however small.
  • A minimal environment for writing code.
  • A prioritization of features or a list of stories.
  • A release plan assigning each story to a Sprint.
  • A plan for the most likely implementation of features.

1 Sprint Zero hats&jobs

1.1 Architecture and first draft

1.1.1 Tasks/Requirements list

Let’s take the example of the Library Lab#SE03-1 to define a graph with the requirements/tasks for the Sprint Zero deriverables:

sprintZero Sprint Zero Sprint Zero Sprint Zero 1 - Project 1 - Project Sprint Zero--1 - Project 2 - DDD 2 - DDD Sprint Zero--2 - DDD 3 - UML 3 - UML Sprint Zero--3 - UML 4 - Code 4 - Code Sprint Zero--4 - Code Use Case Use Case 1 - Project--Use Case Documentation Documentation 1 - Project--Documentation Mock-up Mock-up 1 - Project--Mock-up Open\nProject? Open Project? 1 - Project--Open\nProject? Vocabulary Vocabulary 2 - DDD--Vocabulary Packages Packages 2 - DDD--Packages Model Model 2 - DDD--Model Controller Controller 2 - DDD--Controller Refactor\nDomain Refactor Domain 2 - DDD--Refactor\nDomain Relationships Relationships 3 - UML--Relationships Utilities Utilities 4 - Code--Utilities Core model Core model 4 - Code--Core model Managers Managers 4 - Code--Managers Dependencies Dependencies 4 - Code--Dependencies Maven Maven 4 - Code--Maven Refactor\nCode Refactor Code 4 - Code--Refactor\nCode Test Test 4 - Code--Test Git Git 4 - Code--Git User Stories User Stories Use Case--User Stories Quarto Quarto Documentation--Quarto Obsidian Obsidian Documentation--Obsidian New Feature New Feature Mock-up--New Feature Common\nLanguage Common Language Vocabulary--Common\nLanguage Controller--Managers If there is\nLegacy Code If there is Legacy Code Refactor\nDomain--If there is\nLegacy Code Refactor\nDomain--Refactor\nCode Composition Composition Relationships--Composition Inheritance Inheritance Relationships--Inheritance Multiplicity Multiplicity Relationships--Multiplicity Book Book Core model--Book Borrow Borrow Core model--Borrow User User Core model--User lombok lombok Dependencies--lombok JUnit JUnit Dependencies--JUnit Jupiter Jupiter Dependencies--Jupiter faker faker Dependencies--faker Make Borrow Make Borrow Test--Make Borrow GitHub GitHub Git--GitHub Create Create faker--Create 100 books 100 books Create--100 books 100 users 100 users Create--100 users

1.1.2 Onion Architecture

Onion Architecture

Onion Architecture

The layers are of Onion Architecture and sublayers are:

  • Infrastructure, where our database, file system, or any external web service we depend on live.
  • Tests: unit, integration, end-to-end. How we validate our business cases.
  • User Interface, how our users interact with the code we have built. - Application Services layer (sometimes known as the Transport/Access Layer).
  • Domain Services layer. In this layer is where the majority of our business logic lives, it carries out the operations to turn A into B, input into output, egg into chicken.
  • The core layer, the Domain Model layer which is the representation of the high level data objects we use.

Library Project key-words sprint zero

Library Project key-words sprint zero

Sprint#6, dia 01/02 image Library Project

1.2 Features: core use-case: user-borrows-a-book

1.2.1 Use-Story

As a user, I want to borrow a book with my documentId, so that I may read and return it at due date that the system says.

1.2.2 Mock-up

Options:
1- Make a Borrow
2- User Management
3- Book Management
4- Quit
Option?
'Borrow'
User?
'159742OPI'
Book?
'Anna Karenina'
Proceed, are your sure?
'Yes'
Borrow made, borrowId: RER7567, dueDate: 15/02/2023 
Options:
1- Make a Borrow
2- User Management
3- Book Management
4- Quit
Option?
'Quit'

1.3 Pieces of code

1.3.1 UUID

The full form of UUID is Universally Unique Identifier. A UUID represents a 128-bit value that is unique. The standard representation of UUID uses hex digits.

For example:

3c0969ac-c6e3-40f2-9fc8-2a59b8987918
cb7125cc-d78a-4442-b21b-96ce9227ef51
import java.util.UUID;

    public static String createId() {Limit Your Availability

        UUID uuid = UUID.randomUUID();
        System.out.println("UUID generated - " + uuid);
        System.out.println("UUID Version - " + uuid.version());
        String id = uuid.toString();

        return id;

    }

1.3.2 BorrowManager class

public class BorrowManager {

   public static HashMap< String , Borrow> borrows = new HashMap<>();
}

1.3.3 faker Users and Books

public static void createBooks(int number) {
// create faker object to use as
// builder for book
Faker faker = new Faker();
Book newbook;

for (int i = 0; i < number; i++) {
    // create newbook without args
    newbook = new Book();
    // some people get nervous with this
    // be careful ...
    String bookId = InterfaceUtils.createUUID();
    newbook.setISBN(bookId);
    // title's book
    String bookTitle = faker.book().title();
    newbook.setTitle(bookTitle);
    // year's book
    int bookYear = faker.number().numberBetween(1000, 2023);
    newbook.setYear(bookYear);
    // borrows' book
    List<Borrow> borrows = new ArrayList();
    newbook.setBorrows(borrows);
    // author's book
    Author newauthor = new Author();
    newbook.setAuthor(newauthor);
    // add to hashmap
    books.put( bookId, newbook);
    // kill object
    newbook = null;
    }
}

1.4 Tests

1.4.1 borrow object test

Test to create Borrow object

1.4.2 make-a-borrow test

Test to make-a-borrow operation by simulate-console

Important

We decide to discuss this test in the near future, not now. It is more diffucult and complex than we thought.

1.5 UML

LAB#03-1 UML

1.6 Domains & Tree

Folder tree LibraryProject

Folder tree LibraryProject