Presentation is loading. Please wait.

Presentation is loading. Please wait.

CS427: Software Engineering I

Similar presentations


Presentation on theme: "CS427: Software Engineering I"— Presentation transcript:

1 CS427: Software Engineering I
Grigore Rosu

2 Course staff Instructor: Grigore Rosu
Teaching and research on formal methods, programming languages, software engineering Teaching Assistants (TAs - alphabetically) Tao Mo Daejun Park Qing Ye Yi Zhang

3 Recent past course staff
Instructors Tao Xie, Darko Marinov, Danny Dig, Ralph Johnson TAs Qing Ye, Ali Kheradmand, Jayasi Mehar, Boyang Chen, August Shi, Farah Hariri, Semih Okur, Wenbo Yu, Qian Cheng, Boyang Peng, Shy-Yauer Lin, David (Wei) Yang, Jingning Zhang, Owolabi Legunsen, Amarin Phaosawasdi, Xiaoyu Chen, Dasgupta, Sandeep, Caius Brindescu, Nick Chen, Samira Tasharofi, Rajesh Kumar, Yun Young Lee, Cosmin Radoi, Shin Hwei Tan, … We’ll be building on their material

4 Today’s goals Meet the course staff Present some course logistics
What is software engineering? What is in CS427? Should you take it or not? How can you succeed (or fail) in it?

5 Electronic communication
Announcements, questions, answers Piazza You have been added automatically to Piazza If you don’t want to be added, please me asap You can ask any questions, even anonymously This is how we prefer to set up our individual meetings with you, too (send private messages) Compass Class-wide announcements (via )

6 No textbook, but yes … reading
No textbook required Some (text)books recommended See Wiki Required reading linked from Schedule Lots of easy reading: “broad but shallow” Reading will be on the EXAM Some reading even for this lecture (read it)

7 Grading For 3 hours of credit For 4 hours of credit
Project - 40% Machine problems - 30% Final exam - 25% Quizes - 5% Class / piazza participation - 3% gives as extra-credit For 4 hours of credit Larger project or book report For fairness, we report all cheating Messing with git history to pretend your MP/homework was handled before deadline is considered CHEATING More info on Wiki

8 Team project Teamwork is mandatory in this course
We make larger teams (usually ~8 students) May use CATME (Brian Bailey) for team forming The goal is to have realistic experience Courses that satisfy team component Traditionally: 427 (& 428/429), 493 (& 494) Could do senior thesis instead of these courses Several more: 445, 465, 467, 498 section on cloud computing Additional courses will be added soon

9 Prerequisites Official description is outdated
CS373 has merged with CS374 CS225 is good for job interviews but not strongly required for us If in doubt, please discuss with me

10 Group Discussion: Most Important Skills for A Software Engineer/Developer
Requirement: Get into a group of three neighboring students

11 Group Discussion: Most Important Skills for A Software Engineer/Developer
Requirement: Get into a group of three neighboring students More??

12 Group Discussion: Most Important Skills for A Software Engineer/Developer
Requirement: Get into a group of three neighboring students Designate a student to be a scribe Share and discuss respective answers together with “Why such answers” Reach group consensus on the top 3 skills

13 5 minutes for the above steps
Group Discussion: Most Important Skills for A Software Engineer/Developer Requirement: Get into a group of three neighboring students Designate a student to be a scribe Share and discuss respective answers together with “Why such answers” Reach group consensus on the top 3 skills Will call for volunteer groups or randomly pick groups 5 minutes for the above steps

14 One Example (John Sonmez) of Most Important Skills for A Software Engineer/Developer
Solving Problems Teaching Yourself (learning to learn) Naming (building abstractions) Dealing with People

15 Another Example (Matt Weisfeld) of Most Important Skills for A Software Engineer/Developer
Company sizes: Small (<=10 employees), Medium (>10,<=100), Large (>1000) What are the most important skills (technical, soft skills or otherwise) you look for in hiring a programmer? Do you focus on a specific programming language or technology (i.e., would you pass on a good programmer who lacks a specific skill that your company uses or would you train them)? How important are the soft skills (writing, presentation and other communications skills)? Do your programmers create new code (product) or are they working on maintaining existing code implementing and implementing third-party products?

