Text of (1) ICS 413/613: Software Engineering Philip Johnson Collaborative Software Development Laboratory...
Introduction to ICS 414EEC-IV compiler validation for Ford
AI blackboard technology (Lisp)
Type inferencing system (Lisp)
Software metrics technology (Java)
Sensor-based web service for automated software measurement and
Software Engineering for High Performance Computing Systems
Smart Grid/Smart Consumer applications
Learn how to build high quality, large scale software
By “growing” a high quality, small scale system into a large
By pursuing the open source “prime directives”
By using tools whenever possible to assess various “quality”
Develop a “professional persona”
Portfolio, Blog, TechHui, etc.
Easy for users to:
Easy for administrators to:
Easy for developers to:
This is (relatively) easy... for a small scale system.
This class is about maintaining “easiness” as the:
system becomes large (i.e. 100,000 -> 1M+ LOC)
development group becomes large (5 -> 10 -> 50+ devs)
The system accomplishes a useful task.
No complex system is ever “complete”.
Extend and improve system forever based upon user feedback,
changing environment, etc.
PD#1 is facilitated by standards for:
An external user can successfully install and use the system.
The documentation is sufficient to enable non-developers of the
software to download, install, and benefit from the “useful task”
implemented by the software.
PD#2 is facilitated by standards for:
Packaging the software into a distribution.
An external developer can successfully understand and enhance the
Successful open source software “takes on a life of its own” and
does not require continuing participation from the original
developer (Linux, Emacs, Java, SendMail, etc.)
PD#3 is facilitated by standards for:
Coding (coding standards)
Design (design patterns)
Packaging (Make, Ant)
Documentation (JavaDoc, etc.)
Standards and feedback
A consistent theme across all three PDs is the importance of
standards and feedback:
Allow higher quality communication to occur by removing low-level
Idiosyncratic coding, package structure, user interface, etc.
A reasonable standard observed by all participants is better than
individual, differing, more highly optimized approaches.
We will employ many standards in this class in order to improve the
quality of communication and facilitate achieving the three
Your group members (for group projects)
Other class members (via code/design review)
Outside community (mailing lists, forums, potential users,
Best concise reference to the Java Language.
Elements of Java Style
Wicket in Action
Almost all free online!
University of Hawaii students can access Safari Online through
their UH login and get access to:
Elements of Java Style
Java vs. Ruby, Python, etc.
Common question: why teach Java when the class project is a simple
client-server web app (SCSWA)?
Non-Answer: Because Java is best for SCSWAs.
RubyOnRails is almost unequivocably better than Java for simple web
I don’t want the semester to revolve around syntax.
Java has the best suite of open source tools:
Ant, JUnit, PMD, FindBugs, Checkstyle, etc.
Java allows us to explore interesting SE/language issues:
Generic collections for advanced data structures
Concurrency issues and approaches
Windows 95/98/ME/XPHome are not OK!!!
Fast network connection
ICS Lab and TA machines not viable for this class.
ICS Department has site license for XP-Pro; get it!
Lots and lots of time:
Software development takes a lot of hours.
What you put in determines what you get out.
A laptop with: >=2Ghz processor, >=1 GB RAM, >= 10GB free
space, and wireless access.
Example: Dell Inspiron 1501, $500
Home computer with similar configuration & DSL/cable.
The weights and assignments may change.
Most lectures will be made available online as screencasts.
Class time will be dedicated to “labs” in which you do software
development, either alone or in small groups. Attendence is
Most Mondays you will be assigned readings for the coming week
along with tasks to support the readings.
The following Monday, I will have a short, in-class, CLOSED
BOOK/NOTES quiz on the previous week’s material.
Goal of quizzes:
ICS 413 is Writing Intensive
To fulfill the WI requirements, you will create and maintain an
Online Engineering Log (Blog) this semester.
A goal of this class is to help you develop your “professional
Your online engineering log.
Your participation in professional social networking sites
Your professional persona:
will help/hurt your job opportunities
is a career-long project.
Talking with classmates about the most appropriate design for a
Helping a classmate debug an error by reading their code and
suggesting diagnosis experiments.
Reusing open source code from the Net with attribution
Taking a copy of someone else’s code (either classmates or from the
net) and submitting it as your own (perhaps after minor rewriting
to disguise the similarity.)
By the end of the semester, many students show remarkable
Here are some examples:
If you start early then you should have more time to develop your
project. You can allocate a portion of this time to explore
different ways of doing things.
Unit testing actually helps
Unit testing helps a lot from the middle to the end of the
development cycle. Initially, tests take extra time to create but
it does pay off…
Read a lot of code
I've been able to learn much more about java, and programming
concepts from reading code, than I have from writing
Follow the standards
Suspend your disbelief
Even though the things learned in class seem like a bunch of extra
stuff that will just take up your time and not accomplish anything
useful, once you start using all of the things you learn in class
it makes it easy to create high quality software. Basically do it
now, you'll be happy you did later.
Best case scenario
Worst Case Scenario