ED

Miniprogramació del Curs  2018-19
Google Classroom per entregar tasques (codi curs:  twyf7g )

PISSARRA COMPARTIDA
https://docs.google.com/document/d/1Bb8wa-L_Ft-MtVzMxd7mt8TO9tNZf7Wo56Caa-TAORg/edit

Questions
Kico Borràs Palmer

Recursos:

Tot lo que vos fa falta ho teniu a aquest Blog. També podeu consultar:
Material del mòdul al IOC (Institut Obert de Catalunya)

-----------------------------------------------------------------------
UNITATS DIDÀCTIQUES:

1.- SL: es un llenguatge de programació molt pedagògic, amb entorn de desenvolupament i manual en Castellà que permet editar i executar algorismes. Està basat en el llenguatge C i va ser desenvolupat a una universitat.
Emprarem el material i entorn de SL per fer una introducció a la programació estructurada.

Visita la Web de SL

exercicis SL

pràctica SL
Nota: canvia al registre "empleat" el camp "esborrat" a tipus logico.
ENTREGA DE LA PRÀCTICA al Moodle

Exemples programes fets:

- Exemple amb colors
- Factorial
- Exemple fitxers
- Tenis
- Manolo's attack

Exemple exercici a fer amb SL:

Donat el següent codi, completar les subrutines :

a) llistaNotes()
b) mostraNotesMitjes()
c) cercaPerDNI()
solució 


2.- UML
L'UML o Llenguatge Unificat de Modelat (Unified Modeling Language, Llenguatge de Modelat Unificat) és un llenguatge de modelat de sistemes de software, és el més conegut i utilitzat en l'actualitat, està suportat per l'OMG (Object Management Grup). És un llenguatge gràfic per visualitzar, especificar, construir i documentar un sistema. L'UML ofereix un estàndard per descriure un sistema (model), incloent aspectes conceptuals tals com els processos de negoci i funcions del sistema, i aspectes concrets com expressions de llenguatges de programació, esquemes de bases de dades i components reutilitzables.

Descripció d'un departament d'informàtica

Errors al especificar un programari:



Exemple d' especificació d'aaplicació del Camí de Cavalls per alumnes (només a classe amb professor)


material UML (pàgina del Blog amb tot el material)

Pràctica 2n Trimestre: especificar en UML el programari per una Biblioteca
especificació antiga del software per controlar una Biblioteca

descripció pràctica
descripció Anglès (opcionalment es pot fer en Anglès, +1 punt)
Entrega a Google Classroom


3.- IDEs: Entorns de Desenvolupament Integrats
Son eines informàtiques per al desenvolupament de programari de manera còmoda i ràpida. Així doncs és un entorn de desenvolupament que agrupa diferents funcions en un sol programa, habitualment: editor de codi, compilador, depurador i un programa de disseny d'interfície gràfica.
El principal avantatge és que facilita la tasca del programador mentre que l'inconvenient més important és que pot provocar mals hàbits a l'hora de programar o provocar errors que a priori començant de zero no es produirien.

Eclipse 
Informació Eclipse
Tutorial Eclipse

Més material complementari d'Eclipse al Moodle

Hello world in Java with Eclipse:



Altres Entorns de Desenvolupament integrats:
NetBeans
IntelliJ

Activitat IDEs:
sol.lució (profe)

Execici Persones: descripció
codi persones

Resum funcionalitats d'Eclipse (feina en grup-classe)
Editar entre tots el document anterior i possar tot lo que vos sembli útil.
Ho anireu completant durant el curs. Emprar com a punt de partida lo que explica al document "Tutorial Eclipse". Les dues primeres estan fetes com exemple.

4.- Enginyeria del Software i proves :
4.1.- Document sobre Qualitat del Software

4.2.- Contesta les següents preguntes sobre Qualitat del Software
Standard de Qualitat ISO 9001 per desenvolupament de Software: ISO 9000-3
Teacher's solution

4.3 1.- Veure el document sobre Software Engineering

4.3.2 - Vídeo: Scrum vs model en cascada

4.4.- Testeig de Programes (teoría)
Ex1: Codi a on trobar els errors: Escola
sortida correcte quan tot aclarit NO veure fins que el professor doni permís
sol (profe only)

Es pot estimar els erros no trobats a un programa?
Sí es pot:


