What's New

Return to this page for the latest information on CSCI 5828.

Final Update to Grades Page

The Grades page has been updated one last time to reflect the grades of all CAETE students who completed project 4, project 5 & homework 6. I hope you all enjoyed the class and have a great summer!

Grades Update

I've updated the Grades page with a few new grades as assignments start to trickle in from CAETE students. I will be working on final grades for in-class students tomorrow and will make an announcement here once I have submitted them.

Project 5 Grades

The grades for Project 5 for the eight teams that presented today during lecture have now been posted. I will work on final grades for the class once I have received submissions from those CAETE students that were keeping to in-class deadlines. I will post another announcement here once I have submitted final grades to the registrar's office.

I really enjoyed today's presentations.... kudos for the high-quality work and sticking to the presentation schedule!

Project 4 Grades

The Grades page has been updated to reflect the grades assigned to project 4 submissions.

Project Presentations

We have 8 teams that need to present and 75 minutes of lecture time. As a result, please keep your presentation to 10 minutes and be prepared to switch quickly between presentations. We will overrun our lecture time but if we act efficiently we can be done and be out of the studio before the next class starts at 3:30 PM.

To keep us on track, I'd like to follow this schedule:

Presentation 1: Flemming & Kooh

Presentation 2: Roberts, Mackey & White

Presentation 3: Allred & Knappe

Presentation 4: Khan, Pfeiffer, Yan & Zheng

Presentation 5: Beldyk, Gonzales, Gonzalez & Novinger

Presentation 6: Iyer, Noor, Philipose & Sundaravel

Presentation 7: Grosshans, Hammuda & Wichiencharoen

Presentation 8: Haller

In addition, I will present two signals during a talk: one at 8 minutes into a presentation that will indicate that a member of the next team should get up and move to the front of the stage; that will be a signal to the current presenters that they will need to wrap up their presentation. The second signal at roughly 9 minutes 30 seconds into a presentation that will indicate that its time to swap laptops for the next presentation. The current presenters can use those 30 seconds to answer questions while the next team sets-up.

Please work with me to ensure that tomorrow's session runs smoothly and that all teams get a chance to present!

Project Grading Update

I was unable to work on Project 4 last Friday as advertised. As a result, I will be sequestering myself tomorrow and grading all project 4 submissions. I'll update the Grades page once I'm done and you'll be able to come to class on Thursday with a good idea of your overall score for the semester. FYI.

Grades for Homework 5 and 6

I've updated the Grades page with scores for homework 5 and 6. If you missed points on Homework 5, the grader should be contacting you soon with feedback on how you lost those points.

Example Code for Lecture 26

Example Code for Lecture 26

Lectures 26 and 27

Lecture 26 and Lecture 27 are now available on the Lectures page.

Project 5

Project 5 is now available on the Assignments page.

Homework 6

Homework 6 is now available on the Assignments page.

Major Update to Grades Page

The Grades page has now been updated to reflect scores for Project 3. I will be grading Project 4 tomorrow. I've also added placeholders for Homework 5 and Project 5. The grader is currently working on Homework 5 and I'll post those grades when they become available. Next up, I will post details on Homework 6 and Project 5 and then switch my attention to finishing today's lecture!

Lecture 25

Slides for Lecture 25 are now available.

Homework 4 Grades

I have received grades for homework 4 on all save two assignments. I have updated the Grades page to reflect these new scores. I will update it once again as soon as I get the grades for the last two assignments.

Lecture 24

Slides for lecture 24 are now available.

Updated Grades

I have updated the Grades page in two ways today:

First, I tracked down some missing homework 4 assignments. CU has been blocking e-mail messages that have .zip attachments. In their infinite wisdom, they do not inform recipients that mail is being deleted, it just vanishes into the bit bucket. As a result, I'll be able to discuss homework 4 in lecture tomorrow.

Second, I've bumped the value of "Plus" reviews to .75 points to give them a bit more weight than check reviews.

In other news, Review 7 should appear by the end of this week.

Lecture 23

The slides for lecture 23 are now available.

Quick Update on Homework 5

When I originally posted Homework 5, I incorrectly referenced problem "6.1". It should have said "6.2" and has since been corrected. My apologies for any confusion.

Homework 5

Homework 5 is now available.

