Q1
What style of development have you primarily worked with and for how
long? (Choose values for both options)
Open source
0 years
1-3 years
4-8 years
9-12 years
13-15 years
16-20 years
20+ years
Closed source
0 years
1-3 years
4-8 years
9-12 years
13-15 years
16-20 years
20+ years
Q2
What Object-Oriented languages are you comfortable doing
professional development in? (Select all that apply)
C++
C#
Java
Smalltalk
Python
Delphi
Ruby
Other (please specify and separate each with a comma ",")
Q3
What Operating Systems are you comfortable doing professional
development in? (Select all that apply)
Windows (any versions)
MacOS (any versions)
Unix (any variants - Linux, xBSD, Solaris)
Other (please specify and separate each with a comma ",")
Q4
What type of development are you currently working with?
(Select all that apply)
Leased Consultancy (e.g. you sit at your
company's Customer site doingdevelopment for the customer).
Bespoke Development (Customer-Developer
relationship, e.g. where you develop product that are ordered/commissioned
by the customer but primarily sit at your company's site).
Off-the-shelf Products/Components Development
(e.g. mass-market products, for example games, end-user software).
Embedded/Bundles Software Development (e.g. your
software is a part of a larger product offering, for example a robot, a car
etc.)
Other (please specify).
Q5
What company/organization do you work for? (will only be used
by us to identify domain.)
Q6
What roles do you generally have in your work? (Select all that
apply.)
Requirements Engineering
Design
Testing
Architect
Programmer
Project Management
Quality Assurance
Other (please specify)
Q7
What is your highest level of qualification?
Professional development courses
Trade Certificate
Bachelors
Masters
PhD
None
What was your main area of study?
Part 2
Q8
Which of the following best describes your thinking when adding
a field to a class?
1. I always make it private (inaccessible outside the class).
2. I usually make it private.
3. I never make it private.
4. I don't think about it, I pick whatever is convenient.
5. I don't know what you mean/None of the options describe my thinking.
Please explain your answer:
Q9
Which of the following best describes your thinking when
providing access to fields?
1. I always provide "getters" and "setters".
2. I avoid "getters" and "setters" wherever possible.
3. I prefer to avoid "getters" and "setters" but will provide them rather than make large changes to avoid them.
4. I don't think about it.
5. I don't know what you mean.
Please explain your answer:
Q10
Which of the following best describes your thinking when
adding code to a class?
1. I always try to avoid adding references to classes that are not already being used by the class.
2. I make some attempt to avoid adding references to classes that are not already being used by the class.
3. I don't think about it.
4. I don't know what you mean.
Please explain your answer:
Q11
Which of the following best describes your thinking when
adding code to a class?
1. I only consider adding code that is clearly related to the services the class already provides.
2. I prefer to add code that is clearly related to the services the class already provides but will add less related code if it is more convenient.
3. I don't think about it.
4. I don't know what you mean.
Please explain your answer:
Q12
Rank the following statements according to how well they apply
to the theme of the questions in this part (this page – Q8-Q11).
Please explain your answer:
Part 3
Q13
When working on a class, how aware are you of the number of
methods it has?
I always try to determine how many methods a class has.
I will note classes that seem to have a lot of methods.
The number of methods is usually not relevant for me.
I don't think about it.
I don't know what you mean.
Please explain your answer:
Q14
What do you think is the largest number of methods a class should have?
(Choose one of the alternatives, and add a number in the textbox
that replaces "N" in the text of the alternative you chose.)
There should be never more than about N methods.
I try to avoid having more than about N methods in a class, but will
allow exceptions in extreme circumstances.
I prefer to avoid having more than N methods in a class but I am not
fanatical about it.
I don't really think about how many methods there are in a class but
prefer to avoid having classes with more than N methods.
I don't think there should be any limit on the number of methods in a
class.
Replace "N" with number of methods:
Q15
What is the motivation for your answer in Question 14 above?
Q16
What is the likelihood that you will refactor a class (to
create classes with fewer methods) if it has more methods than the
limit you chose in the question above?
Always.
Most of the time.
Only if it is obvious how to refactor the class.
Only if I have nothing else to do.
Only if someone forces me to.
Hardly ever.
Please explain your answer:
Q17
When working on a class, is its depth in the inheritance
hierarchy important to you?
I always try to determine how deep a class is.
I usually have a rough idea of the depth of a class.
It is not relevant for me.
I don't know what you mean.
Please explain your answer:
Q18
What do you think the maximum depth of a class should be in
the inheritance hierarchy?
(Choose one of the alternatives, and add a number in the textbox
that replaces "N" in the text of the alternative you chose.)
No class should be deeper than N.
I try to avoid having classes deeper than N but will allow it in
extreme circumstances.
I prefer not to have classes deeper than N but I am not fanatical
about it.
I don't really think about how deep classes are but probably would
avoid having them deeper than N.
I do not think there should be a limit to the depth of a class.
Replace "N" with depth of class:
Q19
What is the motivation for your answer in Question 18 above?
Q20
What is the likelihood that you will refactor the class
hierarchy (to reduce the maximum depth of classes) if there are
classes deeper than the limit you chose in the question above?
Always.
Most of the time.
Only if it is reasonably clear how to do the refactoring.
Only if I don't have anything else to do.
Only if someone forces me to.
Hardly ever.
Please explain your answer:
Q21
How does the depth of a class in the inheritance hierarchy
affect how easy to it is for you to use it?
I find classes that are very deep to be always noticeably more difficult
to use than those near the top of the hierarchy.
I find classes that are very deep to usually be more difficult to use
than those near the top but sometimes deep classes are no harder to use
than shallow ones.
I sometimes find classes that are very deep to be more difficult that
those near the top but usually there is not much difference.
I almost never notice the depth of a class as having any impact on how
difficult it is to use.
Please explain your answer:
Q22
When you write code, to what degree do you use design models
(e.g. UML diagrams) to guide you?
Never (0%).
Rarely (<10%).
Sometimes (<25%).
Less than half the time (<50%).
More than half the time (>=50%).
Much of the time (>75%).
Almost all of the time (>90%).
All the time (100%).
Please explain your answer: