CSE 300 Algorithms in Bioinformatics - Fall 2007

Yufeng Wu
235 ITEB, ywu@engr.uconn.edu

Please read carefully.

This course is an introduction to software engineering. I will cover both theoretical
topics (on, e.g.  formal specification using
Petri net and Z) and practical topics
(such as design patterns). The goal is to present an overall introduction to the
techiniques and principles that are important to develop quality software products.
I hope at the end of the course, you will understand that software engineering
is not only about programming, and learn some techniques to develop quality
software products.

This course is lecture-based. Several homeworks will be assigned on major
subjects covered in the class. One of the most important part of the course is the
course project, where the students will work in teams with two or three people
on some relatively large software tasks.

This course covers the three central subjects of software engineering: processes,
models and tools. In particular, the planned subjects are:

1) Basic concepts of software engineering, and processes that software products
are developed in practice.

2) Design, especially objected oriented design. Design patterns, why design patterns
are important, how they are used in commercial products,
and how to apply design patterns in your projects.

3) Specification. Finite state machines. Petri nets. Algebraic specification.
Case study of application of formal specification.

4) Verification. Techniques for testing. Basics of program analysis.

5) Processes. How are software products developed in the industry?

6) Other subjects, including management isssues, tools, such as
UML. State-of-art bug finding.

Prerequisites. CSE 134. I expect you to know basic Java programming. Ideally,
you also know basics of C and C++ since the design pattern book (below) is based
on C++, but this is not absolutely required. I will introduce important concepts in C/C++
if needed in class.

TA: Derak Doran
, ded02007@engr.uconn.edu .

Textbook: The following textbook is required.

Fundamental of software engineering, second edition, by Ghezzi, Jazayeri and Mandrioli, 2003.

the following book is very useful to this course and we will go over a large part of this book
to learn OO-design in the first half of the course:

Design patterns: elements of reusable objected-oriented software
, by E. Gamma, et al.
I highly recommend this book. Consider purchasing a copy if you really want to
learn objected-oriented design. Alternatively, you can download this book by Bruce Eckel (which is free):
Thinking in Patterns with Java.

Homeworks.  A few written homeworks will be assigned to help you better understand the
class materials and prepare for exams. 

Projects.  You will work in a small group to develop a software of moderate size. You will need to
work with your team members to decide roles for the group members. You need to
submit documents on your project at several milestones.  More details will be available later.

Exams. We will have one mid-term and one final exam.

Grading. The grade will be assigned by: 
homework (5%), project reports and demo (50%), and exams (mid-term 20%, final 25%).