Concurrency - EECS 4315 › ... › _media › lecture17.pdf · Correct? Question Is the developed...
Transcript of Concurrency - EECS 4315 › ... › _media › lecture17.pdf · Correct? Question Is the developed...
![Page 2: Concurrency - EECS 4315 › ... › _media › lecture17.pdf · Correct? Question Is the developed class Database correct? Answer Maybe. Let us use JPF to try to nd bugs in the Database](https://reader033.fdocuments.net/reader033/viewer/2022052721/5f0ba9337e708231d431993a/html5/thumbnails/2.jpg)
Correct?
Question
Is the developed class Database correct?
Answer
Maybe.
Let us use JPF to try to find bugs in the Database class.
2/36
![Page 3: Concurrency - EECS 4315 › ... › _media › lecture17.pdf · Correct? Question Is the developed class Database correct? Answer Maybe. Let us use JPF to try to nd bugs in the Database](https://reader033.fdocuments.net/reader033/viewer/2022052721/5f0ba9337e708231d431993a/html5/thumbnails/3.jpg)
Correct?
Question
Is the developed class Database correct?
Answer
Maybe.
Let us use JPF to try to find bugs in the Database class.
2/36
![Page 4: Concurrency - EECS 4315 › ... › _media › lecture17.pdf · Correct? Question Is the developed class Database correct? Answer Maybe. Let us use JPF to try to nd bugs in the Database](https://reader033.fdocuments.net/reader033/viewer/2022052721/5f0ba9337e708231d431993a/html5/thumbnails/4.jpg)
Correct?
Question
Is the developed class Database correct?
Answer
Maybe.
Let us use JPF to try to find bugs in the Database class.
2/36
![Page 5: Concurrency - EECS 4315 › ... › _media › lecture17.pdf · Correct? Question Is the developed class Database correct? Answer Maybe. Let us use JPF to try to nd bugs in the Database](https://reader033.fdocuments.net/reader033/viewer/2022052721/5f0ba9337e708231d431993a/html5/thumbnails/5.jpg)
Configuration file
target=concurrency.ReadersAndWriters
classpath=/courses/4315/workspace/concurrency/bin/
3/36
![Page 6: Concurrency - EECS 4315 › ... › _media › lecture17.pdf · Correct? Question Is the developed class Database correct? Answer Maybe. Let us use JPF to try to nd bugs in the Database](https://reader033.fdocuments.net/reader033/viewer/2022052721/5f0ba9337e708231d431993a/html5/thumbnails/6.jpg)
JPF report
JavaPathfinder core system v8.0 (rev 2+) - (C) 2005-2014 United States Government. All rights reserved.
====================================================== system under test
concurrency.ReadersAndWriters.main()
====================================================== search started: 3/10/18 11:15 AM
====================================================== results
no errors detected
====================================================== statistics
elapsed time: 00:00:11
states: new=28983,visited=64764,backtracked=93747,end=57
search: maxDepth=49,constraints=0
choice generators: thread=28983 (signal=2517,lock=8221,sharedRef=8919,threadApi=4,reschedule=9322), data=0
heap: new=400,released=157142,maxLive=386,gcCycles=73538
instructions: 470903
max memory: 372MB
loaded code: classes=61,methods=1381
====================================================== search finished: 3/10/18 11:15 AM
4/36
![Page 7: Concurrency - EECS 4315 › ... › _media › lecture17.pdf · Correct? Question Is the developed class Database correct? Answer Maybe. Let us use JPF to try to nd bugs in the Database](https://reader033.fdocuments.net/reader033/viewer/2022052721/5f0ba9337e708231d431993a/html5/thumbnails/7.jpg)
No writer
Question
How can we use JPF to check that there is no writer writing whena reader is reading?
Answer
Add assert !this.writing in the read method where thedatabase is read. If the assertion fails, an exception is thrown. JPFdetects exceptions that are thrown and not caught.
5/36
![Page 8: Concurrency - EECS 4315 › ... › _media › lecture17.pdf · Correct? Question Is the developed class Database correct? Answer Maybe. Let us use JPF to try to nd bugs in the Database](https://reader033.fdocuments.net/reader033/viewer/2022052721/5f0ba9337e708231d431993a/html5/thumbnails/8.jpg)
No writer
Question
How can we use JPF to check that there is no writer writing whena reader is reading?
Answer
Add assert !this.writing in the read method where thedatabase is read. If the assertion fails, an exception is thrown. JPFdetects exceptions that are thrown and not caught.
5/36
![Page 9: Concurrency - EECS 4315 › ... › _media › lecture17.pdf · Correct? Question Is the developed class Database correct? Answer Maybe. Let us use JPF to try to nd bugs in the Database](https://reader033.fdocuments.net/reader033/viewer/2022052721/5f0ba9337e708231d431993a/html5/thumbnails/9.jpg)
JPF report
JavaPathfinder core system v8.0 (rev 2+) - (C) 2005-2014 United States Government. All rights reserved.
====================================================== system under test
concurrency.ReadersAndWriters.main()
====================================================== search started: 3/10/18 11:25 AM
====================================================== error 1
gov.nasa.jpf.vm.NoUncaughtExceptionsProperty
java.lang.AssertionError
at concurrency.Database.read(concurrency/Database.java:28)
at concurrency.Reader.run(concurrency/Reader.java:25)
====================================================== snapshot #1
thread concurrency.Reader:{id:2,name:Thread-2,status:RUNNING,priority:5,isDaemon:false,lockCount:0,suspendCount:0}
call stack:
at concurrency.Database.read(Database.java:28)
at concurrency.Reader.run(Reader.java:25)
thread concurrency.Writer:{id:4,name:Thread-4,status:RUNNING,priority:5,isDaemon:false,lockCount:0,suspendCount:0}
call stack:
at concurrency.Database.beginWrite(Database.java:78)
at concurrency.Database.write(Database.java:61)
at concurrency.Writer.run(Writer.java:25)
====================================================== results
error #1: gov.nasa.jpf.vm.NoUncaughtExceptionsProperty "java.lang.AssertionError
at concurrency.Database...."
====================================================== statistics
elapsed time: 00:00:01
states: new=399,visited=361,backtracked=733,end=21
search: maxDepth=33,constraints=0
choice generators: thread=398 (signal=41,lock=117,sharedRef=119,threadApi=4,reschedule=117), data=0
heap: new=416,released=934,maxLive=386,gcCycles=667
instructions: 8449
max memory: 61MB
loaded code: classes=65,methods=1423
====================================================== search finished: 3/10/18 11:25 AM
6/36
![Page 10: Concurrency - EECS 4315 › ... › _media › lecture17.pdf · Correct? Question Is the developed class Database correct? Answer Maybe. Let us use JPF to try to nd bugs in the Database](https://reader033.fdocuments.net/reader033/viewer/2022052721/5f0ba9337e708231d431993a/html5/thumbnails/10.jpg)
Smallest instance
Try to find the smallest instance for which the error occurs.
READER = 1
WRITERS = 1
no errors detected
READER = 2
WRITERS = 1
no errors detected
READER = 1
WRITERS = 2
error
7/36
![Page 11: Concurrency - EECS 4315 › ... › _media › lecture17.pdf · Correct? Question Is the developed class Database correct? Answer Maybe. Let us use JPF to try to nd bugs in the Database](https://reader033.fdocuments.net/reader033/viewer/2022052721/5f0ba9337e708231d431993a/html5/thumbnails/11.jpg)
Smallest instance
Try to find the smallest instance for which the error occurs.
READER = 1
WRITERS = 1
no errors detected
READER = 2
WRITERS = 1
no errors detected
READER = 1
WRITERS = 2
error
7/36
![Page 12: Concurrency - EECS 4315 › ... › _media › lecture17.pdf · Correct? Question Is the developed class Database correct? Answer Maybe. Let us use JPF to try to nd bugs in the Database](https://reader033.fdocuments.net/reader033/viewer/2022052721/5f0ba9337e708231d431993a/html5/thumbnails/12.jpg)
Locating the error
====================================================== error 1
gov.nasa.jpf.vm.NoUncaughtExceptionsProperty
java.lang.AssertionError
at concurrency.Database.read(concurrency/Database.java:28)
at concurrency.Reader.run(concurrency/Reader.java:25)
Line 28 of the Database class.
assert !this.writing;
8/36
![Page 13: Concurrency - EECS 4315 › ... › _media › lecture17.pdf · Correct? Question Is the developed class Database correct? Answer Maybe. Let us use JPF to try to nd bugs in the Database](https://reader033.fdocuments.net/reader033/viewer/2022052721/5f0ba9337e708231d431993a/html5/thumbnails/13.jpg)
Locating the error
====================================================== snapshot #1
thread concurrency.Reader:{id:1,name:Thread-1,status:RUNNING,priority:5,isDaemon:false,lockCount:0,suspendCount:0}
call stack:
at concurrency.Database.read(Database.java:28)
at concurrency.Reader.run(Reader.java:25)
thread concurrency.Writer:{id:3,name:Thread-3,status:RUNNING,priority:5,isDaemon:false,lockCount:0,suspendCount:0}
call stack:
at concurrency.Database.beginWrite(Database.java:78)
at concurrency.Database.write(Database.java:61)
at concurrency.Writer.run(Writer.java:25)
A Reader thread is at line 28 of the Database class (assertion),while a Writer thread is at line 78 of the Database class (end ofbeginWrite).
9/36
![Page 14: Concurrency - EECS 4315 › ... › _media › lecture17.pdf · Correct? Question Is the developed class Database correct? Answer Maybe. Let us use JPF to try to nd bugs in the Database](https://reader033.fdocuments.net/reader033/viewer/2022052721/5f0ba9337e708231d431993a/html5/thumbnails/14.jpg)
Locating the error
Question
How can we get a more detailed report?
Answer
By configuring the report.
10/36
![Page 15: Concurrency - EECS 4315 › ... › _media › lecture17.pdf · Correct? Question Is the developed class Database correct? Answer Maybe. Let us use JPF to try to nd bugs in the Database](https://reader033.fdocuments.net/reader033/viewer/2022052721/5f0ba9337e708231d431993a/html5/thumbnails/15.jpg)
Locating the error
Question
How can we get a more detailed report?
Answer
By configuring the report.
10/36
![Page 16: Concurrency - EECS 4315 › ... › _media › lecture17.pdf · Correct? Question Is the developed class Database correct? Answer Maybe. Let us use JPF to try to nd bugs in the Database](https://reader033.fdocuments.net/reader033/viewer/2022052721/5f0ba9337e708231d431993a/html5/thumbnails/16.jpg)
Configuring the report
report.class=gov.nasa.jpf.report.Reporter
report.publisher=console
console is a symbolic name and the default value for the propertyreport.publisher. The other values currently supported for thisproperty are html and xml.
11/36
![Page 17: Concurrency - EECS 4315 › ... › _media › lecture17.pdf · Correct? Question Is the developed class Database correct? Answer Maybe. Let us use JPF to try to nd bugs in the Database](https://reader033.fdocuments.net/reader033/viewer/2022052721/5f0ba9337e708231d431993a/html5/thumbnails/17.jpg)
Configuring the report
The symbolic name console is part of the following properties.
report.console.class=gov.nasa.jpf.report.Reporter
report.console.start=
report.console.transition=
report.console.constraint=
report.console.probe=
report.console.property_violation=
report.console.show_steps=
report.console.show_method=
report.console.show_code=
report.console.finished=
This configuration produces no output.
12/36
![Page 18: Concurrency - EECS 4315 › ... › _media › lecture17.pdf · Correct? Question Is the developed class Database correct? Answer Maybe. Let us use JPF to try to nd bugs in the Database](https://reader033.fdocuments.net/reader033/viewer/2022052721/5f0ba9337e708231d431993a/html5/thumbnails/18.jpg)
Configuring the report
report.console.class=gov.nasa.jpf.report.Reporter
report.console.start=jpf
report.console.transition=
report.console.constraint=
report.console.probe=
report.console.property_violation=
report.console.show_steps=
report.console.show_method=
report.console.show_code=
report.console.finished=
This configuration produces the following output.
JavaPathfinder core system v8.0 (rev 2+) - (C) 2005-2014 United States Government. All rights reserved.
============================================ search started: 3/12/18 8:16 PM
13/36
![Page 19: Concurrency - EECS 4315 › ... › _media › lecture17.pdf · Correct? Question Is the developed class Database correct? Answer Maybe. Let us use JPF to try to nd bugs in the Database](https://reader033.fdocuments.net/reader033/viewer/2022052721/5f0ba9337e708231d431993a/html5/thumbnails/19.jpg)
Configuring the report
report.console.class=gov.nasa.jpf.report.Reporter
report.console.start=sut
report.console.transition=
report.console.constraint=
report.console.probe=
report.console.property_violation=
report.console.show_steps=
report.console.show_method=
report.console.show_code=
report.console.finished=
This configuration produces the following output.
============================================ system under test
concurrency.ReadersAndWriters.main()
============================================ search started: 3/12/18 8:18 PM
14/36
![Page 20: Concurrency - EECS 4315 › ... › _media › lecture17.pdf · Correct? Question Is the developed class Database correct? Answer Maybe. Let us use JPF to try to nd bugs in the Database](https://reader033.fdocuments.net/reader033/viewer/2022052721/5f0ba9337e708231d431993a/html5/thumbnails/20.jpg)
Configuring the report
report.console.class=gov.nasa.jpf.report.Reporter
report.console.start=platform
report.console.transition=
report.console.constraint=
report.console.probe=
report.console.property_violation=
report.console.show_steps=
report.console.show_method=
report.console.show_code=
report.console.finished=
This configuration produces the following output.
============================================ platform
hostname: montreal
arch: amd64/4
os: Windows 7/6.1
java: Oracle Corporation/1.8.0_25
============================================ search started: 3/12/18 8:19 PM15/36
![Page 21: Concurrency - EECS 4315 › ... › _media › lecture17.pdf · Correct? Question Is the developed class Database correct? Answer Maybe. Let us use JPF to try to nd bugs in the Database](https://reader033.fdocuments.net/reader033/viewer/2022052721/5f0ba9337e708231d431993a/html5/thumbnails/21.jpg)
Configuring the report
report.console.class=gov.nasa.jpf.report.Reporter
report.console.start=dtg
report.console.transition=
report.console.constraint=
report.console.probe=
report.console.property_violation=
report.console.show_steps=
report.console.show_method=
report.console.show_code=
report.console.finished=
This configuration produces the following output.
started: Mon Mar 12 20:23:36 EDT 2018
====================================================== search started: 3/12/18 8:23 PM
16/36
![Page 22: Concurrency - EECS 4315 › ... › _media › lecture17.pdf · Correct? Question Is the developed class Database correct? Answer Maybe. Let us use JPF to try to nd bugs in the Database](https://reader033.fdocuments.net/reader033/viewer/2022052721/5f0ba9337e708231d431993a/html5/thumbnails/22.jpg)
Configuring the report
report.console.class=gov.nasa.jpf.report.Reporter
report.console.start=config
report.console.transition=
report.console.constraint=
report.console.probe=
report.console.property_violation=
report.console.show_steps=
report.console.show_method=
report.console.show_code=
report.console.finished=
This configuration produces the following output.
============================================ JPF configuration
property source: E:\courses\4315\.jpf\site.properties
property source: E:\courses\4315\jpf\jpf-core\jpf.properties
property source: E:\courses\4315\workspace\concurrency\src\concurrency\ReadersAndWriters.jpf
properties:
branch_start=1
cg.boolean.false_first=true
cg.break_single_choice=false
17/36
![Page 23: Concurrency - EECS 4315 › ... › _media › lecture17.pdf · Correct? Question Is the developed class Database correct? Answer Maybe. Let us use JPF to try to nd bugs in the Database](https://reader033.fdocuments.net/reader033/viewer/2022052721/5f0ba9337e708231d431993a/html5/thumbnails/23.jpg)
Configuring the report
report.console.class=gov.nasa.jpf.report.Reporter
report.console.start=
report.console.transition=
report.console.constraint=
report.console.probe=
report.console.property_violation=error
report.console.show_steps=
report.console.show_method=
report.console.show_code=
report.console.finished=
This configuration produces the following output.
============================================ error 1
gov.nasa.jpf.vm.NoUncaughtExceptionsProperty
java.lang.AssertionError
at concurrency.Database.read(concurrency/Database.java:28)
at concurrency.Reader.run(concurrency/Reader.java:25)18/36
![Page 24: Concurrency - EECS 4315 › ... › _media › lecture17.pdf · Correct? Question Is the developed class Database correct? Answer Maybe. Let us use JPF to try to nd bugs in the Database](https://reader033.fdocuments.net/reader033/viewer/2022052721/5f0ba9337e708231d431993a/html5/thumbnails/24.jpg)
Configuring the report
report.console.class=gov.nasa.jpf.report.Reporter
report.console.start=
report.console.transition=
report.console.constraint=
report.console.probe=
report.console.property_violation=output
report.console.show_steps=
report.console.show_method=
report.console.show_code=
report.console.finished=
This configuration produces the following output.
============================================ output #1
no output
19/36
![Page 25: Concurrency - EECS 4315 › ... › _media › lecture17.pdf · Correct? Question Is the developed class Database correct? Answer Maybe. Let us use JPF to try to nd bugs in the Database](https://reader033.fdocuments.net/reader033/viewer/2022052721/5f0ba9337e708231d431993a/html5/thumbnails/25.jpg)
Configuring the report
report.console.class=gov.nasa.jpf.report.Reporter
report.console.start=
report.console.transition=
report.console.constraint=
report.console.probe=
report.console.property_violation=snapshot
report.console.show_steps=
report.console.show_method=
report.console.show_code=
report.console.finished=
This configuration produces the following output.
============================================ snapshot #1
thread concurrency.Reader:{id:1,name:Thread-1,status:RUNNING,priority:5,isDaemon:false,lockCount:0,suspendCount:0}
call stack:
at concurrency.Database.read(Database.java:28)
at concurrency.Reader.run(Reader.java:25)20/36
![Page 26: Concurrency - EECS 4315 › ... › _media › lecture17.pdf · Correct? Question Is the developed class Database correct? Answer Maybe. Let us use JPF to try to nd bugs in the Database](https://reader033.fdocuments.net/reader033/viewer/2022052721/5f0ba9337e708231d431993a/html5/thumbnails/26.jpg)
Configuring the report
report.console.class=gov.nasa.jpf.report.Reporter
report.console.start=
report.console.transition=
report.console.constraint=
report.console.probe=
report.console.property_violation=trace
report.console.show_steps=false
report.console.show_method=
report.console.show_code=
report.console.finished=
21/36
![Page 27: Concurrency - EECS 4315 › ... › _media › lecture17.pdf · Correct? Question Is the developed class Database correct? Answer Maybe. Let us use JPF to try to nd bugs in the Database](https://reader033.fdocuments.net/reader033/viewer/2022052721/5f0ba9337e708231d431993a/html5/thumbnails/27.jpg)
Configuring the report
============================================ trace #1
------------------------------------------------------ transition #0 thread: 0
gov.nasa.jpf.vm.choice.ThreadChoiceFromSet {id:"ROOT" ,1/1,isCascaded:false}
------------------------------------------------------ transition #1 thread: 0
gov.nasa.jpf.vm.choice.ThreadChoiceFromSet {id:"START" ,1/2,isCascaded:false}
------------------------------------------------------ transition #2 thread: 0
gov.nasa.jpf.vm.choice.ThreadChoiceFromSet {id:"START" ,1/3,isCascaded:false}
------------------------------------------------------ transition #3 thread: 0
gov.nasa.jpf.vm.choice.ThreadChoiceFromSet {id:"START" ,1/4,isCascaded:false}
------------------------------------------------------ transition #4 thread: 1
gov.nasa.jpf.vm.choice.ThreadChoiceFromSet {id:"TERMINATE" ,1/3,isCascaded:false}
------------------------------------------------------ transition #5 thread: 2
gov.nasa.jpf.vm.choice.ThreadChoiceFromSet {id:"LOCK" ,2/3,isCascaded:false}
------------------------------------------------------ transition #6 thread: 2
gov.nasa.jpf.vm.choice.ThreadChoiceFromSet {id:"LOCK" ,2/3,isCascaded:false}
------------------------------------------------------ transition #7 thread: 2
gov.nasa.jpf.vm.choice.ThreadChoiceFromSet {id:"SHARED_OBJECT" ,1/2,isCascaded:false}
------------------------------------------------------ transition #8 thread: 2
gov.nasa.jpf.vm.choice.ThreadChoiceFromSet {id:"SHARED_OBJECT" ,1/2,isCascaded:false}
------------------------------------------------------ transition #9 thread: 2
gov.nasa.jpf.vm.choice.ThreadChoiceFromSet {id:"SHARED_OBJECT" ,1/2,isCascaded:false}
------------------------------------------------------ transition #10 thread: 1
gov.nasa.jpf.vm.choice.ThreadChoiceFromSet {id:"RELEASE" ,1/3,isCascaded:false}
------------------------------------------------------ transition #11 thread: 1
gov.nasa.jpf.vm.choice.ThreadChoiceFromSet {id:"SHARED_OBJECT" ,1/3,isCascaded:false}
------------------------------------------------------ transition #12 thread: 2
22/36
![Page 28: Concurrency - EECS 4315 › ... › _media › lecture17.pdf · Correct? Question Is the developed class Database correct? Answer Maybe. Let us use JPF to try to nd bugs in the Database](https://reader033.fdocuments.net/reader033/viewer/2022052721/5f0ba9337e708231d431993a/html5/thumbnails/28.jpg)
Configuring the report
report.console.class=gov.nasa.jpf.report.Reporter
report.console.start=
report.console.transition=
report.console.constraint=
report.console.probe=
report.console.property_violation=trace
report.console.show_steps=true
report.console.show_method=
report.console.show_code=false
report.console.finished=
23/36
![Page 29: Concurrency - EECS 4315 › ... › _media › lecture17.pdf · Correct? Question Is the developed class Database correct? Answer Maybe. Let us use JPF to try to nd bugs in the Database](https://reader033.fdocuments.net/reader033/viewer/2022052721/5f0ba9337e708231d431993a/html5/thumbnails/29.jpg)
Configuring the report
============================================ trace #1
------------------------------------------------------ transition #0 thread: 0
gov.nasa.jpf.vm.choice.ThreadChoiceFromSet {id:"ROOT" ,1/1,isCascaded:false}
[3701 insn w/o sources]
------------------------------------------------------ transition #1 thread: 0
gov.nasa.jpf.vm.choice.ThreadChoiceFromSet {id:"START" ,1/2,isCascaded:false}
[17 insn w/o sources]
------------------------------------------------------ transition #2 thread: 0
gov.nasa.jpf.vm.choice.ThreadChoiceFromSet {id:"START" ,1/3,isCascaded:false}
[11 insn w/o sources]
------------------------------------------------------ transition #3 thread: 0
gov.nasa.jpf.vm.choice.ThreadChoiceFromSet {id:"START" ,1/4,isCascaded:false}
[8 insn w/o sources]
------------------------------------------------------ transition #4 thread: 1
gov.nasa.jpf.vm.choice.ThreadChoiceFromSet {id:"TERMINATE" ,1/3,isCascaded:false}
[7 insn w/o sources]
------------------------------------------------------ transition #5 thread: 2
gov.nasa.jpf.vm.choice.ThreadChoiceFromSet {id:"LOCK" ,2/3,isCascaded:false}
[7 insn w/o sources]
------------------------------------------------------ transition #6 thread: 2
gov.nasa.jpf.vm.choice.ThreadChoiceFromSet {id:"LOCK" ,2/3,isCascaded:false}
[4 insn w/o sources]
------------------------------------------------------ transition #7 thread: 2
gov.nasa.jpf.vm.choice.ThreadChoiceFromSet {id:"SHARED_OBJECT" ,1/2,isCascaded:false}
[4 insn w/o sources]
------------------------------------------------------ transition #8 thread: 2
gov.nasa.jpf.vm.choice.ThreadChoiceFromSet {id:"SHARED_OBJECT" ,1/2,isCascaded:false}
[5 insn w/o sources]
------------------------------------------------------ transition #9 thread: 2
gov.nasa.jpf.vm.choice.ThreadChoiceFromSet {id:"SHARED_OBJECT" ,1/2,isCascaded:false}
[2 insn w/o sources]
24/36
![Page 30: Concurrency - EECS 4315 › ... › _media › lecture17.pdf · Correct? Question Is the developed class Database correct? Answer Maybe. Let us use JPF to try to nd bugs in the Database](https://reader033.fdocuments.net/reader033/viewer/2022052721/5f0ba9337e708231d431993a/html5/thumbnails/30.jpg)
Configuring the report
report.console.class=gov.nasa.jpf.report.Reporter
report.console.start=
report.console.transition=
report.console.constraint=
report.console.probe=
report.console.property_violation=trace
report.console.show_steps=true
report.console.show_method=false
report.console.show_code=true
report.console.finished=
25/36
![Page 31: Concurrency - EECS 4315 › ... › _media › lecture17.pdf · Correct? Question Is the developed class Database correct? Answer Maybe. Let us use JPF to try to nd bugs in the Database](https://reader033.fdocuments.net/reader033/viewer/2022052721/5f0ba9337e708231d431993a/html5/thumbnails/31.jpg)
Configuring the report
============================================ trace #1
gov.nasa.jpf.vm.choice.ThreadChoiceFromSet {id:"ROOT" ,1/1,isCascaded:false}
invokestatic java.lang.Boolean.<clinit>()V
new java.lang.Boolean@bc
dup
iconst_1
invokespecial java.lang.Boolean.<init>(Z)V
aload_0
invokespecial java.lang.Object.<init>()V
return java.lang.Object.<init>()V
aload_0
iload_1
putfield java.lang.Boolean.value
return java.lang.Boolean.<init>(Z)V
putstatic java.lang.Boolean.TRUE
new java.lang.Boolean@bd
dup
iconst_0
invokespecial java.lang.Boolean.<init>(Z)V
aload_0
invokespecial java.lang.Object.<init>()V
return java.lang.Object.<init>()V
aload_0
iload_1
26/36
![Page 32: Concurrency - EECS 4315 › ... › _media › lecture17.pdf · Correct? Question Is the developed class Database correct? Answer Maybe. Let us use JPF to try to nd bugs in the Database](https://reader033.fdocuments.net/reader033/viewer/2022052721/5f0ba9337e708231d431993a/html5/thumbnails/32.jpg)
Configuring the report
report.console.class=gov.nasa.jpf.report.Reporter
report.console.start=
report.console.transition=
report.console.constraint=
report.console.probe=
report.console.property_violation=trace
report.console.show_steps=true
report.console.show_method=true
report.console.show_code=true
report.console.finished=
27/36
![Page 33: Concurrency - EECS 4315 › ... › _media › lecture17.pdf · Correct? Question Is the developed class Database correct? Answer Maybe. Let us use JPF to try to nd bugs in the Database](https://reader033.fdocuments.net/reader033/viewer/2022052721/5f0ba9337e708231d431993a/html5/thumbnails/33.jpg)
Configuring the report
============================================ trace #1
------------------------------------------------------ transition #0 thread: 0
gov.nasa.jpf.vm.choice.ThreadChoiceFromSet {id:"ROOT" ,1/1,isCascaded:false}
java.lang.Boolean.[<clinit>]
invokestatic java.lang.Boolean.<clinit>()V
java.lang.Boolean.<clinit>()V
new java.lang.Boolean@bc
dup
iconst_1
invokespecial java.lang.Boolean.<init>(Z)V
java.lang.Boolean.<init>(Z)V
aload_0
invokespecial java.lang.Object.<init>()V
java.lang.Object.<init>()V
return java.lang.Object.<init>()V
java.lang.Boolean.<init>(Z)V
aload_0
iload_1
putfield java.lang.Boolean.value
return java.lang.Boolean.<init>(Z)V
java.lang.Boolean.<clinit>()V
putstatic java.lang.Boolean.TRUE
new java.lang.Boolean@bd
dup
iconst_0
invokespecial java.lang.Boolean.<init>(Z)V
java.lang.Boolean.<init>(Z)V
aload_0
28/36
![Page 34: Concurrency - EECS 4315 › ... › _media › lecture17.pdf · Correct? Question Is the developed class Database correct? Answer Maybe. Let us use JPF to try to nd bugs in the Database](https://reader033.fdocuments.net/reader033/viewer/2022052721/5f0ba9337e708231d431993a/html5/thumbnails/34.jpg)
Configuring the report
report.console.class=gov.nasa.jpf.report.Reporter
report.console.start=
report.console.transition=
report.console.constraint=
report.console.probe=
report.console.property_violation=
report.console.show_steps=
report.console.show_method=
report.console.show_code=
report.console.finished=result
This configuration produces the following output.
============================================ results
error #1: gov.nasa.jpf.vm.NoUncaughtExceptionsProperty "java.lang.AssertionError
at concurrency.Database...."
============================================ search finished: 3/12/18 9:18 PM
29/36
![Page 35: Concurrency - EECS 4315 › ... › _media › lecture17.pdf · Correct? Question Is the developed class Database correct? Answer Maybe. Let us use JPF to try to nd bugs in the Database](https://reader033.fdocuments.net/reader033/viewer/2022052721/5f0ba9337e708231d431993a/html5/thumbnails/35.jpg)
Configuring the report
report.console.class=gov.nasa.jpf.report.Reporter
report.console.start=
report.console.transition=
report.console.constraint=
report.console.probe=
report.console.property_violation=
report.console.show_steps=
report.console.show_method=
report.console.show_code=
report.console.finished=statistics
This configuration produces the following output.
============================================ statistics
elapsed time: 00:00:01
states: new=395,visited=361,backtracked=733,end=21
search: maxDepth=29,constraints=0
choice generators: thread=394 (signal=41,lock=115,sharedRef=119,threadApi=3,reschedule=116), data=0
heap: new=409,released=927,maxLive=382,gcCycles=663
instructions: 8233
max memory: 61MB
loaded code: classes=65,methods=1423
====================================================== search finished: 3/12/18 9:21 PM
30/36
![Page 36: Concurrency - EECS 4315 › ... › _media › lecture17.pdf · Correct? Question Is the developed class Database correct? Answer Maybe. Let us use JPF to try to nd bugs in the Database](https://reader033.fdocuments.net/reader033/viewer/2022052721/5f0ba9337e708231d431993a/html5/thumbnails/36.jpg)
Configuring the report
report.console.class=gov.nasa.jpf.report.Reporter
report.console.start=jpf
report.console.transition=
report.console.constraint=
report.console.probe=
report.console.property_violation=error,trace
report.console.show_steps=true
report.console.show_method=true
report.console.show_code=true
report.console.finished=statistics
31/36
![Page 37: Concurrency - EECS 4315 › ... › _media › lecture17.pdf · Correct? Question Is the developed class Database correct? Answer Maybe. Let us use JPF to try to nd bugs in the Database](https://reader033.fdocuments.net/reader033/viewer/2022052721/5f0ba9337e708231d431993a/html5/thumbnails/37.jpg)
Configuring the report
JavaPathfinder core system v8.0 (rev 2+) - (C) 2005-2014 United States Government. All rights reserved.
============================================ search started: 3/12/18 9:28 PM
============================================ error 1
gov.nasa.jpf.vm.NoUncaughtExceptionsProperty
java.lang.AssertionError
at concurrency.Database.read(concurrency/Database.java:28)
at concurrency.Reader.run(concurrency/Reader.java:25)
============================================ trace #1
-------------------------------------------- transition #0 thread: 0
gov.nasa.jpf.vm.choice.ThreadChoiceFromSet {id:"ROOT" ,1/1,isCascaded:false}
java.lang.Boolean.[<clinit>]
invokestatic java.lang.Boolean.<clinit>()V
java.lang.Boolean.<clinit>()V
...
============================================ statistics
elapsed time: 00:00:01
states: new=395,visited=361,backtracked=733,end=21
search: maxDepth=29,constraints=0
choice generators: thread=394 (signal=41,lock=115,sharedRef=119,threadApi=3,reschedule=116), data=0
heap: new=409,released=927,maxLive=382,gcCycles=663
instructions: 8233
max memory: 61MB
loaded code: classes=65,methods=1423
============================================ search finished: 3/12/18 9:29 PM
32/36
![Page 38: Concurrency - EECS 4315 › ... › _media › lecture17.pdf · Correct? Question Is the developed class Database correct? Answer Maybe. Let us use JPF to try to nd bugs in the Database](https://reader033.fdocuments.net/reader033/viewer/2022052721/5f0ba9337e708231d431993a/html5/thumbnails/38.jpg)
The dining philosophers problem
In the dining philosophers problem, due to Dijkstra, fivephilosophers are seated around a round table. Each philosopherhas a plate of spaghetti. A philosopher needs two forks to eat it.The layout of the table is as follows.
The life of a philosopher consists of alternative periods of eatingand thinking. When philosophers get hungry, they try to pick uptheir left and right fork, one at a time, in either order. If successfulin picking up both forks, the philosopher eats for a while, then putsdown the forks and continues to think.
33/36
![Page 39: Concurrency - EECS 4315 › ... › _media › lecture17.pdf · Correct? Question Is the developed class Database correct? Answer Maybe. Let us use JPF to try to nd bugs in the Database](https://reader033.fdocuments.net/reader033/viewer/2022052721/5f0ba9337e708231d431993a/html5/thumbnails/39.jpg)
The dining philosophers problem
public class Philosopher extends Thread {
private int id;
private Table table;
public Philosopher(int id, Table table) {
this.id = id;
this.table = table;
}
public void run() {
while (true) {
this.table.pickUp(id);
this.table.pickUp(id + 1 % 5);
// eat
this.table.putDown(id);
this.table.putDown(id + 1 % 5);
}
}
34/36
![Page 40: Concurrency - EECS 4315 › ... › _media › lecture17.pdf · Correct? Question Is the developed class Database correct? Answer Maybe. Let us use JPF to try to nd bugs in the Database](https://reader033.fdocuments.net/reader033/viewer/2022052721/5f0ba9337e708231d431993a/html5/thumbnails/40.jpg)
The dining philosophers problem
public class Table {
public void pickUp(int id) { ... }
public void putDown(int id) { ... }
}
35/36