Instructions
All questions are worth 1 point.
The exam is worth 20 points. Put your name, student ID, and question sheet
number on your blue books. Return your
question sheet. Put all the answers in order in your exam book(s). If you want to
go back to a question later, leave a blank page for it.
1. Define these two methods of integration testing: top
down, and big bang. (1/2 point each.)
Top-down: First put together the
top-most (main) pieces of the software. Test these as a set. Will involve the
use of stubs. Then integrate the 2nd highest level of routines. Test
the (larger) resulting set. Continue to add more routines, highest first,
testing as you go.
Big bang: Integrate all pieces of
the software at once. Then start testing. This is generally a bad idea.
2. State two reasons why global variables usually are
discouraged. (1/2 point each.)
It is hard to keep track of which routines are changing them or using them.
Changing a piece of global data can cause a bug in an unpredictable place, or in multiple places.
It is hard to tell how many inputs and outputs a routine actually has, because there are more than stated in the parameter list.
3. State two problems with complex, tricky programming
style. (1/2 point each.)
Complex solutions usually aren’t as fast as simple solutions.
It is harder to find and fix bugs in complex code.
It is hard for the next programmer (including yourself) to understand the code later.
4. Why do we care about dependencies between various items in a software project configuration?
We want to keep the entire set of project documents in sync with each other.
Or
When we change one part of a project, we want to know which other parts need to change.
Or
If we change the functional specification, we want to find the design specifications that relate to this feature and change those designs also. Then we want to change the code that relates to this new design. Etc.
5. Give three tips for good technical writing. (1/2 point
for 2 answers, 1 point for 3 answers.)
Decide who the audience is, and stick with it as you write.
Use a clear, easy-to-follow organization, and stick with it as you write.
Start with a general discussion, then get specific. This applies to the overall organization, within each chapter, and within each paragraph.
Use plain English. Use simple words and sentences.
6. What type of project risks should you definitely not worry about or try to solve? (I am looking for a general description, not details of specific risks.)
Risks that are unlikely to happen, and the consequence would not be bad.
7. Name two reasons why there is not more software re-use. (1/2 point each.)
Not everything is reusable. Solutions in one
domain may not apply elsewhere.
Software processes must be overhauled.
Repository (re-use library) lag.
Developers must adjust programming style and
learn new tools.
Mistrust of foreign code. (The not-invented-here
syndrome.)
8. List 3 of the differences between a software design that
is “right” and a design that works”.
(1/2 point for 2 answers, 1 point for 3 answers.)
Cleaner, simpler, more maintainable, easier to fix, easier to extend, scalable, smaller, form follows function, beautiful, matches the problem.
9. Name 3 advantages of using and maintaining a project
tracking system, like Microsoft Project. (1/2 point for 2 answers, 1 point for
3 answers.)
You know where the project really is (50% done versus 90% done).
You can use resources efficiently (resource leveling).
You can track planned progress versus actual progress.
You can adjust your plan better when something changes or goes wrong.
10. According to Fred Brooks (Mythical Man Month), what are 2 reasons that adding people to a late software project make it later? (1/2 point each.)
Must train new programmers (which takes time from current programmers).
More programmers means more communication paths for everyone, even after training.
More pieces of the program means more interfaces between the program units, and that increases complexity.
11. Name 3 advantages to an organization that operates at a high level of CMM “maturity” versus an organization at a lower level. (1/2 point for 2 answers, 1 point for 3 answers.)
More accurate time and money estimates for projects.
Ability to quantify their results and improvements.
Continuous improvement.
Public recognition for being at a higher level.
Better response to a crisis (can handle it in stride).
Able to continue smoothly when key people leave.
12. According to Eric Raymond, debugging of open source projects is easier/harder than traditional software projects? Why?
He says that debugging is easier
with the open source model.
Reasons: Given enough eyeballs all
bugs are shallow. Debugging is parallelizable. Someone can find a problem, and
someone else can fix it. With hundreds or thousands of debuggers, every problem
will be simple and obvious to someone.
13. What is the key difference between the linear-sequential (waterfall) model of software development, and the evolutionary (spiral) model?
Waterfall – every phase of development is done one time.
Spiral – every phase of development is done multiple times.
14. Name the 3 tiers in the 3-teir web development model? (1/2 point for 2 answers, 1 point for 3 answers.)
Browser, web server, and database.
Or
User interface/presentation, application/business logic, data access
15. Which part of Linux is supplied by Linus Torvalds. Where did the rest of Linux come from? (1/2 point each.)
Kernel
GNU, or Richard Stallman, or Free Software Foundation.
16. How does function point counting handle the fact that software projects of the same size can vary widely in difficulty?
There are several adjustment factors (multipliers) that are applied to the raw function point count.
17. What are alpha testing and beta testing? (1/2 point each.)
Alpha testing – complete system testing by the development group, or another group close to the development team.
Beta testing – real world testing, by a group of real users outside of the development organization.
18. What are two arguments against licensing of software engineers? (1/2 point each.)
Would stifle innovation.
The required body of knowledge for software engineers is constantly changing; would not be able to create a meaningful test.
Would not practically work; the demand for programming is too high. Business would not put up with it.
19. What is the key difference between system engineering and software requirements engineering?
System engineering – Planning (or designing) a complete business (or organizational) system, part of which may involve software.
Software requirements engineering -- Planning (or designing) the feature set of just the software portion of a business (or organizational) system.
20. What is code forking? When is it bad?
Making two (or more) versions of a single program (or part of a program). The versions are then developed side-by-side in parallel.
This is OK if the fork is short-lived and solves a short-term problem. It is bad when the forks continue for a long time or create market confusion. Example – all the versions of Unix over the last 20 years.