软件工程回顾软件工程(SoftwareEngineering,简称为SE)是一门研究用工程化方法构建和维护有效的、实用的和高质量的软件的学科。它涉及到程序设计语言,数据库,软件开发工具,系统平台,标准,设计模式等方面。在现代社会中,软件应用于多个方面。典型的软件比如有电子邮件,嵌入式系统,人机界面,办公套件,操作系统,编译器,数据库,游戏等。同时,各个行业几乎都有计算机软件的应用,比如工业,农业,银行,航空,政府部门等。这些应用促进了经济和社会的发展,使得人们的工作更加高效,同时提高了生活质量。现代软件开发对人才的要求扎实的基础创新独立的工作能力主人翁精神和团队精神沟通与协调能力成就感、有激情自觉的干好工作锲而不舍,从错误中学习软件工程的定义IEEE在软件工程术语汇编中的定义:软件工程是:1.将系统化的、严格约束的、可量化的方法应用于软件的开发、运行和维护,即将工程化应用于软件;2.在1中所述方法的研究目前比较认可的一种定义认为:软件工程是研究和应用如何以系统性的、规范化的、可定量的过程化方法去开发和维护软件,以及如何把经过时间考验而证明正确的管理技术和当前能够得到的最好的技术方法结合起来。软件工程的目标软件工程的目标是:在给定成本、进度的前提下,开发出具有可修改性、有效性、可靠性、可理解性、可维护性、可重用性、可适应性、可移植性、可追踪性和可互操作性并且满足用户需求的软件产品。追求这些目标有助于提高软件产品的质量和开发效率,减少维护的困难。可修改性(modifiablity)。容许对系统进行修改而不增加原系统的复杂性。它支持软件的调试与维护,是一个难以达到的目标。有效性(efficiency)。软件系统能最有效地利用计算机的时间资源和空间资源。各种计算机软件无不将系统的时/空开销作为衡量软件质量的一项重要技术指标。很多场合,在追求时间有效性和空间有效性方面会发生矛盾,这时不得不牺牲时间效率换取空间有效性或牺牲空间效率换取时间有效性。时/空折衷是经常出现的。有经验的软件设计人员会巧妙地利用折衷概念,在具体的物理环境中实现用户的需求和自己的设计。可理解性(understandability)。系统具有清晰的结构,能直接反映问题的需求。可理解性有助于控制软件系统的复杂性,并支持软件的维护、移植或重用。可靠性(reliability)。能防止因概念、设计和结构等方面的不完善造成的软件系统失效,具有挽回因操作不当造成软件系统失效的能力。对于实时嵌入式计算机系统,可靠性是一个非常重要的目标。因为软件要实时地控制一个物理过程,如宇宙飞船的导航、核电站的运行,等等。如果可靠性得不到保证,一旦出现问题可能是灾难性的,后果将不堪设想。因此在软件开发、编码和测试过程中,必须将可靠性放在重要地位。可维护性(maintainability)。软件产品交付用户使用后,能够对它进行修改,以便改正潜伏的错误,改进性能和其他属性,使软件产品适应环境的变化,等等。由于软件是逻辑产品,只要用户需要,它可以无限期的使用下去,因此软件维护是不可避免的。软件维护费用在软件开发费用中占有很大的比重。可维护性是软件工程中一项十分重要的目标。软件的可理解性和可修改性有利于软件的可维护性。可重用性(reusebility)。概念或功能相对独立的一个或一组相关模块定义为一个软部件。软部件可以在多种场合应用的程度称为部件的可重用性。可重用的软部件有的可以不加修改直接使用,有的需要修改后再用。可重用软部件应具有清晰的结构和注解,应具有正确的编码和较低的时/空开销。各种可重用软部件还可以按照某种规则存放在软部件库中,供软件工程师选用。可重用性有助于提高软件产品的质量和开发效率、有助于降低软件的开发和维护费用。从更广泛的意义上理解,软件工程的可重用性还应该包括:应用项目的重用,规格说明(也称为规约)的重用,设计的重用,概念和方法的重用,等等。一般来说,重用的层次越高,带来的效益也就越大。可适应性(adaptability)。软件在不同的系统约束条件下,使用户需求得到满足的难易程度。适应性强的软件应采用广为流行的程序设计语言编码,在广为流行的操作系统环境中运行,采用标准的术语和格式书写文档。适应性强的软件较容易推广使用。可移植性(portability)。软件从一个计算机系统或环境搬到另一个计算机系统或环境的难易程度。为了获得比较高的可移植性,在软件设计过程中通常采用通用的程序设计语言和运行环境支撑。对依赖于计算机系统的低级(物理)特征部分,如编译系统的目标代码生成,应相对独立、集中。这样,与处理机无关的部分就可以移植到其他系统上使用。可移植性支持软件的可重用性和可适应性。可追踪性(tracebility)。根据软件需求对软件设计、程序进行正向追踪,或根据程序、软件设计对软件需求进行逆向追踪的能力。软件可追踪性依赖于软件开发各个阶段文档和程序的完整性、一致性和可理解性。降低系统的复杂性会提高软件的可追踪性。软件在测试或维护过程中或程序在执行期间出现问题时,应记录程序事件或有关模块中的全部或部分指令现场,以便分析、追踪产生问题的因果关系。可互操作性(interoperability)。多个软件元素相互通信并协同完成任务的能力。为了实现可互操作性,软件开发通常要遵循某种标准,支持折衷标准的环境将为软件元素之间的可互操作提供便利。可互操作性在分布计算环境下尤为重要。软件工程的七条原理用分阶段的生命周期计划严格管理这一条是吸取前人的教训而提出来的。统计表明,50%以上的失败项目是由于计划不周而造成的。在软件开发与维护的漫长生命周期中,需要完成许多性质各异的工作。这条原理意味着,应该把软件生命周期分成若干阶段,并相应制定出切实可行的计划,然后严格按照计划对软件的开发和维护进行管理。在整个软件生命周期中应指定并严格执行6类计划:项目概要计划、里程碑计划、项目控制计划、产品控制计划、验证计划、运行维护计划。坚持进行阶段评审统计结果显示:大部分错误是在编码之前造成的,大约占63%错误发现的越晚,改正它要付出的代价就越大,要差2到3个数量级。因此,软件的质量保证工作不能等到编码结束之后再进行,应坚持进行严格的阶段评审,以便尽早发现错误。实行严格的产品控制开发人员最痛恨的事情之一就是改动需求。但是实践告诉我们,需求的改动往往是不可避免的。这就要求我们要采用科学的产品控制技术来顺应这种要求。也就是要采用变动控制,又叫基准配置管理。当需求变动时,其它各个阶段的文档或代码随之相应变动,以保证软件的一致性。采纳现代程序设计技术从六、七时年代的结构化软件开发技术,到最近的面向对象技术,从第一、第二代语言,到第四代语言,人们已经充分认识到:方法大似气力。采用先进的技术即可以提高软件开发的效率,又可以减少软件维护的成本。结果应该可以清晰地审查软件是一种看不见、摸不着的逻辑产品。软件开发小组的工作进展情况可见性差,难于评价和管理。为更好地进行管理,应根据软件开发的总目标及完成期限,尽量明确地规定开发小组的责任和产品标准,从而使所得到的标准能清楚地审查。开发小组人员应该少而精开发人员的素质和数量是影响软件质量和开发效率的重要因素,应该少而精。这一条基于两点原因:高素质开发人员的效率比低素质开发人员的效率要高几倍到几十倍,开发工作中犯的错误也要少的多;当开发小组为N人时,可能的通讯信道为N(N-1)/2,可见随着人数N的增大,通讯开销将急剧增大。承认不断改进软件工程实践的必要性遵从上述六条基本原理,就能够较好地实现软件的工程化生产。但是,它们只是对现有的经验的总结和归纳,并不能保证赶上技术不断前进发展的步伐。因此,玻姆提出应把承认不断改进软件工程实践的必要性作为软件工程的第七条原理。根据这条原理,不仅要积极采纳新的软件开发技术,还要注意不断总结经验,收集进度和消耗等数据,进行出错类型和问题报告统计。这些数据既可以用来评估新的软件技术的效果,也可以用来指明必须着重注意的问题和应该优先进行研究的工具和技术。类与实例构造方法方法重载属性和修饰符封装继承多态重构抽象类接口集合泛型面向对象什么是对象、什么是类?一切事物皆为对象,所有的东西都是对象,即一切可以看到的、听到的、闻到的东西,准确的说对象是一个自包含的实体,用一组可识别的特性和行为来标识,面向对象向编程就是针对对象来进行编程的意思。类与实例对象是什么?类是什么?对象是一个自包含的实体,用一组可识别的特性和行为来标识。面向对象编程就是针对对象来进行编程的意思。类就是具有想听属性的功能的对象的抽象的集合。编码时注意:1、类名称首字母要大写。多个单词则各个首字母大写。2、注意修饰符的使用。家庭视频监控系统第一讲前言第二讲系统功能结构第三讲系统业务流程第四讲编码规范第五讲数据库设计第六讲编写公共类第七讲登录模块设计第八讲视频监控模块设计第九讲监控管理模块设计第十讲录像回放模块设计前言本章使用C#3.5+视频采集卡制作一个简单的家庭视频监控系统,并将系统划分为几个模块,分块进行详细的讲解,通过各个模块的学习,掌握视频监控系统的开发技术及原理。本章主要内容:单元测试及常用单元测试工具Access2003数据库和数据表的创建如何在WinForms程序中操作Access2003数据库视频采集卡的使用Pelco-D协议进行云台控制如何读取和写入注册表信息开发背景为了紧随逐渐加快的生活节奏,并适应不断增加的生活压力,视频监控系统成为了生活中的需要。该系统的主要作用是:当用户外出时,可以监控家里的各种情况,并可以将家里的变化情况录制成视频文件,以供后期查看。可行性分析根据《GB8567-88计算机软件开发文件编制指南》中的可行性分析的要求,制定可行性研究报告。1.引言编写目的为了给企业的决策层提供是否进行项目的实施的参考依据。以文件的形式分析项目的风险、项目需要的投资与效益背景外出时,可以监控家里的各种情况,现委托相关公司开发一个视频监控系统,项目名称为家庭视频监控系统可行性研究前提要求系统要求能够提供视频监控、快照、录像和自动监控功能。目标主要目标是保证家里的安全。条件、假定和限制项目需要在一个月内交付用户使用,系统分析人员需要两天内到位,用户需要三天时间确认需求分析文档,去除其中可能出现的问题。投资及效益分析支出根据系统的规模及项目的开发周期,公司决定投入三个人,公司将直接支付三万元的工资及各种福利待遇。在安装及调试阶段,用户培训员工出差等费用支出需要1万元。在项目维护阶段,预计需要投入1.5万元资金。项目累计投入需要5.5万元资金。收益用户提供项目资金10万元。对于项目运行后进行的改动,采取协商的原则,根据改动规模额外提供资金。从投资于收益效益比上,公司可以获得4.5万元的利润。结论根据分析,在技术上不会存在问题,因此延期的可能性很小。在效益上公司投入3人,一个月获利4.5万元,比较可观;在公司今后发展上可以储备软件开发的经验和资源,因此认为该项目可以开发。编写项目计划书1.引言编写目的为了保证项目开发人员按时保质地完成预定目标,更好的了解项目实际情况,按照合理的顺序开展工作,以书面的形式将项目的生命周期中的各项的任务范围、项目团队组织结构、团队成员的工作责任、团队内外的沟通方式、开发进度、检查工作等内容描述出来,作为项目相关人员之间的统一约定和项目生命周期内的所有项目活动的行为基础。背景家庭视频监控系统是由家庭委托我公司开发的小型视频监控系统,系统主要用于监控家里的人员活动情况,项目周期为一个月2、概述项目目标应该符合SMART原则,把项目要完成的工作用清晰的语言描述出来。家庭视频监控系统的项目指标如下。应交付的成果1、以光盘的形式提供家庭视频监控的源程序、系统数据库文件和系统使用说明书。2、系统发布后,进行无偿维护和服务6个月,超过6个月进行系统有偿维护与