赞
踩
总结自老师的PPT,不只有知识点,还有一些相关内容的介绍顺便复制进来了,自己感兴趣就想多了解一些,最后有本章的一些小总结。 如有问题请多指教
软件定义
1983年,IEEE(国际电气与电子工程协会)为软件下的定义是:计算机程序、方法、规则和相关的文档资料以及在计算机上运行时所必需的数据。
对软件比较公认的解释:软件是计算机系统中与硬件相互依存的另一部分,它包括程序、相关数据及其说明文档。
记住 软件=程序+数据+文档 软件≠程序
软件是一种逻辑实体,具有抽象性。人们可以把它记录在纸上、磁盘或光盘等介质上,但却无法看到软件本身的形态,必须通过观察、分析、思考和判断才能了解它的功能和性能。
软件一旦研究开发成功,其生产过程就变成复制过程,不像其他工程产品那样有明显的生产制造过程。由于软件复制非常容易,因此出现了软件产品的版权保护问题和打击盗版的问题。
软件对硬件和环境有着不同程度的依赖性,这导致了软件升级和移植的问题。计算机硬件和支撑环境不断升级,为了适应运行环境的变化,软件也需要不断维护,并且维护的成本通常比开发成本高许多。
软件生产至今尚未摆脱手工方式,软件开发的手工行为造就了一个致命的问题,就是为应用“量身订做”软件。其他工程领域有产品标准,所有生产厂家按照标准生产产品。例如,不管哪个厂家生产的灯泡,只要瓦数、电压、电流、接口几个指标符合要求,用户买来装上就可以使用。因此,软件产品规范性差、通用性差。近几年,基于组件的软件开发取得了重大进展,这样在遇到不同的应用需求时,就可以考虑用已有的组件搭建新的系统。
软件涉及各行各业的知识,软件人员通常缺少专门领域的业务知识,而领域专家往往缺少软件知识,由此加剧了软件和业务之间的鸿沟,造成开发的软件不满足业务需求。
软件不仅是一种在市场上推销的工业产品,也是与文学艺术作品相似的精神作品。与体力劳动相比,精神活动过程的特点是“不可见性”,这大大增加了组织管理上的困难。
计算机软件开发和维护过程中所遇到的一系列严重问题。
例1
例2
例3
例4
软件工程是①将系统化的、规范的、可度量的方法应用于软件的开发、运行和维护过程,即将工程化应用于软件开发和管理之中,②对①中所选方法的研究。
注意:软件工程研究所依据的基础理论:数学、计算机科学、经济学、工程学、管理学和心理学等学科。其中
技术方面:软件生命周期全过程中使用的一整套技术方法的集合称为方法学,其三要素:
管理方面:主要研究软件项目管理学、软件经济学、软件心理学。
开发过程是软件人员“生产”软件的过程,一般包括:需求分析、设计、编码、测试等,相当于生产线上的生产过程。
管理过程是项目管理者规划软件开发、控制软件开发的过程,相当于生产线上的管理过程,管理过程是伴随开发过程进行的过程。
过程改进相当于对软件开发过程和软件管理过程的“工艺流程”进行管理和改进,如果没有好的工艺生产不出好的产品,它包括对开发过程和管理过程的定义和改进。
软件工程旨在开发满足用户需要、及时交付、不超过预算和无故障的软件,其主要目标如下:
1968年在德国格密斯(Garmish)举行的学术会议上,北大西洋公约组织(NATO)正式提出了“软件工程”这一术语。软件工程作为工程学科家族中的新成员,对软件产业的形成和发展起了决定性作用,它指导人们科学地开发软件,有效地管理软件项目,对提高软件质量具有重要作用。
在20世纪70年代基本形成了软件工程的概念、框架、方法,被称之为第一代软件工程,即传统软件工程。结构化分析、结构化设计和结构化编程方法是这个时期的代表。
80年代出现的Smalltalk 80程序设计语言标志着面向对象程序设计进入了实用阶段,从80年代中到90年代中,研究的重点转移到面向对象分析和设计上来,从而演化成软件工程的第二代,称之为对象工程。
90年代后期,软件工程的一个重要进展就是基于组件的开发方法。为了提高软件生产力,尽可能地利用可复用组件来组装成新的应用软件系统。到目前为止,组件技术的研究和发展形成了新一代软件工程,即第三代软件工程,也有不少人称之为组件工程。
软件工程至今还在不断发展,无论是组件工程还是对象工程都在不断发展,即使是传统软件工程的一些基本概念、框架,也随着技术的进步在发生变化。总之,软件工程代与代之间并没有鸿沟,它们不仅交叉重叠,也携手并进。
著名的软件工程专家B.W.Boehm综合软件工程的专家学者们的意见并总结了TRW公司多年开发软件的经验,于1983 年在一篇论文中提出了软件工程的7条基本原理
在软件开发与维护的漫长生命周期中,需要完成许多性质各异的工作,这条基本原理意味着,应该把软件生命周期划分成若干阶段,并相应地制定出切实可行的计划,按照计划对软件的开发与维护工作进行控制。
软件的质量保证工作不能等到编码阶段结束之后再进行。经过大量的统计数据表明,大部分错误是在编码之前造成的,其中,设计错误约占软件错误的63%,编码错误占37%。
在前期改正错误所需要的可能只是橡皮和铅笔,而在交付后改正错误需要的工作就太多了:查找出错的代码、重新组织程序结构和数据结构、测试、修改文档。也就是说,错误发现与改正的越晚,所需付出的代价也越高。
因此,在每个阶段都应该进行严格的评审,以便尽早发现在软件开发过程中所犯的错误,是一条必须遵循的重要原则。
基准配置管理也称为变动控制:一切有关修改软件的建议,特别是涉及到对基准配置的修改建议,都必须按照严格的规程进行评审和控制,获得批准以后才能实施修改(基准配置又称基线配置,它们是经过阶段评审后的软件配置成份 )。目的是当需求变动时,其它各阶段的文档或代码随之相应变动,以保证软件的一致性。
自从提出软件工程概念后,人们一直把主要精力用于研究各种新的程序设计技术。60年代末提出了结构化程序设计技术,以后又进一步发展出结构化分析与设计技术、面向对象的分析和设计技术。实践表明,采用先进的技术既可提高软件开发和维护的效率,又可提高软件质量。
软件是一种看不见、摸不着的逻辑产品。软件开发小组的工作进展情况难于评价和管理。为更好地进行管理,应根据软件开发的总目标及完成期限,明确地规定开发小组的责任和产品标准,从而使所得到的产品有明确的标准能清楚地审查。
软件开发小组成员的素质应该好,人数不宜过多。素质高的人员开发效率高、质量好、错误少。开发小组人员过多,信息交流造成的通信开销会急剧增加。
遵循上述六条基本原理,就能够按照当代软件工程基本原理实现软件的工程化生产。但是,仅有上述六条原理并不能保证软件开发与维护的过程能赶上时代前进的步伐,因此,应把承认不断改进软件工程实践的必要性作为软件工程的第七条基本原理。按照这条原理,不仅要积极地采纳新的软件技术,而且要注意不断总结经验、汲取教训。
软件定义
软件开发
运行维护
瀑布模型规定了软件生命周期的各项活动:问题定义、可行性研究、需求分析、软件设计、编码、测试、运行和维护。各项活动自顶向下、相互衔接如同瀑布一样。
阶段间具有顺序性和依赖性
推迟实现的观点:清楚地区分逻辑设计与物理设计,尽可能推迟程序的物理实现
质量保证的观点
它提供了里程碑式的工作流程,为软件项目按规程管理提供了便利,例如,按阶段制定项目计划,分阶段进行成本核算,进行阶段性评审等;
其作用还体现在文档上。每个阶段都必须完成规定的文档,并在每个阶段结束前都要对所完成的文档进行评审。这种工作方式有利于软件错误的尽早发现和尽早解决,并为软件系统今后的维护带来了很大的便利。
但是,在实际的软件项目中存在着许多不稳定因素。例如,开发中的工作疏漏或通信误解;在项目实施中途,用户可能会提出一些新的要求;开发者也可能在设计中遇到某些未曾预料的实际困难,希望在需求中有所权衡等。因此,提出经过改进的,跟实际开发环境更加接近的瀑布模型。
当在后面阶段发现前面阶段的错误时,需要沿图中左侧的反馈线返回前面的阶段,修正前面阶段的产品之后再回来继续完成后面阶段的任务。
优点:为项目提供了按阶段划分的检查点;当前一活动完成后,只需要去关注后续活动;它提供了一个模板,这个模板使得分析、设计、编码、测试和支持的方法可以在该模板下有一个共同的指导。
缺点:瀑布模型确定了需求分析的绝对重要性,在项目开始的时候,用户常常难以清楚地给出所有需求;用户与开发人员对需求理解存在差异;由于开发模型是线性的,用户只有等到整个过程的末期才能见到开发成果,从而增加了开发的风险;早期的错误可能要等到开发后期的测试阶段才能发现,进而带来严重的后果。
适用于用户驱动的系统(即需求模糊或随时间变化的系统)。
优点:
缺点:
螺旋模型即是一种引入了风险分析与规避机制的过程模型,是瀑布模型、快速原型方法和风险分析方法的有机结合。
螺旋模型基本方法是,在各个阶段创建原型进行项目试验,以降低各个阶段可能遇到的项目风险。例如,为了降低用户对软件界面不满意的风险,可以在需求分析阶段建立“界面原型”;为了降低软件不能按设计要求实现的风险,可以在设计阶段针对所采用的技术建立“仿真试探原型”。
Rational Unified Process,RUP
Rational公司推出的一种完整的软件过程
总结多年商业化验证的6条有效的开发经验,被称为“最佳实践”
敏捷过程(Agile Process,AP)
原则:
“敏捷软件开发宣言”阐述的4条价值观
敏捷方法(Agile Methodology,AM)
敏捷建模(Agile Modeling,AM)
极限编程(eXtreme Programming,XP)
极限编程是敏捷过程中最有名的一个
XP的整体开发过程
微软软件生命周期
规划阶段:市场获取用户情况、客户需求、竞争对手等信息
设计阶段:已经确定了70%以上的需求,包括系统规格说明书、设计方案、系统结构图、划分子系统、制定产品开发计划书
开发阶段:完成编码,并进行单元测试
稳定阶段:完整的进行集成测试,确保真实环境下的使用和操作
发布
微软过程准则:
1)结构化方法
软件形式语言的研究:目前,大部分软件文档都是用自然语言书写的。由于自然语言本身具有模糊性,因此有一部分专家研究“形式化描述语言的应用,以及不同形式化语言之间的转换”。这类研究工作难度较大,也不容易为一般人所接受。但是由于越来越多的大型软件的复杂程度与日俱增,这些软件一旦出错所引起的后果十分严重,所以形式化的研究工作就显得非常重要。
构件技术:软件开发构件化可以说是软件开发技术的一个发展趋势,也是软件工程界的一个热门话题。近年来,软件技术的进步以及CORBA,DCOM,JavaBean等构件标准的出现已经使情况开始改变,这给软件危机的真正缓和带来了希望。
质量管理:软件开发过程的质量控制将逐步得到重视。软件开发过程中精神活动的“不可见性”大大增加了过程管理的困难。因此软件工程管理的指导思想就是千方百计地使这些过程变为“可见的”,以及事后可以检查的记录。只有从一开始就在软件开发过程中严格贯彻质量管理,软件产品的质量才有保证。否则,开发工作一旦进行到后期,无论怎样测试和补漏洞,都无济于事。这就是近年来国际上十分重视的“软件生产过程质量管理”思想。
由国际联合机构制定和公布,提供各国参考的标准。
一些大型企业或公司,由于软件工程工作的需要,制定适用于本部门的规范。例如,美国IBM公司通用产品部(General Products Division)1984年制定的“程序设计开发指南”,仅供该公司内部使用。
由某一科研生产项目组织制定,并且为该项任务专用的软件工程规范。例如,计算机集成制造系统(CIMS)的软件工程规范。
1)规范
2)职业化素质
3)职业化软件工程师忌讳的十大问题
行为一:对外交付半成品。
行为二:不遵守标准和规范。
行为三:不积极帮助他人。
行为四:版权意识不敏感。
行为五:对待计划不严肃。
行为六:公事私事相混淆。
行为七:不注意知识更新。
行为八:不主动与人沟通。
行为九:不遵守职业规则。
行为十:不够诚实和正直。
软件危机的主要表现是 “已完成”的软件不满足用户的需求;开发进度不能保障;软件开发成本难以准确估算;软件产品的质量没有保证。
软件工程是采用工程的概念、原理、技术和方法来开发与维护软件,把经过时间考验而证明正确的管理方法和先进软件开发技术结合起来,运用到软件开发和维护过程中,来解决软件危机。
软件工程研究的主要内容是软件开发技术和软件开发管理两个方面。软件开发技术方面主要研究软件开发方法、软件开发过程、软件开发工具和环境。软件开发管理方面主要研究软件工程管理学、软件工程经济学、软件工程心理学。
软件工程的7条基本原理是①用分阶段的生命周期计划严格管理②坚持进行阶段评审③实行严格的产品控制④采用现代程序设计技术⑤结果应能清楚地审查⑥开发小组的人员应该少而精⑦承认不断改进软件工程实践的必要性。
软件生命周期是指一个软件从提出开发要求开始到该软件报废为止的整个时期。通常将软件的生命周期划分为问题定义、可行性研究、需求分析、概要设计、详细设计、编码和单元测试、集成和测试、维护阶段。
软件生命周期模型反映的是软件开发过程、活动和任务的结构框架。它能够清晰、直观地表达软件开发全过程,明确规定要完成的主要活动和任务。对于不同的软件系统,可能采用不同的开发方法,使用不同的程序设计语言、不同的管理方法和手段、以及各种具有不同技能的人员参与工作,但是对于软件生命周期模型来说都应该是稳定有效和普遍适用的。到目前为止,已经提出了多种模型,主要有瀑布模型、快速原型模型、演化模型、螺旋模型、V模型等。模型的选择是基于软件的特点和应用领域。
目前,主流的软件开发方法有结构化方法和面向对象方法。
为了提高软件开发的效率,保障软件产品的质量,软件工程领域中公布了许多国际标准、国家标准、行业标准、企业标准、项目规范,通常由低级到高级使用。软件工程的标准关系到许多方面,有规范开发过程的标准,有定义产品的标准,还有管理标准和记法符号的标准等等。
1999年由ACM/IEEE-CS软件工程师道德规范和职业实践(SEEPP)联合工作组制订了《软件工程师职业道德规范》,规范含有8组由关键词命名的准则。公众 、客户和雇主 、产品 、判断 、管理 、专业 、同行 、自身 。
职业化软件工程师要注意的十大问题:①高质量地完成任务②遵守行业标准,不能肆意按照自己的想象来发挥③积极帮助他人④版权意识敏感⑤严格遵守计划⑥公私分明⑦注意知识更新⑧善于沟通⑨遵守职业规则⑩诚实和正直。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。