[PDF] Code Complete 2nd Ed Checklists - Matthew J Miller





Previous PDF Next PDF



Code Complete Second Edition eBook

“The ultimate encyclopedia for the software developer is Code Complete by Steve McConnell. Subtitled 'A Practical Handbook of Software Construction' this 



Code Complete Second Edition eBook

“The ultimate encyclopedia for the software developer is Code Complete by Steve McConnell. Subtitled 'A Practical Handbook of Software Construction' this 



Code Complete - ReadingSample

Steve McConnell: Code Complete - Deutsche Ausgabe der zweiten Auflage. Microsoft Press 2005 (ISBN 3-86063-593-X). Page 3 



Code Complete 2nd Ed. Checklists1

Details of the practices are contained throughout Code Complete 2nd Ed. Coding. D Have you defined coding conventions for names comments



Code Complete Second Edition

Code Complete Second Edition. Steve McConnell Organizing Straight-Line Code. ... The Pseudocode Programming Process .



Code Complete Second Edition

Code Complete. “An excellent guide to programming style and software construction.” —Martin Fowler Refactoring. “Steve McConnell's Code Complete 



NEURAL CODE COMPLETION

Code completion an essential part of modern software development



When Code Completion Fails: a Case Study on Real-World

EXPERIMENTAL SETUP. Synthetic code completion benchmarks are typically created by taking a complete program and removing a random token such as an identifier 



Contents

12.01.2004 When I wrote Code Complete First Edition





Code Complete Second Edition - pearsoncmgcom

Code Complete “An excellent guide to programming style and software construction ” —Martin Fowler Refactoring “Steve McConnell’s Code Complete provides a fast track to wisdom for programmers His books are fun to read and you never forget that he is speaking from hard-won personal



Code Complete Second Edition - pearsoncmgcom

Part 1 Laying~haFoundatbaan 1 Welcometo SoftwareConstruction 3 2 Metaphorsfor a Richer Understanding



Code Complete Second Edition eBook - AROMA Ti?ng Anh Cho

Code Complete “An excellent guide to programming style and software construction ” —Martin Fowler Refactoring “Steve McConnell’s Code Complete provides a fast track to wisdom for programmers His books are fun to read and you never forget that he is speaking from hard-won personal



Code Complete 2nd Ed Checklists - Matthew J Miller

Code Complete 2nd Ed Checklists1 Steven C McConnell This material is copied and/or adapted from the Code Complete 2 Website at cc2e com This material is Copyright c 1993-2004 Steven C McConnell Permission is hereby given to copy adapt and distribute this material as long as this notice is included on all such



Learn to Code HTML & CSS - pearsoncmgcom

x Learn to Code HTML & CSS Introduction I come from a family of educators My parents are both teachers as is my brother I was the only one in my family not to become a teacher That said I love helping others spread-ing the knowledge I have about web design and teaching when possible To that end I often

Who is the author of title Code Complete?

    Title Code Complete, Second Edition Author Steve McConnell Created Date 20051224122853Z

Who should use code complete?

    Technical Leads Many technical leads have used Code Complete to educate less-experienced program- mers on their teams. You can also use it to fill your own knowledge gaps.

Where can I find information about Code Complete?

    cc2e.com/1234Book websiteUpdated checklists, books, magazine articles, Web links, and other content are provided on a companion website at cc2e.com. To access information related to Code Complete, 2d ed., enter cc2e.com/followed by a four-digit code, an example of which is shown here in the left margin.

Is code complete the best choice for secure code?

    “Today’s softwaremustbe robust and resilient , and secure code starts with disciplined software construction. After ten years, there is still no better authority than Code Complete.” —Michael Howard, Security Engineering, Microsoft Corporation; Coauthor,Writing Secure Code

Code Complete, 2nd Ed.

Checklists

1

Steven C. McConnell

This material is copied and/or adapted from the Code Complete 2 Website at cc2e.com.

This material is Copyright

c?1993-2004 Steven C. McConnell. Permission is hereby given to copy, adapt, and distribute this material as long as this notice is included on all such materials and the materials are not sold, licensed, or otherwise distributed for commercial gain. 1

Converted to LATEX by Matthew J. Miller (

www.matthewjmiller.net) 1

Contents

Chapter 3: Measure Twice Cut Once: Upstream Prerequisites5

Checklist: Requirements. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5

Specific Functional Requirements. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5

Specific Non-Functional (Quality) Requirements. . . . . . . . . . . . . . . . . . . . . . . . . . 5