16 1. What are the most important skills you look for in hiring a programmer?
Large Companies 4-Year college degree, strong background, experience, passionate about technology, professionally driven, articulate & well-spoken. Combination of technical and soft skills. Fundamentals of programming logic; ability to apply fundamentals to ANY code base they encounter. Medium Companies Ability to: solve problems; learn new technologies; find solutions to problems using the internet. Mindset of efficiency and creativity. Small Companies Decent team player. Easy to get along with. One difficult employee can create a whole ton of problems. Most skills can be learned and improved – what are often times hard to change are a person’s nature and character… Interpersonal skills important. Bottom Line: 4-year college degree (large companies), passion for programming, interpersonal skills, problem solver, team player

17 2. Do you focus on a specific programming language or technology?
Large Companies Not really. Expect developers to be versatile and able to learn new technologies as long as they are similar (e.g., Java developer to be able to dive into .NET). Fundamentals of programming logic and the ability to apply those fundamentals to ANY code base they encounter. Medium Companies Depends on need. Programmer who can jump between languages is valuable; they are expected to have some experience with a language they’re applying for, even if just personal. Too many language and environment nuances; not enough profit in training someone from scratch. Small Companies It’s OK to train somebody, if you see other skills that you highly value. Expecting C++ programmer to pick up Java should be a safe bet, but, it could take some time to become proficient. There is also the environment issue, such as Linux versus Windows. A person who has been exclusive to one can pick up the other, and it’s worth it to train them if that’s an issue. Bottom Line:  Programming logic required. Sometimes prefer specific technologies. Programmers expected to work in most environments.

18 3. How important are the soft skills (writing, presentation, other communications skills)?
Large Companies Soft skills extremely important. Once established as technically apt, soft skills are what generally drives promotions. Communication skills very important, presentation skills less so. Medium Companies Depends on the level of the programmer. For someone junior, 90% coding and general aptitude, 10% soft skills. For someone more senior soft skills significant. Small Companies Soft skills can never hurt; often important. Even if a programmer can’t make Word/PowerPoint documents, they should be able to understand and communicate the big picture and how it fits into the overall pieces of the organization. Bottom Line: Soft skills may ultimately be the most important skill, especially as you move up the ladder in an organization.

19 4. Do your programmers create new code (product) or are they working on implementing and maintaining business systems (or a little of both)? Large Companies Separate teams called SM (Service Management) for application maintenance. Best developers almost always creating new code. Medium Companies Mostly new code, but there is some systems work. Small Companies A little of both. Many companies talk about new code, but many programmers end up maintaining existing code. Whatever is or has a very high chance of bringing in revenue gets the attention. Writing new code in established businesses often difficult. In many cases, new software comes from purchasing from smaller companies. That leads to the idea that new code comes from smaller and newer companies, and maintenance comes from established companies. Bottom Line: Companies looking for programmers to maintain code and create new code (but watch out what “new code” means).

20 Desirable Characteristics of Employees (e.g., at Google)
“the No. 1 thing we look for is general cognitive ability, and it’s not I.Q. It’s learning ability. It’s the ability to process on the fly. It’s the ability to pull together disparate bits of information.” “The second is leadership — in particular emergent leadership as opposed to traditional leadership. When faced with a problem and you’re a member of a team, do you, at the appropriate time, step in and lead. And just as critically, do you step back and stop leading, do you let someone else? Because what’s critical to be an effective leader in this environment is you have to be willing to relinquish power.” - humility and ownership

21 What is (not) S.E.? Not just software programming Not just a process
Individual vs. team Not just a process Field that studies several different processes

22 Some definitions of S.E. IEEE 610 (standard on SE terminology), Wikipedia: “The application of a systematic, disciplined, quantifiable approach to the design, development, operation, and maintenance of software, and the study of these; that is, the application of engineering to software.” Bauer: “The establishment and use of sound engineering principles in order to obtain economically software that is reliable and works efficiently on real machines.” “Software engineering is the part of computer science which is too difficult for the computer scientist.” 

