CSE 2102 Algorithms in Bioinformatics - Spring 2009

Yufeng Wu
235 ITEB, ywu@engr.uconn.edu
Office hours: 11-12 pm, Tuesday and Thursday or by appointment.

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 advanced object oriented design and 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.
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 1102. 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 required.

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.

Also,
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.

Homework/quiz.  A few written homeworks will be assigned to help you better understand the
class materials and prepare for exams. We will also have quiz from time to time.


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.  For this semester, the plan is to
develop a web-based Checkers game system. You will gain experience in developing
real-world OO-based software in a team-oriented settings. You will also learn software tools like
version control.

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

Grading. The grade will be assigned by: 
homework and quiz (10%), project reports and demo (40%), and exams (mid-term 20%, final 30%).