Object-Oriented Concepts Survey

This is the survey that was run during March-June of 2009. Some formatting and presentation has been changed for readability but the questions themselves are unchanged.

--! Give us 10 min and we will make sure your voice is heard (or... help us shake the dust off the traditionalist researchers) !--

!All answers will be treated anonymously!

PURPOSE: Research into Object Oriented concepts to figure out how research and education can be improved based on reality. All data collected will be made OPEN SOURCE once analyzed (and totally anonymized!).

RESPONSIBLES: Tony Gorschek (Blekinge Inst. of Tech., SWEDEN) and Ewan Tempero (Auckland Univ., NEW ZEALAND).

WHY YOU SHOULD BOTHER: We are researchers in Software Engineering trying to explain why the theory of Object Oriented Development does not correspond to Practice. We want to figure out how we can improve research and education to better reflect reality. The application of this may be the development of better and more usabable and useful tools, programming languages, and education.

For this we need your help.

To keep the survey short, we've simplified some of the responses so we realise there may be cases where you don't like any that we offer, but please pick the response that best fits the spirit of the questionnaire. Please only choose "I don't know what you mean"-type answers if you really don't know what the question is on about. Feel free to use the provided textboxes to explain your choice (this will help us a lot).


Part 1

Q1
What style of development have you primarily worked with and for how long? (Choose values for both options)
Open source
Closed source
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).

123456
1. Making design decisions to make it easier to understand the code.
2. Making design decisions to make the code faster.
3. Making design decisions to make it harder to hack into systems (external intrusion).
4. Making design decisions to make it harder to change code.
5. Making design decisions to make it easier to test code.
6. Doing what the professor/school/class told me to do.
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: