Sunday, January 28, 2007

I had my first study group meeting today. Two others joined me in talking over the section I just went through. Concurrency. I did get one piece of information out of it. The four pre-conditions to deadlock. I need to return back and look at these.

One of the guys today is not technical. I think that I scared him pretty good. I was talking about this section and he hung back and did not interject. I think that he is in trouble. We will see how he does.

The other guy was a bit sure of himself. I put out the information and this guy attached it. He offered up some argument but did not have much to add.

I thought that it was a good session. I don`t think that I learned much new information. I did get one piece to review. I am off this week and will try to get more time with it. I plan to study the rest of the week. I got up this morning at regular time 4:30 am to study. Glad I did. My son woke up this morning at 5:30am sick. He doesn`t feel well. My wife has it too. Didn`t get much done after that. I hope that this is not reflective of the week. I will continue to get up at regular time and try to get through more material early in the morning. Just a defensive thing in case the work throughout the day is not productive.

Still unsure about this studying with these other guys. They seem to be farther back than I.

Thursday, January 25, 2007

I went back again to a previous answer I gave for a study guide question. The question asked about a task queue for thread pool. The question sounded like a general common sense question. Would you grow the queue for new requests, cancel old requests or cancel new requests? I originally thought that I had this one in the bag. But on further looking at it I made the leap to a thought of what does this question want to determine. In a 2003 test there were questions about policy strategies. One part of that question went like this: One strategy for implementing a buffer would be to use a pessimistic baulking strategy. I complained that the term did not exist anywhere. Baulking strategy did but the words together did not. Well it turns out that pessimistic is a class of strategies. It is the opposite of optimistic strategies. I wondered if the current question on thread pool task queue was about that....not the strategy but the area of study. I tend to think that it is. The strategies are not really what is important. The important idea here is to avoid state-dependent actions. The policies you use to do that are like the baulking strategies mentioned. The strategies are like: Inaction, Balking, Guarding, Provisional (pretending until it works), Rollback/Recovery, and retry. The reasons why you want to avoid state dependent actions are: "the client of the object must somehow know enough not to ask the object, in this instance the task queue, to perform actions when it is not in the right state, and/or must be prepared to deal with unannounced failure. Clients must be provided with enough information and control to carry this out." Sometimes you cannot determine this. For instance in the task queue example. Are you ever going to know every way the task queue could ever be used and what programs will be running concurrently in the future to know if the task queue should allocate based on some system state another thread for task execution? This may be user dependent...does the user want some level of performance or some level of throughput in our example. Do you know all users or situations? It is a magic happens here kind of case. So the state conditions become indeterminable. It is better to design a component like a queue that has a fixed number of tasks and reports failure simply because there are no more slots available in the queue. Let the client develop a strategy for handling failure like retry. That way we don`t get into an indeterminable situation like should the task queue grow, shrink or cancel old requests. The later takes policy in to the hands of the queue and takes it out of the hands of the client...making it less flexible.

Anyway, I think I have exhausted the question. My point is that the question is not straight forward. You have to be a mind reader to know what the tester is wanting from you. You may know this information but may not want to use it to effectively argue the question on the test. This kind of question is also context dependent. On a database exam or operating system exam the answer might be different. The sub-context of the question on the software engineering exam is concurrency. Because I don`t answer the question using the principals above is it wrong? I may say everything right, think that I would be right because the question uses the word "you", and still be wrong because it does not follow the grading script probably used to grade this test. Does every grader really expect an answer using the information above? How does this question get answered using opinion and be relevant?

Design inherently has trade-offs. Don`t ask me about design unless your a mind reader client and can take a state-dependent action to understand all the ways I might be used. In software engineering are`t we told in the information above to leave that up to the client...the test giver/grader/tester. Sounds like you might get back an unannounced failure because I am not in the right state. Suck it up and don`t design a candidacy test for failure.

Wednesday, January 24, 2007

