Homework Assignment 8; CS 450

Part 1: Summarize program and process data for your cs450words program

You already have time information in your TIME_LOG file. Add some additional lines to record the following data regarding the development of your cs450words program.

LINES OF CODE

Report the total number of lines in your code (wc -l) and estimate the percentage of these that are comments. Report the total number of lines of documentation (README, DESIGN, CHANGE_LOG, TIME_LOG, BUG_LOG, etc.)

username TAB TOTAL_LINES TAB number
username TAB COMMENT_LINES TAB number
username TAB DOCUMENTATION_LINES TAB number

BUGS

username TAB BUGS_FOUND TAB number

PERFORMANCE

username TAB TIME_ON_STRESS TAB time in secords

Correctness

username TAB NUM_CORRECT_IN_CLASS_TEST_SUITE TAB number

Memory Usage

Report the memory used when running on the bible.txt (ideally the peak memory usage).

username TAB MEM_USAGE_MB TAB number

Confidence

Make a note about how confident you are in these numbers on a scale of 1-10 with 1 being made up out of thin air and 10 being painstackingly tracked.

username TAB CONFIDENCE TAB number

Part 2: Final submission

Here is a list of the files you should submit into your FINAL directory:
README - Should be well organized!! Someone completely unfamiliar with
         this project should get a clear idea of what is contained in
         all the other files. It should also give an overview for developers
	 of the purpose of the code, major design decisions (like data
	 strutures used, how a word is defined), the relationship of the 
	 source files, how to compile, major problems that remain (small
	 bugs go in the BUG_LOG but if there are major problems those
	 deserve a place in this top most file.
  
	 Think "what would I want to know if I was supposed to maintain/extend 
	 this code and I was seeing it for the first time".  Don't forget
	 simple things like your name and contact information. It should also
	 contain a bibliography/acknowlegements section. 

	 Describe how to compile for various
	 platforms, for testing, for debugging, for performance, ...

MANPAGE -Should describe clearly how to use the exectuable. You should 
         describe all command line options and give examples of use.
	 You should also define a words and give examples. Mention any 
	 major limitations.

	 It is ok if you repeat some information from other files -give the
	 *user* everything they need to know here. Don't make them
	 chase the other documentation.

	 It should also be well organized and easy to read!

Makefile - Don't forget to have a make clean that removes all .o's 
           the executable, core and any gprof files etc.

TIME_LOG - Should contain both per assignment data and cummultive data!
           Be sure to follow the requested format exactly!!!  

BUG_LOG -  Track bugs found and fixed. If you did not track as you
           went try to remember what bugs took you a while to find.
	   Come on, I know you all had some and that they did not
	   just occur on 9/15 :-)

CHANGE_LOG - Describe features of each version roughly 
           for each assignment (versions 1-6 ?)

TESTPLAN.username 
TESTING.WHITEBOX.username 
TEST_LOG
TUNING - Refer to homeworks for details on these files.

Source code        

Do not resubmit your testcases. The class test suite will serve as our final record of those submissions.

Go back over comments on your homeworks and comments to the class as a whole and incorporate changes into these files.

Part 3: Reflect the word count homework exercise as a whole

Write 2-3 page reflection/reaction. I'd like these submitted in hardcopy, but please also save it in your FINAL directory.

To get you started, I have set of questions.

In what ways was this repeating cs450words homework different from other programming assignments you've had?

What do you think is the most important thing you've learned from this repeating homework? Was it worth the trouble of revisiting the same assigment so many times?

Of the tools/techniques (coding techniques, debugging techniques, performance/testing tools, etc) that we learned in lab which were most helpful to you? Why? Do you think you will use them in the future?

What was the biggest difficulty you encountered? Do you see a pattern to the bugs or difficulties you encountered? Is there anything you wish you had done differently?

How successful were you at estimating the time it would take you to do various tasks? Would you have thought at the beginning that it would take as long as it did? Do you agree with Fred Brooks in the Mythical Man Month that it takes 3 times as long to produces a programming product than it does to produce a program?

What would you tell someone else taking the class about this repeating homework assigment?

Do you have suggestions for changes to the assignments? Things to cut out? Things to add?

Compare the project assignment to the homework assignments: Did you find one a better learning experience that the other? Why or why not? If you could, would you have done double the work on just one (which one) or would you have worked on both as we did?

OPTIONAL: Part 4: Porting

I would like you to test your code both under Solaris on crux and under Linux on the ITL machines. Make any modifcations necessary to make the code run both places. (Getting it to run on Windows would be another great exercise!)

You may be able to produce a single version of the code that will run both places. However, often when porting code between platforms (especially code that relies on special libraries or a non-standard system call interface), this is impossible. In cases like this, in order to maintain a single code base, developers often introduce conditional compilation information into their code. For example:

#ifdef SOLARIS
   code that works only on Solaris
#endif
#ifdef LINX
   code that works only on Linux
#endif
#ifdef WINDOWS
   code that works only on Windows
#endif

Such defines can be turned on and off in your Makefile. For example:

#PLATFORM=LINUX
PLATFORM=SOLARIS
CFLAGS=-D$PLATFORM  

This is a technique you can use if you find it necessary.

Create a file PORTING and describe any problems you ran into while porting your cs450words program and how you resolved them.

OPTIONAL Part 5: gnu wc

Are you curious about what a real production version of this program might look like? How similar/different from what we did?

I highly recommend that you take a look at GNU's word count program, wc . Even better download all of the GNU core utils (includes wc among other things)and try to build them and understand the wc code.

If you do download it, look for the test cases, the #defines, the argument processing. See if you can find the definition of a word.