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.
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. 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%).