Project 4

Details for Project 4 (Iteration 2) are now available.

SE Concerns: Testing Tools: Selenium

Both the grader and a student in class pointed me to this testing tool:

Selenium: it is useful for performance testing a Web application.

Here are two articles discussing it: for and against

Another testing tool, this time focusing on Databases, is called dbunit. According to the student who sent me the pointer, it allows you to wrap unit tests in database transactions, but also to populate the database differently on a test by test basis and clean it up afterwards.

Finally, Junit 4 has adopted a different way to indicate test cases that makes use of Java annotations.

SE Concerns: Article on Testing in Agile Environments

A student sent me the following pointer to a for-pay article on exploratory testing in agile environments:

The benefits of exploratory testing in agile environments

FYI. Note: this article is not required for this class... just passing along the pointer.

Slight Change in Schedule

Just a quick heads-up: I am going to cover Chapter 8 from the concurrency textbook in Tuesday's lecture and will then cover Chapter 9 from Head First Software Development on Thursday. I will be posting details on Project 4 later tonight.

FCQs for CAETE Students

Heads-Up for CAETE Students: The Faculty Course Questionnaire for this class will be conducted on-line between Friday, April 17th and Mon, April 27th. You will receive a message on April 17th from FCQ_Office@Colorado.EDU that will contain a link and a code that you can use to access the on-line form and submit your feedback about this course.

If you do not get this message or it is hidden by your spam filter, you can go to:


and enter the last four digits of your student id to access the form.

I greatly value student feedback and spend time each semester reading the comments provided by my students via the FCQs from the previous semester.

In-Class Students: Your FCQs will be administered in class near the end of April. I will post a message looking for a volunteer to administer them once I nail down the specific date.

Lecture 22

The slides for Lecture 22 are available on the Lectures page.

Grades for Review 6

The grader has finished grading review 6 and is now working on Homework 4. The grades for Review 6 have now been posted on the Grades page.

Lectures 20 and 21

Slides for Lecture 20 and Lecture 21 are now available on the Lectures page.

Homework 2 Regrade Complete

I have finished regrading homework 2. The new scores have been posted on the Grades page.

Volunteers to View Research Prototype?

I have a masters student who is working on a thesis involving the use of ambient user-interface techniques in agile software development. In particular, he has built a lighting system (see below) that displays the values of various software metrics. As the developers make changes to their system that impact the value of these metrics, the lights change color to reflect the change. My student has integrated his lighting system with the set of tools provided by RallyDev.

My student would like to meet with a few students in this class to demonstrate his system and get your reactions and feedback. If you would like to volunteer to meet with him (it would take no more than 30 minutes of your time), send me mail and I'll put you in touch with him. I'm hoping that at least a few of the students on teams that are using RallyDev's tools for the semester project will be willing to meet with him. Thanks.

Lecture 19

The slides for Lecture 19 are now available on the Lectures page.

Project 2 Grades

I have now finished grading Project 2 and have updated the Grades page in response. I will now turn my attention to finishing the HW 2 re-grade.

Midterm Grades for CAETE Students

I have finished grading the midterm for CAETE students. The Grades page has been updated to show those scores. I am now turning my attention to the grading of all project-related assignments and hope to have that done by the end of the day. I will then turn my attention to finishing the re-grade of homework 2. I'll post updates as I complete each task.

With the CAETE students factored in, the stats for the midterm are: 33 students took the midterm. The lowest score was a 62. The highest score was a 97. The most common score (the mode) was an 92. The median score was an 87. The average score was an 85.6 with a standard deviation of 8.5.

More on Deadlock in 5.6

Of course, the best way to deal with a deadlock occurring in your Java program is to change your FSP to model the situation of multiple threads accessing the account and ensure that LTSA declares your model deadlock free. Then translate the model into Java and your Java program should be deadlock free.

Hint: if you're Java program is deadlocking on the conditions mentioned in my previous What's New post then you are not handling mutual exclusion on the account correctly. In particular, you don't a thread making its choice about whether to do a withdrawal or deposit before it knows what the balance is. What needs to be atomic in the system is learning the balance and then making a choice about whether you want to do a deposit or a withdrawal.

Deadlock in 5.6