I have gone back and looked again at some past test examples and am learning that I cannot count on phraseology of the exams. They don`t coincide with the sections in the reading material. You can never go to a section and expect to get the whole answer. It is probably spread over multiple parts of the book. You won`t be able to find what you are looking for by looking at the book index. Phrases from the questions are not in the index. A short paragraph in the book may not be represented in the index. Knowing related words and looking in those places will help but that is not the entire story. You have to go fishing. Fishing takes patients. If a term is not intuitively understood by reading the question you may not have the intuitive notion of how to start your search. There is no search engine where you are going. Depth-first, breadth-first, sequential search, binary search are your tools now. Choose wisely you me be at it for a while. I have heard that amassing knowledge is a big part of this PhD thing. I think that this is what they mean. It has nothing to do with how smart you are or how clever. It has every thing to do with how resourceful and lucky. God needs to be whispering to you about where to look. It is unfair but that is how it is. You have to get into the head of the test writer. Start now it will take a long time. If you choose another source rather than the reading list don`t get fooled by a term that is similar but different. Remember, a definition of deadlock has been on every test I have taken and all correct answers where context sensitive. Also, remember that a colloquial meaning, possibly of your university only, may be the one the test writer wants like "Equivalence Term Testing". Not even the authors of the literature on the reading list new what that one was. Start now.

Tuesday, January 23, 2007

Have not written in a few days. On Sunday I tried to meet for the first time with a study group. The meet from 9am to 1pm. 9-11 is for a different test. On Sunday they got together and a few members were not available. They ended up canceling but forgot to tell me. I tried to attend but entering the online meeting place continued to fail. I got a call later that evening from the coordinator but did not actually talk with him. I emailed him later.

At any rate, Our first meeting was to talk about concurrency and deadlock. I am finding that these terms have multiple meetings depending on context. If you get the context wrong you could end up with a definition that is not correct. That could be why I had a problem on the test. Deadlock has been a question on every test I have taken for the PhD, Database, Operation Systems and now Software Engineering. All the definitions are about the same principal but need to be written in the form of the question being ask. It looks like I have been writing a generic answer that does not fit what the authors of the test want. So, I will have to be more specific. For instance I should probably use the word thread rather than the word process in the definition. The term deadlock could be applied to both but in this instance thread is more tightly coupled with the context of the entire question on concurrency. I have developed a Java example of deadlock. This was pretty difficult actually. Java must have some stuff under the covers that does some deadlock avoidance. Resource ordering or token-based. In early Java books I see these things in implementation. In later books I do not. So it was difficult to get the timings. Maybe it is just a timing thing. The threads don`t yield to other threads often enough to demonstrate the problem in such a small program. I had to add sleeps etc. to make the deadlock easier to see and consistent in its failure.

So my lesson to learn hear is don`t take answers that you have already done for other exams. Re-do the questions with answers from the reading list. If you cannot find a term on the reading list then continue on to other book. Otherwise, you may end up with a to generic answer for the grader of the exam to give you credit.

One more thing, I have been looking at current exam study guides. It has been interesting to me to see answers pop into my head from 2003 exam study guides as I write answers to the questions on the 2005 study guides. One of the questions from the Fall 2003 study guide talks about baulking strategies. This was a question that I could not find when doing that exam study. I did find something about baulking recently. This one is tough to find. It is under monitors and not under deadlock or threads. I think that it is interesting to note that the authors of the books chose to put it under monitors but the authors of the test chose to put it in a question about threads and concurrency. They seem to be the same topic but are presented separately in my books. Now why is that? Well I have it now.

Good news, I was added to a patent that my company is doing. I have been involved with patents in the past. This is the first one that I think will actually be granted and have my name on it. I was in on the initial discussion and I think that I shaped the conversation about the patent. It turns out that they think that I did also. I have worked on the code for this project since the beginning. It is nice that someone thinks that I am also included in the group of people called the inventors.

For my study group I setup skype to call into the conference call. It worked great. I have a logitech microphone that has an on off button and I was able to make calls. 14.95 for a year of free calls to anyone in the US. Wow. It works well with my study process. I will be able to set at my workstation and listen/talk without holding up the phone line hear at the house. I have the ability to hold. I don`t have a callback number but also don`t need one. It works great.

Thursday, January 18, 2007

So I mailed the professor that teaches software testing about the question on the study guide about "Equivalence Term Testing". He had an answer he got from another student. It turns out that he is taking the same Software Engineering exam and had notes on the question. So I got my question answered. That brings me to the end of studying for the Testing section of the exam. Assuming that the test does not go off color like the question above I think that I will be able to handle the area`s covered by the study guide. As a side affect to contacting this professor I learned that he has a study group. This study group meets on Sundays which works out for me. I worked my way into the group. I hope that it turns out to be a good experience. It is only one day a week and I have been studying every day. I would not expect it to derail my plans. It just so happens that I mailed him an answer to the section being covered on Sunday. I think that that sealed the in for me into the group.

