2019/12/15《软件工程》哈尔滨工业大学韩静萍SoftwareEngineering2019/12/15在一些人眼里,今天的软件开发似乎已成为简单的事情,已有了不少很好的开发工具和软件库,软件开发人员训练有素,都强烈渴望去编写很酷的软件,可以在几天的时间里编写出一个相当复杂的软件。但为什么有一些软件能够得到用户的喜欢,而另一些则不能?为什么有些软件能够在市场上成功,而有些则受到冷落?由此可见,开发软件并不一定难,难就难在如何开发有用的软件。微软凌小宁博士2019/12/15我最大的心得是,一个产品一定要找到能够真正适用的场合,不能只是为了技术而从事技术为了研究而进行研究,却不管用户对你所研究的技术和产品有没有需求。否则,无论你的技术是多么优秀,多么先进,恐怕你的产品在市场上都无法获得成功。微软张益肇博士2019/12/15软件工程是计算机科学与技术专业的一门专业核心课程。通过本课程的学习,使学生掌握系统的软件开发理论、技术和方法,使用正确的工程方法开发出成本低、可靠性好并在机器上能高效运行的软件,为今后从事软件开发和维护打下坚实的基础。课程的性质、目的与任务2019/12/15本课程比较全面、系统地介绍软件工程的概念、技术与方法。主要内容包括:软件工程概述、软件生存周期及软件需求分析、软件设计方法、软件测试技术等。通过本课程的学习,使学生能真正的从中了解软件开发的整个过程。为了让学生真正得以实践,结合实际软件开发项目,让学生从问题定义开始,经过可行性研究、需求分析、概要设计、详细设计、编码直到最后要对自己开发的软件还要进行测试,这样一个软件开发过程,从而使学生掌握软件开发的基本技能。课程主要内容2019/12/15学习本课程的基本要求本课程是继程序设计课程之后,对提高学生软件开发能力有重要作用的一门课程。要求学生在学习本课程前应掌握信息管理系统、数据结构、结构化程序设计、面向对象程序设计以及程序设计方法论。通过本课程的学习,为学生后期的毕业设计环节奠定了良好的基础。2019/12/15章学时章学时章学时章学时12349413222421021442284122总学时48=40(讲授)+8(课程设计)各章学时安排2019/12/15第一章软件工程概述水利工程建筑工程机械工程……软件工程本章将对软件的地位和作用、软件的特点、软件的发展、软件的危机以及软件工程学科的形成、软件生期等方面的问题和基本概念传统工程新兴工程气象工程生物工程2019/12/151.1软件的概念与特点1、软件softwaresoft+ware软制品(软体)软件是计算机系统中与硬件相互依存的另一部分。它包括程序、数据及其相关文档的完整集合。2019/12/152、软件特点.软件是一种逻辑实体,而不是具体的物理实体.软件的生产与硬件不同.在软件的运行和使用期间,没有硬件那样的机械磨损,老化问题磨合调整磨损用坏修改点实际曲线理想曲线硬件失效率曲线时间失效率时间失效率软件失效率曲线2019/12/15.软件的成本相当昂贵软件技术的发展落后于需求时间软件复杂性软件需求差距软件技术硬、软件成本比例的变化年份成本%软件1950197019851995硬件2019/12/153、软件的分类1、按软件的功能进行划分系统软件支撑软件应用软件2019/12/15支撑软件一般类型:文本编辑程序文本格式化程序支持需求分析:PSL/PSA问题描述语言关系数据库管理系统支持设计:图形软件包结构化流程图绘图程序支持测试:静态分析器测试覆盖检验程序支持实现:编辑程序连接编辑程序支持管理:标准检验程序库管理程序2019/12/152、按软件的规模进行划分按开发软件所需的人力、时间以及完成的源代码行数。类别参加人数研制期限产品规模(源代码行数)微型小型中型大型甚大型极大型112-55-20100-10002000-50001-4周1-6周1-2年2-3年4-5年5-10年约500行约2000行5000-50000行5万-10万行100万行1000万行2019/12/153、按软件开发划分软件项目开发软件产品开发2019/12/151.2软件工程的概念及范畴1、“软件工程”----SoftwareEngineering于1968年NATO组织在德国召开的一次会议上提出是把软件当作一种工业产品,要求“采用工程化的原理与方法对软件进行计划、开发和维护”。2019/12/15软件工程学软件开发技术软件工程管理软件开发方法学软件工具软件工程环境软件工程管理学软件经济学----软件工程学的范畴2、软件工程学2019/12/15Wakeupeverydaywithafeelingofpassionforthedifferenttechnologywillmakeinpeople’sLife.微软企业文化宗旨部分内容每天醒来的时候,要对技术给生活造成的改变始终拥有一份激情。2019/12/15程序3、软件的演变(即从传统软件开发到现代软件开发)软件软件产品传统软件开发现代软件开发1975198920000.00016240营业额增长曲线802019/12/151.3软件生存周期把软件从产生、发展到成熟、直至衰亡为止(SWlifecycle)2019/12/15特点:上一阶段的变换结果是下一阶段的变换的输入,相邻两个阶段具有因果关系,紧密相联。需求分析问题定义可性行研究计划时期概要设计详细设计编码测试开发时期运行与维护运行时期软件生存周期模型(瀑布模型WaterfallModel)2019/12/15原型模型(PrototypeModel)加工原型原型原型:是指模拟某种产品的原始模型快速分析和设计建造原型客户评价原型1、原型系统仅包括未来系统的主要功能,以及系统的重要接口。2、为了尽快向用户提供原型,开发原型系统时应尽量使用能缩短开发周期的语言和工具。2019/12/15第二章问题的定义与可性行研究当我们在着手做任何一件工作以前,必须明确工作的性质、任务,制定完成任务的计划,这是非常必要的。同样对于软件产品的开发,显然也应该解决好这样类似的问题,明确该软件产品开发的任务,以及完成任务的价值从而制定出完成任务的计划。那么问题的定义和可性行研究就是制定软件系统的计划的第一步。所以在软件工程中把这一步称为计划时期2019/12/15开始问题定义可性行研究可行否?项目实施计划终止项目的建议结束Y计划时期的工作流程图N2019/12/15Who为谁设计,用户是谁?What要解决哪些问题?Why为什么要解决这些问题3WWinCE1.0有用的软件2019/12/152.1现状调查和问题的定义目的:弄清楚用户要求计算机解决什么问题任务:编写系统目标与规范说明书系统目标与规范说明书1、项目:教材销售系统2、问题:人工销售教材手续繁琐,容易出错3、项目目标:建立一个高效率、无差错的计算机教材销售系统4、项目范围:利用现有的计算机,软件开发费用不得超过2000元5、初步想法:建议在系统中增加对缺书的统计与采购功能6、可性行研究:建议进行大约10天的可性行研究,且研究费用不超过500元2019/12/152.2可行性研究与论证1、经济可行性:进行成本效益分析,评估项目的开发成本。基于计算机系统的成本由四部分组成1、购置软、硬件及有关设备费用2、系统开发费用3、系统安装和维护费用4、人员培训费用费用其论证的焦点是:围绕着对系统开发的价值进行论证2019/12/15举例:关于开发CAD系统的软件开发成本及效益分析12345年6040200成本-效益(万元)该系统节省经费该系统成本盈亏平衡点投资回收期---------成本及效益分析图2019/12/152、技术可行性:对系统的性能、可靠性、可维护性以及生产率等方面的信息进行评价。通过技术可行性的分析,将为新系统提交技术可行性评估。以指明为完成系统的功能和性能需要什么技术?需要哪些材料、方法、算法、或者过程等技术可行性分析方法---数学模型和优化技术、概率和统计、排队论、控制论等方法。2019/12/15可行性论证报告1、系统概述2、可行性分析3、拟订开发计划4、结论意见2019/12/152.3可行性分析所需工具(系流程图与系统结构图)1、系统流程图:是用来描述系统物理模型的一种传统工具。流程符号含义流程符号含义数据加工符号换页连接输入/输出符号磁带符号连接点符号文档符号人工操作多文档符号2019/12/15流程符号含义流程符号含义显示器或终端机控制流符号磁盘机或数据库流程开始与结束2019/12/15举例库存清单系统流程图库存清单程序定货报告事务定货信息结束报告生成程序零件库2019/12/15人工销售教材流程图结束学生申请购书购书证明检索教材帐本是否有该教材购书单开购书发票和购书单购书发票到书库领书2019/12/15计算机售书系统流程图结束学生购书发票到书库领书购书单终端审查并开发票11---学生各学期用书数据库购书单22---教材存量数据库2019/12/15练习设某城市招干考试成绩统计系统。考生分三个专业,不同专业考试科目不同:法律专业---考政治、语文、法律行政专业---考政治、语文、行政财经专业---考政治、语文、财经学每个考生在报名时登记姓名、地址、年龄和报考专业。报名后招干办公室根据专业考生专业及地址在市区或郊区来编排准考证号码和考场。考生参加考试后,输入每个考生的各门课程的成绩,并统计出每个考生三门课程的总成绩。按准考证号的顺序打印出考生考试成绩单,分发给每个考生。各专业分别将考生按成绩总分从高到低的次序排序,以便决定录取名单。请画出由下列文字描述的系统流程图2019/12/152、系统结构图:系统工程师用结构摸板开发的系统模型用户界面处理输入处理维护和自测试处理和控制功能输出处理----结构摸板----2019/12/15-------传输线的分类系统3、系统结构环境图(ACD-ArchitectureContextDiagram):ACD可用于描述实现系统与系统运行环境之间的信息边界。2019/12/15传输线分类系统条形码阅读器传输线分配站操作员分配站操作员分类机构主机条形码线速指示器分路命令格式化报告数据查询查询及报告诊断数据-------传输线分类系统的ACD图处理与控制功能区外部实体2019/12/15ACD的层次结构ABC2019/12/15作请画出学生成绩管理系统的ACD图业2019/12/15第3章软件需求分析软件需求分析是软件开发早期的一个重要阶段。它在问题定义和可行性研究阶段之后进行。需求分析的基本任务是软件人员和用户一起完全弄清用户对系统的确切要求。这是关系到软件开发成败的关键步骤,也是整个系统开发的基础。软件需求分析阶段要求用需求规格说明书(SRS)来表达用户对系统的要求。规格说明书可用文字方式表示,也可用图形表示。本章将介绍需求分析的任务、步骤、需求分析方法(面向数据流图分析方法、面向对象的分析方法)。2019/12/15一、确定目标系统的具体要求1、确定系统的运行环境要求2、系统的性能要求3、系统功能3.1需求分析的任务硬件环境和软件环境确定目标系统具备的所有功能2019/12/15举例数据库中存放的是职工的某学校医疗费管理系统所属部门、职工号、姓名职工报销时应填写:所属部门、职工号、姓名、日期校内门诊、校外门诊、住院费、子女医疗费医疗费分类:该校规定,每年每个职工的医疗费有一个限额(如80元),限额在年初确定,其限额规则如下:1、每个职工一年内报销的医疗费不超过限额时,全部报销2、超额,则超出部分只可报销90%,其余10%由职工个人负担3、职工子女的医疗费也有限额(如40元)2019/12/151、医疗费管理系统每天记录当天报销的若干职工或职工子女的医疗费的类别、金额。2、在当天下班前让系统自动结帐、统计当天报销的医疗费总额,供出纳员核对。3、每笔帐要保存备查,每天所报销的费用要和各个职工已报销的金额累计起来,以便检查哪些职工已超额。4、系统还要配有适当的查询功能。5、年终结算后,下一年度开始时要对数据库文件进行初始化