ppt - Programming Systems Lab

advertisement
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
Download