Per estimar el nombre d'errors no trobats, farem una regla de tres.
Primer passem el nostre joc de proves, dissenyat segons hem vist a la teoria. Imaginem que trobem 56 errades inicials (EI) i les corregim.
Ara, introduïm 100 errades aleatòries (EA) noves, sense tenir en compte el joc de proves. Si tornem a passar el nostre joc de proves inicial, podrem veure si es un bon joc de proves o no, ja que sabem el nombre d'errades que hi ha i si ho executem veim el nombre que troba, que segurament no seran totes. Imaginem que troba 95 (ED: errades deliberades) i es deixa 5 pel camí.
Si es manté la mateixa proporció, podem fer la regla de tres següent per estimar les errades no trobades inicialment:

Si ha trobat 95 errades (ED) ------> deixant de trobar 5 (100 - ED)
Quan en troba 56 (EI)          -------> Ex deixa X

Multipliquem en creu i:

X = EI * (100 – ED) / ED
X = 56 * 5 / 95 = 2,94

Deixaria de trobar uns 3 bugs!


Proves unitàries o JUnit, en Java:



Ex2: Codi amb errors: Classifica Nombres
Empra les proves unitàries d'Eclipse com s'ha vist al video anterior.
Hauras de modificar l'estructura del programa per poder cridar-ho amb un JUnit.
Si ja has provat i vols ajuda, pots veure com ho he fet jo amb el següent fitxer,  important com a "existing project". Aquest té 3 JUnits fets, però el codi encara té els errors. 
projecteEclipseAmbJUnits

projecteEclipseAmbJUnits - resolt (profe only)

sol (profe only)

kk

Precondicióes una condición que ha de satisfacerse justo antes del comienzo de la ejecución de una porción de código (normalmente un subprograma o método).

Postcondicióes una condición o predicado lógico que siempre debe cumplirse justamente después de la ejecución de una sección de código o de una operación (especificación formal).

Exemple d'asserts amb Eclipse per mostrar com comprovem una precondició
Heu de llegir l'article, entendre els conceptes de precondició i postcondició i provar de fer l'exemple al vostre ordinador.


Un subprograma pot tenir precondicions, que són restriccions que s’han de complir perquè se’l pugui invocar, i postcondicions, que són condicions que es compliran en acabar l'execució del mateix, si quan es va invocar se’n complien les precondicions.


Per executar el programa amb Eclipse, habilitant l'assert, anar aRun configurations i possar -ea a  VM arguments.
Si es posa un num > 10 donarà l'error quan s'executa amb Asserts.

Exemple:
Enter a number between 0 and 10: 333

 Ex3: caixa transparent
Agafa la pràctica del 1r Trimestre d'un company i en grups de dos, feis un testeig de caixa transparent. Heu de trobar 2 errades i fer la correcció. Recordau que podeu trobar les vostres pràctiques al Moodle/GoogleClassroom.
Quan les teniu, comentau al vostre company, desenvolupador del programa.

Ex4:  JUnits per algorismes senzills
Fer un joc de proves a Eclipse amb JUnit i desprès una classe amb un mètoda a provar que:
a) Fer una classe Java que donat un any, torni un booleà dient si es any bisiest o no.
Joc de proves.
anys sí ho son: 1900, 2016
anys no ho son: 1902, 2017

Desprès fer una classe amb un mètode a testejar
bisiest ssi es un any múltiple de 4 o té les dues xifres 0. Ex: 1900.

Nota:
condició a la Vikipèdia
Todos los años divisibles entre 4 son bisiestos, excepto aquellos que son divisibles entre 100 pero no entre 400. Por ejemplo 1700, 1800 y 1900 no fueron bisiestos, pero 1600 y 2000 sí.

b) Fer una classe a testejar amb un mètode per donat un String, tornar si es un email vàlid.
Primer fer el joc de proves i desprès el programa
No fa falta que sempre funcioni, pot ser bàsic tornant correcte si conté una arroba (@).
Fer un bon joc de proves, que a vegades faci petar el mètode que diu si email correcte.
solution (teacher only)


Exemples de caixa blanca i negre:
Material IOC
1.- cercar "Les proves de capsa negra proven"
2.- cercar "Les proves de capsa blanca se centren"


INFORMACIÓ COMPLEMENTÀRIA:
Meet the professional: intro video 


Informació d'aquests projectes reals (en Anglès)

ESOC/ESA Software and simulators: 2 videos
exemple Minutes (profe only)
Exemples de projectes reals
(a veure a classe amb el professor)


Exercici pel pont:

L’objectiu d’aquesta activitat és aprendre a crear proves unitàries amb JUnit.
Es demana:


