of 35/35
1) ICS 413/613: Software Engineering Philip Johnson Collaborative Software Development Laboratory Information and Computer Sciences University of Hawaii Honolulu HI 96822

(1) ICS 413/613: Software Engineering Philip Johnson Collaborative Software Development Laboratory Information and Computer Sciences University of Hawaii

  • View

  • Download

Embed Size (px)

Text of (1) ICS 413/613: Software Engineering Philip Johnson Collaborative Software Development Laboratory...

Introduction to ICS 414EEC-IV compiler validation for Ford (Pascal-like)
AI blackboard technology (Lisp)
Type inferencing system (Lisp)
Software metrics technology (Java)
Sensor-based web service for automated software measurement and analysis (Java)
Software Engineering for High Performance Computing Systems
Smart Grid/Smart Consumer applications
Learn how to build high quality, large scale software systems.
By “growing” a high quality, small scale system into a large one.
By pursuing the open source “prime directives”
By using tools whenever possible to assess various “quality” attributes.
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:
User interface
User documentation
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.
Installation procedures
An external developer can successfully understand and enhance the system.
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 obstacles including:
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 PDs:
Coding standards
Your group members (for group projects)
Other class members (via code/design review)
Outside community (mailing lists, forums, potential users, etc.)
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:
Effective Java
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 apps.
Real answer:
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
Development environment:
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.
Best solution:
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 mandatory!
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.
Professional Persona
A goal of this class is to help you develop your “professional persona” via:
Your online engineering log.
Your participation in professional social networking sites (TechHui, LinkedIn)
Your professional persona:
will help/hurt your job opportunities
is a career-long project.
Talking with classmates about the most appropriate design for a system.
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.)
Lessons Learned
By the end of the semester, many students show remarkable insights!
Here are some examples:
Start early
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 java. 
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
What’s next?