Saturday, January 13, 2007

Have a wedding to attend this weekend and won`t get much study done. I did get back and email from Cem Kaner. He is the author of the book on testing that is recommended in the software engineering reading list. In short he says that the question in the study guide has no basis because the terms are to widely used or not used at all as in the case of "Equivalence Term Testing". He suggested that I get local (My University) meanings of the terms. That says that these terms are not in his book. That says that I should look at the other paper mentioned. I know that these terms are not in that paper. Therefore, this question is designed for insiders. I don`t like that. More on this later.

Thursday, January 11, 2007

I found the information about "Mutation Analysis" in the original paper. The paper is called "Hints on Test Data Selection: Help for the Practicing". Programmer DeMillo, R.A. Lipton, R.J. Sayward, F.G. This paper appears in: Computer Publication Date: April 1978 Volume: 11, Issue: 4 On page(s): 34- 41 ISSN: 0018-9162 Posted online: 2006-07-06 09:21:47.0 I checked our library and because it is from 1978 we do not have it available. I put in a request for the paper but did not have a library ID number even though I can view the online version with my campus connect password. So I emailed the librarian asking for direction. I hope that this has the information I need. Even though I cannot read the actual paper yet. I wrote in my notes what I found in wikipedia. It seems complete but I want a more authoritative source. I really do believe that wikipedia has good data. I just want to make sure that the colloquial usage of this term is the same as the academic use of this term. I also found a paper with a definition of "Random Testing". It is different than my intuition. I did know about mapping of pseudo random numbers across the input domain. What I did`t know about was obtaining a reliability estimate by having the input distribution being across the expect software usage distribution rather than the entire domain of input. The expected software usage is call the "operational profile". The name of the paper is: "When only random testing will do." International Symposium on Software Testing and Analysis archive Proceedings of the 1st international workshop on Random testing table of contents Portland, Maine SESSION: Session 1 table of contents Pages: 1 - 9 Year of Publication: 2006 ISBN:1-59593-457-X I have a definition of Basis Paths Testing from a government publication called: "A Method to Determine a Basis Set of Paths to Perform Program Testing." J. Poole, "NISTIR 5737 A Method to Determine a Basis Set of Paths to Perform Program Testing", Department of Commerce, November, 1995. These have been much more help than the reading list. The reading list does not have these exact terms. For instance on page 136 of the book suggested in the reading list a section called "Random Inputs" describes something like "Random Testing" but never says "Random Testing and does not talk about the "Operational Profile". I have found stuff on "cyclomatic complexity" and "Equivalence Partitioning" but still no "Equivalence Term Testing".

Tuesday, January 09, 2007

Still looking through the Software Testing Section of the reading list and the associated sections of the pre-tests. I still have not found parts of the questions in readily available literature. The literature listed in the reading list does not address these terms either. I have read the papers listed and looked at the glossary of the books mentioned. I emailed the authors of the pieces of literature to make sure that I am not missing something. I would suspect that context does not necessarily clue you in to the meaning of the terms. See my rant on the last post. It was easy to find a historical document describing "cyclomatic complexity" at the SEI from the 70`s even though the term was misspelled in the question on the sample test. Sample tests are actually past tests given. I wonder if this misspelling was on those tests also. Because of my learning disability and my difficulty in reading I don`t often see misspellings. Not an issue for me...maybe for someone else. The problem for me is when I read something that is not there. So I look at this catch as a metric of how meticulous I am being about these documents. I still cannot find "basis paths", "Equivalence Term Testing" (not equivalence partitioning), or "Random Testing". These are terms that I have an intuitive notion about but don`t have a concrete place to look. This makes me very uneasy. If the test writers are not going to use common terms they could come up with anything on the test. If these are historical and have some significance to the university I sure cannot find them. I did find Equivalence partitioning (not the one I want "Equivalence Term Testing") and Mutation Analysis in wikipedia. I wish I had a more concrete source. Wikipedia has some very good documentation but they are still not considered authoritative. Why are these terms not in the literature reading list?

