I am interested in both subjects. I do not have much to say on it,
Software engineering/systems analysis covers an awful lot. For example software engineering could mean
1) high level systems design - i.e. designing a system for registrars office
2) project process - the steps from requirements specification to shipping
3) high level application design - design patterns and refactorings
Also the target audience could be
1) MIS people
2) CS theory people
3) application programmers
Also the target audience could have different types of students
1) existing application developers
2) technology managers
3) junior undergraduates
1. What textbooks to follow?
It depends on the type of course. For CS-geeks, the standard text for software engineering are the Wiley CS series books on design patterns and large scale software design. For more MIS, I don't know of a good textbook, since this field rapidly goes out of date. What would be a good mix are two textbooks that offer methodologies that are 180 degrees opposite.
The Mythic Man-Month is a must read classic.
2. How to evaluate students?
Mainly class participation. One gotcha is that if you are doing a course that is mainly coding you want *encourage* sharing of code, since that is the way things happen in real life. For anything involving coding, you should have peer code reviews, but it is important **not** to make code quality in the code reviews more than a nominal part of the grade.
In the case of more MIS courses, I'd go for a case study approach in which each student researches a real project in software design. For example, what went wrong with the Denver-Stapleton baggage system. Also each student can pick a field and then do a report on the special software engineering challenges of that field. For example, for medical software, there is HIPAA compliance. For finance there is SOX compliance.
3. How to get them involved in online collaboration?
Discussion questions and class presentations. In the case of people with experience, you want them to share war-stories.
4. What kind of projects would you suggest?
In addition to case studies, you could disect a monster open source project. Like openoffice.org or the linux kernel.
One other project. "What ever happened to....." Having the students pick a software methodologies that was in vogue a few years (or decades) ago, and research want happened to it.
Another good project is to have the students draw up a list of questions and interview people via e-mail.
5. Does it make sense sharing same project in different courses (say in the two mentioned in this topic)?
Yes.
6. Software Engineering: do you think it is the right place for introducing software quality assurance and, in particular, software testing?
Yes. One thing that students will rapidly figure out if you give them case studies is how important testing is.
7. Systems Analysis: do you think it is the right place to introduce UML here?
For an MIS oriented course, maybe not.
More questions to follow. Answers are eagerly anticipated.
A few general peeves on software engineering courses
1) Most have grading systems that penalize code sharing and copying, whereas the whole point of software engineering is to write and read code that is easy to share and copy. Copying code off of google in most universities will get you expelled, whereas copying public domain code off of google to fix a problem in real life will get you promoted. The result of this restriction is that coding exercises in academic courses usually silly throw away things that have little relation to real life.
The reason for case studies and peer review is that it vastly reduces the usefulness of copying things from the internet, which also vastly reduces the need to police for this. Someone finds a paper on the internet that matches his topic.
2) Topics that are woefully undercovered in academic courses: *LEGACY SYSTEMS*, requirements gathering, quality assurance, maintanence coding, build systems