23 Developing software (Developing) Product (Learning) Process
CS423 (Operating Systems) CS426 (Compiler Construction) ... (many other courses on technical topics) (Learning) Process CS242 (Programming Studio) CS427/8 (Software Engineering I/II) CS465 (User Interface Design) … (many other courses with team projects) (Dealing with) People

24 Software varies Size How humans interact with it
Requirements stability/knowledge Need for reliability Need for security Portability Cost

25 Example: Microsoft Powerpoint
Size: ? Interactiveness: ? Requirements: ? Reliability: ? Security: ? Portability: ? Cost: ?

26 Example: Microsoft Powerpoint
Size: large Interactiveness: high Requirements: frequent new features Reliability: moderate Security: low (at least used to be) Portability: high Cost: high

27 Example: Space shuttle software
Size: moderate to large Interactiveness: low Requirements: stable Reliability: very high Security: low (at least for now) Portability: low (until recently; see NASA’s CFS) Cost: high

28 Example: Online shopping software
Size: moderate Interactiveness: high Requirements: frequent new features Reliability: high Security: high Portability: low Cost: low

29 Your example Size: Interactiveness: Requirements: Reliability:
Security: Portability: Cost:

30 Software process IEEE 1074 (standard for developing software life cycle processes): “A set of activities performed towards a specific purpose” Pressman: “A framework for the tasks that are required to build high- quality software” Johnson: “The steps a particular group follows to develop software”

31 Activities in IEEE 1074 (1) Project Management Development
Project initiation Project monitoring and control Software quality management Development Requirements Design Implementation

32 Activities in IEEE 1074 (2) Post-development Integral processes
Installation Operation and support Maintenance Retirement Integral processes Verification and validation Software configuration management Documentation development

33 Defined processes eXtreme Programming (XP) – we follow in cs427
Rational Unified Process Scrum Cleanroom Bazaar

34 Purpose of course Be able to join a software project group and follow their process Goals Learn a particular process (XP) Learn steps common to most processes Software configuration management (SCM), testing, metrics, documentation, reverse engineering, refactoring Learn how to follow a process Learn how to change/improve a process

35 Two-course sequence CS427 CS428
Configuration management, testing, metrics, debugging, reverse engineering, refactoring, documentation Work with an existing large software project CS428 Requirements, architecture, design, documentation, management Start a new project from scratch

36 Project Learn architecture of large software project
iTrust (different from last year: K) Learn modern SE practices - SCM, unit testing, automated build, documentation, pair programming, refactoring Learn modern SE environment – IntelliJ Learn a process – XP (eXtreme Programming) Start at bottom and work your way up

37 Why iTrust ? Open-source, well-documented project Notes:
Role-based healthcare web application Related to a practice covered in cs427 Unit tests in JUnit Package management with Maven Notes: Different from previous years (K, Jenkins, OpenMRS,…) Students always hated the project used in CS427 

38 Semester outline Homework assignments Project Final Exam
Learn tools and practices for the project Work first individually and later in pairs; will tell you when MP0 will be out TODAY, due in a week Let us know if you run into permission problems Project Add a feature to the selected codebase Work in larger teams Final Exam Quizes distributed randomly throughout the class

39 Potential “pain” points
Reading Goal: learn from experience of others Approach: check previous exams and keep up with the reading Teams Goal: experience working in a larger team Approach: make your team “jell” Project Goal: work with an existing large codebase Approach: start using/learning the code on github early; ask questions early, main developers here

40 Summary course info Wiki Grade Quizes (5%), final exam (25%), MPs (30%), project (40%) 3% extracredit from participation (class, piazza) For 4 hours of credit: additional work MP0 To be released today before midnight: check Wiki Due in one week About building and trying out iTrust


Download ppt "CS427: Software Engineering I"

Similar presentations


Ads by Google