Sunday, January 07, 2007

I wrapped up the Metrics section of the reading list today. This brings and end to looking through the question given on the test that I found difficult to remember because of the way it was asked. I was not clued into the author`s names. At any rate I moved on to software testing. There are two pieces of literature mentioned in this section. The 2 pieces are a book called "Testing Computer Software" and a paper called "The Evaluation of Program-Based Software Test Data Adequacy Criteria". The paper is obtainable only through the ACM portal from the DePaul Library. If you have never used this before you will need to use your campus connect password. I had to get the paper for the section I just finished on Metrics using this method also. In the current section of study Software Testing the exam has a question that asks you to describe the weaknesses of three approaches and then asks you to answer a few questions about a small algorithm. It has been very frustrating to try and provide definitions for these approaches. ``Mutation Analysis`` seems to be something easily found but the other two, "Random Testing" and "Equivalence Term Testing", are more difficult. It seems that the paper and the book don`t use the exact terms as used in the test. In the test it even makes a note to not confuse "Equivalence Term Testing" with "Equivalence Partitioning". I find this very ugly. If you cannot find reference to the exact term how do you know that you are describing what the author of the test really wants? I have looked at the citations to the paper mentioned and it has several. I looked at the ones that are by the author. Since this paper is from June 1988 some of the citations are not listed on the ACM portal or on the IEEE portal. So I cannot even look back at what the author might have said in previous papers... maybe using the terms mentioned. Looking in the book I find that the terms are not in the glossary. I looked through a couple of the sections and did not find them either. I guess my plan at this point is to review the paper thoroughly. I will then browse the book and try and get something. Looking into parts of the question may get me through if this is one of the questions I have to answer on the test because of avoidance of one of the others. So, what in the hell is this supposed to teach me? Does the frustration of the way this question is worded teach or "TEST" anything. Why ask about a specific term if it is not the commonly used term? Because, if it was common you would be able to find it in many places, for instance you could google for it or find it in Wikipedia. I think that this kind of question really points to a problem in the way DePaul tests their PhD students. It is not that someone won`t be able to pass the test it is that DePaul won`t be able to test the people that they want for PhD`s.

Thursday, January 04, 2007

I have been looking at the paper `A Critique of Software Defect Prediction Models`. This is a paper mentioned in the reading list. It has been a good read. Since I was involved in the CMM effort at the Bank of America I can see many of the mistakes made then by reading this paper. Metrics about defect prediction are difficult. The unknown relationship between defects and failures makes this problem a pretty large one. The mistakes often made where ones I have seen being done at the Bank of America. The ones mentioned in the paper have all been done their. --the problems with `multivariate statistical approach, problems of using size and complexity metrics as sole predictors of defects, problems in statistical methodology and data quality, and false claims about software decomposition and the goldilock`s conjectures, are all problems exhibited in the Bank of America`s software process defect predictions. `Management by Fact` has a loose definition of the word `fact` in their process. At any rate I understand because this stuff is hard. One of the questions on the test is related to self experience with these problems. I think that I have the ammunition. I will just need to be ready to cover the right bullet points.

Tuesday, January 02, 2007

I have been eating to much. The holiday`s have kept me pretty stuffed. I have been going though the metrics part of the software engineering reading list. I have been through this part several times. I am going through it a bit more deeply this time. I have nearly read through the papers again an have been making notes along the way. One of the questions I missed on the exams was related to some author names in this section. I expect to be able to nail those questions this time around. I have the link to the authors names now in my memory. It should be easier to recall this information this time. This part of the present studying always stinks because it is painful for me to remember the memory of execution of the question on the past test and match it to the studied information prior to today, to late to exercise the previously learned information on the test that has already passed. I have this 20-20 hindsight problem frequently. The good part is new information gets linked in too.