1Copyright © 2012, Oracle and/or its affiliates. All ... · 1Copyright © 2012, Oracle and/or its...
Transcript of 1Copyright © 2012, Oracle and/or its affiliates. All ... · 1Copyright © 2012, Oracle and/or its...
![Page 1: 1Copyright © 2012, Oracle and/or its affiliates. All ... · 1Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification](https://reader035.fdocuments.us/reader035/viewer/2022071215/6045de05ce6ba56e44064d4b/html5/thumbnails/1.jpg)
Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 131
![Page 2: 1Copyright © 2012, Oracle and/or its affiliates. All ... · 1Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification](https://reader035.fdocuments.us/reader035/viewer/2022071215/6045de05ce6ba56e44064d4b/html5/thumbnails/2.jpg)
Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 132
The following is intended to outline our general product direction. It is intended for information purposes only, and may not be incorporated into any contract. It is not a commitment to deliver any material, code, or functionality, and should not be relied upon in making purchasing decisions. The development, release, and timing of any features or functionality described for Oracle’s products remains at the sole discretion of Oracle.
![Page 3: 1Copyright © 2012, Oracle and/or its affiliates. All ... · 1Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification](https://reader035.fdocuments.us/reader035/viewer/2022071215/6045de05ce6ba56e44064d4b/html5/thumbnails/3.jpg)
Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 133
Type annotations in Java 8и почему это хорошоAlexandre (Shura) IlineJava quality architect
![Page 4: 1Copyright © 2012, Oracle and/or its affiliates. All ... · 1Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification](https://reader035.fdocuments.us/reader035/viewer/2022071215/6045de05ce6ba56e44064d4b/html5/thumbnails/4.jpg)
Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 134Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 16
ProgramAgenda
Quick emotional introduction
– What's wrong with testing
Annotations before Java 8
Type annotations
Checkers framework
Custom annotations
![Page 5: 1Copyright © 2012, Oracle and/or its affiliates. All ... · 1Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification](https://reader035.fdocuments.us/reader035/viewer/2022071215/6045de05ce6ba56e44064d4b/html5/thumbnails/5.jpg)
Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 135
What's wrong with testing?
![Page 6: 1Copyright © 2012, Oracle and/or its affiliates. All ... · 1Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification](https://reader035.fdocuments.us/reader035/viewer/2022071215/6045de05ce6ba56e44064d4b/html5/thumbnails/6.jpg)
Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 136
Here's a developer.
He works hard
Designs the feature
Implements the feature
Submits the fix ...
on a feature
With a bug!
Tests (good developer) ...
![Page 7: 1Copyright © 2012, Oracle and/or its affiliates. All ... · 1Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification](https://reader035.fdocuments.us/reader035/viewer/2022071215/6045de05ce6ba56e44064d4b/html5/thumbnails/7.jpg)
Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 137
Testing Fix ready Pre-integration testing Build More testing Promotion Yet more testing
– Few layers of testing Went to customer Real world testing
(less then an hour)
(nightly)
(weekly)
(take weeks)
(how long – no idea)
![Page 8: 1Copyright © 2012, Oracle and/or its affiliates. All ... · 1Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification](https://reader035.fdocuments.us/reader035/viewer/2022071215/6045de05ce6ba56e44064d4b/html5/thumbnails/8.jpg)
Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 138
Back to the developer
Which developer?
That developer could ...
- be working on something else
- leave for a vacation
- get sick
- leave the company
- transfer the responsibility
Has to switch, re-learn the design, etc. etc.
Often just patch.
![Page 9: 1Copyright © 2012, Oracle and/or its affiliates. All ... · 1Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification](https://reader035.fdocuments.us/reader035/viewer/2022071215/6045de05ce6ba56e44064d4b/html5/thumbnails/9.jpg)
Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 139
Could it be done differently?
More pre-integration testing.
– Yes, please! :)
– Including unit and some functional
– Still too little Static analysis
– only helps that much Reviews
– better
– no predictability, though
![Page 10: 1Copyright © 2012, Oracle and/or its affiliates. All ... · 1Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification](https://reader035.fdocuments.us/reader035/viewer/2022071215/6045de05ce6ba56e44064d4b/html5/thumbnails/10.jpg)
Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 1310
Fundamental problems with testing
Too late
– Comes after the implementation is complete
– Cost of bug grows
– Enforces multi-tasking Not a silver bullet
– Next slide
![Page 11: 1Copyright © 2012, Oracle and/or its affiliates. All ... · 1Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification](https://reader035.fdocuments.us/reader035/viewer/2022071215/6045de05ce6ba56e44064d4b/html5/thumbnails/11.jpg)
Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 1311
(1972)
Program testing can be used to show the presence of bugs, but never to show their absence.[“Structured programming”, Dahl O.J., Dijkstra E.W. and Hoare C.A.R.]
![Page 12: 1Copyright © 2012, Oracle and/or its affiliates. All ... · 1Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification](https://reader035.fdocuments.us/reader035/viewer/2022071215/6045de05ce6ba56e44064d4b/html5/thumbnails/12.jpg)
Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 1312
Formal verification
Formal verification is the act of proving or disproving the correctness of intended algorithms underlying a system with respect to a certain formal specification or property, using formal methods of mathematics.
Testing – upper bounds for program quality
– Passed tests mean nothing
– Failed tests means something is broken Formal verification – lower bounds for program quality
– Guarantees absence of failures of some kind
![Page 13: 1Copyright © 2012, Oracle and/or its affiliates. All ... · 1Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification](https://reader035.fdocuments.us/reader035/viewer/2022071215/6045de05ce6ba56e44064d4b/html5/thumbnails/13.jpg)
Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 1313
Formal verification. Applied. Take with caution.boolean isPowerOfTwo(int a){return (a&(a-1))==0;}
(a1…a
k)10....0a =
m >= 0a > 0 => binary presentation of a has a least one 1 bit
a-1= (a1…a
k)01....1 a&(a-1)=(a
1…a
k)00....0
m m
a&(a-1) = 0 => a1,...,a
k = 0 => a = 2m
a = 2n => m=n, a1,...,a
k = 0 => a&(a-1) = 0
∀0<a∈N :a&(a−1)=0⇔∃n∈N :a=2n
![Page 14: 1Copyright © 2012, Oracle and/or its affiliates. All ... · 1Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification](https://reader035.fdocuments.us/reader035/viewer/2022071215/6045de05ce6ba56e44064d4b/html5/thumbnails/14.jpg)
Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 1314
[When] you have given the proof of [a program's] correctness, … [you] can dispense with testing altogether.[“Software engineering”, Naur P., Randell B.]
(1969)
Only the true formal verification is too expensive
![Page 15: 1Copyright © 2012, Oracle and/or its affiliates. All ... · 1Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification](https://reader035.fdocuments.us/reader035/viewer/2022071215/6045de05ce6ba56e44064d4b/html5/thumbnails/15.jpg)
Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 1315
How is that all related to type annotations?
Hold on.
![Page 16: 1Copyright © 2012, Oracle and/or its affiliates. All ... · 1Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification](https://reader035.fdocuments.us/reader035/viewer/2022071215/6045de05ce6ba56e44064d4b/html5/thumbnails/16.jpg)
Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 1316
Annotations in JavaBefore 8
![Page 17: 1Copyright © 2012, Oracle and/or its affiliates. All ... · 1Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification](https://reader035.fdocuments.us/reader035/viewer/2022071215/6045de05ce6ba56e44064d4b/html5/thumbnails/17.jpg)
Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 1317
Annotation
an-no-ta-tion: a critical or explanatory note added to a text– the statement above is from a dictionary
– the statement above is an annotation
In Java (and other programming languages)
Information about a software program that is not a part of the program itself
@FromDictionary
![Page 18: 1Copyright © 2012, Oracle and/or its affiliates. All ... · 1Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification](https://reader035.fdocuments.us/reader035/viewer/2022071215/6045de05ce6ba56e44064d4b/html5/thumbnails/18.jpg)
Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 1318
Annotations in Java. Examples
@Stateless @LocalBean public class GalleryFacade {
@EJB private GalleryEAO galleryEAO;
@TransactionAttribute(SUPPORTS)
public Gallery findById(Long id) { ... }
@TransactionAttribute(REQUIRED)
public void create(String name) { … }
![Page 19: 1Copyright © 2012, Oracle and/or its affiliates. All ... · 1Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification](https://reader035.fdocuments.us/reader035/viewer/2022071215/6045de05ce6ba56e44064d4b/html5/thumbnails/19.jpg)
Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 1319
Annotations in Java
Introduced in Java 5 Built-in
– @Override– @Deprecated– @SupressWarning
Custom Used extensively
– JavaEE– Test harnesses
@
![Page 20: 1Copyright © 2012, Oracle and/or its affiliates. All ... · 1Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification](https://reader035.fdocuments.us/reader035/viewer/2022071215/6045de05ce6ba56e44064d4b/html5/thumbnails/20.jpg)
Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 1320
JSRs
JSR-175: A Metadata Facility for the JavaTM Programming Language
A metadata facility for the JavaTM Programming Language would allow classes, interfaces, fields, and methods to be marked as having particular attributes.
JSR-250: Common Annotations for the JavaTM Platform
This JSR will develop annotations for common semantic concepts in the J2SE and J2EE platforms that apply across a variety of individual technologies.
JSR-269: Pluggable Annotations Processing API
Provide an API to allow the processing of JSR 175 annotations (metadata); this will require modeling elements of the Java(TM) programming language as well as processing-specific functionality.
![Page 21: 1Copyright © 2012, Oracle and/or its affiliates. All ... · 1Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification](https://reader035.fdocuments.us/reader035/viewer/2022071215/6045de05ce6ba56e44064d4b/html5/thumbnails/21.jpg)
Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 1321
Before Java 8
@A public class Test {
@B private int a = 0;
@C public void m(@D Object o) {
@E int a = 1;
...
}
}
Declarations only– Class
– Method
– Field
– Parameter
– Variable
![Page 22: 1Copyright © 2012, Oracle and/or its affiliates. All ... · 1Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification](https://reader035.fdocuments.us/reader035/viewer/2022071215/6045de05ce6ba56e44064d4b/html5/thumbnails/22.jpg)
Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 1322
Before Java 8
@Target
– ANNOTATION_TYPE, CONSTRUCTOR, FIELD, LOCAL_VARIABLE, METHOD, PACKAGE, PARAMETER, TYPE
@Retention
– SOURCE, CLASS, RUNTIME
Fields, default values
– @Test(timeout=100)
– Primitive, String, Class, enum, array of the above No inheritance
![Page 23: 1Copyright © 2012, Oracle and/or its affiliates. All ... · 1Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification](https://reader035.fdocuments.us/reader035/viewer/2022071215/6045de05ce6ba56e44064d4b/html5/thumbnails/23.jpg)
Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 1323
Typical application programmer will never have to define an annotation type, but it is not hard to do so.[Java language guide.
http://docs.oracle.com/javase/1.5.0/docs/guide/language/]
Yet done often for a purpose of testing.
![Page 24: 1Copyright © 2012, Oracle and/or its affiliates. All ... · 1Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification](https://reader035.fdocuments.us/reader035/viewer/2022071215/6045de05ce6ba56e44064d4b/html5/thumbnails/24.jpg)
Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 1324
Custom annotations
Define a custom annotation type Apply to the code Use in runtime
– Reflection Use in compile-time
– Annotation processor
![Page 25: 1Copyright © 2012, Oracle and/or its affiliates. All ... · 1Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification](https://reader035.fdocuments.us/reader035/viewer/2022071215/6045de05ce6ba56e44064d4b/html5/thumbnails/25.jpg)
Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 1325
Custom annotation
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface Property {
String value();
boolean waitable() default false;
}
@Property(“Text”)
public String getText() {...}
![Page 26: 1Copyright © 2012, Oracle and/or its affiliates. All ... · 1Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification](https://reader035.fdocuments.us/reader035/viewer/2022071215/6045de05ce6ba56e44064d4b/html5/thumbnails/26.jpg)
Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 1326
Custom annotation. Runtime.
java.lang.Class– getAnnotation(Class<A>), getAnnotations(),
getDeclaredAnnotations()
java.lang.reflect.Method– getAnnotation(Class<A>), getDeclaredAnnotations(),
getParameterAnnotation()
java.lang.reflect.Field– getAnnotation(Class<A>), getDeclaredAnnotations()
![Page 27: 1Copyright © 2012, Oracle and/or its affiliates. All ... · 1Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification](https://reader035.fdocuments.us/reader035/viewer/2022071215/6045de05ce6ba56e44064d4b/html5/thumbnails/27.jpg)
Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 1327
Custom annotation. Runtime.
private void addAnnotationProps(Object bean) {
for (Method m : bean.getClass().getMethods()) {
if (m.isAnnotationPresent(Property.class)) {
String name = m.getAnnotation(Property.class).value();
//put method result into a map
}
}
}
![Page 28: 1Copyright © 2012, Oracle and/or its affiliates. All ... · 1Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification](https://reader035.fdocuments.us/reader035/viewer/2022071215/6045de05ce6ba56e44064d4b/html5/thumbnails/28.jpg)
Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 1328
Custom annotation. Compile time.
javax.annotation.processing.Processor
– Set<String> getSupportedAnnotationTypes()
– boolean process(Set<? extends TypeElement>, RoundEnvironment)
javax.annotation.processing.RoundEnvironment
– Set<? extends java.lang.model.element.Element> getElementsAnnotatedWith(Class<A>)
javac … -processor <annotation processor class> …
![Page 29: 1Copyright © 2012, Oracle and/or its affiliates. All ... · 1Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification](https://reader035.fdocuments.us/reader035/viewer/2022071215/6045de05ce6ba56e44064d4b/html5/thumbnails/29.jpg)
Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 1329
Custom annotations. Compile time.
public class PropProcessor extends AbstractProcessor { ... @Override public boolean process(Set<? extends TypeElement> set, RoundEnvironment re) { for (Element e : re.getElementsAnnotatedWith(Property.class)) { Property p = el.getAnnotation(Property.class); //generate the waiting code } }}
![Page 30: 1Copyright © 2012, Oracle and/or its affiliates. All ... · 1Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification](https://reader035.fdocuments.us/reader035/viewer/2022071215/6045de05ce6ba56e44064d4b/html5/thumbnails/30.jpg)
Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 1330
How is that all related to verification?
Just a little bit longer.
![Page 31: 1Copyright © 2012, Oracle and/or its affiliates. All ... · 1Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification](https://reader035.fdocuments.us/reader035/viewer/2022071215/6045de05ce6ba56e44064d4b/html5/thumbnails/31.jpg)
Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 1331
Annotations in Java 8
![Page 32: 1Copyright © 2012, Oracle and/or its affiliates. All ... · 1Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification](https://reader035.fdocuments.us/reader035/viewer/2022071215/6045de05ce6ba56e44064d4b/html5/thumbnails/32.jpg)
Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 1332
Annotations in Java 8
Could be used on any use of a type
– more on next slides ... @Target
– TYPE_PARAMETER, TYPE_USE
Repeating annotations
@
![Page 33: 1Copyright © 2012, Oracle and/or its affiliates. All ... · 1Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification](https://reader035.fdocuments.us/reader035/viewer/2022071215/6045de05ce6ba56e44064d4b/html5/thumbnails/33.jpg)
Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 1333
JSR 308: Annotations on Java Types
This JSR extends the Java annotation syntax to permit annotations on any occurrence of a type. Previously, annotations could not be placed on generic type arguments, type casts, etc.
![Page 34: 1Copyright © 2012, Oracle and/or its affiliates. All ... · 1Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification](https://reader035.fdocuments.us/reader035/viewer/2022071215/6045de05ce6ba56e44064d4b/html5/thumbnails/34.jpg)
Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 1334
JSR 308: Annotations on Java Types (1)
method receivers
public int size() @Readonly { ... }
generic type arguments
Map<@NonNull String, @NonEmpty List<@Readonly Document>> files;
arrays
Document[][@Readonly] docs2 =
new Document[2] [@Readonly 12];
![Page 35: 1Copyright © 2012, Oracle and/or its affiliates. All ... · 1Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification](https://reader035.fdocuments.us/reader035/viewer/2022071215/6045de05ce6ba56e44064d4b/html5/thumbnails/35.jpg)
Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 1335
JSR 308: Annotations on Java Types (2)
typecasts
myString = (@NonNull String)myObject;
type tests
boolean isNonNull = myString instanceof @NonNull String;
object creation
new @NonEmpty @Readonly List(myNonEmptyStringSet)
![Page 36: 1Copyright © 2012, Oracle and/or its affiliates. All ... · 1Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification](https://reader035.fdocuments.us/reader035/viewer/2022071215/6045de05ce6ba56e44064d4b/html5/thumbnails/36.jpg)
Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 1336
JSR 308: Annotations on Java Types (3)
type parameter bounds
<T extends @A Object, U extends @C Cloneable>
class inheritance
class UnmodifiableList implements @Readonly List<@Readonly T> { ... }
throws clauses
void monitorTemperature() throws @Critical TemperatureException { ... }
![Page 37: 1Copyright © 2012, Oracle and/or its affiliates. All ... · 1Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification](https://reader035.fdocuments.us/reader035/viewer/2022071215/6045de05ce6ba56e44064d4b/html5/thumbnails/37.jpg)
Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 1337
Annotations in Java 8. More examples
class Person {
...
void setValue(@Mutable Person this, String firstName) {
this.firstName = firstName;
}
...
}
@NonNull MyClass @Length(2)[] @ReadOnly[]
![Page 38: 1Copyright © 2012, Oracle and/or its affiliates. All ... · 1Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification](https://reader035.fdocuments.us/reader035/viewer/2022071215/6045de05ce6ba56e44064d4b/html5/thumbnails/38.jpg)
Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 1338
Still, how is that all related to verification?
Next slide.
![Page 39: 1Copyright © 2012, Oracle and/or its affiliates. All ... · 1Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification](https://reader035.fdocuments.us/reader035/viewer/2022071215/6045de05ce6ba56e44064d4b/html5/thumbnails/39.jpg)
Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 1339
Annotations in Java 8
Permitted on every type use Are analyse-able at compile time The whole compilation tree is available for analysis
Hence …
A lot of verification could be done at compile time
![Page 40: 1Copyright © 2012, Oracle and/or its affiliates. All ... · 1Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification](https://reader035.fdocuments.us/reader035/viewer/2022071215/6045de05ce6ba56e44064d4b/html5/thumbnails/40.jpg)
Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 1340
JSR 305: Annotations for Software Defect Detection
This JSR will work to develop standard annotations (such as @NonNull) that can be applied to Java programs to assist tools that detect software defects.
Nullness Check return value Taint Concurrency Internationalization
![Page 41: 1Copyright © 2012, Oracle and/or its affiliates. All ... · 1Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification](https://reader035.fdocuments.us/reader035/viewer/2022071215/6045de05ce6ba56e44064d4b/html5/thumbnails/41.jpg)
Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 1341
Checkers framework
![Page 42: 1Copyright © 2012, Oracle and/or its affiliates. All ... · 1Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification](https://reader035.fdocuments.us/reader035/viewer/2022071215/6045de05ce6ba56e44064d4b/html5/thumbnails/42.jpg)
Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 1342
Checkers framework
The Checker Framework enhances Java’s type system to make it more powerful and useful. This lets software developers detect and prevent errors in their Java programs.
Works now – with JDK 7 14 checkers. Allows to build custom checkers
http://types.cs.washington.edu/checker-framework/
![Page 43: 1Copyright © 2012, Oracle and/or its affiliates. All ... · 1Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification](https://reader035.fdocuments.us/reader035/viewer/2022071215/6045de05ce6ba56e44064d4b/html5/thumbnails/43.jpg)
Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 1343
Checkers framework.
Works for JDK 7
– substituting javac
– generating valid byte-code
– only affects compile-time Eclipse plugin
$ <checkers>/binary/javac -processor <a checker> <other parameters>
$ java -jar <checkers>/binary/javac.jar -processor <a checker> <other parameters>
@
![Page 44: 1Copyright © 2012, Oracle and/or its affiliates. All ... · 1Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification](https://reader035.fdocuments.us/reader035/viewer/2022071215/6045de05ce6ba56e44064d4b/html5/thumbnails/44.jpg)
Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 1344
Checkers framework.
@TypeQualifier
“Inheritance”
– @SubtypeOf(Class<? extends Annotation>)
Automatic type refinement Default qualifiers
– @ImplicitFor(<class names or classes or types>)
– checkers.types.TreeAnnotator
![Page 45: 1Copyright © 2012, Oracle and/or its affiliates. All ... · 1Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification](https://reader035.fdocuments.us/reader035/viewer/2022071215/6045de05ce6ba56e44064d4b/html5/thumbnails/45.jpg)
Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 1345
Checkers framework. Type checkers.
Nullness IGJ (Immutability Generics Java) Lock Property file Units Typestate
@
![Page 46: 1Copyright © 2012, Oracle and/or its affiliates. All ... · 1Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification](https://reader035.fdocuments.us/reader035/viewer/2022071215/6045de05ce6ba56e44064d4b/html5/thumbnails/46.jpg)
Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 1346
Nullness checker
If the Nullness checker issues no warnings for a given program, then running that program will never throw a null pointer exception.
@Nullable, @NonNull, @PolyNull @Raw, @NonRaw, @PolyRaw @NonNullOnEntry, @Pure, @AssertNonNullAfter,
@AssertNonNullIfTrue, @AssertNonNullIfFalse, @AssertParametersNonNull
![Page 47: 1Copyright © 2012, Oracle and/or its affiliates. All ... · 1Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification](https://reader035.fdocuments.us/reader035/viewer/2022071215/6045de05ce6ba56e44064d4b/html5/thumbnails/47.jpg)
Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 1347
@Nullable Object obj;@NonNull Object nnobj;...nnobj.toString();obj.toString();nnobj = obj;obj = nnobj;if (nnobj == null) ...if (obj != null) { nnobj = obj; //type refinement}
Nullness checker
![Page 48: 1Copyright © 2012, Oracle and/or its affiliates. All ... · 1Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification](https://reader035.fdocuments.us/reader035/viewer/2022071215/6045de05ce6ba56e44064d4b/html5/thumbnails/48.jpg)
Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 1348
IGJ checkers
@Immutable @Mutable @ReadOnly @Assignable @AssignFields @I
![Page 49: 1Copyright © 2012, Oracle and/or its affiliates. All ... · 1Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification](https://reader035.fdocuments.us/reader035/viewer/2022071215/6045de05ce6ba56e44064d4b/html5/thumbnails/49.jpg)
Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 1349
Lock checker
If the Lock checker issues no warnings for a given program, then the program holds the appropriate lock every time that it accesses a variable.
Inspired by “Java Concurrency In Practice” (?) @GuardedBy – only allowed to access if a particular lock is held @Holding – only allowed to be called if a particular lock is held
![Page 50: 1Copyright © 2012, Oracle and/or its affiliates. All ... · 1Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification](https://reader035.fdocuments.us/reader035/viewer/2022071215/6045de05ce6ba56e44064d4b/html5/thumbnails/50.jpg)
Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 1350
Lock checker
@GuardedBy("MyClass.myLock") Object myMethod() { ... }
@GuardedBy("MyClass.myLock") Object x = myMethod();
@GuardedBy("MyClass.myLock") Object y = x;
Object z = x;x.toString();
synchronized(MyClass.myLock) { y.toString();}
![Page 51: 1Copyright © 2012, Oracle and/or its affiliates. All ... · 1Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification](https://reader035.fdocuments.us/reader035/viewer/2022071215/6045de05ce6ba56e44064d4b/html5/thumbnails/51.jpg)
Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 1351
Lock checker
void helper1(@GuardedBy("MyClass.myLock") Object a) { a.toString(); synchronized(MyClass.myLock) { a.toString(); }}
@Holding("MyClass.myLock")void helper2(@GuardedBy("MyClass.myLock") Object b) { b.toString();}
![Page 52: 1Copyright © 2012, Oracle and/or its affiliates. All ... · 1Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification](https://reader035.fdocuments.us/reader035/viewer/2022071215/6045de05ce6ba56e44064d4b/html5/thumbnails/52.jpg)
Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 1352
Lock checker.
@GuardedBy and @Holding parameter syntax.
this : the object in whose class the field is defined.class-name.this : for inner classes.itself : the object to which the field refers.field-name : the (instance or static) field.class-name.field-name : the static field.method-name() : the object is returned by calling the named method.class-name.class : the Class object for the specified class.
![Page 53: 1Copyright © 2012, Oracle and/or its affiliates. All ... · 1Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification](https://reader035.fdocuments.us/reader035/viewer/2022071215/6045de05ce6ba56e44064d4b/html5/thumbnails/53.jpg)
Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 1353
Property file checker
The property file checker ensures that a property file or resource bundle (both of which act like maps from keys to values) is only accessed with valid keys.
@PropertyKey
– No need to annotate the literals @Localized
– a localized message @LocalizableKey
– a key to a localizable message
![Page 54: 1Copyright © 2012, Oracle and/or its affiliates. All ... · 1Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification](https://reader035.fdocuments.us/reader035/viewer/2022071215/6045de05ce6ba56e44064d4b/html5/thumbnails/54.jpg)
Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 1354
Units checker
@Area: @mm2, @m2, @inch2 ... @Current: @A @Length: @m, @mm, @inch @Luminance: @cd @Mass: @kg, @pound @Speed: @mPERs, @kmPERh @Substance: @mol @Temperature: @C, @K @Time: @s, @min, @h
![Page 55: 1Copyright © 2012, Oracle and/or its affiliates. All ... · 1Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification](https://reader035.fdocuments.us/reader035/viewer/2022071215/6045de05ce6ba56e44064d4b/html5/thumbnails/55.jpg)
Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 1355
Units checker
@Documented@Retention(RetentionPolicy.RUNTIME)@TypeQualifier@SubtypeOf( { Time.class } )@UnitsMultiple(quantity=s.class, prefix=Prefix.nano)@Target(ElementType.TYPE_USE, ElementType.TYPE_PARAMETER)public @interface ns {}
![Page 56: 1Copyright © 2012, Oracle and/or its affiliates. All ... · 1Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification](https://reader035.fdocuments.us/reader035/viewer/2022071215/6045de05ce6ba56e44064d4b/html5/thumbnails/56.jpg)
Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 1356
Typestate checker
@State public static @interface Opened { ... } @State public static @interface Closed { ... }class Stream {
void open(@Closed(after=Opened.class) this);void close(@Opened(after=Closed.class) this);void int read(@Opened this);
}@Opened Stream stream1 = ...; @Closed Stream stream2 = ...;stream1.read();stream2.read();stream2.open(); stream2.read();
![Page 57: 1Copyright © 2012, Oracle and/or its affiliates. All ... · 1Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification](https://reader035.fdocuments.us/reader035/viewer/2022071215/6045de05ce6ba56e44064d4b/html5/thumbnails/57.jpg)
Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 1357
Custom checkers
![Page 58: 1Copyright © 2012, Oracle and/or its affiliates. All ... · 1Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification](https://reader035.fdocuments.us/reader035/viewer/2022071215/6045de05ce6ba56e44064d4b/html5/thumbnails/58.jpg)
Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 1358
public class Account {
private final @CreditCard String cardNumber;
public Account(@CreditCard String number) {
this.cardNumber = number;
}
public @CreditCard String getCardNumber() {
return cardNumber;
}
}
@CreditCard. Usage
![Page 59: 1Copyright © 2012, Oracle and/or its affiliates. All ... · 1Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification](https://reader035.fdocuments.us/reader035/viewer/2022071215/6045de05ce6ba56e44064d4b/html5/thumbnails/59.jpg)
Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 1359
@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.TYPE_USE,
ElementType.TYPE_PARAMETER})
@TypeQualifier
@SubtypeOf(Unqualified.class)
public @interface CreditCard {}
@CreditCard. Annotation
![Page 60: 1Copyright © 2012, Oracle and/or its affiliates. All ... · 1Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification](https://reader035.fdocuments.us/reader035/viewer/2022071215/6045de05ce6ba56e44064d4b/html5/thumbnails/60.jpg)
Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 1360
@TypeQualifiers(CreditCard.class)
@SuppressWarningsKey("credit.card")
public class CreditCardChecker extends BaseTypeChecker {
...
}
public class CreditCardAnnotator extends TreeAnnotator {
public Void visitLiteral(LiteralTree tree,
AnnotatedTypeMirror type) {
...
}
}
@CreditCard. Checker and annotator
![Page 61: 1Copyright © 2012, Oracle and/or its affiliates. All ... · 1Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification](https://reader035.fdocuments.us/reader035/viewer/2022071215/6045de05ce6ba56e44064d4b/html5/thumbnails/61.jpg)
Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 1361
@SuppressWarnings("credit.card")
@CreditCard String convert(String input) {
if(checkLuhn(input))
return input;
else
throw IllegalArgumentException("...");
}
new Account("4111111111111111");
new Account("4111111111111110");
@CreditCard. Usage
![Page 62: 1Copyright © 2012, Oracle and/or its affiliates. All ... · 1Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification](https://reader035.fdocuments.us/reader035/viewer/2022071215/6045de05ce6ba56e44064d4b/html5/thumbnails/62.jpg)
Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 1362
A card number in an account is always validated That is guaranteed at compile time You do not need to test with invalid numbers You do need to test
– All @SuppressWarnings("credit.card")– checkLuhn(String cardNum)
@CreditCard
![Page 63: 1Copyright © 2012, Oracle and/or its affiliates. All ... · 1Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification](https://reader035.fdocuments.us/reader035/viewer/2022071215/6045de05ce6ba56e44064d4b/html5/thumbnails/63.jpg)
Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 1363
More real life examples.
class SafeMath { public static double sqrt(@Positive double value)
{…}}@Positive p;@Negative n;sqrt(p);sqrt(p – n);sqrt(n*n); sqrt(n);sqrt(p + n);
![Page 64: 1Copyright © 2012, Oracle and/or its affiliates. All ... · 1Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification](https://reader035.fdocuments.us/reader035/viewer/2022071215/6045de05ce6ba56e44064d4b/html5/thumbnails/64.jpg)
Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 1364
Is this a “formal verification”?
It is a “verification”, for sure.
![Page 65: 1Copyright © 2012, Oracle and/or its affiliates. All ... · 1Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification](https://reader035.fdocuments.us/reader035/viewer/2022071215/6045de05ce6ba56e44064d4b/html5/thumbnails/65.jpg)
Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 1365
Conclusion
Formal verification vs testing Annotations before Java 8 Annotations in Java 8 Checkers framework Custom annotations
@
![Page 66: 1Copyright © 2012, Oracle and/or its affiliates. All ... · 1Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification](https://reader035.fdocuments.us/reader035/viewer/2022071215/6045de05ce6ba56e44064d4b/html5/thumbnails/66.jpg)
Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 1366
Q&A
![Page 67: 1Copyright © 2012, Oracle and/or its affiliates. All ... · 1Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification](https://reader035.fdocuments.us/reader035/viewer/2022071215/6045de05ce6ba56e44064d4b/html5/thumbnails/67.jpg)
Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 1367
Type annotations in Java 8и почему это хорошоAlexandre (Shura) IlineJava quality architect
![Page 68: 1Copyright © 2012, Oracle and/or its affiliates. All ... · 1Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification](https://reader035.fdocuments.us/reader035/viewer/2022071215/6045de05ce6ba56e44064d4b/html5/thumbnails/68.jpg)
Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 1368