1.- Crear un projecte que implementi una pila. Ho podeu fer amb un Vector de Integers així:

public class Pila { 
         private int mida;
           private Vector<Integer> pila;

      public Pila() {
      super();
      pila = new Vector<Integer>();
      mida = 0;
      }

      public boolean pilaBuida () {
      fer per alumnes}

      public void apilar ( Integer o ) {
      fer per alumnes
      }

      public Integer desapilar () {

      fer per alumnes
      }

      public int getNumElements() {
      fer per alumnes
      }

      2.- Codificar les proves unitàries amb JUnit, que permetin validar el correcte funcionament de la pila.
      Una pila és una llista o estructura de dades en què la forma d’accés als seus elements és de tipus LIFO (de l’anglès Last In First Out, el darrer a entrar és el primer a sortir), que permet emmagatzemar i recuperar dades.
      Recordar que un JUnit permet automatitzar les proves unitàries d’aplicacions Java; permet l’execució de classes Java de manera controlada, amb l’objectiu de poder avaluar si el funcionament de cada un dels mètodes de la classe es comporta com s’espera.



      5.- Refactoring

      5.1 material-R

      video amb en Martin Fowler, creador del concepte de Refactoring:



      Material IOC - veure fins a on comença Control de Versions (que serà el proper tema)

      5.2 RefactoringR-M (2019)

      5.3.- Preguntes sobre article a llegir
      sol (profe only)

      5.4.- Refactoring amb Eclipse (exerc)
      Refactoring amb Eclipse (exerc) sol (profe only)

      5.5.-Refactoring amb Eclipse: més exemples
      Cada alumne ha de fer tots els exemples que no hagin sortit al exercici 5.4 amb Eclipse



      5.6.- Refactoring Catalog (exemples de tots els refactorings que es  poden fer)
      Cada alumne ha de cercar un exemple de l'anterior catàleg; no explicat a classe i que li agradi. Desprès ho explicarà a classe als seus companys.


      5.7 Main Refactoring Sample, from R.B.
      llibre: pàgines del exemple

      Abans de fer refactoring, hem de tenir un bon joc de proves. Si vos falla el AssertEquals, feis com a continuació:

      codi per AssertEquals:


      String res1="Rental Record for " + "Kico" + "\n"+
      "\t" + "StarWars" + "\t"+ "14.0" + "\n"+
      "\t" + "StarWars2" + "\t"+ "14.0" + "\n"+
      "Amount owed is " + "28.0" + "\n"+
      "You earned " + "2"+ " frequent renter points";
      String res2="Rental Record for " + "Stefan" + "\n"+
      "\t" + "Toy Story" + "\t"+ "12.0" + "\n"+
      "\t" + "ToyStory2" + "\t"+ "12.0" + "\n"+
      "Amount owed is " + "24.0" + "\n"+
      "You earned " + "2"+ " frequent renter points";
      String res3="Rental Record for " + "Laura" + "\n"+
      "\t" + "Lincoln" + "\t"+ "45.0" + "\n"+
      "Amount owed is " + "45.0" + "\n"+
      "You earned " + "2"+ " frequent renter points";


      Exemple llarg i complert. Comença amb unes classes que funcionen i que s'han de refactoritzar. Ho has de fer pas per pas, tant seguint el text com creant desprès el teu projecte en Eclipse i poc a poc, anar deixant polit tot el codi.

      Una vegada els alumnes han fet/intentat fer el refactoring, el professor els pot donar accés al projecte Eclipse abans i desprès de refactoritzar.
      Eclipse project abans refactoritzar (teacher only) 
      Eclipse project refactoritzat (teacher only)

      codi final Refactoritzat (sense projecte Eclipse)


      kk
      6.- Control de versions
      Introducció

      Sense control de versions:

      Bloquejant fitxers:

      Amb fusió:





      Presentació Git

      Justificació d'emprar un Sistema de Control de Versions:



      Entrevista amb el creador de Git, Linus Torvalds

      Llibre recomenat: 

      https://git-scm.com/book/es/v1











      Llibre descarregable:  https://git-scm.com/book/es/v1


      Video de com fan feina dos desenvolupadors emprant branques: (18 min.)



      Tutorial Git amb Eclipse (Vogelia) 
      (Esperar a que el profe vos indiqui)

      Git en més detall