If the program you are writing for question 5.6 is experiencing deadlock (for instance if all three of your customers decide to do a withdrawal when the account balance is zero or all three decide to do a deposit when the balance is MAX) you can do one of two things:

Change your program to eliminate the deadlock. For instance, add code that can cause a customer to change its mind about performing a withdrawal based on the current state of the system. Or add a thread that every now and then deposits money into the account (if the balance is zero) or takes money out of the account (if the balance is max).

Or, you can switch the architecture of your system such that you have at least one thread that always does withdrawals and one that always does deposits alongside the ones that randomly switch between making deposits and making withdrawals.

Its up to you, just make sure your system avoids these deadlock situations!

One More Grades Update

I have updated the Grades page with information on the received/not received status of review 6 and project 2.

Project 3

Details for the third part of the project are now available.

Need Team Evals

If you haven't sent in your team evaluations for Project 2, please do so now. "Teams" consisting of only one member do not need to send in an evaluation. :-)

Homework 3 Grades

Grades for Homework 3 are now available on the Grades page.

Status of Homework 2 Regrade

I have regraded roughly 13 of the Homework 2 assignments and sent updated scores to the relevant students. I will regrade the remainder of those assignments during Spring Break and will send updated scores to students as they become available.

Status of CAETE midterms

I have received five midterms from CAETE students and I'm waiting for two more. I will be receiving one of the two this week and I am trying to track down the other student now. I anticipate grading all of these midterms and reporting on their results during Spring Break.

Soup Example

Soup Example

Example Code that I demonstrated on Thursday for the Pot of Soup problem

Lecture 18

The slides for lecture 18 are now available on the Lectures page.

Pointers to other coordination/collaboration tools

In reviewing the Project 1 assignments, a few other tools surfaced that can be used for coordinating small teams:

Unfuddle: http://unfuddle.com/

Fogbugz: http://www.fogcreek.com/FogBugz/

Jude Allred has informed me that Fogbugz is free for student projects. Simply create an account and then send them an e-mail indicating that your account is being used to manage a project for this class.

Review 5 Grades

Grades for Review 5 have now been posted. Hope to post grades for Homework 3 by Monday.

Changed Due Date for Project 2 Assignment

I have officially updated the due dates for the Project 2 assignment, as discussed yesterday during lecture.

Review 6 and Homework 4

Review 6 and Homework 4 are now available on the Assignments page.

Follow-Up to Tuesday's Lecture

FYI: Google will not allow me to post the slides for Jim McMaster's talk yesterday. Jim sent me a few pointers that point to additional material on Test-Driven Design.

First: Dave Astels book: http://www.amazon.com/Test-Driven-Development-Practical-Guide-Coad/dp/0131016490

Second: A talk that Dave Astel gave on something called Behavior-Driven Development:

I hope you enjoyed Jim's talk and thanks to Jude Allred for making the connection and inviting Jim to speak to us!

Project 1 Grades

I have updated the grades page with the grades for Project 1 for teams made up of in-class students. All of the in-class project ideas have been approved. I will upload the details of the Project 2 assignment later tonight or early tomorrow morning. Stay tuned!

Midterm Grades

I was able to process the individual grades quicker than I thought. The grades page now shows the results for those people who took the midterm yesterday. If there is a "0" in your row for the midterm that simply means "not received". I will discuss the midterm tomorrow in lecture and will review the grading for homework 2 on Friday.

Midterm Results

The grader and I have finished grading the midterm. I will post individual results later tonight on the grades page. For now, I can provide the following summary information: 27 students took the midterm (24 in-class, 3 CAETE). The lowest score was a 62. The highest score was a 96. The most common score (the mode) was an 89. The median score was an 85. The average score was an 83.9 with a standard deviation of 8.8.

When the remaining CAETE students take the midterm, I will post updated numbers that reflect the performance of the entire class.

Midterm Heads Up

Hi. One of the questions on the midterm has the following two sentences in it:

… List two problems that it can help us to avoid in software development. If it’s easier, you can also state your answers in terms of the benefits this principle provides.

To avoid confusion on the test tomorrow, what these sentences imply is that you can either:

  • list two problems
  • OR list two benefits
  • OR list one problem and one benefit

Now all you have to do is figure out what principle I'm talking about! ☺

Reminder: Midterm Tomorrow

