LABORATORIO DI INGEGNERIA DEI SISTEMI SOFTWARE

Introduction

Goal: Realizzazione in Java del GAME OF LIFE DI CONWAY limitatamente al requisito R1.

Requirements

R1  Realizzare una versione in Java del gioco Life di Conway, come gioco zero-player. 
    Il gioco consiste nell’introdurre una Griglia di Celle il cui stato (cella ‘viva’ o cella ‘morta’) 
    evolve come stabilito dallle regole di ConwayLife

R2  L’utente umano deve poter:
     - specificare la configurazione iniziale della griglia del gioco	
     - vedere l’evoluzione del gioco in forma opportuna 
        (si veda Problema della vista del gioco )
     - fermare e far ripartire l’evoluzione del gioco
     - pulire (a gioco fermo) la configurazione della griglia del gioco

Requirement analysis

per Cell, dopo aver parlato del committente, formalizzo il seguente modello:
	
		public interface ICell {
			void setStatus(boolean v); //la cella è un ente che ha la capacità di modificare il proprio stato interno secondo un booleano
			boolean isAlive(); //la cella come entità ha la possibilità di rispondere a una query, una proprietà, restituendo un valore booleano
			void switchCellState(); //la cella è un ente che ha la capacità di invertire il proprio stato interno, passando da "viva" a "morta" e viceversa
		}
	

per Grid, invece, formalizzo questo modello:
	
	  public interface IGrid {
		public int getRowsNum(); //operazione primitiva che permette alla griglia, composta di celle, di comunicare il numero di righe che contiene
		public int getColsNum(); //la griglia può comunicare il numero di colonne che contiene
		public void setCellValue(int x, int y, boolean state); //la griglia, con un'operazione non primitiva, ha la capacità di modificare lo stato di una cella specifica dato dalle coordinate (x, y)
		public ICell getCell(int x, int y); //la griglia può restituire un'oggetto dell'interfaccia ICell corrispondente alle coordinate (x, y)
		public boolean getCellValue(int x, int y); //la griglia può rispondere a una query sullo stato della cella (x, y) restituendo true se viva e false se morta
		public void reset(); //operazione non primitiva che da alla griglia la capacità di riportare tutte le celle al loro stato iniziale
	  }
	

Problem analysis

uml

Test plans


public class CellTest {
private ICell c;

	@Before
	public void setup() {
		System.out.println("ConwayLifeTest | setup");	
	    c = new Cell();
	}
	@After
	public void down() {
		System.out.println("ConwayLifeTest | down");
	}
	
	@Test
	public void testCellAlive() {
		System.out.println("ConwayLifeTest | doing alive");
		c.setStatus(true);
		boolean r = c.isAlive();
		assertTrue(r);
		
	}
	
	@Test
	public void testCellDead() {
		System.out.println("ConwayLifeTest | doing dead");
		c.setStatus(false);
		boolean r = c.isAlive();
		assertTrue( !r);
	}	
}



public class GridTest {
	private static final int nRows=5;
	private static final int nCols=5;
	
private Grid grid;

	@Before
	public void setup() {
		System.out.println("GridTest | setup");	
		grid= new Grid(nRows,nCols);
	}
	@After
	public void down() {
		System.out.println("GridTest | down");
	}
	
	@Test
	public void testDims() {
		System.out.println("testDims ---------------------" );
		int nr = grid.getRowsNum();
		int nc = grid.getColsNum();
		assertTrue( nr==nRows && nc==nCols );
	}
	@Test
	public void testCGridCellValue() {
		System.out.println("testCGridCellValue ---------------------" );
		grid.setCellValue(0,0,true);
		assertTrue(   grid.getCellValue(0,0) );
		assertFalse(  grid.getCellValue(0,1) );
	}
	@Test
	public void testGridRep() {
		System.out.println("testGridRep ---------------------" );
 		System.out.println(""+grid);
		assertTrue( grid.toString().startsWith(". . . . ."));
	}
	@Test
	public void testPrintGrid() {
		System.out.println("testPrintGrid ---------------------" );
		grid.setCellValue(0,0,true);
		grid.setCellValue(0,1,true);
		grid.setCellValue(0,2,true);
		grid.setCellValue(0,3,true);
		grid.setCellValue(0,4,true);
		//grid.printGrid();
	}

}

Project

Testing

Deployment

Maintenance



By Paolo Savino email: paolo.savino2@studio.unibo.it, paolo GIT repo: https://github.com/savino1703/issLab2026