      Resum de les instruccions Git per línea de comandes:
      To use Git, developers use specific commands to copy, create, change, and combine code. These commands can be executed directly from the command line or by using an application like GitHub Desktop or Git Kraken. Here are some common commands for using Git:
      • git init initializes a brand new Git repository and begins tracking an existing directory. It adds a hidden subfolder within the existing directory that houses the internal data structure required for version control.
      • git clone creates a local copy of a project that already exists remotely. The clone includes all the project’s files, history, and branches.
      • git add stages a change. Git tracks changes to a developer’s codebase, but it’s necessary to stage and take a snapshot of the changes to include them in the project’s history. This command performs staging, the first part of that two-step process. Any changes that are staged will become a part of the next snapshot and a part of the project’s history. Staging and committing separately gives developers complete control over the history of their project without changing how they code and work.
      • git commit saves the snapshot to the project history and completes the change-tracking process. In short, a commit functions like taking a photo. Anything that’s been staged with git add will become a part of the snapshot with git commit.

      Add + Commit in one command:

      git commit -a -m "message"

      • git status shows the status of changes as untracked, modified, or staged.
      • git branch shows the branches being worked on locally.
      • git merge merges lines of development together. This command is typically used to combine changes made on two distinct branches. For example, a developer would merge when they want to combine changes from a feature branch into the master branch for deployment.
      • git pull updates the local line of development with updates from its remote counterpart. Developers use this command if a teammate has made commits to a branch on a remote, and they would like to reflect those changes in their local environment.
      • git push updates the remote repository with any commits made locally to a branch.

      Info del propi manual de Git:

      usage: git [--version] [--exec-path[=<path>]] [--html-path]
                 [-p|--paginate|--no-pager] [--no-replace-objects]
                 [--bare] [--git-dir=<path>] [--work-tree=<path>]
                 [-c name=value] [--help]
                 <command> [<args>]

      The most commonly used git commands are:

         add        Add file contents to the index

         bisect    Find by binary search the change that introduced a bug

         branch    List, create, or delete branches

         checkout    Checkout a branch or paths to the working tree

         clone          Clone a repository into a new directory

         commit         Record changes to the repository

         diff           Show changes between commits, commit and working tree, etc

         fetch          Download objects and refs from another repository

         grep           Print lines matching a pattern

         init           Create an empty git repository or reinitialize an existing one

         log            Show commit logs

         merge          Join two or more development histories together

         mv             Move or rename a file, a directory, or a symlink

         pull           Fetch from and merge with another repository or a local branch

         push           Update remote refs along with associated objects

         rebase         Forward-port local commits to the updated upstream head


      Resum Git en 30min (va com una moto):



      Curs online de Git

      Git amb Netbeans

      Repositoris Git per desenvolupadors:
      gitHub
      GitHub és un servei de hosting de repositoris Git, el qual ofereix tota la funcionalitat de Git de control de revisió distribuït i administració de codi de la font (SCM) així com afegint les seves característiques pròpies. A diferència de Git, el qual és estrictament una eina de línia d'ordres, GitHub proporciona una interfície gràfica basada en web i escriptori així com integració del mòbil. També proporciona control d'accés i diverses característiques de col·laboració com bug tracking, administració de tasques, i wikis per cada projecte.
      GitHub ofereix ambdós plans; per a repositoris privats i comptes gratuïts, els quals són normalment utilitzats de host en projectes de programari lliure. Del 2015, GitHub informa que hi ha més de 9 milions d'usuaris i més de 21,1 milions de repositoris, fent-lo el host de codi de font més gran del món.

      bitBucket 
      Bitbucket es un servicio de alojamiento basado en web, para los proyectos que utilizan el sistema de control de revisiones Mercurial y Git. Bitbucket ofrece planes comerciales y gratuitos. Se ofrece cuentas gratuitas con un número ilimitado de repositorios privados (que puede tener hasta cinco usuarios en el caso de cuentas gratuitas) desde septiembre de 2010, los repositorios privados no se muestran en las páginas de perfil - si un usuario sólo tiene depósitos privados, el sitio web dará el mensaje "Este usuario no tiene repositorios". El servicio está escrito en Python.


      La tecnologia de Microsoft, també compatible amb Git:
      Team Foundation Server


      Github guides:
      Veure les seccions:
      1- understanding
      2- hello world
      3- git handbook (exemples de commandos típics fent feina)


      Video: 2 step commit

      Exercici amb el Git i GitHub:
      1- Instal.la un dels següents:
      Instal.la el Git  (per emprar per comandes)
      o
      un client de Git visual: GitHub Desktop

      2.- Exercici Pelis al Github

      Curset Git fet Kico (només professor)

      Comments