The midterm will be held tomorrow, March 3rd, in lecture from 2 PM to 3:15 PM. If you normally skip lecture, I would recommend NOT doing that tomorrow. ☺

Just so you can read and absorb them, here are the instructions printed on the front of the exam:

Print your name above; then read and sign the honor code statement.

Note: This is a closed book, closed notes test.

I recommend that you read the ENTIRE test BEFORE you start answering questions. If you have concerns about a particular question, please come forward to Professor Anderson for clarification.

CAETE STUDENTS: Since you will not be able to ask for clarifications, you should indicate on your test where you had questions and then indicate the interpretation you used to answer the question. Within reason, I will attempt to take your interpretations into consideration when grading your exam.

Be sure to write your answers as succinctly as possible. Having said that, if you need more room to answer a question feel free to use the back of the page it’s printed on. Don’t waste time writing a long answer to a question you don’t know, hoping to get partial credit. Finish all of the questions you can answer with confidence first; then work on answers to the questions you are unsure of.

Above all, DON’T PANIC and good luck!

The big lesson here is time management. You need to make sure tha you allocate enough time to answer each question. Do not make the mistake of working on one question too long and ignoring other questions. Each question will indicate how many points it is worth; you can use that information to guide how you divide your time among the questions.

CAETE STUDENTS: I will give CAETE the exam tomorrow morning. For those of you that have a designated test proctor, the exam will be sent to them tomorrow. You have until Tuesday, March 10th to take the exam. Your test proctor should fax the exam to me and then mail the hardcopy to me using the address that will be listed on the form that accompanies the exam. They should then send me e-mail to notify me that the exam is on its way.

There are several CAETE students who have made other arrangements with me that will not follow the process above. If you've previously contacted me about the midterm, please follow the plan we agreed to.

Best of luck to all of you tomorrow!

P.S. Because some CAETE students won't be taking the exam until Tuesday, March 10th, I will NOT be uploading Thursdays lecture (where the midterm will be discussed) until after I've received all of the exams from CAETE students. FYI.

SE Concerns: 10 Papers Every Programmer Should Read

Take a look at this article that points at some classic papers from the SE literature:

10 Papers Every Programmer Should Read


Review 4 Grades

Review 4 grades are now available along with a few grades for older reviews and homeworks for the CAETE students that are taking the traditional "one week behind" approach to this class.

Office Hours on Monday

Hi. I will be holding office hours tomorrow in ECCS 111 to allow students to come and ask questions concerning the midterm from 9 AM to 10:45 AM and from 12 PM to 1 PM. If you can't stop by then send me questions via e-mail and I will do my best to answer them in a timely fashion. Note: please come with specific questions to make the time productive and note that I will NOT be answering questions concerning the re-grading of HW 2, as I won't be able to spend any time on that issue until Friday, March 6th. Thanks!

SE Concerns: Other development blogs

One of our in-class students, Matt Beldyk, sent in a few pointers to development-related blogs that he follows.

First, his own: http://blog.otterpa.ws/.

Then two perl-related aggregators:

Finally, two project-specific blogs

Thanks Matt!

Alphabet Extension Example

On Thursday, I presented a short example to demonstrate the effects of alphabet extension on the composition of two FSP processes. A student asked me to post that FSP. Here it is:

range T = 0..50
set VarCoins = {in.coin[T], out.coin[T]}
COINTRACKER = (in.coin[5] -> out.coin[10] -> COINTRACKER).
TROUBLEMAKER = (in.coin[5] -> CHOICE),
CHOICE = (out.coin[10] -> TROUBLEMAKER |
          out.coin[15] -> TROUBLEMAKER).
COINTRACKER2 = (in.coin[5] -> out.coin[10] -> COINTRACKER2) + VarCoins.

Project 1

The first assignment for the semester project is now available on the Assignments page.

You will be contacted (or have already been contacted) about joining a google group to help facilitate the team creation process. If you have questions about any of this, let me know!

Grades for Homework 2: Now Complete

Okay, thanks to the hard work of the grader, I now have all the grades for Homework 2 posted. We will discuss that assignment in lecture tomorrow.

Grades for Homework 2

