CSE 112: Advanced Software Engineering

Winter 2016 | University of California, San Diego CSE Department

Course Statement

This course covers the practice of modern software engineering techniques, in our particular case to modern Web application development. The course will study both the academic foundations of software engineering as well expose students to common problems in encountered by real world projects. The use of a quarter long class project with planned unknowns thrown at students will be useful to study how well academic techniques stand up under stress. The class will explore both plan up front methodology as well as incremental techniques collectively dubbed Agile. Less emphasis is placed on coding instead students should be comfortable with developing requirements, design, test planning, tooling, deployment, documentation, and even people oriented aspects such as team building. The course assumes previous programming background as well as Software Engineering basics from CSE110 or equivalent. The class will do its best to approximate real world conditions but provide and academic view from above. As such things are designed on purpose not to act in a text book fashion, this is part of the course and curve balls should be expected. In short if some things feel foreign to you then know that part is working and giving you a true edge in honing your software engineering skills.

Tentative Schedule

Week 1

  • Jan 05: Intro Lecture slides
  • Jan 07: Making a Software Engineerslides

Week 2

  • Jan 12: On Groups slides
  • Jan 14: SE Review & Meeting the Groups

Week 3

Week 4

  • Jan 26: User Focused Design Notes slides & Sommerville Slides Ch 3 Ch 4
  • Jan 28: Requirements
  • Jan 28: Peter Requirements JAD

Week 5

  • Feb 2: Medium Lecture slides
  • Feb 4: More on diagraming and planning, diagramming homework assignment
  • Feb 4: Progress Report and JAD

Week 6

  • Feb 9: Fog
  • Feb 11: Fog, Diagramming Homework Due
  • Feb 11: Progress Report and JAD

Week 7

  • Feb 16: First Big Reveal to Peter
  • Feb 18: Fog
  • Feb 18: Industry Visitor

Week 8

  • Feb 23: Midterm
  • Feb 25: Fog
  • Feb 25: Chaos

Week 9

  • Mar 1: Fog, Peter's Surprise
  • Mar 3: Fog

Week 10

  • Mar 8: Fog
  • Mar 10: Fog

Topics

  1. Overview What is Software Engineering?
    • Aspects
    • Challenges
    • History
    • Theory & Practice
  2. Software Processes
    • SD LifeCycle
    • Methodologies
    • Practical Considerations
      • Source Control
      • Building & Deploying
      • Defect Tracking
      • Estimates & Scheduling
      • Tooling
  3. Requirements
    • Discovering & Analyzing Requirements
      • Working with users and stakeholders
      • Functional and Non-functional requirements
      • Identifying and dealing with open issues
    • Requirements Specification
      • Use Cases & User Stories
      • Intro to UML: tools for analysis
      • Intro to Data Modeling
        • Relational Models
        • NoSQL Models
      • Intro to Ux Modeling
        • Wireframing
        • Prototyping
    • Requirement Validation
      • User Feedback
      • Analytics
      • Early hypothesis testing
  4. Architecture & Design
    • Overall Design Principles
      • DRY
      • Coupling & Cohesion
      • Separation of Concerns
    • Some Common Design Paradigms
      • Procedural/Structured/Modular
      • Object Oriented
      • Service Oriented
      • Functional
    • Design Patterns & Anti-Patterns
      • MVC
      • Factory
      • Singleton
      • etc.
    • More UML: tools for design
    • UI Design & Usability
    • Non-functional System Design Considerations
      • Security
      • Scalability
      • Reliability
      • Availability
    • Buy v Build Analysis
    • Deployment Considerations
      • On-Premise v Cloud v Hybrid
    • Provisioning Considerations
      • Perpetual v Service (SaaS, PaaS, IaaS)
    • Operational Considerations
      • Monitoring
      • Error reporting, log aggregation
  5. Implementation (Coding)
    • Coding Conventions & Standards
    • Security Considerations
    • Performance Considerations
    • Internationalization and Localization
    • Debugging, Exception Handling, Logging, Code Analysis
    • Unit Testing & Test Driven Development
    • Refactoring
    • Technical Debt
  6. Testing
    • Point of View: White Box, Black Box and Gray Box
    • Scope: Unit, Integration/System, Regression, Smoke, UAT
    • Test plans, test cases
    • Static Analysis
      • Code Reviews
      • Linting
      • Optimizing
    • Dynamic Analysis
      • Bounds checking
      • Profiling
      • Instrumenting
      • Code Coverage
    • Non-functional testing
      • Load & Stress
      • Penetration Testing
  7. Considerations Beyond SE
    • Go to market strategy
    • Buy in
    • Logistics and procedures
    • Buy vs build
    • Partnerships and channels
    • Incumbencies
    • Regulatory issues
    • Legal and licensing issues
    • Perception and philosophy issues

Class Project

To Be Revealed!

Class Tooling

  • DevChat: Slack (fixed)
  • Repository: Github
  • Bug Tracking: YouTrack
  • Agile Planning Tool: YouTrack (+ something else?)
  • Wiki: Repo-based
  • Development Language: JavaScript (fixed)
  • Development Stack: MEAN (MongoDB, Express, AngularJS, NodeJS) - (fixed from last year changeable?)
  • Unit Testing Framework: Jasmine, Karma or other
  • Package Management: NPM, Bower
  • Task Automation: GruntJS or Gulp
  • Deployment: TeamCity
  • Documentation: TBD
  • Deployment Environment: Heroku (fixed)
  • Logging: LogEntries, Loggly, or others
  • Monitoring: New Relic, Rollbar, or others
  • Diagramming: LucidChart, Gliffy and/or UXPin
  • Misc. Services: TBD based upon requirements

Textbooks of Interest

Other Resources

Contact Information

Prof. Thomas A. Powell

E-mail: tpowell@pint.com
Phone: 858.270.2086
On Campus Office Hours: Thursday 2-4PM @ CSE 2128 and by appointment
Off Campus Office Hours: By appointment @ PINT Main Office

Teaching Assistant

Alex Sokolov
E-mail: sokolov@ucsd.edu
Slack: @ta_alex
Office Hours: Thursday 2:30-4:00pm

Tutors

Pavan Kanekal
E-mail: pkanekal@ucsd.edu
Slack: @tutor_pavan
Tutoring Hours: 9:30-10:30am Mon/Wed in outside cse b240

Austin Sun
E-mail: acs008@ucsd.edu
Slack: @tutor_austin
Tutoring Hours: 2-3 friday in the cse basement

Andrew Du
E-mail: aadu@ucsd.edu
Slack: @tutor_andrew
Tutoring Hours: Tuesday/Thursday 12:30pm-1:30pm B260


Class Comm System