En caso de que los contratos de código de electricidad estática poder comprobar la aritmética obligado?

StackOverflow https://stackoverflow.com/questions/1244290

Pregunta

¿Fue útil?

Solución

He tenido una respuesta en el foro de MSDN. Resulta que yo estaba muy cerca de allí. Básicamente, el de electricidad estática funciona mejor si se divide fuera "y de opinión" contratos. Por lo tanto, si cambiamos el código para esto:

public static int RollDice(Random rng)
{
    Contract.Ensures(Contract.Result<int>() >= 2);
    Contract.Ensures(Contract.Result<int>() <= 12);

    if (rng == null)
    {
        rng = new Random();
    }
    Contract.Assert(rng != null);

    int firstRoll = rng.Next(1, 7);
    Contract.Assume(firstRoll >= 1);
    Contract.Assume(firstRoll <= 6);
    int secondRoll = rng.Next(1, 7);
    Contract.Assume(secondRoll >= 1);
    Contract.Assume(secondRoll <= 6);

    return firstRoll + secondRoll;
}

que funciona sin ningún problema. También significa que el ejemplo es aún más útil, ya que pone de relieve el mismo punto que el corrector hace trabajo mejor con contratos separados hacia fuera.

Otros consejos

No sé acerca de la MS Contratos herramienta Comprobador, pero el análisis gama es una técnica de análisis estático estándar; que es ampliamente utilizado en herramientas de análisis estático comerciales para verificar que las expresiones subíndice son legales.

Investigación MS tiene un buen historial en este tipo de análisis estático, por lo que yo esperaría de hacer este tipo de análisis gama a ser un objetivo de los contratos del inspector, aunque actualmente no marcada.

scroll top