COM 401 Software Engineering

Home

 

Gediz University, Computer Engineering Department
Fall Semester 2014
Lecture: Monday: 13:00 - 15:45, D-Z06 
Lab A/B: Tuesday
: 13:00 - 14:45 / 15:00 - 16:45, E-NETWRLAB
 

   
   Instructor: Halûk Gümüşkaya Lab Instructor / Assistant: Gökhan Akyol / Arzum Karataş
   Office: D107 Office:
   Office Hours: Office Hours:
   Phone: 0232-355 0000 - 2305 Phone:
   e-mail: haluk.gumuskaya@gediz.edu.tr e-mail:
                      
bulletCourse Description
bulletLecture Schedule
bullet Prerequisites
bulletRegulations and Policies
bullet Lecture Schedule
 
bullet Textbooks
 
bulletTools and Development Environments
 
bulletGrading
 
bulletProject
 

   Course Description

An overview of software engineering, software life cycle, and methodologies. Modeling with UML and design patterns, project management and software development, team organization, requirements elicitation and analysis, system design, object design, software testing. Software engineering concepts are realized on a nontrivial team design project in which a group of students implements a system from its specification and design using a UML modeling and implementation tool.

  Course Objectives

    This course is an introduction to software engineering using a large team project.
    You will briefly learn classical approaches in software development:

bullet

The phases of software development (the software "lifecycle")

bullet

Software requirements elicitation, analysis and specification

bullet

Design concepts and techniques, including Unified Modeling Language (UML) and Design Patterns

bullet

Implementation practices such as using a modeling tool with design patterns and frameworks

bullet

Testing, verification, and quality assurance (QA) techniques

bullet

Software tools for software engineering and rapid development

bullet

Team and management skills for completing a project in a large team

 

    You will mainly learn and apply much modern agile approaches and techniques in software development: 

bullet

Software Engineering Principles by understanding new challenges, opportunities, and open problems of SaaS (Software as a Service)

bullet

Develop a SaaS project from conception to public deployment using an Agile Approach

Solve non-technical customer problems

Server side: Ruby on Rails *

Client side: HTML, CSS, AJAX, JavaScript

Deploy using Cloud Computing



* Wikipedia: "In 2011, Gartner Research noted that despite criticisms and comparisons to Java, many high-profile consumer web firms are using Ruby on Rails to build agile, scalable web applications. Some of the largest sites running Ruby on Rails include Github, Yammer, Scribd, Groupon, Shopify, and Basecamp. As of March 2013, it is estimated that about 211,295 web sites are running Ruby on Rails."

 

bullet

Important Note:

I gave my first Software Engieering (SENG) course about 10 years ago at Fatih University. There were 54 students in my first SENG course. Some (5 as far as I know in 2013) of them obtained Ph.D. degrees and became academicians, and some others became engineers and other professionals. There were 11 project teams following agile (like XP) or heavy (like RUP) software development approaches in that course project. They put their projects' work products to their project web sites. One of the best project web sites still lives today. This web site has their work products; by looking at these products we can learn their products and software development process.

 

My course web pages, the communication between me and students, this student project web site and their work products give a quite good idea about typical development techniques (like Java, graphical notation UML, Design Patterns, ..), processes and work products advised for a good process-based software project development in last 10 years. I finally followed this approach in the last year: Look at the syllabus, overview and introduction lecture slides of COM 401 Software Engineering course at Gediz University.

 

We have seen many new developments in the last 10 years:

Developing Software as a Service (SaaS)
         Enabling technologies:
            - more web centric software development and new web technologies (Ruby, …)
            - service oriented architecture and web services
            - cloud computing
            - hardware/software virtualization, multi-core computing, …
Agile Software Development as a first class citizen
          Enabling technologies:
             - highly productive frameworks and tools remove obstacles to practicing Agile development
             - software development based on open source projects and legacy projects
 

Now, it is time for a quite big deviation from my 10-year classical teaching approach in software engineering courses that I have been giving since 2003...

   Prerequisites

None (officially, but it requires knowledge and practical experience gained in COM 303 Advanced Programming)

   Lecture Schedule (tentative)

bullet

This is the tentative lecture schedule. Please check this page at least once a week during the semester.

   Textbooks

    Required

bullet

Engineering Software as a Service: An Agile Approach Using Cloud Computing, Armando Fox, David Patterson**, First Addition, Strawberry Canyon LLC, 2014.
 

