![基于案例的软件构造教程(第2版) 课件 01软件开发概述_第1页](http://file4.renrendoc.com/view12/M08/00/1E/wKhkGWcrQVGAGZk4AAIFoZFUFqM591.jpg)
![基于案例的软件构造教程(第2版) 课件 01软件开发概述_第2页](http://file4.renrendoc.com/view12/M08/00/1E/wKhkGWcrQVGAGZk4AAIFoZFUFqM5912.jpg)
![基于案例的软件构造教程(第2版) 课件 01软件开发概述_第3页](http://file4.renrendoc.com/view12/M08/00/1E/wKhkGWcrQVGAGZk4AAIFoZFUFqM5913.jpg)
![基于案例的软件构造教程(第2版) 课件 01软件开发概述_第4页](http://file4.renrendoc.com/view12/M08/00/1E/wKhkGWcrQVGAGZk4AAIFoZFUFqM5914.jpg)
![基于案例的软件构造教程(第2版) 课件 01软件开发概述_第5页](http://file4.renrendoc.com/view12/M08/00/1E/wKhkGWcrQVGAGZk4AAIFoZFUFqM5915.jpg)
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第1章
软件开发概述第1章软件开发概述从不同方面深入理解程序及其开发。首先,认识程序和软件的区别,了解不同的软件分类。其次,理解小程序的编写与大型软件的开发。最后,深入理解软件构造,从编辑-编译-运行的程序编写,到设计-实现-调试-测试的软件构造。2016秋数据科学与软件工程学院2第1章软件开发概述1.1程序与软件1.2软件生存周期1.3软件开发过程1.4敏捷开发1.5软件构造1.6为什么不直接编写软件1.7案例导读1.8思考与练习题2016秋数据科学与软件工程学院31.1程序与软件1.1.1从程序到软件1.1.2软件类型1.1.3程序设计与软件开发2016秋数据科学与软件工程学院41.1.1从程序到软件计算机程序(简称程序)是为了解决某个特定问题而用程序设计语言描述的适合计算机处理的语句序列。软件是能够完成预定功能和性能的可执行的程序和使程序正常执行所需要的数据,加上描述软件开发过程及其管理、程序的操作和使用的有关文档,即“软件=程序+数据+文档”。2016秋数据科学与软件工程学院51.1.1从程序到软件教学管理软件,它通过一组独立而又交互的程序提供各种教与学的服务功能。该教学管理软件数据有相对稳定的学生、教师、课程、教室等信息;有变动性强的授课信息;以及不断变化的授课教师发布的授课/参考材料、作业及批改、试题及分数、学生提交的作业、师生的答疑等。该软件还需要各种文档,如安装说明书、操作说明书和技术说明书等。所有这些程序、数据和文档,共同构成了这个教学管理软件。2016秋数据科学与软件工程学院61.1.2软件类型功能系统软件、支撑软件和应用软件。工作方式实时处理软件、分时软件、交互式软件和批处理软件。服务对象的范围项目软件(定制开发)和产品软件(或通用软件)。其他商业软件、开源软件、共享软件。2016秋数据科学与软件工程学院71.1.2软件类型软件规模2016秋数据科学与软件工程学院81.1.2软件类型随着软件变得越来越大、越来越复杂,软件开发的关注点也发生了变化。相对于小规模的程序设计(ProgrammingintheSmall),提出了大规模的程序设计(ProgrammingintheLarge),即软件开发。2016秋数据科学与软件工程学院91.1.3程序设计与软件开发程序设计是解决特定问题而编写程序的过程,是软件生产活动中的重要组成部分。程序设计以某种程序设计语言为工具,编写源程序,然后由编译系统完成可执行代码的转换。程序设计的活动包括分析、设计、编码、测试、排错等不同阶段。2016秋数据科学与软件工程学院101.1.3程序设计与软件开发图灵奖获得者沃斯(NiclausWirth)提出的“程序=算法+数据结构”是程序设计的精辟观点。数据结构指的是程序处理或应用的数据与数据之间的逻辑关系。算法指的是解决特定问题的步骤和方法。程序设计的核心就是选择和设计适合特定问题的数据结构与算法,用编程语言编制为程序。2016秋数据科学与软件工程学院111.1.3程序设计与软件开发在计算机技术发展的早期,软件开发的主要活动就是程序设计。随着程序向软件的演变,软件开发不再只是纯粹的程序的功能设计,还包括数据库设计、用户界面设计、软件接口设计、通信协议设计和复杂的系统配置。软件变得越来越大、越来越复杂。2016秋数据科学与软件工程学院121.1.3程序设计与软件开发软件变得越来越大、越来越复杂。图1.1示意了Linux操作系统的内核在10年里从240万行扩大到接近1600万行。2016秋数据科学与软件工程学院131.1.3程序设计与软件开发程序设计活动走向软件工程。软件工程把经过时间考验而证明正确的管理技术和当前能够得到的最好的技术方法结合起来,以系统性的、规范化的、可定量的过程化方法去开发和维护软件。软件工程是应用计算机科学、数学、逻辑学及管理科学等原理,开发软件的工程学科和活动。2016秋数据科学与软件工程学院141.2软件生存周期一个软件产品或软件系统也要经历孕育、诞生、成长、成熟、衰亡等阶段,一般称为软件生存周期(软件生命周期)。软件的生产者和使用者对软件生存周期的阶段和活动具有不同的理解和划分。1.2.1使用角度的软件生存周期1.2.2开发角度的软件生存周期2016秋数据科学与软件工程学院151.2.1使用角度的软件生存周期提出需求。用户根据需要,提出要解决的问题和需要的软件。获取软件。主要是对获取软件的最佳途径做出决策并选择最佳的供应商。购买软件定制或开发软件租赁软件或租赁服务使用软件。一旦获得软件之后,用户将操作软件使之为其服务。2016秋数据科学与软件工程学院161.2.2开发角度的软件生存周期从软件开发者的角度,一般把软件生存周期分为定义软件、开发软件和维护软件三个阶段。2016秋数据科学与软件工程学院171.3软件开发过程把软件开发工作分成若干都有特定结果的步骤或活动,按照一定的方式开展软件活动,从而形成了软件过程。简单而言,软件开发过程是用来生产软件产品的流程及一系列工具、方法和实践的集合。软件过程模型是从一个特殊的视角对软件开发过程的简化描述。2016秋数据科学与软件工程学院181.3软件开发过程2016秋数据科学与软件工程学院191.3软件开发过程1.3.1瀑布式开发过程1.3.2增量开发模型1.3.3个体软件过程2016秋数据科学与软件工程学院201.3.1瀑布式开发过程瀑布式开发过程,也叫软件生存期模型。按照软件生命周期,开发分为制定计划、需求分析、软件设计、程序编写、软件测试和运行维护等6个基本活动。各项活动严格按照线性方式进行,自上而下、相互衔接。每项活动的结果需要验证通过后,才能继续进行下一项活动。2016秋数据科学与软件工程学院211.3.1瀑布式开发过程核心思想是按工序将问题化简,将功能的实现与设计分开,即采用结构化的分析与设计方法将逻辑实现与物理实现分开。2016秋数据科学与软件工程学院221.3.1瀑布式开发过程主要问题在于:阶段划分僵硬,每个阶段不能缺省,而且产生大量文档,增加了工作量;开发是线性的,只有等到整个过程的末期才能见到开发成果——可运行软件,不利于快速响应变化的需求;早期的错误要等到开发后期的测试阶段才能发现,可能带来严重的后果,增加了开发的风险。2016秋数据科学与软件工程学院231.3.2增量开发模型把软件分成一系列增量,完成一部分就交付一部分。本质上是迭代开发的,即不是一次性执行软件开发的全部活动,而是有计划地反复执行“分析-设计-编码-测试”的过程。2016秋数据科学与软件工程学院241.3.2增量开发模型增量开发模型的特点是引进了增量包的概念,无须等到所有需求,只要某个需求明确了,就可进行开发。增量的类型及其开发不止一种。可行的方式是首先实现那些明确的、核心的需求;也可以对需求按优先级排序,或者按照用户的要求实现增量。2016秋数据科学与软件工程学院251.3.2增量开发模型增量开发模型的基本思想是让开发者能够从早期的开发、系统的增量、交付的版本中学到经验。过程中的关键是从系统需求的简单子集实现开始,通过迭代增强和进化后续的版本,直到系统被实现。每次迭代中,对设计进行修改,并增加新的功能要求。2016秋数据科学与软件工程学院261.3.2增量开发模型增量开发模型的优点如下:在短时间内向用户提交一个可运行软件,能够提供解决用户急用的一些功能。由于每次只提交部分功能,用户有较充分的时间学习和适应新的产品。在开发过程中,需求的变化是不可避免的。增量开发模型的灵活性可以使软件适应需求变化。有利于系统维护,因为整个系统是由一个个增量(部件)集成在一起的,当需求变更时,只变更部分部件,而不必影响整个系统。2016秋数据科学与软件工程学院271.3.2增量开发模型增量模型存在以下风险:由于各个部件是逐渐并入已有软件的,必须确保每次增加的部件不破坏已构造好的系统,这需要软件具备开放式的体系结构,否则系统将失去稳定的结构。逐步增加部件的方式,很容易退化为边做边改模型,从而使软件过程的控制失去整体性。在一个软件开发中如何一致地定义“增量”?如何界定它的工作量、需求范围、功能或特性?2016秋数据科学与软件工程学院281.3.2增量开发模型实践中,增量开发模型往往要求在分析了软件需求以后,在软件设计开发时进行增量。增量开发最好是在架构设计完成后再开始进行增量,这样可以更好地保证系统的健壮性和可扩展性。每次迭代过程仍然要遵循“分析→设计→实现”的微型瀑布过程。迭代周期的长度跟软件的开发周期和规模有关系。2016秋数据科学与软件工程学院291.3.3个体软件过程美国卡内基梅隆大学软件工程研究院的汉弗莱(Humphrey)主持开发了个体软件过程(PersonalSoftwareProcess,PSP)和团队软件过程(TeamSoftwareProcess,TSP)。TSP是为开发软件产品的开发团队提供的指导,在于帮助开发团队改善其质量和生产率,更好地满足成本及进度的目标。2016秋数据科学与软件工程学院301.3.3个体软件过程PSP是一种可用于控制、管理和改进个人工作方式的自我持续改进过程。它是一个包括软件开发表格、指南和规程的结构化框架。PSP与具体的技术(程序设计语言、工具或设计方法)相对独立,其原则能够应用到任何软件工程任务之中。PSP能够说明个体软件过程的原则;帮助软件工程师做出准确的计划;确定软件工程师为改善产品质量要采取的步骤;建立度量个体软件过程改善的基准;确定过程的改变对软件工程师能力的影响。2016秋数据科学与软件工程学院311.3.3个体软件过程PSP为个体的能力也提供了一个阶梯式的进化框架,每一级别都包含了更低一级别中的所有元素,并增加了新的元素。借助这个框架,个体可以循序渐进地改进开发过程。它赋予软件人员度量和分析工具,使其清楚地认识到自己的表现和潜力,从而可以提高自己的技能和水平。2016秋数据科学与软件工程学院321.3.3个体软件过程PSP0的目的是建立个体过程基线,学会使用PSP的各种表格采集过程的有关数据,执行的软件过程包括计划、设计、编码、编译和测试。按照选定的缺陷类型标准、度量引入的缺陷个数和排除的缺陷个数等,用在测量PSP过程的改进。PSP0.1增加了编码标准、程序规模度量和过程改善建议三个关键过程域。2016秋数据科学与软件工程学院331.3.3个体软件过程PSP1的重点是个体计划,用自己的历史数据来预测新程序的大小和需要的开发时间,并使用线性回归方法计算估计参数,确定置信区间以评价预测的可信程度。PSP1.1增加了对任务和进度的规划。在PSP1阶段应该学会编制项目开发计划,这不仅对承担大型软件的开发十分重要,即使是开发小型软件,也必不可少。2016秋数据科学与软件工程学院341.3.3个体软件过程PSP2的重点是个体质量管理,根据程序的缺陷建立检测表,按照检测表进行设计复查和代码复查(也称“代码走查”),以便及早发现缺陷,使修复缺陷的代价最小。PSP2.1则论述设计过程和设计模板,但并不强调选用什么设计方法,而强调设计完备性准则和设计验证技术。2016秋数据科学与软件工程学院351.3.3个体软件过程PSP3的目标是把个体开发小程序所能达到的生产效率和生产质量延伸到大型程序;其方法是采用迭代增量式开发方法,首先把大型程序分解成小的模块,然后对每个模块按照PSP2.1所描述的过程进行开发,最后把这些模块逐步集成为完整的软件产品。在新一轮开发循环中,可以采用回归测试。2016秋数据科学与软件工程学院361.4敏捷开发敏捷开发是从20世纪90年代开始逐渐引起广泛关注的一组新型的软件开发方法,更强调程序员团队与业务专家之间的紧密协作、面对面的沟通、频繁交付新的软件版本、紧凑而自我组织型的团队、能够很好地适应需求变化的代码编写和团队组织方法,更注重软件开发中人的作用。1.4.1概述1.4.2Scrum方法2016秋数据科学与软件工程学院371.4.1概述敏捷开发是应对快速变化的需求的一种软件开发能力。以用户需求进化为核心,采用迭代、循序渐进的方法进行软件开发。敏捷开发采用了更加人性化、个性化的沟通表达方式,特别是使用隐喻而非常规术语或形式化技术。例如,表示和处理需求的用户故事(UserStory)。再如,sprint指增量开发的迭代周期,长度通常是一至六周。一个用户故事的大小和复杂度应该以能在一个sprint中完成。2016秋数据科学与软件工程学院381.4.1概述敏捷开发通过宣言表示了它的4个核心价值观。(1)个体和互动胜过流程和工具。(2)工作的软件胜过详尽的文档。(3)客户合作胜过合同谈判。(4)响应变化胜过遵循计划。2016秋数据科学与软件工程学院391.4.1概述所有敏捷开发方法都遵循下面12条原则。(1)最优先要做的是通过尽早地、持续地交付有价值的软件满足客户需要。(2)即使在开发后期也欢迎需求的变化,敏捷过程利用变化为客户创造竞争优势。(3)经常交付可以工作的软件,从几星期到几个月,时间越短越好。(4)业务人员和开发人员应该在整个项目过程中始终朝夕在一起工作。(5)要善于激励项目人员,给他们以所需要的环境和支持,并相信他们能够完成任务。(6)在开发小组中最有效率、也最有效果的信息传达方式是面对面的交谈。(7)工作的软件是进度的主要度量标准。(8)责任人、开发者和用户应该维持长期、恒等的开发节奏。(9)对卓越技术与良好设计的不断追求将有助于提高敏捷性。(10)简单——尽可能减少工作量的艺术——至关重要。(11)最好的架构、需求和设计都源于自组织的团队。(12)每隔一定时间,团队都要总结、反省工作效率,然后相应地调整自己的行为。2016秋数据科学与软件工程学院401.4.1概述基本技术敏捷方法可以视为一些最佳实践的集合,包括经典的软件开发技术和管理,也包括敏捷开发首创的技术和方法。敏捷开发遵循软件开发的基本原则,同时也总结出了11条面向对象设计的原则,如单一职责原则(模块内聚的体现)、(采纳的)Liskov替换原则等。2016秋数据科学与软件工程学院411.4.1概述基本技术敏捷开发主要采用了面向对象的开发技术,使用CRC卡(Class-Responsibility-Collaborator,类-责任-协作)、用户用例、设计模式及UML(UnifiedModellingLanguage,统一建模语言)。但是,敏捷开发使用UML的符号主要是类图和时序图,因为这两种符号有助于直接编写出代码。2016秋数据科学与软件工程学院421.4.1概述意图导向编程意图导向编程指的是,先假设当前这个对象中已经有了一个理想方法,它可以准确无误地完成想做的事情,而不是直接盯着每一点要求来编写代码。在这个实例中,需要创建一个服务程序,它接收一个业务交易,然后提交。先简单创建一个对象,它只包含一个公共方法来完成这件事。2016秋数据科学与软件工程学院431.4.1概述具体需求如下交易信息开始于一串标准ASCII字符串。信息字符串必须转换成一个字符串的数组,其值是此次交易用到的领域语言中所包含的词汇元素(token)。每个词汇元素必须标准化:第一个字母大写,其余字母小写,空格和非字母数字的符号都要删掉。超过150个词汇元素的交易应该采用与小型交易不同的方式(不同的算法)来提交,以提高效率。如果提交成功,返回true;否则返回false。2016秋数据科学与软件工程学院441.4.1概述2016秋数据科学与软件工程学院451.4.1概述采用“意图导向编程”的编码方式,在编程开始时,假设这些“辅助方法”都已经存在,只需先考虑这些“辅助方法”要实现的功能和它们的输入和输出,然后按程序要求写出程序的主框架。最后才是“辅助方法”的编程。这样的编码方式使得程序员在整个编程中思路清晰,可以把精力集中在如何分解最终目标,以及那些全局性的问题上。实现的代码功能单一,易读易理解。2016秋数据科学与软件工程学院461.4.1概述敏捷技术敏捷开发也创造了一些新的技术或实践。如测试驱动开发、结对编程、代码重构和持续集成。2016秋数据科学与软件工程学院471.4.1概述测试驱动开发在一个微循环开发中,首先确认并自动化进行一个失败的测试,然后编写足够的代码通过测试,在下一轮前以必要的方式清理代码。2016秋数据科学与软件工程学院481.4.1概述结对编程两个程序员在一个计算机上共同工作。一个人输入代码,而另一个人审查他输入的每一行代码。两个程序员经常互换角色。代码重构指的是改变程序结构而不改变其行为,以便提高代码的可读性、易修改性等。例如,给变量重新命名,把一段代码提升为函数,把公共的属性和行为抽象成基类。2016秋数据科学与软件工程学院491.4.1概述持续集成微软等公司的软件开发方法包括每日构造产品,持续集成比它更进一步,只要可能,就把新代码或变更的代码合并到应用程序,然后测试,确保一切都正常。2016秋数据科学与软件工程学院501.4.1概述敏捷开发是一个统称,很多软件开发方法都认为自己是敏捷的。典型的敏捷开发方法包括极限编程(ExtremeProgramming,XP)、Scrum、水晶方法(Crystal)、特性驱动开发(FeatureDrivenDevelopment,FDD)、动态系统开发方法(DynamicSystemsDevelopmentMethod,DSDM)。2016秋数据科学与软件工程学院511.4.2Scrum方法Scrum是一个用于开发和维持复杂软件产品的框架,是一个增量的、迭代的开发过程。整个开发过程由若干短的迭代周期(冲刺Sprint)组成。Scrum使用产品积压工作(ProductBacklog)来管理产品需求,它是一个按照商业价值排序的需求列表,列表条目的体现形式为用户故事。Scrum团队总是先开发对客户具有较高价值的需求。在冲刺中,团队从产品积压工作中挑选最高优先级的需求进行开发。挑选的需求在冲刺计划会议上经过讨论、分析和估算得到相应的任务列表,称为冲刺清单(SprintBacklog)。每个迭代结束时,团队将递交潜在可交付的产品增量。2016秋数据科学与软件工程学院521.4.2Scrum方法Scrum框架可以简化成3个角色、3个工件、5个活动和5个价值。Scrum框架的3个角色是:产品负责人、产品经理(ScrumMaster)及团队。3个工件是产品积压工作、冲刺清单和燃尽图(Burn-downChart)。5个活动包括:冲刺计划会议、每日站会、冲刺评审会议、冲刺回顾会议和产品积压工作梳理会议。2016秋数据科学与软件工程学院531.4.2Scrum方法Scrum的5个价值是:①承诺:愿意对目标做出承诺;②专注:把心思和能力都用到承诺的工作上去;③开放:Scrum把项目中的一切开放给每个人看;④尊重:每个人都有其独特的背景和经验;⑤勇气:有勇气做出承诺、履行承诺、接受别人的尊重。2016秋数据科学与软件工程学院541.4.2Scrum方法Scrum的工作流程2016秋数据科学与软件工程学院551.5软件构造1.5.1有关概念1.5.2构造与开发过程1.5.3主要内容1.5.4软件构造的重要性2016秋数据科学与软件工程学院561.5.1有关概念IEEE计算机学会于2013年正式发布了最新的软件工程知识体系(SWEBOK3.0)指南,提出了构成软件工程学科的11个实践知识域,每个知识域分解为子域,子域含若干主题。这11个软件工程实践知识域是:软件需求、软件设计、软件构造、软件测试、软件维护、软件配置管理、软件工程管理、软件工程过程、软件工程模型与方法、软件质量、软件工程专业实践。2016秋数据科学与软件工程学院571.5.1有关概念“软件构造”指的是通过编码、验证、单元测试、集成测试和调试的组合,详细地创建可工作的、有意义的软件。2016秋数据科学与软件工程学院581.5.2构造与开发过程构造在不同软件开发流程或模型中的地位也不一样。有些流程更加重视构造。从构造角度看,有些模型侧重于线性化过程——比如瀑布模型、阶段交付的生命周期模型。线性化开发方式更加重视构造之前的活动(需求和设计),并且在这些活动之间建立明确的任务划分。在这些模型中,构造工作主要就是编码。2016秋数据科学与软件工程学院591.5.2构造与开发过程有些模型是迭代的——如Scrum、极限编程、进化式原型法。这些方式倾向于把构造视为与其他软件开发(包括需求、设计和计划)同时发生或重叠的活动。这些方式混合设计、编码和测试活动,把构造当成这些活动的集合体。所以,如何考虑构造,在某种程度上依赖于采用的生存周期模型。一般地说,软件构造最主要是编码和调试,但也可以包含工作计划、详细设计、单元测试、集成测试,以及其他活动。2016秋数据科学与软件工程学院601.5.3主要内容软件构造的知识域分为5个子域,每个子域包含了数量不等的主题。软件构造基础。管理构造。实际考虑。构造技术。软件构造工具。2016秋数据科学与软件工程学院611.5.3主要内容本书使用的“软件构造”指的是运用软件最佳实践,通过设计、编码和测试的迭代过程,增量地建造出可运行软件。本书涵盖了指南中5个知识子域的大部分主题。通过增量迭代地构造一个可运行软件,用具体的技术实践讲解了软件构造域的知识主题。此外,本书讨论了软件模块的构造、用户交互的构造及数据处理的构造。有关软件测试、敏捷开发的技术、设计模式包含了比指南更多的内容。在开发阶段方面,增加了软件交付。2016秋数据科学与软件工程学院621.5.3主要内容本书没有涵盖指南的部分主题:管理构造子域中的构造计划和构造度量;构造技术子域中的可执行模型、并发原语、性能分析与调优,也没有特别处理实时、分布式和异构软件;软件构造工具子域中的性能优化、分析、切片工具。2016秋数据科学与软件工程学院631.5.3主要内容总体而言,本书面向个体,涉及团队少;以技术、方法和工具的最佳实践为主,通过代码实现学习抽象的原则和技术方法,不涉及管理;采用增量迭代的构造方式,不采用任何明确定义的流程或模型;涉及少量的需求和分析,不包含交付之后的活动。2016秋数据科学与软件工程学院641.5.4软件构造的重要性构造占据了软件开发的大部分工作。研究表明,构造占软件开发30%~80%的工作时间。而任何占据项目大量时间的工作一定会深刻地影响项目的成功。构造是软件开发的中心活动。把重心放在构造,能显著提升个体程序员的生产率。构造的产品——源程序代码,常常是唯一准确的软件描述。构造是确保唯一要完成的活动。2016秋数据科学与软件工程学院651.6为什么不直接编写软件相对于编程,软件具有了工程特征。软件开发是要跨越分析、设计、实现、安装和维护活动的一个可以反复遵循的、复杂的过程(工作流程);软件需要依靠一个团队的分工合作,需要过程的组织和管理(人员组织与管理);软件开发还要运用各种技术和工具生产出来的产品(工具和自动化)。2016秋数据科学与软件工程学院661.6为什么不直接编写软件1.6.1软件开发语言1.6.2编程工具与集成化开发环境1.6.3软件运行环境1.6.4软件开发的最佳实践1.6.5开发过程与管理2016秋数据科学与软件工程学院671.6.1软件开发语言计算机软件的编程语言基本被划分成机器语言/汇编语言的低级语言和与计算机的硬件结构及指令系统无关的高级(程序)语言。面向对象语言是目前使用最多的一种语言。2016秋数据科学与软件工程学院681.6.1软件开发语言按计算模型的划分声明式:告诉计算机做什么。函数式语言逻辑式语言数据流语言命令式:告诉计算机应该如何做。冯·诺依曼式语言脚本语言面向对象语言2016秋数据科学与软件工程学院691.6.1软件开发语言高级程序语言的一个发展趋势是融合各种类型语言的特性。大多数面向对象语言都具有冯·诺依曼式语言的结构,有些也融合了函数式编程范式的思想,如Java和C#引入了λ算子等。2016秋数据科学与软件工程学院701.6.1软件开发语言例题1.1:使用欧几里得算法,编写计算两个整数a和b的最大公因数的程序gcd。2016秋数据科学与软件工程学院711.6.1软件开发语言按执行模式的划分高级语言程序不能直接在计算机上运行,必须转换成低级语言的指令后才能运行。按照语言的转换和执行方式,高级语言分为编译型语言和解释型语言。2016秋数据科学与软件工程学院721.6.2编程工具与集成化开发环境使用任何语言编程都需要基本的编程工具——软件开发工具包(SoftwareDevelopmentKit,SDK),它通常包括编译程序或解释程序、调试程序、连接程序等,如Java的JDK、Android的ADK。编写程序的工具是普通的文本编辑器,它可以是传统的正文行编辑器,也可以是面向全屏的图形编辑器。2016秋数据科学与软件工程学院731.6.2编程工具与集成化开发环境编写程序的工具是普通的文本编辑器,它可以是传统的正文行编辑器,也可以是面向全屏的图形编辑器。编辑器可以是通用的、与程序语言无关,也可以是具备源程序语言知识的语法制导编辑器或结构化编辑器(如emacs、notepad++)。语法制导编辑工具运用程序语言的语法知识,在用户编写程序时按照词法和语法分析的信息提供若干智能化帮助,包括自动地提供关键字及其匹配的关键字、左右括号的配对、对象的属性和操作,等等。2016秋数据科学与软件工程学院741.6.2编程工具与集成化开发环境软件开发还需要管理各种代码文件、检查程序质量、测试工具、管理bugs、软件打包工具等。这些基础开发工具通常是行式命令,直接在操作系统中输入相应的命令,如编译Java程序的编译命令javac,解释执行Java程序的命令java。也有一些语言直接提供可视化开发工具。2016秋数据科学与软件工程学院751.6.2编程工具与集成化开发环境可视化集成开发环境IDE,用图形用户界面(GraphicalUserInterface,GUI)集成了代码编写、静态分析、编译、调试、连接、打包等功能的一体化软件开发套件。如Delphi、VisualStudio、Eclipse和Netbeans,它们以GUI形式提供支持多种语言进行编程,还提供代码管理、代码分析、软件维护、软件测试及软件部署和交付等工具,同时支持多种形态应用软件(通用应用程序、Web应用、数据库应用、移动应用)的开发。2016秋数据科学与软件工程学院761.6.3软件运行环境软件运行环境,广义上说,是一个软件运行所要求的各种条件,包括软件环境和硬件环境。许多应用软件不仅仅要求特定的硬件条件,还对软件提出明确的支撑条件。操作系统将计算机的硬件细节屏蔽,将计算机抽象成虚拟资源。通常把计算机硬件和操作系统称为平台。2016秋数据科学与软件工程学院771.6.3软件运行环境为了能够使同一种编程语言的程序独立于操作系统,实现程序运行的独立性,即“一次编写程序、到处运行”,在操作系统层面提出并出现了语言虚拟机或运行容器。它为程序的运行提供所需的运行时资源,包括把程序翻译成计算机指令、分配内存、通过操作系统调用计算资源等。例如,Java虚拟机(JavaVirtualMachine,JVM)可以理解成一台运行Java程序的抽象的计算机。2016秋数据科学与软件工程学院781.6.3软件运行环境除了计算机硬件和操作系统构成的运行平台,运行软件还需要支撑环境,包括使用的数据库管理系统(如Oracle、MySQL、SQLServer)、Web服务器(如Apache服务器、微软的Internet信息服务器)、应用框架(如.NETFramework、Java程序的SSH框架、Web应用框架RubyonRails)及使用的第三方库函数、类库、APIs等。2016秋数据科学与软件工程学院791.6.4软件开发的最佳实践合适的技术和方法能提高软件开发的效率和产品质量。软件开发一直缺乏坚实的理论基础。软件行业借用了管理学的最佳实践(BestPractice)的概念来概括到达用户满意的、可以反复使用的软件开发的一切手段。最佳实践认为存在某种技术、方法、过程、活动或机制,可以使生产或管理实践的结果达到最优,并减少出错的可能性。2016秋数据科学与软件工程学院801.6.4软件开发的最佳实践原则是一个已经接受或专业化的指导行动的最高准则或标准。人们总结、使用了软件开发的基本原则、面向对象原则等。原则必须通过某种途径体现出来,才具有指导作用。机制指的是有机体的构造、功能及其相互关系、工作原理,如可视化编程的事件响应机制、类型的多态机制。2016秋数据科学与软件工程学院811.6.4软件开发的最佳实践技术是科学原理的应用,是具有技能特点的特殊的步骤或途径。软件开发技术是运用了计算机科学、数学、系统科学、管理科学的基本原理,进行软件开发的方式方法。2016秋数据科学与软件工程学院821.6.4软件开发的最佳实践方法是获得一个客体(对象)的步骤或过程。作为一个系统的步骤、技术活动被特定的专业或艺术采纳,是技能或技术的全部。研究方法及其知识的活动称为方法学,如面向对象方法学、软件方法学。2016秋数据科学与软件工程学院831.6.4软件开发的最佳实践工具指的是执行操作的器具,引申为为达到、完成或促进某一事物的手段。我们使用更加广泛的含义,软件工具指的是从编辑器、编译器、自动化测试框架到IDE的实用程序。2016秋数据科学与软件工程学院841.6.4软件开发的最佳实践软件开发的技术实践十分丰富,按照开发活动划分有用户需求、软件设计、软件构造、软件测试、软件交付技术和方法。每个方面又可以细分,如软件设计技术包括软件架构设计、构件设计、算法设计、数据结构设计或功能设计、用户交互设计、数据库设计。这些技术方法只适合某一个开发阶段或某个软件组成,也有一些成套的包含技术、方法和工具,主要是公司内部研制和使用(如微软开发方法与最佳实践MSF)。2016秋数据科学与软件工程学院851.6.4软件开发的最佳实践按照软件开发范式有结构化开发、面向对象开发和新兴的面向服务开发等,侧重在软件工程活动的前期、以软件分析和设计或软件建模为主。结构化开发方法是用系统工程的思想和工程化的方法,按用户至上的原则,结构化、模块化、自顶向下地对系统进行分析和设计的方法。2016秋数据科学与软
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
评论
0/150
提交评论