www.pudn.com > use-2.3.0.zip > NEWS


USE NEWS -- history of user-visible changes. -*- Text -*-
$Date: Wed, 03 Aug 2005 09:44:55 +0200 $
$ReleaseVersion: 2.3.0 $

Please send bug reports to mr@informatik.uni-bremen.de.  See the file
`README' for a description of how to report bugs.


** Changes since version 2.2.0

  Special features: 

* Association names, role names, and multiplicities can be placed on a
  user defined position in the class diagram and object diagrams.
  Double click on the left mouse button to reposition an element.
  
* You can now add user defined nodes on association and link edges to 
  conrol the layout of an edge. Double click on an edge to create an
  additional node. Double click again on this node and it will
  disappear.

* Classes/Objects or associations/links can be selected and deselected
  within the Model browser. Select the desired model element in the
  Model browser and click with the middle mouse button on the selected
  model element. In the class diagram the class or association will be
  selected. In the object diagram all objects or all links will be
  selected corresponding to the selected class or association.  

* There is now a class diagram window.  

* Links can be deleted within the GUI as well now.

* Bug fix: The command line now works stable again (it was not
  responding in certain situations in version 2.2.0)

* USE syntax: The syntax for association classes has changed. 
  It is now: 
   associationclass WorksFor
   between
     Company[0..1] role employer
     Person[1..*] role employee
   attributes
     salary : Integer
   end
  The association part and the class part have been switched. People
  seem to find this more intuitive.


** Changes since version 2.1.0

* The startup scripts (bin/use and bin/use.bat) automatically
  determine the USE home directory on most installations (unix/linux
  and windows). USE now runs 'out of the box'.

* On Windows, USE can now be installed in locations containing
  spaces in their path names 
  (e.g., c:\documents and setting\green\My Files\use)

* Now compiles under Java 1.5 / 5.0.

* UML association classes are now available in USE. 
  See documentation for further details.
  Syntax:
   associationclass WorksFor
   between
     Company[0..1] role employer
     Person[1..*] role employee
   attributes
     salary : Integer
   end
  Create links for association classes using the new command 
   !create aJob : WorksFor between (aPerson,aCompany)'

* It is now possible to optionally specify the source end in
  navigation with `.[]'. This is
  necessary when a navigation is ambiguous (regards reflexive ternary
  associations and association classes).

* The GUI model browser now supports several types of sorting
  classes, associations, and constraints.

* Added new shell command ':' to display the static type of an
  expression. 

* Check structure after every change (GUI) is now disabled by
  default. In earlier versions this was initially enabled. 
  We disabled it, because reading command files could be really time
  consuming.

* Objects and association names can be hidden in the object view.

* A little more help is now available.

* All files (*.use, *.cmd, *.invs) can be read by USE now with 
  open. File type is chosen based on the content.
  The commands 'read' and 'load' are still available.

* The USE Snapshot Generator has been integrated into USE. 

* An 'if then else' construct is integrated in the ASSL-Language for
  the Generator

* A 'delete'-command is now available in the ASSL-Language for objects
  and associations

* With the command 'check -a' all invariants are checked now (USE and
  Generator invariants). Negated Generator invariants are checked as
  well now.

* If a model inherent invariant is violated, all invariants which are
  unaffected from the violation are still evaluated.
  (When typing 'check' in the shell or when using the class invariant
  dialog in the GUI).




** Changes since version 2.0.1

* The build system has been simplified and switched from "make" to
  apache ant. If you want to build USE from source, use ant with the
  provided build.xml file.

* Preliminary support for OCL 2.0 tuple types has been added. See the
  file test/t014.in for an example.

* The commands "insert", "delete", "destroy", and "set" are more
  flexible now in that they accept OCL expressions as arguments
  instead of only object names. Existing command scripts will still
  work (with a minor change - see below) since object names are
  interpreted as OCL variables.

  - The "insert" and "delete" commands insert/delete links into/from
    an association. Syntax:

      insertCmd ::= "insert" 
        "(" expression "," expression { "," expression } ")" "into" id
      deleteCmd ::= "delete" 
        "(" expression "," expression { "," expression } ")" "from" id

    Each expression must evaluate to an object reference.

  - The "destroy" command destroys one or more objects. Syntax:

      destroyCmd ::= "destroy" expression

    The expression may also denote a collection of objects. For
    example, the command

      !destroy Person.allInstances

    removes all Person objects from a system state at once.

  - The "set" command assigns a value to an attribute of an
    object. Syntax:

      setCmd ::= "set" expression ":=" expression 

    The first expression must be an attribute access expression giving
    an "l-value" for an attribute. Example:

      !set company.manager.salary := 5000

    Note that the assignment token had to be changed from "=" to ":="
    to make the grammar unambiguous. Existing script files can be
    converted with the following command in a bash shell:

      $ for f in *.cmd; do mv $f $f.old; \
        sed -e 's/\(!set[^=]*\)=/\1:=/1' $f.old > $f; done 

