|
|
Gediz University, Computer Engineering
Department
Fall
Semester 2013
Lecture:
Tuesday:
14:00 - 16:45,
A-Z11, Lab:
Wednesday:
09:00 - 10:45,
E-NETWRLAB
|
|
|
Instructor: Halûk
Gümüşkaya |
Teaching Assistant:
Arzum Karataş |
Office:
D107 |
Office: |
Office Hours: |
Office Hours: |
Phone:
0232-355 0000 - 2305 |
Phone:
|
e-mail: haluk.gumuskaya@gediz.edu.tr |
e-mail: arzum.karatas@gediz.edu.tr |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
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:
|
The phases
of software development (the software "lifecycle")
|
|
Software
requirements elicitation, analysis and specification |
|
Design
concepts and techniques, including Unified Modeling Language (UML) and
Design Patterns |
|
Implementation practices such as using a modeling tool with design
patterns and frameworks |
|
Testing,
verification, and quality assurance (QA) techniques |
|
Software
tools for software engineering and rapid development |
|
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:
|
Software Engineering
Principles by understanding new challenges, opportunities, and open
problems of SaaS (Software as a Service)
|
|
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."
|
|
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)
|
This is the tentative lecture schedule.
Please check this page at least once a week during the semester. |
Textbooks
Required
Recommended
|
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) |
|
Practical Software Engineering:
A Case Study Approach,
L. Maciaszek, B. L. Liong, Addison Wesley, 864 pages, 2004. (This was my
second classical textbook). |
|
Requirements Analysis and Systems
Design, 3rd Edition, L. Maciaszek, Addison-Wesley, 656 pages, 2007. |
|
Object-Oriented Software Engineering: Practical Software Development
Using UML And Java, Timothy C. Lethbridge,
Robert Laganiere,
2nd Edition, McGraw-Hill, 2004.
resources
|
|
Applying
UML and Patterns: An Introduction to Object-Oriented Analysis and Design
and Iterative Development, Craig Larman, Prentice Hall, 2004. |
|
Software
Engineering: An Object-Oriented Perspective, Braude, Ertic J.,
John Wiley, 2002.
resources |
|
... |
Tools and Development Environments
Ruby on Rails Tools
|
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. |
|
RubyInstaller for Windows - includes the Ruby language, an execution
environment, important documentation. |
|
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:
|
Cucumber -
testing tool for running automated acceptance tests |
|
RSpec - testing tool for writing unit tests
|
|
Git - Version
control system |
|
GitHub and
ProjectLocker -
Subversion Hosting, Git Hosting and project management - Cloud Development
Made Easy |
Other Possible Tools:
|
Velocity - capacity planning tool used in agile software development
|
|
Autotest - test automation tool
|
|
SimpleCov - test coverage measurement tool
|
Some of the typical classical tools used
in the past:
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:
| Iteration 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 |
| Iterations 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 |
|