Grades for Homework 2 for most students have been posted. There are a few students whose assignments have not yet been graded yet. As soon as I have those grades from the grader, I will post them here (so, if your grade is listed as zero, please don't send me mail, we'll have your grade posted soon). The grader will be sending you feedback once again, so you can get insight into your score, and I will review homework 2 tomorrow during lecture.

Lecture 13: Subversion Demo Script Explanation

The previous entry contains a pointer to the script I used today to give the subversion demo in lecture. Feel free to use it to try out subversion on your own machine if you have little or no experience working with subversion. You will need to modify the start of the file:/// URLs but should otherwise be able to use the script as is.

Lecture 13: Subversion Demo Script

Lecture 13: Subversion Demo Script

Visual Source Safe: I Stand Corrected

Today, in Lecture 13, I mentioned Microsoft's Visual Source Safe as being a configuration management solution for the Windows platform. I received a message from one of our students (who works for Microsoft) disabusing me of that notion:

Noticed you had Source Safe as the Microsoft source control product. Source Safe hasn't really been used as a source control for Microsoft for a while now. I don't think it's even supported. TFS is the primary system (specifically Team Foundation Version Control) for source control now. Microsoft product teams use 2 main source control systems. TFS mentioned above and an internally developed system called Source Depot.

If you ask anybody familiar with Source Safe, they cringe...including me :)

Thanks for the correction!

Lecture 13

Lecture 13 is now available on the Lectures page.

SE Concerns: Top 25 SE papers in IEEE Software

IEEE Software, a top SE journal, has released its picks for the top 25 papers that have appeared in its pages over its 25 years of publication. Three of the papers are available for free for all comers until March 31st. However, as students, as long as you are logged into the campus VPN, you should be able to access all of these papers in the IEEE digital library. Enjoy!

SE Concerns: Talking about Design

