Matias Belaus
    • Create new note
    • Create a note from template
      • Sharing URL Link copied
      • /edit
      • View mode
        • Edit mode
        • View mode
        • Book mode
        • Slide mode
        Edit mode View mode Book mode Slide mode
      • Customize slides
      • Note Permission
      • Read
        • Only me
        • Signed-in users
        • Everyone
        Only me Signed-in users Everyone
      • Write
        • Only me
        • Signed-in users
        • Everyone
        Only me Signed-in users Everyone
      • Engagement control Commenting, Suggest edit, Emoji Reply
    • Invite by email
      Invitee

      This note has no invitees

    • Publish Note

      Share your work with the world Congratulations! 🎉 Your note is out in the world Publish Note

      Your note will be visible on your profile and discoverable by anyone.
      Your note is now live.
      This note is visible on your profile and discoverable online.
      Everyone on the web can find and read all notes of this public team.
      See published notes
      Unpublish note
      Please check the box to agree to the Community Guidelines.
      View profile
    • Commenting
      Permission
      Disabled Forbidden Owners Signed-in users Everyone
    • Enable
    • Permission
      • Forbidden
      • Owners
      • Signed-in users
      • Everyone
    • Suggest edit
      Permission
      Disabled Forbidden Owners Signed-in users Everyone
    • Enable
    • Permission
      • Forbidden
      • Owners
      • Signed-in users
    • Emoji Reply
    • Enable
    • Versions and GitHub Sync
    • Note settings
    • Note Insights New
    • Engagement control
    • Make a copy
    • Transfer ownership
    • Delete this note
    • Save as template
    • Insert from template
    • Import from
      • Dropbox
      • Google Drive
      • Gist
      • Clipboard
    • Export to
      • Dropbox
      • Google Drive
      • Gist
    • Download
      • Markdown
      • HTML
      • Raw HTML
Menu Note settings Note Insights Versions and GitHub Sync Sharing URL Create Help
Create Create new note Create a note from template
Menu
Options
Engagement control Make a copy Transfer ownership Delete this note
Import from
Dropbox Google Drive Gist Clipboard
Export to
Dropbox Google Drive Gist
Download
Markdown HTML Raw HTML
Back
Sharing URL Link copied
/edit
View mode
  • Edit mode
  • View mode
  • Book mode
  • Slide mode
Edit mode View mode Book mode Slide mode
Customize slides
Note Permission
Read
Only me
  • Only me
  • Signed-in users
  • Everyone
Only me Signed-in users Everyone
Write
Only me
  • Only me
  • Signed-in users
  • Everyone
