ICS 314 and 613: Software Engineering Philip Johnson Collaborative Software Development Laboratory  Information and Comput...
Contact Information <ul><li>Email: </li></ul><ul><ul><li>[email_address] </li></ul></ul><ul><li>Website: </li></ul><ul><ul...
My programming background <ul><li>1970 ’s:  </li></ul><ul><ul><li>Business applications programming (COBOL) </li></ul></ul...
Goals of the class <ul><li>Learn how to build high quality, large scale software systems.  </li></ul><ul><ul><li>By  “grow...
What is  “Quality”? <ul><li>Attributes of a high quality software system: </li></ul><ul><ul><li>Easy for users to:  </li><...
Three Prime Directives of  Open Source Software <ul><li>The system accomplishes  at least one  useful task. </li></ul><ul>...
Prime Directive #1 <ul><li>The system successfully accomplishes at least one useful task. </li></ul><ul><ul><li>No complex...
Prime Directive #2 <ul><li>A new user can successfully install and use the system. </li></ul><ul><ul><li>The documentation...
Prime Directive #3 <ul><li>A new developer can successfully understand and enhance the system. </li></ul><ul><ul><li>Succe...
Standards and feedback <ul><li>A consistent theme across all three PDs is the importance of  standards  and  feedback : </...
Standards <ul><li>We will employ many standards in this class in order to improve the quality of communication and facilit...
Feedback <ul><li>Feedback in this class comes from the following sources: </li></ul><ul><ul><li>Your group members (for gr...
Course Architecture Basic Java Capabilities IDE Coding Standards Software Review Automated Build Testing Config. Man. Agil...
Required Texts <ul><li>Java in a Nutshell, 5 th  Edition </li></ul><ul><ul><li>Best concise reference to the Java Language...
Required Texts (cont) <ul><li>Effective Java, 2nd Edition </li></ul><ul><ul><li>The best single book on intermediate-to-ad...
Getting the books <ul><li>Option 1: Buy all 4 books: </li></ul><ul><ul><li>$122 plus shipping (Amazon). </li></ul></ul><ul...
Java vs. Ruby, Python, etc. <ul><li>Common question: why teach Java when the class project is a simple client-server web a...
Course prerequisites <ul><li>Java programming background </li></ul><ul><ul><li>At least one year/one thousand lines of cod...
Personal computational resources <ul><li>What you need: </li></ul><ul><ul><li>A laptop with: >=2Ghz processor, >=1 GB RAM,...
Grading <ul><li>Tentative grading scheme: </li></ul><ul><ul><li>30%: Quizzes </li></ul></ul><ul><ul><li>20%: Final </li></...
314 vs. 613 <ul><li>The structure of 314 and 613 is the same. </li></ul><ul><li>In 613,  </li></ul><ul><ul><li>all assignm...
Lectures and Labs <ul><li>Most lectures will be made available online as screencasts. </li></ul><ul><li>Class time will be...
Quicky Quizzes <ul><li>Each Friday, I will release the modules to be covered during the following week. </li></ul><ul><li>...
Engineering Log <ul><li>ICS 314 is Writing Intensive (and ICS 613 is too, informally) </li></ul><ul><li>To fulfill the WI ...
Professional Persona <ul><li>A goal of this class is to help you develop your  “professional persona” via: </li></ul><ul><...
Collaboration vs. Cheating <ul><li>Collaboration: </li></ul><ul><ul><li>Talking with classmates about the most appropriate...
Lessons Learned <ul><li>By the end of the semester, many students show insights!  </li></ul><ul><li>Here are some examples...
Start early <ul><ul><li>If you start early then you should have more time to develop your project. You can allocate a port...
Unit testing actually helps <ul><ul><li>Unit testing helps a lot from the middle to the end of the development cycle. Init...
Read a lot of code <ul><ul><li>I've been able to learn much more about java, and programming concepts from reading code, t...
Follow the standards <ul><ul><li>You will not be the only person examining your code. For this reason, it's a good idea to...
Suspend your disbelief <ul><ul><li>Even though the things learned in class seem like a bunch of extra stuff that will just...
Best case scenario <ul><ul><li>Take advantage of the valuable resource that is Dr. Johnson.  Prior to enrolling in ICS 413...
Worst Case Scenario <ul><ul><li>Taking class from this professor is not worth the time and money as you could just might a...
Course Process <ul><li>Use the Schedule page and see which modules are scheduled for a given week and which assignments ar...
Schedule, Modules, Assignments
What to do next <ul><li>Look through the website. </li></ul><ul><li>Start work on the Introduction module. </li></ul><ul><...
Upcoming SlideShare
Loading in …5
×

01.intro

2,202 views

Published on

Published in: Technology
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
2,202
On SlideShare
0
From Embeds
0
Number of Embeds
1,448
Actions
Shares
0
Downloads
5
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

01.intro

  1. 1. ICS 314 and 613: Software Engineering Philip Johnson Collaborative Software Development Laboratory Information and Computer Sciences University of Hawaii Honolulu HI 96822
  2. 2. Contact Information <ul><li>Email: </li></ul><ul><ul><li>[email_address] </li></ul></ul><ul><li>Website: </li></ul><ul><ul><li>https://sites.google.com/site/ics314fall2011/ </li></ul></ul><ul><li>Office/Phone: </li></ul><ul><ul><li>POST 307A (CSDL Office) </li></ul></ul><ul><ul><li>956-3489 </li></ul></ul><ul><li>Office Hours: </li></ul><ul><ul><li>TTh 3-4pm, or whenever my door is open </li></ul></ul>
  3. 3. My programming background <ul><li>1970 ’s: </li></ul><ul><ul><li>Business applications programming (COBOL) </li></ul></ul><ul><li>1980 ’s: </li></ul><ul><ul><li>Real-time data communication software (Assembler) </li></ul></ul><ul><ul><li>EEC-IV compiler validation for Ford (Pascal-like) </li></ul></ul><ul><ul><li>AI blackboard technology (Lisp) </li></ul></ul><ul><ul><li>Type inferencing system (Lisp) </li></ul></ul><ul><li>1990 ’s: </li></ul><ul><ul><li>Collaborative software infrastructure (Lisp, C++) </li></ul></ul><ul><ul><li>Software metrics technology (Java) </li></ul></ul><ul><li>2000 ’s: </li></ul><ul><ul><li>Sensor-based web service for automated software measurement and analysis (Java) </li></ul></ul><ul><ul><li>Software Engineering for High Performance Computing Systems </li></ul></ul><ul><ul><li>Smart Grid/Smart Consumer applications (Java, Javascript) </li></ul></ul>
  4. 4. Goals of the class <ul><li>Learn how to build high quality, large scale software systems. </li></ul><ul><ul><li>By “growing” a high quality, small scale system into a large one. </li></ul></ul><ul><ul><li>By pursuing the open source “prime directives” </li></ul></ul><ul><ul><li>By using tools whenever possible to assess various “quality” attributes. </li></ul></ul><ul><li>Develop a “professional persona” </li></ul><ul><ul><li>Portfolio, Blog, TechHui, etc. </li></ul></ul><ul><ul><li>Support your entry into “real world”. </li></ul></ul><ul><ul><li>Create a positive “image” for potential employers. </li></ul></ul>
  5. 5. What is “Quality”? <ul><li>Attributes of a high quality software system: </li></ul><ul><ul><li>Easy for users to: </li></ul></ul><ul><ul><ul><li>adopt and use to achieve their goals </li></ul></ul></ul><ul><ul><li>Easy for administrators to: </li></ul></ul><ul><ul><ul><li>install, upgrade, debug, obtain help </li></ul></ul></ul><ul><ul><li>Easy for developers to: </li></ul></ul><ul><ul><ul><li>read, enhance, build, test, debug, optimize </li></ul></ul></ul><ul><li>This is (relatively) easy... for a small scale system. </li></ul><ul><li>This class is about maintaining “easiness” as the: </li></ul><ul><ul><li>system becomes large (i.e. 100,000 -> 1M+ LOC) </li></ul></ul><ul><ul><li>development group becomes large (5 -> 10 -> 50+ devs) </li></ul></ul>
  6. 6. Three Prime Directives of Open Source Software <ul><li>The system accomplishes at least one useful task. </li></ul><ul><li>A new user can successfully install and use the system. </li></ul><ul><li>A new developer can successfully understand and enhance the system. </li></ul>
  7. 7. Prime Directive #1 <ul><li>The system successfully accomplishes at least one useful task. </li></ul><ul><ul><li>No complex system is ever “complete”. </li></ul></ul><ul><ul><li>Instead: </li></ul></ul><ul><ul><ul><li>QUICKLY implement a core set of functions </li></ul></ul></ul><ul><ul><ul><li>Extend and improve system forever based upon user feedback, changing environment, etc. </li></ul></ul></ul><ul><ul><li>PD#1 is facilitated by standards for: </li></ul></ul><ul><ul><ul><li>User interface </li></ul></ul></ul><ul><ul><ul><li>User documentation </li></ul></ul></ul><ul><ul><ul><li>Interaction with other systems </li></ul></ul></ul><ul><li>Achieving and maintaining PD#1 requires regular feedback from external end-users . </li></ul>
  8. 8. Prime Directive #2 <ul><li>A new user can successfully install and use the system. </li></ul><ul><ul><li>The documentation is sufficient to enable non-developers of the software to download, install, and benefit from the “useful task” implemented by the software. </li></ul></ul><ul><ul><li>PD#2 is facilitated by standards for: </li></ul></ul><ul><ul><ul><li>Packaging the software into a distribution. </li></ul></ul></ul><ul><ul><ul><li>Installation procedures </li></ul></ul></ul><ul><li>Achieving and maintaining PD#2 requires regular feedback from external installers . </li></ul>
  9. 9. Prime Directive #3 <ul><li>A new developer can successfully understand and enhance the system. </li></ul><ul><ul><li>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.) </li></ul></ul><ul><ul><li>PD#3 is facilitated by standards for: </li></ul></ul><ul><ul><ul><li>Coding (coding standards) </li></ul></ul></ul><ul><ul><ul><li>Design (design patterns) </li></ul></ul></ul><ul><ul><ul><li>Packaging (Make, Ant) </li></ul></ul></ul><ul><ul><ul><li>Unit tests (coverage, Unit tests) </li></ul></ul></ul><ul><ul><ul><li>Documentation (JavaDoc, etc.) </li></ul></ul></ul><ul><li>Achieving and maintaining PD#3 requires regular feedback from external developers . </li></ul>
  10. 10. Standards and feedback <ul><li>A consistent theme across all three PDs is the importance of standards and feedback : </li></ul><ul><li>Standards: </li></ul><ul><ul><li>Allow higher quality communication to occur by removing low-level obstacles including: </li></ul></ul><ul><ul><ul><li>Idiosyncratic coding, package structure, user interface, etc. </li></ul></ul></ul><ul><ul><ul><li>A reasonable standard observed by all participants is better than individual, differing, more highly optimized approaches. </li></ul></ul></ul><ul><li>Feedback: </li></ul><ul><ul><li>As the developer, you cannot put yourselves in the shoes of outside users and developers. To achieve and maintain the PDs, you must seek outside feedback early and often. </li></ul></ul>
  11. 11. Standards <ul><li>We will employ many standards in this class in order to improve the quality of communication and facilitate achieving the three PDs: </li></ul><ul><ul><li>Coding standards </li></ul></ul><ul><ul><li>Package structuring standards </li></ul></ul><ul><ul><li>Engineering log standards </li></ul></ul><ul><ul><li>Review process standards </li></ul></ul><ul><ul><li>Tool standards </li></ul></ul>
  12. 12. Feedback <ul><li>Feedback in this class comes from the following sources: </li></ul><ul><ul><li>Your group members (for group projects) </li></ul></ul><ul><ul><li>Other class members (via code/design review) </li></ul></ul><ul><ul><li>Me </li></ul></ul><ul><ul><li>ICS Software Engineering mailing list </li></ul></ul><ul><ul><li>Tools (Checkstyle, PMD, FindBugs, etc.) </li></ul></ul><ul><ul><li>Outside community (mailing lists, forums, potential users, etc.) </li></ul></ul>
  13. 13. Course Architecture Basic Java Capabilities IDE Coding Standards Software Review Automated Build Testing Config. Man. Agile Development Practices Software Measurement Intermediate Java Automated QA Case Study: WebApp Development Concurrency Performance Analysis
  14. 14. Required Texts <ul><li>Java in a Nutshell, 5 th Edition </li></ul><ul><ul><li>Best concise reference to the Java Language. </li></ul></ul><ul><ul><li>$30 at Amazon </li></ul></ul><ul><li>Elements of Java Style </li></ul><ul><ul><li>Best concise guide to best practices in code formatting and documentation. </li></ul></ul><ul><ul><li>$14 at Amazon </li></ul></ul>
  15. 15. Required Texts (cont) <ul><li>Effective Java, 2nd Edition </li></ul><ul><ul><li>The best single book on intermediate-to-advanced Java practices. </li></ul></ul><ul><ul><li>314: Optional, 613: Required </li></ul></ul><ul><ul><li>$45 at Amazon </li></ul></ul><ul><li>Wicket in Action </li></ul><ul><ul><li>Best introductory reference on Wicket. </li></ul></ul><ul><ul><li>$33 at Amazon </li></ul></ul>
  16. 16. Getting the books <ul><li>Option 1: Buy all 4 books: </li></ul><ul><ul><li>$122 plus shipping (Amazon). </li></ul></ul><ul><li>Option 2: Rent all but EJS from Safari Online using “10 Slot Bookshelf”: </li></ul><ul><ul><li>$23/month * 4 months = $92 </li></ul></ul><ul><ul><li>Buy Elements of Java Style @$14. </li></ul></ul><ul><ul><li>Total cost: $106 </li></ul></ul><ul><li>Safari Online will give you access to many other books as well. </li></ul>
  17. 17. Java vs. Ruby, Python, etc. <ul><li>Common question: why teach Java when the class project is a simple client-server web app (SCSWA)? </li></ul><ul><li>Non-Answer: Because Java is best for SCSWAs. </li></ul><ul><ul><li>RubyOnRails is almost unequivocably better than Java for simple web apps. </li></ul></ul><ul><li>Real answer: </li></ul><ul><ul><li>On average, you all know Java best: </li></ul></ul><ul><ul><ul><li>I don ’t want the semester to revolve around syntax. </li></ul></ul></ul><ul><ul><li>Java has the best suite of open source tools: </li></ul></ul><ul><ul><ul><li>Ant, JUnit, PMD, FindBugs, Checkstyle, etc. </li></ul></ul></ul><ul><ul><li>Java allows us to explore interesting SE/language issues: </li></ul></ul><ul><ul><ul><li>Generic collections for advanced data structures </li></ul></ul></ul><ul><ul><ul><li>Concurrency issues and approaches </li></ul></ul></ul><ul><li>We look at these issues in the context of SCSWA. </li></ul>
  18. 18. Course prerequisites <ul><li>Java programming background </li></ul><ul><ul><li>At least one year/one thousand lines of code. </li></ul></ul><ul><ul><li>You must have taken and passed ICS 211 (or equivalent) PRIOR to this course. </li></ul></ul><ul><li>Development environment: </li></ul><ul><ul><li>Unix, Macintosh OS/X, Windows XP-Pro or 7 are OK. </li></ul></ul><ul><ul><li>Windows 95/98/ME/XPHome/Vista are not OK!!! </li></ul></ul><ul><ul><li>Fast network connection </li></ul></ul><ul><ul><li>ICS Lab and TA machines not viable for this class. </li></ul></ul><ul><ul><li>ICS Department has site license for XP-Pro/7; get it! </li></ul></ul><ul><li>Lots and lots of time: </li></ul><ul><ul><li>Software development takes a lot of hours. </li></ul></ul><ul><ul><li>What you put in determines what you get out. </li></ul></ul><ul><ul><li>Not everyone has the time, energy, or interest to become skilled at software engineering. </li></ul></ul>
  19. 19. Personal computational resources <ul><li>What you need: </li></ul><ul><ul><li>A laptop with: >=2Ghz processor, >=1 GB RAM, >= 10GB free space, and wireless access. </li></ul></ul><ul><ul><li>Recommended: 15 ” screen or better. </li></ul></ul><ul><ul><li>Example: Dell Inspiron, $500 </li></ul></ul><ul><li>This class involves a large amount of in-class programming; if you do not have a “developer level” laptop, you can not take advantage of those experiences. </li></ul><ul><li>“ Netbooks” are not “developer level” laptops. </li></ul><ul><ul><li>Underpowered (tools take too long to run) </li></ul></ul><ul><ul><li>Screen size too small </li></ul></ul>
  20. 20. Grading <ul><li>Tentative grading scheme: </li></ul><ul><ul><li>30%: Quizzes </li></ul></ul><ul><ul><li>20%: Final </li></ul></ul><ul><ul><li>50%: Programming assignments and homework </li></ul></ul><ul><li>The weights and assignments may change. </li></ul><ul><li>Guarantees: </li></ul><ul><ul><li>90-100% guarantees an A </li></ul></ul><ul><ul><li>80-89% guarantees a B </li></ul></ul><ul><ul><li>70-79% guarantees a C </li></ul></ul>
  21. 21. 314 vs. 613 <ul><li>The structure of 314 and 613 is the same. </li></ul><ul><li>In 613, </li></ul><ul><ul><li>all assignments should be completed with a higher level of quality </li></ul></ul><ul><ul><li>there will be extra components to assignments for 613 </li></ul></ul>
  22. 22. Lectures and Labs <ul><li>Most lectures will be made available online as screencasts. </li></ul><ul><li>Class time will be dedicated to “labs” in which you do software development, either alone or in small groups. Attendence is mandatory! </li></ul><ul><li>You are responsible for listening to the lectures before the class period associated with the topic. </li></ul>
  23. 23. Quicky Quizzes <ul><li>Each Friday, I will release the modules to be covered during the following week. </li></ul><ul><li>The following week, I will have at least one short, in-class, CLOSED BOOK/NOTES quiz on the week ’s material. </li></ul><ul><li>Goal of quizzes: </li></ul><ul><ul><li>Provide incentive for you to keep up with readings. </li></ul></ul><ul><ul><li>Ensure that you have assimilated the material to some extent. </li></ul></ul><ul><ul><li>Provide me with feedback on how the class is doing. </li></ul></ul>
  24. 24. Engineering Log <ul><li>ICS 314 is Writing Intensive (and ICS 613 is too, informally) </li></ul><ul><li>To fulfill the WI requirements, you will create and maintain an Online Engineering Log (Blog) this semester. </li></ul><ul><li>This will provide practice in writing technical prose for public use, and also enable you to create an archival record of your growth and experiences in software engineering. </li></ul>
  25. 25. Professional Persona <ul><li>A goal of this class is to help you develop your “professional persona” via: </li></ul><ul><ul><li>Your online engineering log. </li></ul></ul><ul><ul><li>Your professional portfolio. </li></ul></ul><ul><ul><li>The open source code you authored. </li></ul></ul><ul><ul><li>Your participation in professional social networking sites (TechHui, LinkedIn) </li></ul></ul><ul><li>Your professional persona: </li></ul><ul><ul><li>is distinct from your “personal” persona (FaceBook, MySpace, etc.) </li></ul></ul><ul><ul><li>will help/hurt your job opportunities </li></ul></ul><ul><ul><li>is a career-long project. </li></ul></ul>
  26. 26. Collaboration vs. Cheating <ul><li>Collaboration: </li></ul><ul><ul><li>Talking with classmates about the most appropriate design for a system. </li></ul></ul><ul><ul><li>Helping a classmate debug an error by reading their code and suggesting diagnosis experiments. </li></ul></ul><ul><ul><li>Reusing open source code from the Net with attribution </li></ul></ul><ul><li>Cheating: </li></ul><ul><ul><li>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.) </li></ul></ul><ul><li>Cheating destroys the learning environment. If I catch you, you get an automatic F for the course. </li></ul><ul><li>If you are not sure if an activity constitutes collaboration or cheating, ASK ME! </li></ul>
  27. 27. Lessons Learned <ul><li>By the end of the semester, many students show insights! </li></ul><ul><li>Here are some examples: </li></ul>
  28. 28. Start early <ul><ul><li>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. </li></ul></ul><ul><ul><li>Although I hate to be obvious, waiting till the last minute to code is not a very good idea. Considering the level of coding required for ICS 413/613, coding SHOULD be continuous at short intervals from day to day. It's hard. I know. </li></ul></ul>
  29. 29. Unit testing actually helps <ul><ul><li>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… </li></ul></ul><ul><ul><li>JUnit is your friend. JUnit is the main tool to develop a set of tests which will ensure you have software that works the way you expect it to. Unit tests are what real Software Engineers who are serious about making high quality software use. </li></ul></ul>
  30. 30. Read a lot of code <ul><ul><li>I've been able to learn much more about java, and programming concepts from reading code, than I have from writing java.  </li></ul></ul><ul><ul><li>Code examples are your best friends. Nothing will explain to you how to do something as well as a good example can. Learn from the experience of others by reading what they've done. </li></ul></ul>
  31. 31. Follow the standards <ul><ul><li>You will not be the only person examining your code. For this reason, it's a good idea to practice programming following the Java programming style conventions. This improves readability and prevents you from having to go back and change everything later so someone else can understand what you have written. </li></ul></ul>
  32. 32. Suspend your disbelief <ul><ul><li>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. </li></ul></ul><ul><ul><li>Take advantage of your resident expert Dr. Johnson. Try not to argue with him because believe it or not, he does know what the #@&%! he's talking about. It will make your life in ICS 413 so much easier. </li></ul></ul>
  33. 33. Best case scenario <ul><ul><li>Take advantage of the valuable resource that is Dr. Johnson.  Prior to enrolling in ICS 413 with Dr. Johnson, I was very confused about what I was doing in ICS and sometimes lacked motivation. After one month in ICS 413, I was more confident and possessed a greater drive to learn than I ever had previously.  He may push you and sometimes require a lot out of you, but believe you me, it is well worth it. </li></ul></ul>
  34. 34. Worst Case Scenario <ul><ul><li>Taking class from this professor is not worth the time and money as you could just might as well research software engineering on google and read the book and study on your own and come off learning more than he ever teaches - if he even actually teaches is questionable. </li></ul></ul>
  35. 35. Course Process <ul><li>Use the Schedule page and see which modules are scheduled for a given week and which assignments are due. </li></ul><ul><li>Modules are generally released on Friday of the week prior to their appearance on the schedule. </li></ul><ul><li>You are responsible for the contents of the module on the day it is listed in the schedule. </li></ul>
  36. 36. Schedule, Modules, Assignments
  37. 37. What to do next <ul><li>Look through the website. </li></ul><ul><li>Start work on the Introduction module. </li></ul><ul><li>Come to class on Tuesday! </li></ul>

×