| CSC 301 Software Engineering II
|
4 cr. W |
This course is an extension of CSC 300 and focuses on the implementation of the software
principles covered therein. The course explores state-of-practice and cutting-edge
techniques and tools related to the design, implementation, and maintenance of software systems.
Topics include: design patterns, Model Driven Architecture (MDA), test-driven development,
agile development, extreme programming (XP), and aspect-oriented design. An ongoing group
project will be used to gain practical experience with current software engineering practices
and a variety of IDEs and CASE tools. Three lecture hours per week and three hours of
scheduled laboiratory per week, plus programming work outside of class.
Prerequisite: CSC 300; CSC 263 recommended.
Goals:
The purpose of this course is to develop students' understanding of
modern methodologies, processes and techniques encountered in the development of large-scale
software systems. The goals of the course are:
- CG1: to develop an appreciation for the process of large-scale software development;
- CG2: to develop the skills and knowledge necessary to analyze, design, verify and
document large software systems;
- CG3: to give students experience in making and critiquing presentations;
- CG4: to give students experience in team software development.
- CG5: to develop students' writing skills in the context of all aspects of the
software development process.
Objectives:
Upon successful completion of the course, the student will have:
- CO1: demonstrated knowledge of the software development life cycle and its aspects and phases;
- CO2: demonstrated knowledge of the major models used in the development of large-scale software;
- CO3: demonstrated an appreciation of the factors affecting team selection and performance;
- CO4: demonstrated knowledge of the tools and techniques of software development,
specifically including UML;
- CO5: demonstrated knowledge of modern design paradigms, specifically including the Unified Process;
- CO6: properly utilized a modern CASE tool environment, specifically including UML modeling;
- CO7: developed and executed a plan for product testing and evaluation;
- CO8: participated in the development and presentation of group projects.
- CO9: demonstrated the ability to critically analyze materials ranging from project proposals
to scholarly research and to express this analysis clearly in written form.
Topics:
- scope of Software Engineering
- historical and economic aspects of Software Engineering
- "aspect" vs. "phase" -- uncoupling of tasks from when or where the tasks occur
- aspects: requirements, analysis and design, implementation, maintenance
- professional code of conduct
- social context of software development
- ACM and IEEE Code of Ethics
- ethical issues
- software life-cycle models
- code and fix
- waterfall
- rapid prototyping
- extreme programming, agile processes
- sychronize and stabilize
- spiral
- iteration and incrementation
- software development process
- Unified Process
- object-oriented paradigm vs. structured programming paradigm
- workflows: requirements, analysis, design, implementation, testing
- post-delivery maintenance
- retirement
- phases of the Unified Process: inception, elaboration, construction, transition
- one- vs. two-dimensional life cycle models
- Capability Maturity Models (CMM)
- ISO standards
- software development teams
- team organization paradigms
- democratic teams
- classic chief-programmer-led teams
- Synchronize and Stabilize teams
- Extreme Programming teams
- choosing an appropriate organization
- social and ethical issues
- Tools of the Trade
- conceptual tools
- stepwise refinement
- cost-benefit analysis
- software metrics
- CASE tools
- configuration and version control systems
- build tools
- the role of CASE technology in software development
- social and ethical issues
- Testing
- quality issues
- non-execution-based testing
- execution-based testing
- black-box, white-box (clear-box)
- regression testing
- focus on testing: utility, reliability, robustness, performance, correctness
- correctness proofs
- role of quality assurance in testing
- social and ethical issues
- Modules and Object Design
- definition of a module
- cohesion
- coupling
- encapsulation of data
- abstract data types (ADTs)
- information hiding
- object-oriented vs. non-object-oriented design
- inheritance
- polymorphism
- Reusability
- reuse concepts and degrees
- impediments to reuse: what makes code hard to re-use
- objects in the context of reuse
- reuse during design and implementation
- application frameworks
- design patterns
- software architecture
- component-based software engineering
- social and ethical issues
- Portability
- hardware and operating system incompatibilities
- techniques for addressing portability needs
- Planning and Estimating
- estimating time and cost
- metrics for size
- techniques for cost etimation
- COCOMO, COCOMO II
- tracking estimates
- project management plan components
- IEEE Software Project Management Plan
- planning testing
- establishing documentation standards
- CASE tools for Planning and Estimating
- testing and evaluating the software project mamnagement plan
The emphasis of the course is on state-of-practice methodologies and patterns, the application
of which will result in cost-effective and efficient development of software systems that meet
user needs and expectations and are also flexible and maintainable. Extensive laboratory
work, group discussion time and group presentations conducted as part of the scheduled laboratory
sessions are an integral component of the course, serving to reinforce the concepts and techniques
presented in lectures. Weekly writing assignments based on assigned articles and Internet
research will serve to broaden students' exposure to recent developments in the field and to
social and ethical aspects of software engineering.
All programs must conform to departmental guidelines for program
design and implementation, and all lab reports must conform to guidelines announced in class.
Regardless of numeric average, a student will not be eligible for a passing grade
unless he or she has submitted a lab report for every programming assignment.
The course grade will be determined using the following approximate
weights: project reports and deliverables: 20%; presentations: 10%; midterm and final
exam: 40%; homework: 10%; papers: 20%.
Web Resources:
www.acm.org
www.ieee.org
http://www.southernct.edu/organizations/rccs/
Bibliography:
- Beck, Kent; Andres, Cynthia. Extreme Programming Explaioned: Embrace Change.
Second Edition. Addison-Wesley Professional, 2004.
- Booch, Grady; Rumbaugh, James; Jacobson, Ivar. The Unified Modeling Language User
Guide. Second Edition. Addison-Wesley, 2005.
- Dennis & Wixom. Systems Analysis and Design. John Wiley & Sons, 2000.
- Dikel, David M.; Kane, David; Wilson, James R. Software Architecture:
Organizational Principles and Patterns. Prentice-Hall, 2001.
- Fowler, Martin, with Kenneth Scott. UML Distilled: A Brief Guide to the
Standard Object Modeling Language. Second Edition. Addison-Wesley, 2000.
- Gamma, Helm, Johnson & Vlissides. Design Patterns. Addison-Wesley, 1995.
- Hoffer, et. al. Modern Systems Analysis & Design. Second Edition. Addison-Wesley, 1999.
- Peters & Pedrycz. Software Engineering: An Engineering Approach. John Wiley & Sons, 2000.
- Pfleeger, Shari Lawrence. Software Engineering: Theory and Practice.
Second Edition. Prentice-Hall, 2001.
- Pressman, Roger S. Software Engineering: A Practitioner's Approach. Fifth Edition.
McGraw-Hill, 2001.
- Schach, Stephen R. Classical and Object-Oriented Software Engineering. Fifth Edition.
McGraw-Hill, 2002.
Salem State Home •
Computer Science Home •
Faculty •
Computer Studies Major •
Flow Sheet
Computer Studies Minor •
Courses •
Course Sequence Diagram •
Computer Laboratories
|