Thursday, February 17, 2011

Software Engineering


Software Engineering (SE) (10%) For Computer Science Students


   SE1. Software design [core]
   SE2. Using APIs [core]
   SE3. Software processes [core]
   SE4. Software requirements and specifications [core]
   SE5. Software validation [core]
   SE6. Software evolution [core]
   SE7. Software project management [core]


   Recommended Books:
1.    Software Engineering by R.S. Pressman (This book has wide coverage of SE topics.)
2.    Software Engineering by Somerville (The book emphasizes on practical SE )

 Software engineering is the discipline concerned with the application of theory, knowledge, and practice for effectively and efficiently building software systems that satisfy the requirements of users and customers. Software engineering is applicable to small, medium, and large-scale systems. It encompasses all phases of the life cycle of a software system. The life cycle includes requirement analysis and specification, design, construction, testing, and operation and maintenance.
Software engineering employs engineering methods, processes, techniques, and measurement. It benefits from the use of tools for managing software development; analyzing and modeling software artifacts; assessing and controlling quality; and for ensuring a disciplined, controlled approach to software evolution and reuse. Software development, which can involve an individual developer or a team of developers, requires choosing the tools, methods, and approaches that are most applicable for a given development environment.
The elements of software engineering are applicable to the development of software in any computing application domain where professionalism, quality, schedule, and cost are important in producing a software system.

SE1. Software design [2%][core]
Minimum core coverage time: 8 hours
Topics:
  • Fundamental design concepts and principles
  • Design patterns
  • Software architecture
  • Structured design
  • Object-oriented analysis and design
  • Component-level design
  • Design for reuse
Learning objectives:
  1. Discuss the properties of good software design.
  2. Compare and contrast object-oriented analysis and design with structured analysis and design.
  3. Evaluate the quality of multiple software designs based on key design principles and concepts.
  4. Select and apply appropriate design patterns in the construction of a software application.
  5. Create and specify the software design for a medium-size software product using a software requirement specification, an accepted program design methodology (e.g., structured or object-oriented), and appropriate design notation.
  6. Conduct a software design review using appropriate guidelines.
  7. Evaluate a software design at the component level.
  8. Evaluate a software design from the perspective of reuse.
SE2. Using APIs [1%] [core]
Minimum core coverage time: 5 hours
Topics:
  • API programming
  • Class browsers and related tools
  • Programming by example
  • Debugging in the API environment
  • Introduction to component-based computing
Learning objectives:
  1. Explain the value of application programming interfaces (APIs) in software development.
  2. Use class browsers and related tools during the development of applications using APIs.
  3. Design, implement, test, and debug programs that use large-scale API packages.
Minimum core coverage time: 2 hours
Topics:
  • Software life-cycle and process models
  • Process assessment models
  • Software process metrics
Learning objectives:
  1. Explain the software life cycle and its phases including the deliverables that are produced.
  2. Select, with justification the software development models most appropriate for the development and maintenance of a diverse range of software products.
  3. Explain the role of process maturity models.
  4. Compare the traditional waterfall model to the incremental model, the object-oriented model, and other appropriate models.
  5. For each of various software project scenarios, describe the project's place in the software life cycle, identify the particular tasks that should be performed next, and identify metrics appropriate to those tasks.

SE4. Software requirements and specifications [3%] [core]
Minimum core coverage time: 4 hours
Topics:
  • Requirements elicitation
  • Requirements analysis modeling techniques
  • Functional and nonfunctional requirements
  • Prototyping
  • Basic concepts of formal specification techniques
Learning objectives:
  1. Apply key elements and common methods for elicitation and analysis to produce a set of software requirements for a medium-sized software system.
  2. Discuss the challenges of maintaining legacy software.
  3. Use a common, non-formal method to model and specify (in the form of a requirements specification document) the requirements for a medium-size software system.
  4. Conduct a review of a software requirements document using best practices to determine the quality of the document.
  5. Translate into natural language a software requirements specification written in a commonly used formal specification language.
 SE5. Software validation [1%] [core]
Minimum core coverage time: 3 hours
Topics:
  • Validation planning
  • Testing fundamentals, including test plan creation and test case generation
  • Black-box and white-box testing techniques
  • Unit, integration, validation, and system testing
  • Object-oriented testing
  • Inspections
Learning objectives:
  1. Distinguish between program validation and verification.
  2. Describe the role that tools can play in the validation of software.
  3. Distinguish between the different types and levels of testing (unit, integration, systems, and acceptance) for medium-size software products.
  4. Create, evaluate, and implement a test plan for a medium-size code segment.
  5. Undertake, as part of a team activity, an inspection of a medium-size code segment.
  6. Discuss the issues involving the testing of object-oriented software.
Minimum core coverage time: 3 hours
Topics:
  • Software maintenance
  • Characteristics of maintainable software
  • Reengineering
  • Legacy systems
  • Software reuse
Learning objectives:
  1. Identify the principal issues associated with software evolution and explain their impact on the software life cycle.
  2. Discuss the challenges of maintaining legacy systems and the need for reverse engineering.
  3. Outline the process of regression testing and its role in release management.
  4. Estimate the impact of a change request to an existing product of medium size.
  5. Develop a plan for re-engineering a medium-sized product in response to a change request.
  6. Discuss the advantages and disadvantages of software reuse.
  7. Exploit opportunities for software reuse in a given context.
Minimum core coverage time: 3 hours
Topics:
  • Team management
    • Team processes
    • Team organization and decision-making
    • Roles and responsibilities in a software team
    • Role identification and assignment
    • Project tracking
    • Team problem resolution
  • Project scheduling
  • Software measurement and estimation techniques
  • Risk analysis
  • Software quality assurance
  • Software configuration management
  • Project management tools
Learning objectives:
  1. Demonstrate through involvement in a team project the central elements of team building and team management.
  2. Prepare a project plan for a software project that includes estimates of size and effort, a schedule, resource allocation, configuration control, change management, and project risk identification and management.
  3. Compare and contrast the different methods and techniques used to assure the quality of a software product. 

No comments:

Post a Comment