COMS W4156: Advanced Software Engineering Prof. Gail Kaiser Kaiser+4156@cs.columbia.edu http://bank.cs.columbia.edu/classes/cs4156/ September 8, 2009 COMS W4156 1 Objectives of this course • To introduce advanced concepts in software engineering and their embodiment in selected methodologies and technologies • To apply those concepts within a multi-iteration team software development project September 8, 2009 COMS W4156 2 Topics covered in this lecture • • • • Overview of software engineering Overview of the course Pair design exercise If time permits: Introduction to pair programming September 8, 2009 COMS W4156 3 Software Engineering as a Discipline September 8, 2009 COMS W4156 4 What is software? • Computer programs and associated documentation such as requirements, design models, test plans and user manuals. • Software products may be developed for a particular customer or may be developed for a general market. • New software can be created by developing new programs, customizing generic software systems and/or combining existing software. September 8, 2009 COMS W4156 5 What is software engineering? • Software engineering is an engineering discipline that is concerned with all aspects of software production. – NOT just programming – NOT just programming [part of] a large software system – NOT just programming as a member of a large team • Software engineering is a systematic and organized approach to software development using appropriate tools and techniques depending on the problem to be solved, the development constraints and the resources available. September 8, 2009 COMS W4156 6 What do software engineers do? • Anyone can call themselves a software engineer, but not all programmers are software engineers (and not all software engineers are programmers) • Newly hired software engineers typically assigned to test or maintain someone else’s pre-existing code • Maintenance = Everything after initial deployment – When was the last time you used a commercial or open source program labeled “Version 1.0”? – 50-90+% of total lifecycle costs September 8, 2009 COMS W4156 7 What do software engineers do? • Categories of maintenance – Corrective - reactive modification to correct discovered problems – Adaptive - modification to keep it usable in a changed or changing environment – Perfective - improve performance or maintainability – Preventive - modification to detect and correct latent faults September 8, 2009 COMS W4156 8 What is the difference between software engineering and computer science? • Computer science is concerned with theory and fundamentals. • Software engineering is concerned with the practicalities of developing and delivering useful software. September 8, 2009 COMS W4156 9 Why study software engineering? • Writing a program is easy – Program ~= code (possibly with comments) • Developing a software system is harder – System ~= program plus technical documentation sufficient such that someone other than original developers can maintain and extend • Developing a software product is very hard – Product ~= system plus customers, fulfilling the business needs of those customers, with customer-oriented documentation and support September 8, 2009 COMS W4156 10 Why study software engineering? • To attain high-quality software products, software engineers must be skilled professionals who follow defined processes and “best practices” • Some schools offer entire degree programs in software engineering (e.g., CMU, Drexel) • At present there is no licensing of software engineers in the US, only specialty “certifications” offered by vendors (e.g., IBM, Microsoft, Sun) and by vendor-neutral organizations (e.g., IEEE, Linux Professional Institute) • Most other kinds of “engineer” must be licensed by the state government, but licensing of software engineers is very controversial September 8, 2009 COMS W4156 11 THIS Software Engineering course September 8, 2009 COMS W4156 12 Course content • Software process – • Component-based software development – • Pair programming, requirements, modeling, architecture, design patterns, refactoring, … Component model frameworks (COM+, .NET, EJB, Web Services) Quality assurance – Code inspection, unit and integration testing, stress testing, test planning September 8, 2009 COMS W4156 13 Why is this course called Advanced Software Engineering? • Until ~2002, undergraduate CS majors were required to take COMS W3156 Introduction to Software Engineering, oriented towards sophomores and juniors, whereas 4156 was an equivalent elective oriented towards seniors and graduate students • Both courses presented a traditional view of the software lifecycle focused on detailed documentation, independent of any particular implementation technology, and stepped through the full lifecycle (through delivery to “customers”) • 3156 replaced by COMS W3157 Advanced Programming • 4156 now assumes introductory level software engineering background (preferably from the real world) • Concentrates on recent trends towards component technology and emphasizes quality assurance September 8, 2009 COMS W4156 14 Who am I? • • • • • Gail Kaiser kaiser+4156@cs.columbia.edu (note the +4156) Professor at Columbia since 1985 BS from MIT, MS and PhD from CMU Worked summers and/or consulted for startups, defense contractors, industry research labs, Software Engineering Institute, Educational Testing Service • Research in software testing, collaborative work, computer and network security, parallel and distributed systems, selfmanaging systems, Web technologies, information management, software development environments and tools September 8, 2009 COMS W4156 15 Who are the TAs? • Mr. Nipun Arora, third year graduate student • Mr. Palak Baid, second year graduate student • Mr. Jonathan Bell, senior in SEAS September 8, 2009 COMS W4156 16 Who are you? • Graduate and upper level undergraduate students in Computer Science, Computer Engineering, Biomedical Informatics, Electrical Engineering, IEOR, maybe others • Sincerely interested (hopefully) in learning to apply Software Engineering methodologies and technologies – not just programming skills – to developing useful and usable software products • 4156 is required for the CS MS Software Systems track (unless you “import” a prior upper-level software engineering course from another institution) September 8, 2009 COMS W4156 17 Textbooks • Required: Ian Sommerville, Software Engineering, 8th edition, Addison-Wesley, ISBN 9780321313799 • Recommended: Ron Patton, Software Testing, 2nd edition, Sams Publishing, ISBN 0672327988 • Ordered for this class through the Columbia University Bookstore September 8, 2009 COMS W4156 18 Final Grade Breakdown • 50% Team Project – 2 iterations @ 25% each • 40% Individual Assessments [exams] – 20% midterm – 20% final • 10% Class participation and “pop quizzes” • Assignments must be submitted via CourseWorks September 8, 2009 COMS W4156 19 Team Project • Students work primarily in pairs (2 people) • Grouped into 2-pair teams (4 people) • Each team will invent, design, code and test a very small software system using some component model framework • 2 rapid iterations of project - each ~3 weeks long • All major system functionality should be (more or less) operational by the end of the 1st iteration • 2nd iteration will focus on quality assurance issues September 8, 2009 COMS W4156 20 Pairs and Teams • Pairs ideally self-chosen – find a partner (if odd enrollment, one triplet permitted but no onesies) • Meet someone in class or advertise on the 4156 discussion forum on CourseWorks • 2 pairs can request each other for a team • Unattached individuals and pairs will be assigned by the teaching staff • Each team will submit a proposal for the very small system they want to develop September 8, 2009 COMS W4156 21 Do the Team Project AS A TEAM 1. Develop and test your project code together with your pair partner 2. Integrate together with your team’s other pair 3. Co-author project documentation with all team members 4. Demonstrate your project to the teaching staff All members of the same team must use the same component model framework (e.g., EJB, .NET) September 8, 2009 COMS W4156 22 Project Grading • Team members who do not contribute appropriately should be brought to the attention of the teaching staff as soon as possible. • Such team members may receive a significantly lower grade for the relevant project assignment(s) than the rest of that team, possibly "zero", may be reassigned to another team, and/or may be asked to withdraw from the course. • Team members who contribute “above and beyond the call of duty” may receive a higher grade than the rest of the team September 8, 2009 COMS W4156 23 Frequently Asked Questions • Do I have to join a pair/team? YES! • Can I do the project alone? NO! • I work full time, I have a heavy class schedule, I have a long commute, I don’t like working in groups, I prefer to program in an obscure language that no one else knows, etc. - Can I do the project alone? NO! September 8, 2009 COMS W4156 24 Frequently Asked Questions • Do we have to use a component model framework? YES! • Can we use a component model framework not covered in class? Yes, but only if it provides component services for developing N-tier applications September 8, 2009 COMS W4156 25 Individual Assessments • Midterm and Final • Take-home examinations that must be completed by each student working individually • Demonstrate your understanding of software engineering principles and technologies, and how they are applied (graded) • Evaluate your own, your partner’s and your team’s work on the project thus far (not graded, but contributes to project grade differentials) September 8, 2009 COMS W4156 26 Class Participation • Attendance is required • Short “pop quizzes” will be given during several class periods • Please ask questions of general interest in class September 8, 2009 COMS W4156 27 Final Grade Breakdown • 50% Team Project – 2 iterations @ 25% each • 40% Individual Assessments [exams] – 20% midterm – 20% final • 10% Class participation and “pop quizzes” • Assignments must be submitted via CourseWorks September 8, 2009 COMS W4156 28 Pair Design Exercise (details announced in class) September 8, 2009 COMS W4156 29 Pair Programming September 8, 2009 COMS W4156 30 What Is Pair Programming? • Two software engineers work side-by-side at one computer, sliding keyboard and mouse back and forth (or simulated via desktop sharing technologies) • Continuously collaborate on same design, algorithm, code, test, etc. • Continuous informal review September 8, 2009 COMS W4156 31 What Is NOT Pair Programming? • Splitting up the work • Taking turns doing the work • One person doing all the work September 8, 2009 COMS W4156 32 What About Productivity? • Very controversial – common practice in some software development organizations and unthinkable in others • Demonstrated in some studies to improve productivity and quality of software products under some circumstances – Particularly novice-novice pairs (vs. novice solos) or expertexpert pairs (vs. expert solos) – Two programmers work together nearly twice as fast and think of more solutions to a problem as two working alone – While attaining higher defect prevention and defect removal September 8, 2009 COMS W4156 33 Benefits • Increased discipline. Pairing partners are more likely to "do the right thing" and are less likely to take long breaks. • Fewer interruptions. People are more reluctant to interrupt a pair than they are to interrupt someone working alone. • Resilient flow. Pairing leads to a different kind of mental dynamic than programming alone. September 8, 2009 COMS W4156 34 Benefits • Better code. Pairing partners are less likely to produce a bad design due to their immersion, and tend to come up with higher quality designs. • Multiple developers contributing to design. If pairs are rotated frequently, several people will be involved in developing a particular feature. This can help create better solutions, particularly when a pair gets stuck on a particularly tricky problem • Collective code ownership. When everyone on a project is pair programming, and pairs rotate frequently, everybody gains a working knowledge of the entire codebase. September 8, 2009 COMS W4156 35 Benefits • Mentoring. Everyone, even junior programmers, possess knowledge that others don't. Pair programming is a way of spreading that knowledge. • Improved morale. Pair programming can be more enjoyable for some engineers than programming alone. • Team cohesion. People get to know each other more quickly when pair programming. Pair programming may encourage team gelling. September 8, 2009 COMS W4156 36 Drawbacks • Experienced developers may find it tedious to tutor a less experienced developer in a paired environment. • A less experienced developer may feel intimidated pairing with a more experienced developer, which may result in less participation. • Differences in coding style may result in conflict. • Personality conflicts can result in one or both developers feeling awkward or uncomfortable. • Some software engineers prefer to work alone, and may find the paired environment cumbersome. September 8, 2009 COMS W4156 37 Drawbacks • In the case where the team has slightly different work schedules, which is common in an environment that values work-life balance, the pair is only available during the overlap of their schedules. Therefore, not only does it require more man-hours to complete a task, a typical day has fewer pairhours available, which further increases the overall task completion time. • Where a company values telecommuting (working from home) or when an employee must work from outside the office for whatever reasons, pair programming can be difficult. September 8, 2009 COMS W4156 38 Final Notes September 8, 2009 COMS W4156 39 First Assignment Due Next Week! • • • • Due Tuesday 15 September, 10am Posted on course website Submit via CourseWorks Pair Formation September 8, 2009 COMS W4156 40 Upcoming Deadlines • Teams announced September 22nd • Team project concept due September 29th • Project concept feedback by October 6th First iteration begins October 6th September 8, 2009 COMS W4156 41 COMS W4156: Advanced Software Engineering Prof. Gail Kaiser Kaiser+4156@cs.columbia.edu http://bank.cs.columbia.edu/classes/cs4156/ September 8, 2009 COMS W4156 42