Software Engineering I SENG201
Lecture 1 – Introduction February 21, 2022
Copyright By PowCoder代写 加微信 powcoder
1. Course administration
2. Why this course
3. Introduction to software engineering
1. Course administration
2. Why this course
3. Introduction to software engineering
Teaching staff
• Lecturers
– (course coordinator + part 2)
• Erskine 210, – (part 1)
• Erskine 314, • Tutors (typically two tutors per lab session)
– MorganEnglish(seniortutor)
• Erskine 324,
Fast slide
See lecture
Casual tutors
Danita Sun Langlands
Course format
• Lectures
– 3 sessions per week, 50 minutes
– Respect your class mates (Code of Conduct on Learn)
– 1 session per week/per student, 2 hours
– Self-directed work based on handouts and Quiz Server
Fast slide
– Start this week (lab cycles start on Thursdays)
• Labs and lectures not aligned – get familiar with concepts before practicing
• Optional Lab 0: introductory lab on Linux + command line before Lab 1
• First lab (Lab 1): Thursday, February 24
• No lab in last and second-last week of course (last lab: May 20)
– Respectyourtutors
Communication with teaching staff
• Before, during, after lectures and labs; Learn; drop-in (office) – Classrepresentative?
• E-mail – we can only reply if (and only if) email contains
– Meaningful subject: “[SENG201]
– Greeting + name(s): “Dear|Hello|Hi
– Sufficient details to understand message
– Your full name + student ID
Fast slide
Assessment
• Midterm/lab test (20%)
– Quiz Server (format similar to labs), 2 hours, open-book
Fast slide
– Date: March 28, 2022 (6:30pm – 8:30pm) in Erskine computer labs
– Completion of all labs (2 week after release): 5 bonus marks on test
• Project (30%)
– In pairs; instructions released around March 29
– Due: May 23, 2022, 5:00pm (penalties as outlined in instructions)
– Demos: Week 12 (during lecture/lab times)
• Final exam (50%)
– 2 hours, open-book
– Date: TBD
Recommended readings – software engineering
• Text books
– I.Sommerville.
Software Engineering
– R.PressmanandB. Engineering: A Practitioner’s Approach
– D.PiloneandR.Miles Software Development
• Additional readings
– Mentioned in course notes (papers, blogs, etc.)
– Act like a professional engineer* – “Read, Read, Read”
*P. Kruchten (2015): Lifelong Learning for Lifelong Employment. IEEE Software
Recommended readings – Java
• Text books
– C.Horstmann.
Big Java – Early Objects
– B. McLaughlin et al.
Object-Oriented Analysis & Design (on Learn)
• Additional readings
– Programmingblogs,websites
– Technical documentation
– Developer communities, e.g., Stack Overflow
How to succeed
• Attend lectures
– Lecture notes on Learn, text books provide additional material
– But: attending lectures is not enough (labs and self-study)
• Code examples from lectures
– After each lecture, code examples from lectures
– Examples in lectures are often incomplete
• Attend labs
– Won’t be able to finish during lab times (remember: 15pts ≈ 150 hours)
– Start working on labs as soon as they are released
– Uselabslotmainlyforgettinghelp
– Some labs will be longer and require more work than others
1. Course administration
2. Why this course
3. Introduction to software engineering
Where have you used software today?
Were you happy?
Were you unhappy?
Software engineering ≠ programming Small systems can be programmed
Large + complex systems must be engineered
Think about it
Technologies (programming languages, storage, communication)
Quality (bugs, response time, etc.)
Size and complexity
(~8 MLOC, ~30k files)
Domain knowledge (physics, electronics, medicine, customers)
Another example: YouTube (~12k views/second)
Technologies (web and video server, operating systems, languages, etc.)?
Bottlenecks (database(s), disk input/output, memory, etc.)?
Quality (scalability, load balancing, etc.)
http://highscalability.com/youtube-architecture
Think about complexity and “need for speed”
https://www.visualcapitalist.com/millions-lines-of-code/ https://www.visualcapitalist.com/how-long-does-it-take-to-hit-50-million-users/
Why should we worry
• Projects “fail”
– Succeed:25%-30%
– Fail:25%-30%
– Compromised: 40% – 50%
• Big budget projects often more likely to fail
Unhappy customers Stressed engineers
Famous failure (one of many) in 1996
https://www.youtube.com/watch?v=gp_D8r-2hwk ARIANE 5 Flight 501 Failure Report by the Inquiry Board
Financial losses due to low quality software
Report: Software failure caused $1.7 trillion in financial losses in 2017
Why do software projects fail
• Project’s complexity, unmanaged risks
• Unrealistic, unarticulated project goals
• Inaccurate estimates of resources
• Badly defined requirements
• Poor project management, poor reporting of project status
• Use of immature technology
• Sloppy development practices
• Poor communication among stakeholders
• Stakeholder politics, commercial pressure
Course objectives
Provide overview of software engineering1 Introduce object-oriented development (in Java)2 Introduce analysis and design with UML
Explore software engineering techniques and tools
1But not about latest technologies, tools, hypes, etc. (not a vocational training): we cover fundamentals and principles that remain stable 21 2But not a “Java course” per se; will try to stay general: we cover software engineering “theory” to motivate programming
Our journey
First half of course
Software engineering overview
Introduction to Java
Some Java details
Objects and encapsulation
Decisions and equality
Iterations
Arrays and ArrayList
Interface classes (including collections)
Inheritance
Software testing
Exceptions in Java
Good design and coding practices
Second half of course
• Iterate over topics of first half
• Apply Java to implement SE concepts
• Apply what we have learned in project
A note on Java
• In lectures (basics in first half of course), but much more in labs
• Some Java topics only covered in labs, not in lectures
Teach yourself programming in 21 days
Fast slide
1. Course administration
2. Why this course
3. Introduction to software engineering
What is software engineering?
• Engineering discipline
– Covers all aspects of software production
– Systematicandorganisedapproach
– Utilizesappropriatemethodsandtools
– Dependsonproblem,constraints,resourcesavailable
• More definitions (D. Parnas, 1975)
– “Multi-person construction of multi-version programs”
– “People working together to create robust software for a client”
• Software engineering is human-centric
Software engineering is human-centric
• Time spent by software engineers
• Related challenges (examples)
– How to deal with group dynamics, heterogeneous teams?
– How to deal with cultural differences in global development?
– How to interact with different types of (non-technical) stakeholders?
Fast slide
Interacting with N others: number of interactions: N x (N – 1)
Software engineering must care about ethics
• Ethics of what and how we develop
– Commitment to health, safety, welfare of the public
– Can cause substantial harm to people, organizations, planet
– Examples
• Decisions related to the proper amount of user data to collect
• Balance functionality with potential adverse environmental effects
• Perform due diligence to reduce risks of critical security bugs
• Most Computer Science and Software Engineering topics map to ethics
Example “software” topics
Example ethical considerations
• Requirements and design • Development processes
• Algorithms, programming • Databases (and “big data”) • Computer vision
• Information assurance
• Honesty, respect
• Sustainability (energy usage) • Complexity and transparency • Fairness and contestability
• Accessibility
• Privacy and ownership
• Accountability
• Predictive policing
• Predicting recidivism
• Facial recognition
• Facebook
• Surveillance with COVID • Self-driving vehicles
• Cryptocurrencies
See also: https://www.infoq.com/articles/ethical-software-engineer/
Example Codes of Ethics from professional bodies
• ACM (Association for Computing Machinery) – Computer Science and Software Engineering
• IEEE (Institute of Electrical and Electronics Engineers) – Includes Software Engineering
The origins
• “Software crisis” in the 1950’s/1960’s
• : NASA Apollo flight software designer
• First “software engineering” conference in 1968 1968 – 2018
https://extras.computer.org/extra/mso2018050108s1.pdf
A (very) simplified history timeline
Risk- based/agile driven processes for shorter time- to-market
Model-driven development
Plan-driven software maturity models
Design of distributed systems
Integrated software systems engineering
Design of systems of systems
Highly incremental and iterative development
Design of data-intensive systems
Engineer software like hardware
Software as craft
Formality, “waterfall”
Productivity, reuse, objects
1950’s 1960’s 1970’s 1980’s 1990’s 2000’s 2010’s 2020’s
What makes a great software engineer
1. Course administration
2. Why this course
3. Introduction to software engineering
Cartoon of the day
Key lesson: Software development requires skills and expertise, and relies on sound theories and practices (hence, this course)
https://xkcd.com/1513/
程序代写 CS代考 加微信: powcoder QQ: 1823890830 Email: powcoder@163.com