Requirements Quality. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6

Requirements Completeness. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6

Checklist: Architecture. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6

Specific Architectural Topics. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6

General Architectural Quality. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7

Checklist: Upstream Prerequisites. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8

Chapter 4: Key Construction Decisions9

Checklist: Major Construction Practices. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9

Coding. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9

Teamwork. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9

Quality Assurance. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9

Tools. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9

Chapter 5: Design In Construction10

Checklist: Design in Construction. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10

Design Practices. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10

Design Goals. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10

Chapter 6: Working Classes11

Checklist: Class Quality. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11

Abstract Data Types. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11

Abstraction. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11

Encapsulation. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11

Inheritance. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11

Other Implementation Issues. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12

Language-Specific Issues. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12

Chapter 7: High Quality Routines13

Checklist: High-Quality Routines. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13

Big-Picture Issues. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13

Parameter-Passing Issues. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13

Chapter 8: Defensive Programming14

Checklist: Defensive Programming. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14

General. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14

Exceptions. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14

Security Issues. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15

Chapter 9: Pseudocode Programming Process16

Checklist: The Pseudocode Programming Process. . . . . . . . . . . . . . . . . . . . . . . . . . . . 16

This material is copied and/or adapted from the Code Complete 2 Website atcc2e.com. This material is Copyrightc?1993-2004

Steven C. McConnell. Permission is hereby given to copy, adapt, and distribute this material as long as this notice is included on all

such materials and the materials are not sold, licensed, or otherwise distributed for commercial gain.

2

Chapter 10: General Issues In Using Variables17

Checklist: General Considerations In Using Data. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17

Initializing Variables. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17

Other General Issues in Using Data. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17

Chapter 11: Power of Variables Names18

Checklist: Naming Variables. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18

General Naming Considerations. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18

Naming Specific Kinds Of Data. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18

Naming Conventions. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18

Short Names. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18

Common Naming Problems: Have You Avoided.... . . . . . . . . . . . . . . . . . . . . . . . . 19

Chapter 12: Fundamental Data Types20

Checklist: Fundamental Data. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20

Numbers in General. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20

Integers. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20

Floating-Point Numbers. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20

Characters and Strings. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20

Boolean Variables. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20

Enumerated Types. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21

Named Constants. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21

Arrays. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21

Creating Types. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21

Chapter 13: Unusual Data Types22

Checklist: Considerations In Using Unusual Data Types. . . . . . . . . . . . . . . . . . . . . . . . . 22

Structures. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22

Global Data. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22

Pointers. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22

Chapter 14: Organizing Straight Line Code23

Checklist: Organizing Straight Line Code. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23

Chapter 15: Using Conditionals24

Checklist: Conditionals. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24

if-thenStatements. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24

if-then-else-ifChains. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24

caseStatements. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24

Chapter 16: Controlling Loops25

Checklist: Loops. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25

Loop Selection and Creation. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25

Entering the Loop. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25

Inside the Loop. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25

Loop Indexes. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25

Exiting the Loop. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26

This material is copied and/or adapted from the Code Complete 2 Website atcc2e.com. This material is Copyrightc?1993-2004

Steven C. McConnell. Permission is hereby given to copy, adapt, and distribute this material as long as this notice is included on all

such materials and the materials are not sold, licensed, or otherwise distributed for commercial gain.

3

Chapter 17: Unusual Control Structures27

Checklist: Unusual Control Structures. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27

return. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27

Recursion. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27

goto. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27

Chapter 18: Table Driven Methods28

Checklist: Table Driven Methods. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28

Chapter 19: General Control Issues29

Checklist: Control Structure Issues. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29

Chapter 20: Software Quality Landscape30

Checklist: A Quality-Assurance Plan. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30

Chapter 21: Collaborative Construction31

Checklist: Effective Pair Programming. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31

Checklist: Effective Inspections. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31

Chapter 22: Developer Testing32

Checklist: Test Cases. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32

Chapter 23: Debugging33

Checklist: Debugging Reminders. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33

Techniques for Finding Defects. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33

Techniques for Syntax Errors. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33

Techniques for Fixing Defects. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34

General Approach to Debugging. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34

Chapter 24: Refactoring35

Reasons to Refactor. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35

Summary of Refactorings. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36

Data Level Refactorings. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36

Statement Level Refactorings. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36

Routine Level Refactorings. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36

Class Implementation Refactorings. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37

Class Interface Refactorings. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37

System Level Refactorings. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38

