A specification language is desirable. (Test cases are special cases of specifications. Test-driven development is a revival of the waterfall process.) For specifying interactions (computer-computer or computer-human), I recommend "live sequence charts" of David Harel, or generally any one based on temporal logics.

The problems with natural languages or sublanguages for anything from specification to implementation are:

0. You have to transit to formal languages at some point (the implementation is formal). The later you transit, the later you can use a computer to analyze and/or simulate for catching mistakes. You catch fewer mistakes, and later.

1. To re-gain the benefit of formality above, some people settle for restrictive sublanguages. Thus naturalness is lost anyway. The problems below, however, are still preserved.

2. Natural languages and sublanguages lack diagrams. For some specifications, formal diagrammatic languages are more suitable (e.g., live sequence charts).

3. Natural languages and sublanguages lack scoping and parenthesizing such as in mathematical notation and formal languages:

  sqrt (sin (x^2 + y) - 2) * z

  (forall r. (Int -> M r) -> M r) -> M Int

  forall r. ((Int -> M r) -> M r) -> M Int

_______________________________________________
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe

Reply via email to