课程介绍课程特点:既是一门技术学课程,也是一门管理学课程;既具有理论性,也具有较强的实操性。课程目的:基本:掌握软件工程的基本概念和基本原理;掌握分析、设计、测试与维护软件系统的理论与方法;实践软件系统开发的全过程,构建一个软件系统。进一步:转变对软件的认识:程序系统;转变思维定式:程序员系统分析员/系统设计员;工程化训练:规范、准则、项目管理。需求获取、定义、建模、分析软件体系结构设计软件概要设计软件评审与测试软件评审/测试软件评审/确认软件详细设计软件构造软件项目管理软件工程人才分布示意图课程的主要内容:软件工程的产生、软件的生命周期、生命周期模型;软件开发各阶段的目标、任务、特点、步骤和文档;传统软件工程的基本思想,开发过程和步骤,应遵循的原则和准则;面向对象软件工程的基本思想、基本过程和基本模型;软件工程的管理技术。课程重点:掌握结构化方法开发软件系统的过程、步骤、应遵循的原则以及工具。1.9软件工程导论课程知识结构课程知识结构Chp.1软件工程学概述Chp.2可行性研究Chp.5总体设计Chp.7编码与测试(实现)Chp.8维护Chp.3需求分析面向对象的软件工程介绍Chp.13软件项目管理Chp.6详细设计Chp.4形式化说明技术教学安排:48学时讲授;课后作业和课后实验。考核:期末考试:70%;作业+分组实验:30%。教材:软件工程导论(5th),张海藩,清华大学出版社参考文献软件工程(第二版),齐治昌,高等教育出版社软件工程实践教程,谭庆平等,高等教育出版社先修课程:程序设计语言数据结构数据库原理与设计课程实验:实验题目:题目1:课程注册系统为高校教务管理部门开发一个选修课程注册管理系统。在每学期开学前,教务管理人员可利用该系统输入课程信息、设定课表(每门课的任课教师、上课地点、上课时间)。开学后,学生可以利用该系统查询课程和课表信息,在第一周内注册课程和取消对课程的注册。软件系统负责将学生所选课的列表通知计费系统以确定学生应缴纳的选课费用。在学期内,任课教师可随时查询选修其所授课程的学生的信息,学生可以随时查询课程信息、课表、本人已选课程列表,教务管理人员可以随时查询所有信息。学期结束,教师可登记学生考试成绩。题目2:航空定票系统为某家机票预订服务商开发一个机票预订和查询管理系统。该系统中的航班和机票信息由多家航空公司负责提供。客户通过上网方式查询航班时间表、机票可用信息、机票折扣信息,可以远程订票、退票、通过信用卡支付票款。客户分为三类:金牌客户、银牌客户和普通客户。普通客户通过订票积分至一定的额度可以逐步升级为银牌客户、金牌客户。不同类别的客户可享有不同的机票折扣。系统还必须每日、每周、每月给出机票销售的统计分析报表。题目3:试题库系统为高校某门课程开发试题库系统,要求:(1)试题有单选(4选1)、多选(5选2)、判断、填空等几类;(2)试题编辑。对每道试题可进行录入、修改、删除等操作;每一章的每一类题,题量有一个临界值,当系统中某一章的某类题量低于临界值时,应提示用户增加题目;(3)试卷生成。三种方法:(a)用户依次输入某章某类题的数量,系统随机抽题,依次写入试卷(txt文件);(b)用户打开题库,边阅读题目边抽题,抽出的题目一经确认,即写入试卷;(c)系统登记、保存已生成的完整试卷,用户可以直接抽取完整试卷。(4)试卷评价。记录每份已生成的完整试卷的考试情况,评价其难易程度。实验要求:按照基于数据流的软件工程的要求完成各阶段的主要文档,实现的程序能初步运行。分组进行,每组3~4人,自由组合,每组设项目负责人一个;每组抽签选择开发题目1、2或3,一组同学合作完成一个项目,每人负责项目中的1~2个开发步骤;工作步骤:问题初步定义和可行性研究需求分析(资源采集)界面原型设计概要设计详细设计实现与测试项目验收需要交付的文档:(1)可行性研究报告(2)项目开发计划(含小组成员分工)(3)需求规格说明书(4)概要设计说明书(5)详细设计说明书(6)数据库设计说明书(7)测试计划(8)测试分析报告(9)项目开发总结报告(10)系统源程序(11)操作手册建议开发步骤:可行性研究:用系统流程图描述系统的工作流程。从技术上和人员(分工)上简单说明项目的可行性。项目开发计划:项目时间(例如20个工作日),任务分解(每个任务需要的人数和时间),做项目开发的工程网络图和计划进度表,注明关键任务和关键路径。使用“瀑布模型”:需求分析:(1)获取需求:对8个方面的需求(A功能需求;B性能需求;C可靠性和可用性需求;D出错处理需求;E接口需求;F约束;G逆向需求;H将来可能提出的要求)进行获取、分析和记录,不必要的方面可以略去。(2)建立系统的逻辑模型:数据模型----数据字典和E-R图(数据规范到3范式);功能模型----功能级或进一步细化的数据流图;行为模型----状态转换图。(3)对系统中的关键部分必要的说明。概要设计(1)确定系统的物理实现方案,用系统结构图描述之。(2)分解系统功能,做出系统的软件结构图(总体结构图)。(3)主要模块(一级、二级)的功能描述。(4)对模块间的接口进行说明。(5)设计系统的主界面。(6)用户设计详细设计(1)数据库设计。(2)系统使用的全局变量(3)每个模块内的数据结构设计、处理流程(图)设计。(4)模块的主界面、主要的交互界面的设计。实现(1)编码。(2)测试:对主要功能模块进行单元测试,对整个系统进行集成测试。对每个测试活动记录:测试采用的技术;测试用例;测试运行的结果。写开发总结写操作手册