| CSC 300 Software Engineering I
|
4 cr. |
This course will explore in detail the software development process for large software systems
using modern software engineering principles. Topics include software development life cycle
models, tools and techniques for software engineering, the software development life cycle,
the Unified Process, testing/evaluation techniques, and evaluation metrics. Group design
projects will be used to gain understanding of course topics and experience with development tools.
Three lecture hours per week and three hours of scheduled laboratory per week, plus
programming and written work outside of class. Not open to students who have received
credit for CSC 265 or CSC 266.
Prerequisite: CSC 260.
Note: This course was previously numbered CSC 266.
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 and 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 engineering process.
Upon successful completion of the course, a student should know the activities and techniques
necessary to conduct the development of a large system, and should be able to select and apply
the appropriate tools required to effect the 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" - the 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
- synchronize 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
- focus of 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 estimation
- COCOMO, COCOMO II
- tracking estimates
- project management plan components
- IEEE Software Management Plan
- planning testing
- establishing documentation standards
- CASE tools for Planning and Estimating
- testing and evaluating the software project management 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 in the course 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:
Bibliography:
- 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
|