* A new "let" command allows to bind new variables. The syntax is:

  letCmd ::= "let" id [ ":" type ] "=" expression

  For an example, see the specification SwapLinks.use in the examples
  directory.


** Changes since version 2.0.0

* An Extension to USE 2.0.0. was added. It is extended by a tool for 
  generating (valid) snapshots for given class models. Changes in USE 
  and an overview about new packages are described in file CHANGES.

* A change to the USE grammar now allows classes, associations, and
  constraints to appear in any order in a specification file.

* Bug fixes: 

  - Invoking the "Reset" command when no model is loaded caused a
    NullPointerException. Reported by Joern Bohling.

  - "destroy" commands showed up as "delete" in the Command list view
    and the "write" shell command. Reported by Joern Bohling.

  - OCL operations "including" and "excluding" didn't accept undefined
    argument values.

  - Flattening of collections with undefined (collection) elements
    caused an exception. Reported by Arne Lindow.

  - The OCL operation "sortedBy" caused an exception when the argument
    type differed from the collection element type. Reported by Arne
    Lindow.


** Changes since version 1.5.0

* Support for pre- and postconditions has been added. Examples can be
  found in the specification files AB.use, Employee.use, Graph.use,
  and NestedOperationCalls.use. See the documentation about
  "Validating pre- and postconditions" available at the project web
  site (http://www.db.informatik.uni-bremen.de/projects/USE/) for
  details.

* Operation calls can be simulated with the new commands `openter' and
  `opexit'. Preconditions are checked on entry, and postconditions are
  checked on exit of an operation. See the documentation on pre- and
  postconditions for details.

* Three new views have been added:

  - UML sequence diagrams show the flow of messages (i.e., sequence of
    operation calls).

  - A call stack shows the stack of currently active operations.

  - A command list shows the sequence of executed state manipulation
    commands in the syntax of the USE command language.

* Object diagrams and sequence diagrams can be printed with the
  `File|Print...' menu command.

* A new shell command `write' writes the list of executed commands to
  stdout or to a file. This function corresponds to the `File|Save'
  menu item.

* A `step mode' helps to animate command scripts from the shell. The
  command `step on' activates a single-step mode in which commands are
  executed only after a key has been pressed.

* The grammar of USE specifications has been changed slightly to be
  more orthogonal. Semicolons terminating enumeration type, attribute,
  operation, and association end definitions are now deprecated
  although they are still allowed. This may change in the future so
  that semicolons are dropped completely. All of the example files
  have been updated.

* Some grammar limititations have been lifted: element variables in
  iterate-based expressions can now be omitted as in standard OCL,
  e.g., self.employees->select(age > 20) is fine now whereas it
  previously had to be written as 
  self.employees->select(e | age > 20).

* Invariant names must be unique in class scope rather than in model
  scope. It's now ok to have invariants with the same name in
  different classes, for example,

	 context Foo inv i: ...
	 context Bar inv i: ...

* The OCL 1.4 operations `collection->one and `collection->any' have
  been added. Examples can be found in test/t1.in.

* The syntax of collection literals and real literals has been updated
  to OCL 1.4.  Multiple integer ranges are now accepted in collection
  literals, e.g., Set{1..3,5..7}. Real literals may contain exponents.

* The type OclAny has been added.

* Let expressions (OCL 1.3 style) have been added.

* Type checking for collection literals has been improved. Previously,
  all elements had to have the same type. Now, the least common
  supertype (if a unique one exists) is used. Examples:
	   
	   Set{1} : Set(Integer)
	   Set{1,1.1} : Set(Real)
	   Set{1,1.1,true} : Set(OclAny)

  Note that the type inference mechanism does not yet handle some
  cases related to multiple inheritance. In some rare cases it signals
  a type check error where a common supertype exists.

* Bug fixes: 

  - Specification files were not closed after compilation causing the
    file to remain locked during a session on windows platforms.

  - Opening an evaluation browser on an expression containing iterate
    could caused a NullPointerException. Reported by Arne Lindow.

  - Fixed derived associations in the Collaboration package in
    UML13All.use and actionsemantics.use. Reported by Christophe
    Lecamus.


** Changes since version 1.4.0

* A new view for class extents has been added. A table shows all
  objects of a class, their attribute values and their results
  w.r.t. invariants. This information helps to quickly identify
  individual objects that violate any constraints. The view is called
  `class extent view' and is available from the the menu item
  `View|Create...'. A context menu in the view window provides
  additional options.

* New nodes in object diagrams are placed randomly if objects are
  created by a script. They all were stacked on top of each other at
  position (0,0) previously.

* There is a new button `Clear result' in the OCL evaluation dialog.

* The semantics of OCL if-expressions changed with respect to
  undefined values. If the condition is undefined the result will be
  undefined, too. For example, the expression `if
  oclUndefined(Boolean) then 2 else 3 endif' results in `Undefined :
  Integer'. In previous versions, the result was 3.

* The OCL operations `collection->isUnique', `collection->sortedBy',
  `bag->asSequence', and `set->asSequence' have been added. Examples
  can be found in test/t1.in.

* Bug fixes: 

  - A NullPointerException was thrown by the USE-compiler if a result
    type of an operation was undefined. Reported by Tim Harrison.

  - The OCL operations includesAll and excludesAll now correctly
    accept any collection with the same element type T as the receiver
    collection. Previously, only subtypes of the receiver collection
    were possible. Reported by Tim Harrison.

  - The collect operation applied to sequences now correctly returns a
    sequence instead of a bag. Reported by Tim Harrison.

  - Undefined values in collections sometimes "disappeared" or caused
    runtime exceptions.

  - Variables bound to new objects were not available in global
    scope. For example, after doing `!create p : Person', the variable
    p was not available in commands like `!set p.age=p.age + 1'.


** Changes since version 1.3.0

* Thanks to Jose Alvarez and Andy Evans from the University of York,
  UK, for contributing their specification of the UML Action Semantics
  model as defined in Response to OMG RFP ad/98-11-01. The
  specification is in the file actionsemantics.use in the examples
  directory. The file groupactionexample.cmd contains an example
  script.

* The layout of object diagrams can be saved to and loaded from a
  file. The `Load layout' and `Save layout' commands are available via
  the context menu in object diagrams. The default extension for
  layout files is ".olt" (object diagram layout).

* Attribute values of objects can be shown in object diagrams. This
  option can be toggled with the checkbox `Show attribute values' in
  the context menu of object diagrams.

* The `check' command has changed. The option `verbose' is now `-v'. A
  new option `-d' gives more details in case of a failing
  invariant. It shows those instances that violate the constraint. The
  check can also be optionally restricted to a list of invariants.

* The check for rolename conflicts is now more strict. This has
  revealed more errors in the UML 1.3 metamodel. For example, in
  Fig. 2-17, the rolename `connection' at AssociationEndRole conflicts
  with the inherited identical rolename at class AssociationEnd.

* Bug fixes: 

  - Equality of OCL values was not always well-defined for integer and
    real values. Undefined values sometimes caused an
    exception.

  - Operation bodies with expressions refering to other operations
    that are defined later in a specification did not compile.

  - The shorthand notation for collect did not work with oclIsTypeOf,
    oclIsKindOf and oclAsType. Also, these operations are defined for
    OclAny and subtypes only. Previously, they could be applied to
    collections although the collection types are not subtypes of
    OclAny. Reported by Tim Harrison.

  - Evaluation of operation parameters could produce wrong results in
    certain circumstances. If a variable with the same name of a
    formal parameter exists in the caller's scope, this variable would
    change in the caller's context. See the file test/t5.in for an
    example. Bug report and fix submitted by Jean-Paul Bodeveix.


** Changes since version 1.2.0

* The OCL shorthand notation for collect has been implemented (see
  Section 7.6.2 of UML 1.3). The file test/t4.in contains examples and
  test cases. The shorthand syntax can be disabled with the command
  line option `-disableCollectShorthand'.

* The new command `readq' ("read quiet") allows to read command files
  in the interactive shell without echoing its contents. This has been
  useful when producing large snapshots.

* Bug fixes: 

  - A NullPointerException was thrown by the USE-compiler if an
    undefined enumeration literal appeared in an OCL
    expression. Reported by Joern Bohling.


** Changes since version 1.1.0

* The USE parser will issue a warning if the `ordered' feature is
  specified for an association end with multiplicity of at most one.

* The OCL shorthand notation treating objects resulting from
  navigation over associations with multiplicity zero or one as set
  has been implemented. For example, the existence of a link to a
  single object can be tested as follows: self.manager->notEmpty

* A new property `use.eval.numthreads' in use.properties specifies the
  number of parallel threads to use when evaluating constraints. If
  you have a multi-processor machine, increasing this number 
  should significantly speed up constraint checking for large
  snapshots and models with many constraints.

* A new command line option `-q' facilitates batch processing. After a
  specification is read, a command file is executed, and all
  constraints are checked. The program returns with exit code 1, if
  any constraint failed, with exit code 0 otherwise.

* Cardinality of n-ary association links is checked against
  multiplicity specification. Previously, only binary associations
  were checked.

* Full support of OCL string literals with escape sequences has been
  added. Support for double quotes around strings has been dropped
  since they are not part of OCL 1.3.

* The unary "+" operator has been added to the syntax of OCL
  expressions.

* The type "Collection(T)" could not be explicitly specified
  previously. Now it is possible to write expressions like
  Set{Set{1},Set{2}}->select(s : Collection(Integer) | s->notEmpty)

* Bug fixes: 

  - A NullPointerException was thrown by the USE-compiler if a parent
    class in a specialization clause of a class declaration was not
    defined previously. Reported by Jose Alvarez.

  - Building from sources failed because README.in is missing in the
    distribution. Removed the dependency in the Makefile. Reported by
    Ananda M. S. Amatya.

  - Compilation of org/tzi/use/graph/layout/LayeredLayout.java failed
    with javac complaining about possibly uninitialized
    variables. Reported by Ananda M. S. Amatya.

  - Real values with difference less than 1 were considered equal when
    being added to a set (e.g., Set{1.3,1.2} resulted in
    Set{1.3}). This bug caused WRONG RESULTS IN OCL EXPRESSIONS in
    previous releases. Reported by Joern Bohling.


** Changes since version 1.0.1

* The new operation `oclUndefined(type)' allows to denote the
  undefined value of the specified type. This is an OCL extension.

* The behavior of boolean operations has changed w.r.t undefined
  arguments. It should now conform to the rules listed in `The
  Amsterdam Manifesto on OCL', Technical Report TUM-I9925, TU
  Muenchen, 1999.

* Evaluation of most OCL expressions is faster now due to
  short-circuit evaluation of binary boolean operations.

* New menu item `State|Reset' resets a system to its initial
  state. The corresponding script command is `reset'.

* New checkbox menu item `State|Check structure after every change'
  allows to turn off automatic structure checking. This is useful when
  reading a large script from the shell producing many intermediate
  states.

* N-ary associations (n > 2) are supported in object diagrams. They
  are drawn as diamonds.

* The use-generic-mode for emacs (in etc/use.el) has been extended to
  work for USE cmd files.

* Comments in cmd files may start with `--'.

* Bug fixes:

  - When an object was destroyed, dangling links were not removed.

  - Undo of `destroy object' did not work.

  - Trying to set an attribute to a value with wrong type caused an
    uncaught exception.

  - OCL expressions with implicit references to self sometimes caused
    an exception during evaluation.

  - The UML metamodel (in examples/UML13All.use) itself violates
    well-formedness rule `Classifier3' for associations between
    State/Action, Message/ClassifierRole, Stimulus/Instance,
    Message/Message, UseCase/Include, and UseCase/Extend. Fixed by
    adding different role names.


** Changes since version 1.0.0

* A number of bugs related to type checking and evaluating OCL
  expressions are fixed.

* Most of the operations of predefined types (Sect. 7.8 of the OMG UML
  1.3 document) are now implemented.

* An almost complete specification of the UML 1.3 metamodel is
  available in examples/UML13All.use.


** Changes since version 0.9.0

* Objects can be created by dragging a class from the model browser
  onto an object diagram.

* Any number of objects can be selected in object diagrams by holding
  the shift key while clicking on them.

* Links between objects can be inserted by selecting the objects and
  then choosing from the popup menu one of the available associations.

* A Log panel shows more detailed information about some actions.

* A new view for showing and changing object properties has been
  added.

* Models can be loaded via the `File|Open' menu command.

* New menu item `State|Check structure' allows checking model inherent
  constraints. Details are sent to the Log panel.

* New menu item `File|Save script' allows saving a script that can be
  read by the USE shell to reproduce the current system state.

* A `destroy' command for destroying objects, and a `delete' command
  for removing links has been added to the USE shell syntax. An
  example can be found in the file examples/Job.cmd.

* Full undo support for all state manipulation commands is available.

* Automatic layout of object diagrams has been reimplemented. 

  - The new algorithm tries to move elements to the centre and keeps
    them inside the visible area.

  - Self-links are shown as circles. 

  - Display of role names is optional (see popup menu).

* Fixed a bug that let views stay hidden after creation when run with
  Java 1.3.

 LocalWords:  ReleaseVersion README associationclass WorksFor aJob aPerson cmd
 LocalWords:  aCompany rolename invs ASSL xml insertCmd deleteCmd destroyCmd
 LocalWords:  setCmd