(** A famous Computer Architect coauthoring a Software Engineering textbook reflecting new software development approaches and techniques!)

    Recommended

bullet

Object-Oriented Software Engineering: Conquering Complex and Changing Systems, Using UML, Patterns, and Java, 3rd Edition, B. Brügge, A. H. Dutoit, Prentice-Hall, 2010. (My classical textbook that I used since 2003)

bullet

Practical Software Engineering: A Case Study Approach, L. Maciaszek, B. L. Liong, Addison Wesley, 864 pages, 2004. (This was my second classical textbook).

bullet

Requirements Analysis and Systems Design, 3rd Edition, L. Maciaszek, Addison-Wesley, 656 pages, 2007.

bullet

Object-Oriented Software Engineering: Practical Software Development Using UML And Java, Timothy C. Lethbridge, Robert Laganiere, 2nd Edition, McGraw-Hill, 2004. resources 

bullet

Applying UML and Patterns: An Introduction to Object-Oriented Analysis and Design and Iterative Development, Craig Larman, Prentice Hall, 2004.

bullet

Software Engineering: An Object-Oriented Perspective, Braude, Ertic J., John Wiley, 2002. resources

bullet

...

   Tools and Development Environments

   Ruby on Rails Tools

bullet

Aptana Studio 3 - web application IDE, harnesses the flexibility of Eclipse and supports the latest browser technology specs such as HTML5, CSS3, JavaScript, Ruby, Rails, PHP and Python.

bullet

RubyInstaller for Windows - includes the Ruby language, an execution environment, important documentation.

bullet

Ruby Miner - Intelligent Ruby and Rails IDE.

    

   Project Management, Analysis, Design, Coding and Testing Tools 

    Several Behavior-Driven Development (BDD) and Test-Driven Development (TDD) tools will be used:

   

    Tools Used:

bullet

Pivotal Tracker - agile project management tool

bullet

Lo-Fi UI prototyping tools - UI and interaction design tools such as Lumzy and Indigo Studio 

 

bullet

Cucumber - testing tool for running automated acceptance tests

bullet

RSpec - testing tool for writing unit tests

bullet

Git - Version control system

bullet

GitHub and ProjectLocker - Subversion Hosting, Git Hosting and project management - Cloud Development Made Easy

   
    Other Possible Tools:

bullet

Velocity - capacity planning tool used in agile software development

bullet

Autotest - test automation tool

bullet

SimpleCov - test coverage measurement tool

   
    Some of the typical classical tools used in the past:

bullet

Eclipse, Enterprise Architect, Visual Paradigm, Rational Rhapsody, Together, JBuilder, ...

   Grading
  
   15 % : Homework Assignments
   20 % : Midterm
  
35 % : Project
  
30 % : Final Exam (a comprehensive exam at the end of the course)

   Project

   See the lecture schedule for the specific due dates of each milestone.

   The project milestones are described below:

bulletIteration 0: initial customer meetings
   1. Organize your team using Scrum
   2. Meet with customer to discuss app
   3. Summarize meeting and create initial User Stories on 3x5 cards
   4. Create public Pivotal Tracker project and enter initial User Stories
   5. Optional for bonus credit: Produce 2-minute video interview where customer describes problem your app will solve
   6. Create lo-fi UI Mockups and Storyboards for User Stories
   7. Populate initial public GitHub repo for your project
 
bulletIterations 1-3:  Team evaluation points:
   1. Project Management using Scrum
   2. Using Pivotal Tracker identifying subset of User Stories and completing them on this iteration and who owns each
   3. UI Mockups and Storyboards for User Stories
   4. Use of BDD+TDD to develop these stories
       4.1. BDD: Cucumber/Capybara/Mechanize - Acceptance and Integration Tests
       4.2. TDD: RSpec (Unit Tests)
       4.3. Coding: Software Quality (Code Smells, SOFA, Metrics):
              - Following Ruby coding style
              - Code Documentation using RDoc
              - Qualitative Code Evaluation: SOFA: Use reek to find code smells and refactor your code if necessary
              - Quantitative Code Evaluation:
                      - Calculate ABC Complexity using floog and refactor your code if necessary
                      -
Calculate Cyclomatic Complexity using saikuro and refactor your code if necessary
                      -
Use other quantitative metrics to improve your code quality 
   5. Upload project work products to public GitHub repository
   6. Deploy working project prototype to Heroku cloud platform
   7. Get feedback from customer and indicate how this will affect next iteration
   8. Team self-evaluation
 

Home