Daring Fireball has a great article today that touches on interesting issues related to the design of desktop-based applications. Daring Fireball is an example of an interesting blog written by a software developer (or in John Gruber's case former software developer). I find that one of the best ways to stay on top of issues facing software engineering is to find great software developers who are also great writers and subscribe to their blogs. Here are some of the development-related blogs that I follow in addition to Daring Fireball:

ongoing by Tim Bray

scripting news by Dave Winer

Surfin' Safari by Dave Hyatt

Joel on Software by Joel Spolsky

Loud Thinking by David Heinemeier Hansson

inessential by Brent Simmons

Please let me know what developer blogs you follow and I'll collect all the recommendations I receive and post them in a future What' New post.


Lecture 12

Lecture 12 is now available on the Lectures page.

SE Concerns: Faculty Blog on Web Apps and the Semantic Web

I just learned that a fellow faculty member, Roger King, is working on his own blog covering topics related to the Semantic Web and new Web Application technologies (RSS Feed). We may spend one or two lectures at the end of this semester looking at the topic of Web Engineering and how it compares to traditional and agile software development.

SE Concerns: First Multi-Core Mobile Platform Announced

SE Concerns: Different SE Approaches in the Mobile Space

Tim Bray, co-inventor of XML and Director of Web Technologies at Sun Microsystems, has a great article on the competition that is currently playing out between different software engineering approaches in the Mobile application development space. Check it out!

SE Concerns: Good Enough Design at Google

One of our students forwarded me an article on Google's use of "beta" applications and its process for deciding when to "pull the plug" on a project. He thought it complements the discussion of "good enough" vs. "perfect" design as covered in Chapter 5 of our Head First Software Development textbook.

The article is located here:

How Google Decides to Pull the Plug

Key Quote:

Perfection closes off the process,” Mr. Jarvis said. “It makes you deaf. Google purposefully puts out imperfect and unfinished products and says: ‘Help us finish them. What do you think of them?’

Homework 3 and Review 5

Homework 3 and Review 5 are now available.

Lecture 11

Lecture 11 is now available on the Lectures page.

Grades for Homework 1

I've posted the grades for homework 1 and have slightly updated the format of the grades page. For homework 2, if you're grade currently reads as "-1", that simply means "not received". A zero in the homeworks table will typically represent "received" until the grades for that particular assignment have been posted. (Some CAETE students will be behind the rest of the class in terms of when their grades get posted.)

The grader for this class, Chris Baker, will be sending out feedback on Homework 1 later today.

Lectures 9 and 10

I discovered a problem with Lecture 9 and so uploaded it to the website again. And, I have added the slides to Lecture 10 as well. Both can be found on the Lectures page as usual.

Lecture 9

Lecture 9 is now available on the Lectures page.

SE Concerns: Scaling Facebook to 140 Million Users

Interesting discussion on Slashdot about dealing with issues of scale: Facebook currently has 140 million users and has been adding 600,000 new users a day. The article points to a post by the Facebook engineering team on things they've been doing to keep up with millions of users pounding their systems.

SE Concerns: Intel's 8-Core Xeon

As I've mentioned in class, multi-core computers will soon be everywhere. Here's an article on Ars Technica about Intel's forthcoming 8-core, 16 thread, 64-bit Xeon processor.

SE Concerns: Infrastructure for Modern Web Sites

In another example of how software engineering is concerned with issues of scale, check out this article that inventories the infrastructure needed for large-scale web sites. Here's an additional blog post from a developer who works on such a site about some of the tradeoffs that occur in achieving such infrastructure.

SE Concerns: Google Sorts a Petabyte

In an example of how software engineering is concerned with issues of scale: here's a blog post by Google that talks about how they used MapReduce (something will talk about later in the semester) to sort 1 petabyte of data. They first report on how long it takes them to sort 1 TB of data: 68 seconds. They then moved on to sort a petabyte (1000 terabytes) of data that was divided into 10 trillion 100-byte records: using 4000 computers they sorted that amount of data in six hours and two minutes. Enjoy!

I Stand Corrected

In lecture, I've said several times that I wasn't aware of work being performed to scale agile techniques to large development organizations. This assertion was too tempting of a target for the universe to ignore and so yesterday I received in the mail a new book by Craig Larman and Bas Vodde entitled:

Scaling Lean & Agile Development: Thinking and Organizational Tools for Large-Scale Scrum

Click the link to check it out. I'm glad I was wrong!

Review 3 Grades

Grades for Review 3 are now available on the Grades page.

The grades page has changed to have an overview table, a homeworks table, and a reviews table. With this switch, it is now revealed that reviews earn extra credit points and that "checks" earn .25 extra credit points and "pluses" earn .5 extra credit points.

The overview table will eventually display your total points earned along with what percentage that score is with respect to the maximum number of points possible. Since reviews earn extra credit, it will be possible to have a percentage that is larger than 100%.

Currently, the percentage columns says "N/A" because the maximum number of points so far is zero and bad things happen when you try to divide by zero. Once homework 1 grades are posted, I'll be able to safely calculate the percentage.

Finally, the Grades page now features a timestamp at the bottom of the page that states the date and time when it was generated.

Let me know if you have any questions.

Estimation Techniques

I'm finding it difficult to include material on traditional software engineering estimation techniques while also covering the material from our software development textbook. As such, I'd like to direct students interested in this topic to the slides from Lectures 9 and 10 of the Spring 2008 version of this class. In particular, slides 41 to 65 contain pointers to a variety of estimation techniques and you can use the author names associated with those techniques to look up more information on each technique. This information is NOT required for this instance of 5828. FYI.

Lectures 7 and 8

Lectures 7 and 8 are now available on the Lectures page.

Review 4 and Homework 2

Review 4 and Homework 2 are now available on the Assignments page. Review 4 is due by midnight on Thursday of next week and Homework 2 is due by Monday of the week after next. (In other words, I'm giving you two weekends to work on Homework 2.)

Review 2 Grades

Grades for Review 2 are now available on the Grades page. As you will see, there are now columns for Review 3 and Homework 1. As these assignments have not been turned in, a zero in the Homework 1 column simply means "not received" or "not yet graded" if your the one student who has already submitted their work for that assignment. ☺

The Two Jeffs Respond

I received responses from both Jeff Magee and Jeff Kramer concerning the question raised in the previous entry. Both agreed that the two specifications are semantically identical and that the non-optimized LTS can be converted to the optimized version by asking LTSA to minimize the non-optimized version. To see this for yourself, fire up LTSA and enter the first FSP specification:

const N = 1
SUM = (in[a:0..N][b:0..N] -> out[a+b] -> SUM).

As we saw last time, this spec produces this LTS:

Snapz Pro X001

Now click the minimize button, as shown below.


LTSA will minimize the LTS and it will now look exactly like the LTS produced by this specification (see previous entry for details):

const N = 1
SUM = (in[a:0..N][b:0..N] -> TOTAL[a+b]),
TOTAL[s:0..2*N] = (out[s] -> SUM).

Now for the responses. Here is what Jeff Magee had to say:

Hi Ken,

The compiler does not guarantee to produce minimal LTSs. In the second case as the states are declared explicitly, there is only one state generated for both 0+1 and 1+0. In the first case, a state for each state is implicitly generated. Minimizing the first LTS will return the second, so as you note, they are exactly equivalent.



And, here is what Jeff Kramer said in his reply:

Hi Ken,

This is just the way that the FSP is compiled and in the first case, without knowledge of the semantics of +, a+b might not be the same as b+a, whereas in the second case the state is first computed and becomes s.

The first case can simply be minimised to produce the second as they are observationally equivalent.

Best wishes


In interpreting their response, the second FSP is explicitly defining a destination state as represented by the TOTAL process. So, LTSA computes the explicit state that will be reached when control transfers to TOTAL and is able to determine at compile time that the in[0][1] and in[1][0] actions both go to the same state. In the first specification, it makes no assumptions about the semantics of the addition operation and so conservatively generates different states for in[0][1] and in[1][0] leading to the non-optimal LTS that we saw above. Once we invoke the minimize operation, it then looks at the state machine more closely and realizes that two of the states in the non-optimal LTS have the same semantic meaning and collapses those states into a single state producing the optimzed (or rather, minimal) LTS.

Hope this helps and thanks very much to the student who asked the question that led to this discussion!

More Than One Way to Skin a Cat…

Be aware that LTSA is fickle and will sometimes choose to create different LTSs for FSP specifications that semantically are the same. A very perceptive student discovered this and sent me an e-mail pointing out that this FSP specification:

const N = 1
SUM = (in[a:0..N][b:0..N] -> out[a+b] -> SUM).

produces the following LTS:

Snapz Pro X001

While this FSP specification:

const N = 1
SUM = (in[a:0..N][b:0..N] -> TOTAL[a+b]),
TOTAL[s:0..2*N] = (out[s] -> SUM).

produces the following LTS:

Snapz Pro X003

Despite the different structure of the two LTSs, note that their alphabets are equivalent and the produce the same set of traces. As a resul, they are semantically equal and you should not worry about the fact that these two specifications produce slightly different LTSs.

Note: I am curious too, so I've sent a message to the two Jeffs and I'll be sure to post any response I get from them concerning this issue.

Review 3

Review 3 is now available at the Assignments page.

Homework 1

Homework 1 is now available on the Assignments page.

Lecture 6

Lecture 6 is now available on the Lectures page.

Lecture 5

Lecture 5 is now available on the Lectures page.


I have added a Grades page to the website showing the grades for Review 1. The table on that page is indexed by a mysterious attribute called Id.

To calculate your Id for this class, use the following procedure.

  1. Start with your CU student id, for example "999-99-0234".
  2. Take the last four digits, e.g. "0234".
  3. Convert to an integer and think of that number as tmp, e.g. 234
  4. Take your last name and make it a lower case string, for example, "anderson".
  5. Convert each letter of your name into a number, a == 1, b == 2, … z == 26.
  6. Sum up the numbers of your name and think of that number as sum, for example, the sum of "anderson" is: 90.
  7. Add sum and tmp together to compute your Id for this class.

If you do this calculation and do not find your Id in the grades table, contact me and we'll make sure that we both used the same input into the algorithm.

Review 2

Review 2 is now available on the Assignments page.

Lecture 4

Lecture 4 is now available on the Lectures page.

College Awards

I've been asked by the Dean's Office to remind students of two upcoming opportunities to nominate your favorite staff advisor and faculty member to receive a college level award. Details are located here:


Where's Review 2?

I fell down on the task of creating review 2 yesterday. As a result, I've decided to release it tomorrow and will push its due date back into next week. Stay tuned!

Lecture 3

Lecture 3 is now available on the Lectures page.

Lecture 2

The slides for lecture 2 are now available on the lectures page.

Kenneth M. Anderson, 2009