URL: https://www.cs.cmu.edu/~kbierhof/thesis/bierhoff-thesis.pdf
%PDF-1.4
%����
5 0 obj
<< /S /GoTo /D (chapter.1) >>
endobj
8 0 obj
(1 Introduction)
endobj
9 0 obj
<< /S /GoTo /D (section.1.1) >>
endobj
12 0 obj
(1.1 APIs and Object Protocols)
endobj
13 0 obj
<< /S /GoTo /D (subsection.1.1.1) >>
endobj
16 0 obj
(1.1.1 Helping Developers)
endobj
17 0 obj
<< /S /GoTo /D (subsection.1.1.2) >>
endobj
20 0 obj
(1.1.2 Challenges)
endobj
21 0 obj
<< /S /GoTo /D (section.1.2) >>
endobj
24 0 obj
(1.2 This Dissertation)
endobj
25 0 obj
<< /S /GoTo /D (subsection.1.2.1) >>
endobj
28 0 obj
(1.2.1 Expressiveness)
endobj
29 0 obj
<< /S /GoTo /D (subsection.1.2.2) >>
endobj
32 0 obj
(1.2.2 Subtyping and Inheritance)
endobj
33 0 obj
<< /S /GoTo /D (subsection.1.2.3) >>
endobj
36 0 obj
(1.2.3 Aliasing Flexibility)
endobj
37 0 obj
<< /S /GoTo /D (subsection.1.2.4) >>
endobj
40 0 obj
(1.2.4 Contributions)
endobj
41 0 obj
<< /S /GoTo /D (section.1.3) >>
endobj
44 0 obj
(1.3 Potential Impact)
endobj
45 0 obj
<< /S /GoTo /D (section.1.4) >>
endobj
48 0 obj
(1.4 Thesis Outline)
endobj
49 0 obj
<< /S /GoTo /D (chapter.2) >>
endobj
52 0 obj
(2 Thesis and Hypotheses)
endobj
53 0 obj
<< /S /GoTo /D (section.2.1) >>
endobj
56 0 obj
(2.1 Thesis)
endobj
57 0 obj
<< /S /GoTo /D (section.2.2) >>
endobj
60 0 obj
(2.2 Hypotheses)
endobj
61 0 obj
<< /S /GoTo /D (subsection.2.2.1) >>
endobj
64 0 obj
(2.2.1 Capture Common Protocols Succinctly)
endobj
65 0 obj
<< /S /GoTo /D (subsection.2.2.2) >>
endobj
68 0 obj
(2.2.2 Sound Modular Checking)
endobj
69 0 obj
<< /S /GoTo /D (subsection.2.2.3) >>
endobj
72 0 obj
(2.2.3 Automation)
endobj
73 0 obj
<< /S /GoTo /D (subsection.2.2.4) >>
endobj
76 0 obj
(2.2.4 Practical Checking)
endobj
77 0 obj
<< /S /GoTo /D (chapter.3) >>
endobj
80 0 obj
(3 Approach: Access Permissions)
endobj
81 0 obj
<< /S /GoTo /D (section.3.1) >>
endobj
84 0 obj
(3.1 Java Iterators)
endobj
85 0 obj
<< /S /GoTo /D (subsection.3.1.1) >>
endobj
88 0 obj
(3.1.1 Specification Goals)
endobj
89 0 obj
<< /S /GoTo /D (subsection.3.1.2) >>
endobj
92 0 obj
(3.1.2 State Machine Protocol)
endobj
93 0 obj
<< /S /GoTo /D (subsection.3.1.3) >>
endobj
96 0 obj
(3.1.3 Iterator Interface Specification)
endobj
97 0 obj
<< /S /GoTo /D (subsection.3.1.4) >>
endobj
100 0 obj
(3.1.4 Creating and Disposing Iterators)
endobj
101 0 obj
<< /S /GoTo /D (subsection.3.1.5) >>
endobj
104 0 obj
(3.1.5 Client Verification)
endobj
105 0 obj
<< /S /GoTo /D (subsection.3.1.6) >>
endobj
108 0 obj
(3.1.6 Modifying Iterators)
endobj
109 0 obj
<< /S /GoTo /D (section.3.2) >>
endobj
112 0 obj
(3.2 Java Stream Implementations)
endobj
113 0 obj
<< /S /GoTo /D (subsection.3.2.1) >>
endobj
116 0 obj
(3.2.1 Stream Pipes)
endobj
117 0 obj
<< /S /GoTo /D (subsection.3.2.2) >>
endobj
120 0 obj
(3.2.2 Buffered Input Streams)
endobj
121 0 obj
<< /S /GoTo /D (section.3.3) >>
endobj
124 0 obj
(3.3 Summary)
endobj
125 0 obj
<< /S /GoTo /D (chapter.4) >>
endobj
128 0 obj
(4 Type System)
endobj
129 0 obj
<< /S /GoTo /D (section.4.1) >>
endobj
132 0 obj
(4.1 Formal Language)
endobj
133 0 obj
<< /S /GoTo /D (subsection.4.1.1) >>
endobj
136 0 obj
(4.1.1 Syntax)
endobj
137 0 obj
<< /S /GoTo /D (subsection.4.1.2) >>
endobj
140 0 obj
(4.1.2 State Spaces)
endobj
141 0 obj
<< /S /GoTo /D (subsection.4.1.3) >>
endobj
144 0 obj
(4.1.3 Access Permissions)
endobj
145 0 obj
<< /S /GoTo /D (subsection.4.1.4) >>
endobj
148 0 obj
(4.1.4 Permission-Based Specifications)
endobj
149 0 obj
<< /S /GoTo /D (subsection.4.1.5) >>
endobj
152 0 obj
(4.1.5 Handling Inheritance)
endobj
153 0 obj
<< /S /GoTo /D (subsection.4.1.6) >>
endobj
156 0 obj
(4.1.6 Behavioral Subtyping)
endobj
157 0 obj
<< /S /GoTo /D (section.4.2) >>
endobj
160 0 obj
(4.2 Modular Typestate Verification)
endobj
161 0 obj
<< /S /GoTo /D (subsection.4.2.1) >>
endobj
164 0 obj
(4.2.1 Permission Tracking)
endobj
165 0 obj
<< /S /GoTo /D (subsection.4.2.2) >>
endobj
168 0 obj
(4.2.2 Packing and Unpacking)
endobj
169 0 obj
<< /S /GoTo /D (subsection.4.2.3) >>
endobj
172 0 obj
(4.2.3 Calling Methods)
endobj
173 0 obj
<< /S /GoTo /D (subsection.4.2.4) >>
endobj
176 0 obj
(4.2.4 Field Assignments)
endobj
177 0 obj
<< /S /GoTo /D (subsection.4.2.5) >>
endobj
180 0 obj
(4.2.5 Permission Reasoning with Splitting and Joining)
endobj
181 0 obj
<< /S /GoTo /D (subsection.4.2.6) >>
endobj
184 0 obj
(4.2.6 Soundness)
endobj
185 0 obj
<< /S /GoTo /D (subsection.4.2.7) >>
endobj
188 0 obj
(4.2.7 Example)
endobj
189 0 obj
<< /S /GoTo /D (chapter.5) >>
endobj
192 0 obj
(5 Polymorphic Permission Inference)
endobj
193 0 obj
<< /S /GoTo /D (section.5.1) >>
endobj
196 0 obj
(5.1 Inference System)
endobj
197 0 obj
<< /S /GoTo /D (subsection.5.1.1) >>
endobj
200 0 obj
(5.1.1 Syntax)
endobj
201 0 obj
<< /S /GoTo /D (subsection.5.1.2) >>
endobj
204 0 obj
(5.1.2 Typechecking Rules)
endobj
205 0 obj
<< /S /GoTo /D (subsection.5.1.3) >>
endobj
208 0 obj
(5.1.3 Proof Rules)
endobj
209 0 obj
<< /S /GoTo /D (subsection.5.1.4) >>
endobj
212 0 obj
(5.1.4 Soundness and Completeness)
endobj
213 0 obj
<< /S /GoTo /D (section.5.2) >>
endobj
216 0 obj
(5.2 Solving Constraints)
endobj
217 0 obj
<< /S /GoTo /D (subsection.5.2.1) >>
endobj
220 0 obj
(5.2.1 Checking Method Definitions)
endobj
221 0 obj
<< /S /GoTo /D (subsection.5.2.2) >>
endobj
224 0 obj
(5.2.2 Constraint Satisfiability)
endobj
225 0 obj
<< /S /GoTo /D (chapter.6) >>
endobj
228 0 obj
(6 Plural: Java Tooling)
endobj
229 0 obj
<< /S /GoTo /D (section.6.1) >>
endobj
232 0 obj
(6.1 Developer Annotations)
endobj
233 0 obj
<< /S /GoTo /D (section.6.2) >>
endobj
236 0 obj
(6.2 Background)
endobj
237 0 obj
<< /S /GoTo /D (subsection.6.2.1) >>
endobj
240 0 obj
(6.2.1 Eclipse)
endobj
241 0 obj
<< /S /GoTo /D (subsection.6.2.2) >>
endobj
244 0 obj
(6.2.2 Crystal)
endobj
245 0 obj
<< /S /GoTo /D (section.6.3) >>
endobj
248 0 obj
(6.3 Flow Analysis for Local Permission Inference)
endobj
249 0 obj
<< /S /GoTo /D (subsection.6.3.1) >>
endobj
252 0 obj
(6.3.1 Annotations Make Analysis Modular)
endobj
253 0 obj
<< /S /GoTo /D (subsection.6.3.2) >>
endobj
256 0 obj
(6.3.2 Tuple Lattice)
endobj
257 0 obj
<< /S /GoTo /D (subsection.6.3.3) >>
endobj
260 0 obj
(6.3.3 Comparing and Joining Permission Tuples)
endobj
261 0 obj
<< /S /GoTo /D (subsection.6.3.4) >>
endobj
264 0 obj
(6.3.4 Composing Tuples)
endobj
265 0 obj
<< /S /GoTo /D (subsection.6.3.5) >>
endobj
268 0 obj
(6.3.5 Local Must Alias Analysis)
endobj
269 0 obj
<< /S /GoTo /D (subsection.6.3.6) >>
endobj
272 0 obj
(6.3.6 Dynamic State Tests)
endobj
273 0 obj
<< /S /GoTo /D (subsection.6.3.7) >>
endobj
276 0 obj
(6.3.7 API Implementation Checking)
endobj
277 0 obj
<< /S /GoTo /D (subsection.6.3.8) >>
endobj
280 0 obj
(6.3.8 Error Reporting)
endobj
281 0 obj
<< /S /GoTo /D (section.6.4) >>
endobj
284 0 obj
(6.4 Extensions)
endobj
285 0 obj
<< /S /GoTo /D (subsection.6.4.1) >>
endobj
288 0 obj
(6.4.1 Immutable Permissions)
endobj
289 0 obj
<< /S /GoTo /D (subsection.6.4.2) >>
endobj
292 0 obj
(6.4.2 Borrowing)
endobj
293 0 obj
<< /S /GoTo /D (subsection.6.4.3) >>
endobj
296 0 obj
(6.4.3 Method Cases)
endobj
297 0 obj
<< /S /GoTo /D (subsection.6.4.4) >>
endobj
300 0 obj
(6.4.4 Marker States)
endobj
301 0 obj
<< /S /GoTo /D (subsection.6.4.5) >>
endobj
304 0 obj
(6.4.5 Dependent Objects)
endobj
305 0 obj
<< /S /GoTo /D (subsection.6.4.6) >>
endobj
308 0 obj
(6.4.6 Concrete Predicates)
endobj
309 0 obj
<< /S /GoTo /D (subsection.6.4.7) >>
endobj
312 0 obj
(6.4.7 Permissions Allowing Dispatch And Field Access)
endobj
313 0 obj
<< /S /GoTo /D (section.6.5) >>
endobj
316 0 obj
(6.5 Dealing with Java)
endobj
317 0 obj
<< /S /GoTo /D (subsection.6.5.1) >>
endobj
320 0 obj
(6.5.1 Constructors)
endobj
321 0 obj
<< /S /GoTo /D (subsection.6.5.2) >>
endobj
324 0 obj
(6.5.2 Private Methods)
endobj
325 0 obj
<< /S /GoTo /D (subsection.6.5.3) >>
endobj
328 0 obj
(6.5.3 Static Fields \(Globals\) )
endobj
329 0 obj
<< /S /GoTo /D (subsection.6.5.4) >>
endobj
332 0 obj
(6.5.4 Arrays)
endobj
333 0 obj
<< /S /GoTo /D (subsection.6.5.5) >>
endobj
336 0 obj
(6.5.5 Future Work)
endobj
337 0 obj
<< /S /GoTo /D (section.6.6) >>
endobj
340 0 obj
(6.6 Use Cases)
endobj
341 0 obj
<< /S /GoTo /D (chapter.7) >>
endobj
344 0 obj
(7 Evaluation)
endobj
345 0 obj
<< /S /GoTo /D (section.7.1) >>
endobj
348 0 obj
(7.1 Specifying APIs)
endobj
349 0 obj
<< /S /GoTo /D (subsection.7.1.1) >>
endobj
352 0 obj
(7.1.1 Java Database Connectivity)
endobj
353 0 obj
<< /S /GoTo /D (subsection.7.1.2) >>
endobj
356 0 obj
(7.1.2 Java Collections Framework)
endobj
357 0 obj
<< /S /GoTo /D (subsection.7.1.3) >>
endobj
360 0 obj
(7.1.3 Other Java Standard Libraries)
endobj
361 0 obj
<< /S /GoTo /D (section.7.2) >>
endobj
364 0 obj
(7.2 Beehive: Verifying an Intermediary Library)
endobj
365 0 obj
<< /S /GoTo /D (subsection.7.2.1) >>
endobj
368 0 obj
(7.2.1 Checked Java Standard Library APIs)
endobj
369 0 obj
<< /S /GoTo /D (subsection.7.2.2) >>
endobj
372 0 obj
(7.2.2 Implementing an Iterator)
endobj
373 0 obj
<< /S /GoTo /D (subsection.7.2.3) >>
endobj
376 0 obj
(7.2.3 Formalizing Beehive Client Obligations)
endobj
377 0 obj
<< /S /GoTo /D (subsection.7.2.4) >>
endobj
380 0 obj
(7.2.4 Overhead: Annotations in Beehive)
endobj
381 0 obj
<< /S /GoTo /D (subsection.7.2.5) >>
endobj
384 0 obj
(7.2.5 Analysis Precision)
endobj
385 0 obj
<< /S /GoTo /D (section.7.3) >>
endobj
388 0 obj
(7.3 Iterators in PMD: Scalability and Precision)
endobj
389 0 obj
<< /S /GoTo /D (subsection.7.3.1) >>
endobj
392 0 obj
(7.3.1 Iterator Usage Protocol)
endobj
393 0 obj
<< /S /GoTo /D (subsection.7.3.2) >>
endobj
396 0 obj
(7.3.2 Concurrent Modifications)
endobj
397 0 obj
<< /S /GoTo /D (subsection.7.3.3) >>
endobj
400 0 obj
(7.3.3 Comparison to Tracematches)
endobj
401 0 obj
<< /S /GoTo /D (section.7.4) >>
endobj
404 0 obj
(7.4 Discussion: Lessons Learned)
endobj
405 0 obj
<< /S /GoTo /D (subsection.7.4.1) >>
endobj
408 0 obj
(7.4.1 APIs)
endobj
409 0 obj
<< /S /GoTo /D (subsection.7.4.2) >>
endobj
412 0 obj
(7.4.2 API Client Code)
endobj
413 0 obj
<< /S /GoTo /D (subsection.7.4.3) >>
endobj
416 0 obj
(7.4.3 Plural Tool Usage)
endobj
417 0 obj
<< /S /GoTo /D (chapter.8) >>
endobj
420 0 obj
(8 Related Work)
endobj
421 0 obj
<< /S /GoTo /D (section.8.1) >>
endobj
424 0 obj
(8.1 Static Protocol Analyses)
endobj
425 0 obj
<< /S /GoTo /D (subsection.8.1.1) >>
endobj
428 0 obj
(8.1.1 Modular Analyses)
endobj
429 0 obj
<< /S /GoTo /D (subsection.8.1.2) >>
endobj
432 0 obj
(8.1.2 Whole-Program Analyses)
endobj
433 0 obj
<< /S /GoTo /D (section.8.2) >>
endobj
436 0 obj
(8.2 Protocols at Runtime)
endobj
437 0 obj
<< /S /GoTo /D (section.8.3) >>
endobj
440 0 obj
(8.3 Verifying Component Compositions)
endobj
441 0 obj
<< /S /GoTo /D (section.8.4) >>
endobj
444 0 obj
(8.4 Fractional Permission Inference)
endobj
445 0 obj
<< /S /GoTo /D (section.8.5) >>
endobj
448 0 obj
(8.5 Comprehensive Program Verification)
endobj
449 0 obj
<< /S /GoTo /D (section.8.6) >>
endobj
452 0 obj
(8.6 Protocol Inference)
endobj
453 0 obj
<< /S /GoTo /D (chapter.9) >>
endobj
456 0 obj
(9 Conclusions)
endobj
457 0 obj
<< /S /GoTo /D (section.9.1) >>
endobj
460 0 obj
(9.1 Validation of Hypotheses)
endobj
461 0 obj
<< /S /GoTo /D (subsection.9.1.1) >>
endobj
464 0 obj
(9.1.1 Capture Common Protocols Succinctly)
endobj
465 0 obj
<< /S /GoTo /D (subsection.9.1.2) >>
endobj
468 0 obj
(9.1.2 Sound Modular Checking)
endobj
469 0 obj
<< /S /GoTo /D (subsection.9.1.3) >>
endobj
472 0 obj
(9.1.3 Automation)
endobj
473 0 obj
<< /S /GoTo /D (subsection.9.1.4) >>
endobj
476 0 obj
(9.1.4 Practical Checking)
endobj
477 0 obj
<< /S /GoTo /D (subsection.9.1.5) >>
endobj
480 0 obj
(9.1.5 Thesis)
endobj
481 0 obj
<< /S /GoTo /D (section.9.2) >>
endobj
484 0 obj
(9.2 Concerns)
endobj
485 0 obj
<< /S /GoTo /D (subsection.9.2.1) >>
endobj
488 0 obj
(9.2.1 Variations in Development Practices)
endobj
489 0 obj
<< /S /GoTo /D (subsection.9.2.2) >>
endobj
492 0 obj
(9.2.2 Applicability to Frameworks)
endobj
493 0 obj
<< /S /GoTo /D (subsection.9.2.3) >>
endobj
496 0 obj
(9.2.3 Expression Cost)
endobj
497 0 obj
<< /S /GoTo /D (subsection.9.2.4) >>
endobj
500 0 obj
(9.2.4 Adoptability)
endobj
501 0 obj
<< /S /GoTo /D (subsection.9.2.5) >>
endobj
504 0 obj
(9.2.5 Tool Performance)
endobj
505 0 obj
<< /S /GoTo /D (subsection.9.2.6) >>
endobj
508 0 obj
(9.2.6 Concurrency)
endobj
509 0 obj
<< /S /GoTo /D (section.9.3) >>
endobj
512 0 obj
(9.3 Discussion)
endobj
513 0 obj
<< /S /GoTo /D (subsection.9.3.1) >>
endobj
516 0 obj
(9.3.1 Pay-off and Incrementality)
endobj
517 0 obj
<< /S /GoTo /D (subsection.9.3.2) >>
endobj
520 0 obj
(9.3.2 Essential Features)
endobj
521 0 obj
<< /S /GoTo /D (subsection.9.3.3) >>
endobj
524 0 obj
(9.3.3 Advice to API Designers)
endobj
525 0 obj
<< /S /GoTo /D (subsection.9.3.4) >>
endobj
528 0 obj
(9.3.4 Effect on Software Engineering Practice)
endobj
529 0 obj
<< /S /GoTo /D (section.9.4) >>
endobj
532 0 obj
(9.4 Contributions)
endobj
533 0 obj
<< /S /GoTo /D (section.9.5) >>
endobj
536 0 obj
(9.5 Future Work)
endobj
537 0 obj
<< /S /GoTo /D (section.9.6) >>
endobj
540 0 obj
(9.6 Summary)
endobj
541 0 obj
<< /S /GoTo /D [542 0 R /Fit ] >>
endobj
544 0 obj <<
/Length 1188
/Filter /FlateDecode
>>
stream
xڍV�r�6��+X5�j�`�G�'��m�i��h��� =�ߧ�P���\H������M�`������/�\�4 bIF��U@X�ɂ��,A����:�i�å�H�Q��w��|���Z�~��������)���wNX�����>x��÷�P
�Y�E����$
_go_W�Z�K�1F%.��8A9˂8IPV��)s���>Q�qicƄ���f(MJwa�`sc�����}��y$��YIȑ�0�ޠ
U&(! D����|=�Q����[Iu�UDp�(���7���*RĊ�ȹ-ruh��}�Ѝ�C�����Ш��>�
�{�{�8ӘWc�����������R��~�('�����OTҰrg�R���q��a�2-!��