Only me Signed-in users Everyone
Engagement control Commenting, Suggest edit, Emoji Reply
  • Invite by email
    Invitee

    This note has no invitees

  • Publish Note

    Share your work with the world Congratulations! 🎉 Your note is out in the world Publish Note

    Your note will be visible on your profile and discoverable by anyone.
    Your note is now live.
    This note is visible on your profile and discoverable online.
    Everyone on the web can find and read all notes of this public team.
    See published notes
    Unpublish note
    Please check the box to agree to the Community Guidelines.
    View profile
    Engagement control
    Commenting
    Permission
    Disabled Forbidden Owners Signed-in users Everyone
    Enable
    Permission
    • Forbidden
    • Owners
    • Signed-in users
    • Everyone
    Suggest edit
    Permission
    Disabled Forbidden Owners Signed-in users Everyone
    Enable
    Permission
    • Forbidden
    • Owners
    • Signed-in users
    Emoji Reply
    Enable
    Import from Dropbox Google Drive Gist Clipboard
       Owned this note    Owned this note      
    Published Linked with GitHub
    • Any changes
      Be notified of any changes
    • Mention me
      Be notified of mention me
    • Unsubscribe
    --- title: Ingenieria de Software - 4K3 - Teorico tags: ISW, Ingenieria de Software, 4K3 description: Notas tomadas a lo largo del cursado de Ingenieria de Software en el curso 4K3. --- [TOC] --- :::info User stories: Describirlas, actor, criterios de aceptacion, pruebas de usuario. Estimaciones en la serie de Fibonacci ::: ### Software Configuration Managment (SCM) Es una disciplina de soporte/protectora, que ocurre transversalmente al proyecto y lo trasciende para darle soporte y mantener la integridad del producto en todo su ciclo de vida desde el momento uno, desde el primer **item de configuracion (configuration item)**, que seria cualquier cosa que pueda entrar a la computadora, ya sea una imagen, un prototipo del producto, codigo, etc. Un producto para mantener integridad debe cumplir con: - Satisfacer las necesidades del usuario - Facil y rastreable en todo su ciclo de vida - Satisfacer los criterios de la performance - Cumplir con la expectativa de costo La responsabilidad de mantener la integridad de un producto es de todas las personas que involucran la construccion de ese producto. Cada persona del equipo es responsable de seguir los lineamientos de configuracion que se definieron para todo el equipo. #### Conceptos clave para la gestion de configuracion - ++Configuracion:++ Una foto del repositorio y su conjunto de items de configuracion en un determinado momento. - ++Item de configuracion:++ Todos y cada uno de los artefactos que forman parte del producto o del proyecto. Necesitan ser compartidos entre los miembros del equipo (Requerimientos, User Story. Pero son todos elementos que pueden estar en un File System. Una foto, un libro excel, word, base de datos, codigo, etc.). - De Producto: Ciclo de vida mas largo, trasciende a los proyectos. - De Proyecto: - De Iteracion: Menor ciclo de vida - ++Repositorio:++ Lugar donde se almacenan, contenedor de todos los items de configuracion y su historia, accesible por varias personas a la vez y mantener las versiones. Tiene una estructura que permite definir cada lugar para cada item con el objetivo de mantener trazabilidad y si uno quiere encontrar un item, sepa exactamente donde buscarlo. - ++Version:++ Estado particular en el tiempo de cada item de configuracion. - ++Linea Base:++ Es un item o un conjunto de item de configuracion que son estables, es decir que se los puede tomar como referencia, por lo que ya pasaron por todos los niveles de revision y aprobacion y no deben ser modificados con libertad sin previa aprobacion. Esto quiere decir que para modificar una Linea Base debe pasar por un proceso formal de Control de Cambios. Se los marca o "tagea" de manera univoca para identificar que ese conjunto de items forman parte de la **linea base**. La forma de identificacion univoca se da con un nombre, un estado, un id e indicar cuales son los items que forman parte de la linea base con su estado. Se utiliza para poner un punto de referencia, un punto de partida para avanzar en el desarrollo. Pueden ser de dos tipos: - De especificacion(Requerimientos, Diseoño): No tienen codigo, tienen informacion de la ingenieria del producto - Operacionales: Contienen codigo que en general es operativo y se marcan para entrar en una version de prueba de aceptacion o produccion. - ++Ramas:++ No es recomendable trabajar y modificar los items de la rama principal o master del proyecto, por lo cual se crea una bifurcacion para poder trabajar con ella, y una vez que los cambios realizados estan aprobados, se hace un merge o una integracion de la bifurcacion a la rama principal, es decir, lleva los cambios a la rama principal. En la integracion, pueden surgir conflictos que debemos resolver con diff. Eventualmente todas las ramas creadas que no sean la principal, deberian integrarse a la misma o descartarse. #### Actividades Fundamentales en el SCM - ++Identificacion de items:++ Se define la estructura del repositorio, se identifican los items de configuracion univocamente y se asignan los items y se asignan los items a un lugar especifico dentro de la estructura del repositorio. La especificacion de los items no siempre se puede realizar de antemano, por lo que se establecen reglas de nombrado, genericos, que suelen seguir lineamientos, estandares. - ++Control de Cambios:++ Actividad que se encarga de definir los cambios sobre las Lineas Base y mantener la integridad de las mismas a lo largo del tiempo. Procedimiento formal que involuctra diferentes actores y una evaluacion del impacto del cambio. En el control de cambios interviene un Comite de Control de Cambios (CCC) formado por representantes de todas las areas involucradas en el desarrollo (Analisis/Diseño, Implementacion, Testing, Otros(clientes, etc)). - ++Auditorias de Configuracion:++ Se realiza en base a un plan que responda al porque de cada cosa, porque esta hecho de esa manera, para contrastarlo con la realidad. La herramienta que me ayuda a hacer auditoria es la *Matriz de Trazabilidad*. Dos tipos de auditorias en la gestion de configuracion: - Auditoria Fisica: **Se realiza primero ya que me dice donde estan los items de configuracion y me permite pasar a la Funcional. Realiza la parte de verificacion**. Vela por la integridad del repositorio, que este, que se encuentre alojado en el lugar donde se fijo, que los items de configuracion respeten las normas de nombrado, que esten guardados en la parte correspondiente del repositorio. **Se audita sobre una linea base.** La auditoria es realizada por un tercero al proyecto, de afuera, para obtener una vision objetiva del proyecto. - Auditoria Funcional: **Se realiza luego de la Fisica y en base a la misma. Realiza la parte de validacion**. Ver si el producto, es el producto correcto, si los items de configuracion que se tienen, responden a lo que los requerimientos dicen que tienen que hacer - ++Informes de Estado:++ Generar reportes acerca del estado de la configuracion para generar visibilidad, proporcionar informacion y poder tomar decisiones mas acertadas. El reporte basico se denomina Inventario, es aquel que lista todos los items de configuracion que tiene el repositorio con su estado en un momento de tiempo. Se puede listar la cantidad de solicitudes de cambio en un determinado periodo de tiempo, listar el contenido de una linea base, listar cuantas lineas bases se tienen para un determinado proyecto. #### SCM y Desarrollo Agil La auditoria es la que mas se cuestiona, las demas siempre se deben realizar en un proyecto de desarrollo agil. Lo unico que se debe acordar antes de comenzar es de que manera se va a aplicar la Gestion de Configuracion, pero siempre deberiamos hacerla. Es responsabilidad de todo el equipo. --- ### Testing de Software #### Que es testing Porceso destructivo cuyo objetivo es encontrar defectos, asumiendo que una porcion de software por mas trivial que sea, va a tener defectos, con el objetivo de resolverlos contribuyendo a la calidad del software. #### Cuanto testing es suficiente Es imposible poder garantizar la prueba de todas las combinaciones posibles. Existen diferentes criterios para determinar cuando dejar de hacer testing - Goog enough: Cortar cuando la cantidad de defectos encontrados lleguen a cierto umbral - Economico: Cortar cuando se haya consumido el presupuesto definido a ejecutar pruebas #### Error vs Defecto Ambas son fallas, pero dependera del momento en el que se encuentren o producen para determinar si es un error o un defecto. - Error: Es cuando la falla es encontrada durante la misma etapa que la origino, por ej: encontramos una falla de implementacion en esa etapa estamos frente a un error. - Defecto: Es cuando la falla trasciende a la etapa en la cual se origino, por ejemplo, aparece en etapa de produccion, pasa a ser un defecto. El objetivo del testing es encontrar defectos, ya que es una actividad realizada posteriormente a la implementacion y brinda una retroalimentacion a la misma con el objetivo de corregir los mismos. #### Proceso del Testing ```graphviz digraph { compound=true rankdir=RL node [ fontname="Source Sans Pro", fontsize=30]; edge [ fontname="Source Sans Pro", fontsize=12 ]; subgraph { concentrate=true a [label="Planificacion y Control"] [shape=box] b [label="Analisis y Diseño"] [shape=box] c [label="Ejecucion"] [shape=box] d [label="Evaluacion y Reportes"] [shape=box] a -> b [dir="back"] b -> c [dir="back"] c -> d [dir="back"] } } ``` - Analisis y Diseño: Etapa en la que se formulan los casos de prueba que son los artefactos por excelencia del testing como disciplina y que van a servir como guia a la ejecucion de las pruebas para luego tomar una retroalimentacion en base a los reportes #### Niveles de Testing - Testing Unitario (Desarrollador): El objetivo del testing unitario no es encontrar defectos a diferencia de lo que indica la disciplina ya que se desarrollan durante la implementacion. No buscan encontrar errores, proveen un mecanismo de verificacion de la comprension de la funcionalidad que se esta implementando. - Testing de Integracion (Tester): Busca defectos. Orientado a probar interfaces (no graficas), a nivel de fronteras o uniones entre diferentes componentes en el producto de software. Prueba las integraciones entre los componentes. - Testing de Sistema (Tester): Se prueba una funcionalidad en su totalidad. Ejecutar cierto camino, con ciertas entradas, caracteristicas para poder si el resultado obtenido coincide con el resultado esperado. Pruebas hechas en funcionalidades ya implementadas. - Testing de Aceptacion (PO en agile/Usuario/Cliente): El objetivo no es encontrar defectos ya que a esta altura no deberia haber defectos, si no, capacitarlo en la funcionalidad que esta implementada o generar una aproximacion al entorno productivo. **Casos de prueba:** Artefacto por excelencia del testing, que contendra un conjunto de condiciones/pasos que se deben ejecutar para poder garantizar que el resultado obtenido sea o no igual al esperado y de esa manera encontrar defectos. Para ello, vamos a diseñar casos de prueba de manera inteligente y economica, realizando la menor cantidad de casos de prueba posibles para maximizar la cantidad de defectos encontrados. Tenemos dos estrategias para cumplirlo: - Caja Blanca: Podemos ver el detalle de la implementacion de la funcionalidad, vamos a disponer del codigo y vamos a poder diseñar nuestro caso de prueba para poder garantizar la **cobertura**. Es decir por ejemplo, cubrir todos los *if* todos los *else*, todas las ramas de ejecucion. El nombre de caja blanca hace referencia a que yo conozco la estructura interna y por lo tanto puedo guiar el caso por donde yo quiera. - Caja Negra: A diferencia del anterior, yo no conozco la estructura interna de la implementacion, por lo que solo voy a analizar en terminos de entradas y salidas. Identificar cuales son las diferentes entradas que una funcionalidad puede tener, elegir los valores para ejecutarla, y finalmente comparar las salidas obtenidas con las que esperaba tener. Entradas vs Salidas. #### Metodos de caja negra: - Basado en especificaciones - Particion de equivalencias: 1. Analizar cuales son las diferentes condiciones externas que van a estar involucradas en una funcionalidad, tanto entradas como salidas posibles. 2. Para cada condicion externa, analizo cuales son los subconjuntos de valores posibles que pueden tomar cada una de las condiciones externas que producen dentro de ese mismo subconjunto un resultado equivalente *(Definicion de particion de equivalencia)*. Pueden ser rangos de valores continuos, valores discretos, seleccion simple o multiple. - Analisis de valores limites (Particularidad/Variante de la particion de equivalencias): Plantea que la mayor cantidad de los defectos se encuentran en los extremos de los intervalos. Lo que cambia ahora, es que a la hora de escribir el caso de prueba, en vez de escribir cualquier valor de la particion de equivalencia, tomaremos uno que se encuentre proximo a los extremos. - Basados en la experiencia - Adivinanza de defectos - Testing exploratorio Cada una tiene sus pros y sus contras, por lo que lo optimo seria encontrar una combinacion entre ambas tecnicas que nos permita maximizar la cantidad de defectos encontrados ##### ++Descripcion de casos de prueba++ Prioridad: - Alta: Aquellos casos de prueba que dirigen a escenarios de "caminos felices" - Media: Combinaciones de valores que puedan ejecutarse bajo ciertas condiciones que producen alguna falla - Baja: Todas aquellas validaciones relacionadas a formato o a "no ingresa valor" Nombre: Debe describir de forma clara el escenario que estamos probando Precondiciones: Conjunto de caracteristicas que tiene que tener mi contexto para poder llevar a cabo este caso de prueba en particular Pasos: Conjunto de operaciones ordenadas y enumeradas para conseguir un resultado esperado en las cuales el formato de escritura es: "El ROL ejecuta cierta accion" Resultado esperado: Salida que deberia tener el sistema en la ejecucion de ese caso de prueba en especifico con esas entradas. #### Metodos de Caja Blanca **Coberturas** - ++De enunciados o caminos basicos:++ Buscar garantizar que todos los caminos independientes que tiene mi funcionalidad, seran recorridos al menos una vez. Con esta cobertura, podemos decir que garantizamos que nuestro codigo ha sido ejecutado pasando por todos los caminos indepentientes. Se requiere poder representar la ejecucion mediante grafos/diagramas de flujo, se calcula la complejidad ciclomatica. A partir del grafo se generan casos de prueba. Complejidad: $M = E-N + 2P$ Siendo: M = Complejidad ciclomatica E = Numero de aristas del grafo N = Numero de nodos del grafo P = Numero de componentes conexos, nodos de salida - ++De sentencias:++ Buscar la cantidad minima de casos de prueba que me permiten evaluar/recorrer, todas las sentencias. Una sentencia es toda asignacion de variable, invocacion de metodo, mostrar un mensaje, lanzar una excepcion, etc. - ++De decision:++ Una decision es una estructura de control completa. Busca encontrar la menor cantidad de casos de prueba que abarquen todas las decisiones (los ifs), sin importar lo que tengan dentro. Tengo que cubrir todas las ramas de la decision, tanto para los true, como para los false. - ++De condicion:++ Busca encontrar la menor cantidad de casos de prueba que nos permiten valuar cada una de las condiciones tanto en su valor verdadero como su valor falso, independientemente de por donde salga la decision. A este metodo solo le interesa garantizar que cada una de las condiciones sale por cada uno de los valores logicos (True, False), sin importar si la decision sale por verdadero o falso ni los cortocircuitos de los operadores. - ++De cobertura de decision/condicion:++ Busca valuar las decisiones y las condiciones en cada uno de los valores logicos. Combinacion de ambas anteriores. - ++De cobertura multiple:++ Tiene como objetivo hacer el combinatorio de los valores de verdad de todas las condiciones adentro de las decisiones, teniendo en cuenta los operadores logicos. - Etc ### Design Thinking Generar ideas innovadoras Encontrar un equilibrio entre el pensamiento intuitivo y el analitico para generar ideas innovadoras pero a la vez posibles Etapas del proceso: 1- Descubrimiento: Identificar las ideas 2- Ideacion: 3- Generacion de prototipos: Pruebas de concepto 4- Resultado final: MVP ### Retrospectivas Reuniones que se realizan al final de un periodo de trabajo, regularmente de forma usual luego de una iteracion y/o release. El objetivo de las restrospectivas es analizar el pasado para mejorar el futuro. Visto en el concepto de SCRUM como una reunion de retrospectiva luego de cada Sprint. Es la ultima actividad a realizar, incluso luego de la demo. Tambien son utilizadas en el contexto de procesos definidos. Participantes de una retrospectiva: Developers, PO y Scrum Master. Quienes NO deberian participar: Jefes, lideres, para poder hablar libremente en esa reunion de retrospectiva. #### Estructura de la retrospectiva - Preparar el escenario - Reunir Datos: - Generar Ideas: Una vez reunidos los datos, el equipo evalua que hacer con la informacion resultante - Decidir que hacer: Resultados medibles, que hizo que no se hizo. - Cerrar la Retrospectiva: Retrospectiva de la retrospectiva. Tomar feedback para una proxima retrospectiva mejor

    Import from clipboard

    Paste your markdown or webpage here...

    Advanced permission required

    Your current role can only read. Ask the system administrator to acquire write and comment permission.

    This team is disabled

    Sorry, this team is disabled. You can't edit this note.

    This note is locked

    Sorry, only owner can edit this note.

    Reach the limit

    Sorry, you've reached the max length this note can be.
    Please reduce the content or divide it to more notes, thank you!

    Import from Gist

    Import from Snippet

    or

    Export to Snippet

    Are you sure?

    Do you really want to delete this note?
    All users will lose their connection.

    Create a note from template

    Create a note from template

    Oops...
    This template has been removed or transferred.
    Upgrade
    All
    • All
    • Team
    No template.

    Create a template

    Upgrade

    Delete template

    Do you really want to delete this template?
    Turn this template into a regular note and keep its content, versions, and comments.

    This page need refresh

    You have an incompatible client version.
    Refresh to update.
    New version available!
    See releases notes here
    Refresh to enjoy new features.
    Your user state has changed.
    Refresh to load new user state.

    Sign in

    Forgot password

    or

    By clicking below, you agree to our terms of service.

    Sign in via Facebook Sign in via Twitter Sign in via GitHub Sign in via Dropbox Sign in with Wallet
    Wallet ( )
    Connect another wallet

    New to HackMD? Sign up

    Help

    • English
    • 中文
    • Français
    • Deutsch
    • 日本語
    • Español
    • Català
    • Ελληνικά
    • Português
    • italiano
    • Türkçe
    • Русский
    • Nederlands
    • hrvatski jezik
    • język polski
    • Українська
    • हिन्दी
    • svenska
    • Esperanto
    • dansk

    Documents

    Help & Tutorial

    How to use Book mode

    Slide Example

    API Docs

    Edit in VSCode

    Install browser extension

    Contacts

    Feedback

    Discord

    Send us email

    Resources

    Releases

    Pricing

    Blog

    Policy

    Terms

    Privacy

    Cheatsheet

    Syntax Example Reference
    # Header Header 基本排版
    - Unordered List
    • Unordered List
    1. Ordered List
    1. Ordered List
    - [ ] Todo List
    • Todo List
    > Blockquote
    Blockquote
    **Bold font** Bold font
    *Italics font* Italics font
    ~~Strikethrough~~ Strikethrough
    19^th^ 19th
    H~2~O H2O
    ++Inserted text++ Inserted text
    ==Marked text== Marked text
    [link text](https:// "title") Link
    ![image alt](https:// "title") Image
    `Code` Code 在筆記中貼入程式碼
    ```javascript
    var i = 0;
    ```
    var i = 0;
    :smile: :smile: Emoji list
    {%youtube youtube_id %} Externals
    $L^aT_eX$ LaTeX
    :::info
    This is a alert area.
    :::

    This is a alert area.

    Versions and GitHub Sync
    Get Full History Access

    • Edit version name
    • Delete

    revision author avatar     named on  

    More Less

    Note content is identical to the latest version.
    Compare
      Choose a version
      No search result
      Version not found
    Sign in to link this note to GitHub
    Learn more
    This note is not linked with GitHub
     

    Feedback

    Submission failed, please try again

    Thanks for your support.

    On a scale of 0-10, how likely is it that you would recommend HackMD to your friends, family or business associates?

    Please give us some advice and help us improve HackMD.

     

    Thanks for your feedback

    Remove version name

    Do you want to remove this version name and description?

    Transfer ownership

    Transfer to
      Warning: is a public team. If you transfer note to this team, everyone on the web can find and read this note.

        Link with GitHub

        Please authorize HackMD on GitHub
        • Please sign in to GitHub and install the HackMD app on your GitHub repo.
        • HackMD links with GitHub through a GitHub App. You can choose which repo to install our App.
        Learn more  Sign in to GitHub

        Push the note to GitHub Push to GitHub Pull a file from GitHub

          Authorize again
         

        Choose which file to push to

        Select repo
        Refresh Authorize more repos
        Select branch
        Select file
        Select branch
        Choose version(s) to push
        • Save a new version and push
        • Choose from existing versions
        Include title and tags
        Available push count

        Pull from GitHub

         
        File from GitHub
        File from HackMD

        GitHub Link Settings

        File linked

        Linked by
        File path
        Last synced branch
        Available push count

        Danger Zone

        Unlink
        You will no longer receive notification when GitHub file changes after unlink.

        Syncing

        Push failed

        Push successfully