Checklist: Refactoring Safely. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38

Chapter 25: Code-Tuning Strategies39

Checklist: Code-Tuning Strategy. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39

Overall Program Performance. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39

Code-Tuning Approach. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39

Chapter 26: Code Tuning Techniques40

Checklist: Code-Tuning Techniques. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40

Improve Both Speed and Size. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40

Improve Speed Only. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40

This material is copied and/or adapted from the Code Complete 2 Website atcc2e.com. This material is Copyrightc?1993-2004

Steven C. McConnell. Permission is hereby given to copy, adapt, and distribute this material as long as this notice is included on all

such materials and the materials are not sold, licensed, or otherwise distributed for commercial gain.

4

Chapter 28: Managing Construction41

Checklist: Configuration Management. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41

General. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41

Tools. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41

Backup. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41

Chapter 29: Integration42

Checklist: Integration. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42

Integration Strategy. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42

Daily Build and Smoke Test. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42

Chapter 30: Programming Tools43

Checklist: Programming Tools. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43

Chapter 31: Layout And Style44

Checklist: Layout. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44

General. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44

Control Structures. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44

Individual Statements. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44

Comments. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44

Routines. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44

Classes, Files and Programs. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45

Chapter 32: Self-Documenting Code46

Checklist: Good Commenting Technique. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46

General. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46

Statements and Paragraphs. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46

Data Declarations. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46

Control Structures. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47

Routines. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47

Files, Classes, and Programs. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47

Checklist: Self-Documenting Code. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47

Classes. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47

Routines. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47

Data Names. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48

Data Organization. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48

Control. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48

Layout. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48

Design. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48

This material is copied and/or adapted from the Code Complete 2 Website atcc2e.com. This material is Copyrightc?1993-2004

Steven C. McConnell. Permission is hereby given to copy, adapt, and distribute this material as long as this notice is included on all

such materials and the materials are not sold, licensed, or otherwise distributed for commercial gain.

5 Chapter 3: Measure Twice Cut Once: Upstream Prerequisites

Checklist: Requirements

The requirements checklist contains a list of questions to ask yourself about your project"s requirements.

This book doesn"t tell you how to do good requirements development, and the list won"t tell you how to do

one either. Use the list as a sanity check at construction time to determine how solid the ground that you"re

standing on is—where you are on the requirements Richter scale.

Not all of the checklist questions will apply to your project. If you"re working on an informal project,

you"ll find some that you don"t even need to think about. You"ll find others that you need to think about

but don"t need to answer formally. If you"re working on a large, formal project, however, you may need to

consider every one.

Specific Functional Requirements

?Are all the inputs to the system specified, including their source, accuracy, range of values, and fre-

quency?

?Are all the outputs from the system specified, including their destination, accuracy, range of values,

frequency, and format? ?Are all output formats specified for web pages, reports, and so on? ?Are all the external hardware and software interfaces specified? ?Are all the external communication interfaces specified, including handshaking, error-checking, and communication protocols? ?Are all the tasks the user wants to perform specified? ?Is the data used in each task and the data resulting from each task specified?

Specific Non-Functional (Quality) Requirements

?Is the expected response time, from the user"s point of view,specified for all necessary operations?

?Are other timing considerations specified, such as processing time, data-transfer rate, and system throughput? ?Is the level of security specified?

?Is the reliability specified, including the consequences ofsoftware failure, the vital information that

needs to be protected from failure, and the strategy for error detection and recovery? ?Is maximum memory specified? ?Is the maximum storage specified?

?Is the maintainability of the system specified, including its ability to adapt to changes in specific func-

tionality, changes in the operating environment, and changes in its interfaces with other software? ?Is the definition of success included? Of failure?

This material is copied and/or adapted from the Code Complete 2 Website atcc2e.com. This material is Copyrightc?1993-2004

Steven C. McConnell. Permission is hereby given to copy, adapt, and distribute this material as long as this notice is included on all

quotesdbs_dbs14.pdfusesText_20
[PDF] pdf code of ethics

[PDF] pdf code of ethics for professional teachers

[PDF] pdf code penal

[PDF] pdf combiner

[PDF] pdf concurrency in go

[PDF] pdf creator online free download

[PDF] pdf creator online from images

[PDF] pdf creator online from jpg

[PDF] pdf creator online gratis

[PDF] pdf creator online kostenlos

[PDF] pdf creator online merge

[PDF] pdf css

[PDF] pdf doc

[PDF] pdf download

[PDF] pdf drive review