书签 分享 收藏 举报 版权申诉 / 73
上传文档赚钱

类型《软件工程导论》课件ch04-软件开发环境与过程.pptx

  • 上传人(卖家):momomo
  • 文档编号:5900441
  • 上传时间:2023-05-14
  • 格式:PPTX
  • 页数:73
  • 大小:1.92MB
  • 【下载声明】
    1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
    2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
    3. 本页资料《《软件工程导论》课件ch04-软件开发环境与过程.pptx》由用户(momomo)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
    4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
    5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
    配套讲稿:

    如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。

    特殊限制:

    部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。

    关 键  词:
    软件工程导论 软件工程 导论 课件 ch04 软件 开发 环境 过程
    资源描述:

    1、第4章 软件开发环境与过程 软件是产品 软件是脑力密集劳动的产物 软件是有组织地开发出来的主要内容 4.1集成开发环境 4.2操作系统与运行环境 4.3 嵌入式与移动终端软件的开发 4.4个体程序员能力 4.5 项目小组的组织 4.6 大项目的开发过程 4.7迭代与敏捷4.1集成集成开发开发环境环境 4.1.1代码编辑器 4.1.2编译器 4.1.3链接器 4.1.4程序加载 4.1.5代码调试和安全问题4.1.1代码编辑器 早期的代码依靠卡片和纸带编辑和输入到计算机里,一旦出错,非常难修改。光电卡片和纸带读写机 现在的代码编辑器,具有上下文敏感能力,随着程序员的键入的字母,不断的提示下一步要

    2、键入的可能的内容。把语句块、不同类型的变量等用不同的颜色区分开来,有助于程序员检查和发现错误。更好的编辑器可以提醒插入哪些代码、啥样的代码、局部变量与全局变量的关系。进一步,将像C这样的代码与流程图对应起来,像C+代码的类等于UML的图形对应起来,能够把图形语言与文本语言对应起来,相互直接转换。4.1.2 编译器 典型的编译器负责把源代码转换为机器代码或汇编代码。如果运行编译器的CPU(或操作系统)是一个类型,运行编译后的代码是另一种类的CPU(或操作系统),称此为交叉编译器(cross-compiler)。将低级语言(例如机器或汇编)转换为高级语言(如C语言)的编译器称为反编译器(decom

    3、piler)。反向编译比正向编译更难作。高级语言之间的转换程序,例如从FORTRAN转换为C原因,称为源源编译器。支持多语言、多目标机的编译器C代码前端无优化的中间代码C+代码Ada代码词法分析(Scanner)语法语义分析(Parser)中间代码生成器中间代码优化器词法分析(Scanner)语法语义分析(Parser)中间代码生成器词法分析(Scanner)语法语义分析(Parser)中间代码生成器无优化的中间代码无优化的中间代码优化后的中间代码ARM 代码生成器X-86代码生成器Sparc代码生成器PowerPC代码生成器ARM 机器X-86 机器Sparc机器PowerPC机器中端后端O

    4、bj文件4.1.3链接器 链接器(Linker)是一个工具程序,目的是把多个代码的obj文件和系统的库代码装配为一个可执行的文件格式。Lib文件obj文件obj文件Link(Linker)Lib文件DLL文件EXE文件注释:Lib文件和DLL文件参见4.2.2节obj文件 Obj文件主要存放编译后的机器代码,为了便于Linker进行装配,该文必须具有规定的格,并给出该代码的相关信息(描述),包括:头部头部(Header):该该文件的描述性和控制信息,例如,文件的长度,代码段从那个地址开始等 代码代码段段(Code segment):放置可执行的二进制指令 数据段数据段(Data segment

    5、),放置初始化的静态变量 只读只读数据段数据段(rodata,Read-only data segment),放置初始化的静态常数 BSS段段(BSS segment),放置未初始化的静态数据,包括变量和常数 外部定义和引用的链接,说明本obj文件引用或包含了哪些外部定义,例如,C元语言的#Inlcude包含的中定义的变量等 重定位信息重定位信息 动态动态链接信息链接信息 排除排除(Debugging)信息信息常见的obj格式有COFF和ELFELF源于UNIX System V4。1999年后主要用于X86系列的可执行文件、目标和共享库的格式。ELF头部Program 头部表.Text.ro

    6、data.dataSection 头部表.4.1.4程序加载链接好的可执行程序,要加载到内存中,并将其交给计算机的指令计算器,开始运行。加载是一个程序,执行这个操作的方式有:在裸机上进行加载:早期的计算通过人工设置程序启动地址,启动加载程序(卡片机),把运行的程序送到内存 也可能是通过操作系统进行的,例如,在Windows上,双击程序 也能是从一个宿主计算机上,通过串口线或网线等,把可执行文件,加载到另一台目标机的过程。(称为交叉加载或下载(download))。加载程序是必须的,且要能保证加载过程中,不同的可执行文件在内存空间、运行时间、外设使用上不会相互抢占而导致的死锁。死锁是一种多个任务

    7、强占相同的有限资源,谁都只抢到一部分,而不愿意放掉的情况下,导致计算机不能利用资源完成任何工作的现象。4.1.5代码调试和安全问题 在执行过程中能够跟踪每条语句的执行,无疑有利于寻找错误。这种工作方式称为调试(Debugging)。调试的工具称为排错器(Debugger)进行高级语言的跟踪和调试,在编译阶段,不能对高级语言的代码进行优化,因为一旦优化后,高级语言的语句与机器指令(或汇编指令)的对应关系就可能会被破坏。可以借助Debugging工具对已有的可执行文件进行跟踪,甚至修改部分指令,例如,扩展一下功能,甚至是增加一些病毒性的指令。反调试 也可以用一些技术,不允许对你的可执行文件进行跟踪

    8、、调试和更改指令。或称为反调试(Anti-Debugging):基于API:检查系统信息,看是否存在debugger对你的程序进行跟踪;基于异常:检查自己的程序是否发生异常 进程和线程块:检查进程和线程是否被其它程序操作 代码修改:检查是否有debugger对你的代码修改和设置断点 基于硬件和寄存器:检查硬件断点和CPU寄存器 时序和延迟:检查指令执行所花费的时间,是否有异常 检测和关闭Debugger工作主要内容 4.1集成开发环境 4.2操作系统与运行环境 4.3 嵌入式与移动终端软件的开发 4.4个体程序员能力 4.5 项目小组的组织 4.6 大项目的开发过程 4.7迭代与敏捷4.2操作

    9、系统与运行环境 4.2.1 调用操作系统的功能 4.2.2 库 4.2.3远程调用4.2.1 调用操作系统的功能 操作系统(Operating System,简称OS)是管理和控制计算机硬件资源,直接运行在“裸机”上的软件。OS可以让其他(称为应用)程序与硬件隔离,或者说其他应用程序尽可或必须在操作系统的支持下运行。OS一般会提供应用程序编程接口的API(Application Programming Interface),让应用型的程序员更方便的编写应用程序。这些API通常会以C语言的方式提供,一些OS厂商也会提供Java、C+等API。应用程序员可以不关心计算机硬件细节。4.2.2 库 运

    10、行库(runtime library RTL)是编译器在运行环境下调用的程序。库有两种,静态库和动态库。静态库 静态库,比如C语言提供的stdio.lib、math.lib等库,这种LIB中有许多函数,例如,stdio.lib中的printf,math.lib中的sin(x)、sqrt(x)等。是已经编译好的二进制代码文件。直接用链接器,将LIB中的代码(例如,printf)加入(链接到)可执行文件(EXE或者DLL)文件中。另一种静态LIB是和DLL配合使用的,里面没有代码,代码在DLL中,这种LIB是用在静态调用DLL上的,所以起的作用也是链接作用。动态库 动态库DLL(Dynamic L

    11、ink Library),又称“应用程序拓展”。在Windows中,许多应用程序并不是一个完整的可执行文件,它们被分割成一些相对独立的动态链接库,即DLL文件,放置于系统中。当执行某一个程序时,相应的DLL文件就会被调用。一个应用程序可以使用多个DLL文件;DLL可以被多个应用程序共享(同时使用),这样的DLL文件被称为共享DLL文件。4.2.3 远程调用 在网络和分布式的计算环境下,可以用一台计算机调用网上另一台计算机的功能。这不同于在同一台计算机上的子程序调用。或者说,一台计算机作为服务器(称为服务器端),向调用它的计算机(称为客户端)提供服务,从而可以建立客户-服务(Client-Ser

    12、ver)的调用形态。这种程序的调用形态,称为远程调用(remote procedure call(RPC)。就像在一台机器上调用其它程序一样。远程调用时,需要执行的函数体是在远程的机器上的,也就是说,被调用的函数是在另一个进程中执行的。这就带来了几个新问题:1)Call ID映射。2)序列化和反序列化。3)网络传输。1)Call ID映射。映射。怎么告诉远程机器要调用哪个函数?在本地调用中,函数体是直接通过内存地址(指针)来指定的。但是在远程调用中,不是给函数的地址(指针),因为两个机器的地址空间是完全不一样的。所以,在RPC中,所有的函数都必须有自己的一个ID。这个ID在所有进程中都是唯一确

    13、定的。客户端在做远程调用时,必须附上这个ID。然后,我们还需要在客户端和服务端分别维护一个 函数 Call ID 的对应表。两者的表不一定需要完全相同,但相同的函数对应的Call ID必须相同。当客户端需要进行远程调用时,它就查一下这个表,找出相应的Call ID,然后把它传给服务端,服务端也通过查表,来确定客户端需要调用的函数,然后执行相应函数的代码。2)序列化和反序列化和反序列化序列化 客户端怎么把参数值传给远程的函数呢?在本地调用中,只需要把参数压到栈里(单独开辟的一块内存),然后让函数自己去栈里读就行。但是在远程过程调用时,就需要客户端把参数先转成一个字节流,传给服务端后,再把字节流转

    14、成自己能读取的格式。这个过程叫序列化和反序列化。同理,从服务端返回的值也需要序列化反序列化的过程。3)网络网络传输传输 远程调用是在网络上的,客户端和服务端是通过网络连接的。所有的数据都需要通过网络传输。网络需要把Call ID和序列化后的参数字节流传给服务端,然后再把序列化后的调用结果传回客户端。这种传输使用的协议称为传输协议。大部分RPC框架使用TCP协议,也可以用UDP,甚至是HTTP。(分别参见第5章和第6章)主要内容 4.1集成开发环境 4.2操作系统与运行环境 4.3 嵌入式与移动终端软件的开发 4.4个体程序员能力 4.5 项目小组的组织 4.6 大项目的开发过程 4.7迭代与敏

    15、捷4.3 嵌入式与移动终端软件的开发嵌入式与移动终端软件的开发 4.3.1 嵌入式计算机 4.3.2 移动终端设备 4.3.3 交叉开发环境4.3.1 嵌入式计算机 嵌入式设备是指,这些设备没有键盘、显示器、鼠标等像PC机一样的完整的计算机系统。例如,一个汽车刹车控制系统的计算机。嵌入式计算机,一般是嵌入式在设备中的,其往往直接与设备进行输入输出,例如,接收一组传感器的信号,计算机后,输出给控制开关、报警等。而常常不直接与用户打交道。4.3.2 移动终端设备 移动终端:便于人携带、或车载的计算设备 不同于嵌入式计算机,有人可见的输入/输出,但是,是受限的,例如,POS收款机、一维码和二维码收款

    16、机等。像手机等设备,虽然也有显示器、键盘等外部设备,能够完成与人之间的输入输出。但是,太麻烦!4.3.3 交叉开发交叉开发环境环境 交叉编译器(cross compiler):将本机上的源代码编译为其它机器指令格式的编译器。例如,在Windows(Intel)上的编译器,把C代码编译为安卓(ARM)上的指令 注意:Windows运行在Intel X86的指令格式,将C源代码编译为基于安卓操作系统的ARM机器指令格式的可执行代码。链接器(link):与3.4.3节的链接器的功能是一样,即,把多个代码模块装配起来 下载(download)与交叉调试器(cross debugger):用RS232串

    17、口、网线等把程序装到目标板上 在宿主机上观看和跟踪源代码,在目标机上跑二进制码,两者间的代码和指令能对上 模拟器(Simulator):在宿主机操作系统上,模拟目标机代码的执行。主要内容 4.1集成开发环境 4.2操作系统与运行环境 4.3 嵌入式与移动终端软件的开发 4.4个体程序员能力 4.5 项目小组的组织 4.6 大项目的开发过程 4.7迭代与敏捷4.4 个体程序员能力个体程序员能力 4.4.1 程序员个体能力差异 4.4.2 改进个体能力4.4.1 程序员个体能力差异 比尔.盖茨(Bill Gate)评论道:“高级机床工人可以获得平均机床工人几倍的工资,然而,一个厉害的代码编程人员的

    18、价值是平均软件编程人员的一万倍!”不同类型的程序员:1)有远见的/艺术家的程序员(Visionary/Artist Programmer)2)开拓型程序员(Trailblazer Programmer)3)耕牛型程序员(Workhorse Programmer)。耕牛程序员,俗称“码奴”4)依附型程序员(Drone Programmer)5)傻瓜式程序员(Idiot Programmer)成为优秀的程序员 第一类程序员是天才,是可遇不可求。但是如果一个天才缺乏对计算机和编程的训练,也不会成为软件天才。第二和第三类程序员是可以培养的,软件工程专业的主要目标是培养这类人才,主要是数学、算法、编程能

    19、力、组织能力的学习和锻炼。第二种与第三种人的差别是工作的积极态度和组织能力,这些能力可以从(创新创业类的)项目实践中得到锻炼。第四类,依附型程序员主要是工作方式与态度问题。4.4.2 改进个体能力 程序员的劳动是一项创造性的脑力劳动。阶段阶段1:提高员工的意识。:提高员工的意识。让程序员们理解到个人工作意识和计划性与整个团队的效率是密切相关的。阶段阶段2:提高员工的竞争力。:提高员工的竞争力。主动提高员工的工作能力。让每个员工具有按时完成其工作的能力,且能积极主动工作的意识。阶段阶段3:把把员工员工的工作意识潜移默化到工作中,让员工的工作成为的工作意识潜移默化到工作中,让员工的工作成为无意识的

    20、行为。无意识的行为。主要内容 4.1集成开发环境 4.2操作系统与运行环境 4.3 嵌入式与移动终端软件的开发 4.4个体程序员能力 4.5 项目小组的组织 4.6 大项目的开发过程 4.7迭代与敏捷4.5 项目小组的项目小组的组织组织 一个大型程序,很难靠一个人完成。例如,Windows 7就有几千行万代码。平均一个程序员每天也就能写几行到10几行!需要组织很多人(成千上万),花几年时间完成一个项目 就像盖一个大楼,靠几个工人是不行的,要有组织、管理、设计、计划、并逐步实施。实际情况中,软件“阑尾楼”比比皆是,耗费巨大的投资。4.5.1 小组的组织协调问题 4.5.2 首席程序员的组织方式

    21、4.5.3 矩阵式的组织方式 4.5.4 结对编程4.5.1 小组的组织协调问题项目开发中的交流方式1 line3 lines10 linesN persons need n(n-1)/2 lines6 lines自设计/自编程/自测试/一包到底,no communication一个人的软件开发是“个体艺术”,而不是工程。一个小组几个人,最合理?两个人为一组时,交流途径数n=1,h=r(2(2-1)=2r。效率会比较高。但缺乏规模。敏捷方法的结对编程(参见4.5.4)。三个人为一个小组时,h=r(3(3-1)/2=3r。如果r0.3,那么,h接近于1.0,即,大于一个人的工作量。如果考虑设立一

    22、个专门从事交流的人,那么,就只剩下两个程序工作者。两个技术工作者可以直接交流,而不需要管理者。因此因此,三人小组设立专职协调者是多余的,或者,三人小组设立专职协调者是多余的,或者,管理者必须承担技术开发工作管理者必须承担技术开发工作。4人小组人小组的情况比3人稍好点,不需要不需要建立建立专职的协专职的协调人员。调人员。一个小组几个人,最合理?5人小组人小组的最大交流途径数是10个,h=10r,如果r大于0.1就可以设立一个专职的交流协调者,从而把交流途径变为4其他人只通过管理者交流,而不私下交流的(10条交流途径)。管理成本占总管理成本占总成本的成本的1/4。7人小组人小组的最大交流途径数是2

    23、1个,h=21r,如果r大于0.05就可以设立一个专职的协调者,从而把交流途径变为6其他6个人只通过管理者交流,而不私下交流。实际管理成本占总成本的实际管理成本占总成本的1/6。9人小组人小组的最大交流途径数是36个,h=36r,如果r大于0.03就可以设立一个专职的交流协调者,从而把交流途径变为8其他8个人只通过管理者交流,而不私下交流。实际管理成本占总成本的实际管理成本占总成本的1/8。如果,小组成员不可能不进行私下交流,特别是,对协调者有意见如果,小组成员不可能不进行私下交流,特别是,对协调者有意见时,反而导致协调工作量增加。甚至是无法正常开展工作。时,反而导致协调工作量增加。甚至是无法

    24、正常开展工作。7 原则 一个人的管理和交流能力是有限的,管理学上称为7 原则,即,一个人管理59人是最合理和高效的。被管理的人太少,官太多,兵太少,管理成本高。被管理的人太多,管不过来,效率低 军队的每个班一般是9人,作为最小作战单位。采用3X3制,一个连下设3个排,每个排下设3个班(每班含正副班长10人)=90人+3个排长 连长,副连长,指导员,副指导员,文书,通信员=6人 一个炊事班(一般5人)共:90+3+6+5=104人左右企业管理人员多少为好?4.5 项目小组的项目小组的组织组织 4.5.1 小组的组织协调问题 4.5.2 首席程序员的组织方式 4.5.3 矩阵式的组织方式 4.5.

    25、4 结对编程首席程序员的组织方式软件开发队伍,就要像外科手术团队一样!Linus Benedict Torvalds4.5 项目小组的项目小组的组织组织 4.5.1 小组的组织协调问题 4.5.2 首席程序员的组织方式 4.5.3 矩阵式的组织方式 4.5.4 结对编程矩阵式的组织方式界面编程图形数据库开发质量保证测试项目A张三李四王五刘二钱一项目B张三王五刘二钱一项目C李四王五钱一人员复用:让工程师成为某个方面专家,而不一定是全才!4.5 项目小组的项目小组的组织组织 4.5.1 小组的组织协调问题 4.5.2 首席程序员的组织方式 4.5.3 矩阵式的组织方式 4.5.4 结对编程结对编程

    26、 当项目的人员较少时,可以采用结对编程(Pair programming)进行开发。结对是指:两个程序员结为对子。一个人输入代码,而另一个人审查他输入每行代码。输入代码的人称作驾驶员,审查代码的人称作观察员(或导航员)。两个程序员经常互换角色。行家对行家(Expertexpert):专家与新手(Expertnovice)新手新手(Novicenovice):主要内容 4.1集成开发环境 4.2操作系统与运行环境 4.3 嵌入式与移动终端软件的开发 4.4个体程序员能力 4.5 项目小组的组织 4.6 大项目的开发过程 4.7迭代与敏捷4.6大项目的大项目的开发过程开发过程 4.6.1从程序开发

    27、扩展到软件开发 4.6.2 瀑布式开发模型 4.6.3 中间文档的价值 4.6.4文档中的图示化表达4.6.1从程序开发扩展到软件开发分析分析认识问题认识问题设计设计实现实现安装安装维护维护完成系统规格说明完成可运行的系统问题描述可工作的系统系统验收编写代码,建造可运行的系统确定系统的形式和方法程序开发所涉及的范围实际上,程序员涉及到软件的整个开发过程纠错和修改废弃废弃一个软件项目的实际过程资源(人、成本)项目启动系统开发过程阶段和功能时间系统设计预研系统设计部件设计单元设计单元开发单元测试部件测试系统测试维护和后续活动技术支持技术支持机器运行、服务、支持程序、分析、等预究文档编写文档编写测试

    28、开发测试开发控制和行政管理控制和行政管理软件的研究、生产、服务 软件产品软件产品需求需求 客户到底需要啥样的软件功能?产品如何使用?如何安装等问题,是软件开发工作的首要问题。软件是一个系统,不是一两个简单的功能集合。如果需求是错误的,投入再多的人力资源、成本和时间,也不能交付客户所期望的产品。软件软件设计设计特征特征 与其它工业产品的设计一样,软件设计也应当有一些通用的准则、用户需求、可靠性与设计、逻辑完整性。从软件设计策略和技术看,设计过程也应当是逐步求精的(例如,从顶向下的设计等),也应当结构化的问题和代码部件的复用问题,对开发过程的监控和仿真,以及高级语言的使用。软件软件的生产和的生产和

    29、管理管理 大规模软件系统的生产面临主要问题之一是难以估计出项目所需时间。如何借鉴传统工业产品的设计和生产过程,估算软件项目的成本、时间和需要的(人力)资源?如果项目是分阶段(例如,需求分析、设计、编码和测试)进行的,如何安排每个阶段的人力资源、时间和成本?测试与测试与质量控制质量控制 如何向客户表明你提供的软件没有错误或只有很少的错误,不会给客户带来麻烦和灾难?“程序测试只能表明软件有错,而不能证明程序没错!”那么,如何控制软件产品的质量。软件的维护和软件的维护和升级升级 软件的功能总是要扩展的,其中的错误一旦被发现,就要在新的版本中解决掉。这样,软件产品才具备长期的生命力。4.6大项目的大项

    30、目的开发过程开发过程 4.6.1从程序开发扩展到软件开发 4.6.2 瀑布式开发模型 4.6.3 中间文档的价值 4.6.4文档中的图示化表达4.6.2 瀑布式开发模型系统的硬件要求分析系统概念硬件要求分析概要设计详细设计制造系统的软件需求分析软件需求分析概要设计详细设计编程、单元测试、部件集成测试CSCI测试SRRSDRSSRRDRCDRTRR硬件测试系统集成与测试FCAPCAFQR开发配置产品基线功能基线分配基线SRR:系统需求评审;SDR:系统设计评审;SSR:软件规格说明评审;PDR:概要设计评审;CDR:关键设计评审;TRR:测试准备评审;FCA:功能配置审计;PCA:物理配置审计;

    31、FQR:正式合格性评审。系统要求分析,设计系统要求分析系统设计软件需求分析概要设计详细设计编码和CSU测试 CSC 集成 和 测试 CSCI 测试系统集成和测试软件设计软件编码、测试、集成系统规范系统/子系统设计文档软件需求规格说明接口需求规格说明软件开发计划软件设计文档软件测试计划接口设计文档软件测试说明(用例)软件测试说明(过程)测试报告源代码目标码可执行文件静态库动态库数据库设计说明保障和运行文档功能基线 分配基线产品基线基线基线系统要求评审系统设计评审规格说明评审开发配置概要设计评审关键设计评审测试准备评审注释:基线Baseline4.6大项目的大项目的开发过程开发过程 4.6.1从程

    32、序开发扩展到软件开发 4.6.2 瀑布式开发模型 4.6.3 中间文档的价值 4.6.4文档中的图示化表达4.6.3 中间文档的中间文档的价值价值 中间产品质量是最终产品质量的依据 中间产品的另一个作用是增加工作的复用程度 中间产品可以极大地降低返工工作量 中间产品是事后追溯的依据4.6大项目的大项目的开发过程开发过程 4.6.1从程序开发扩展到软件开发 4.6.2 瀑布式开发模型 4.6.3 中间文档的价值 4.6.4文档中的图示化表达4.6.4文档中的图示化表达文档中的图示化表达图类图类本科相关本科相关课程课程流程图本课程、C语言程序设计程序之间的调用关系图数据流图软件工程理论与实践类图C

    33、+程序设计软件工程理论与实践面向对象分析与设计类与类之间的关系图实体图软件工程理论与实践数据库原理实体之间的关联关系图活动图软件工程理论与实践、面向对象分析与设计消息顺序图软件工程理论与实践、面向对象分析与设计通信协议设计状态机图形式语言、编译原理、软件工程理论与实践泳道图软件工程理论与实践需求工程4.6.4.14.6.4.1流程图流程图4.6.4.24.6.4.2程序之间的调用关系图程序之间的调用关系图4.6.4.1 流程图流程图4.6.4.2 程序程序之间的调用关系之间的调用关系图图AB1B2B3C1C2C3C4D1D2D3E1E2E3D4 从图中,还可以看出:1)E2是十分重要的,它被多

    34、个程序B2、C3、D2、B3、D3调用,因此,这个程序的错误会牵扯到许多程序。2)调用的层次有点乱,最后的代码设计是分层次调用,避免跨层,例如,分为A、B、D、D、E几个层,只让A层调用B层的程序,B层调用C层的程序,等等。3)这里存在一个(间接)递归调用的情况,B1调用了C2,C2调用了D1,D1又调用了E1,而E1又调用B1(为清晰起见,用虚线表示)。递归调用是很麻烦的,容易导致内存出现问题,因为,不知道啥时,可以返回到调用者,例如,这里的A。4)像C这样的语言,还可以编写自递归调用,即一个程序调用自己。可以用有限次的循环,改写递归调用程序,如果你能知道准确的循环结束条件。在安全关键系统中

    35、,要避免用递归调用(不管时间接或自递归)。例子:在屏幕上打印出一条f(x)曲线。主程序:main 作为一个文件,该文件中只有一个函数main子程序1:Draw(x),作为一个文件,有若干个printf,以及循环语句,打印出若干空格和*。子程序2:f(x),作为一个文件,计算出f(x)的值,例如,f(x)=sin(x)或其他计算公式。这样,你就可以编写出打印各种f(x)程序,只需要改变子程序2:f(x)主程序和子程序1,是不变的,不用每次都编译!且还可以给他人使用。*主要内容 4.1集成开发环境 4.2操作系统与运行环境 4.3 嵌入式与移动终端软件的开发 4.4个体程序员能力 4.5 项目小组

    36、的组织 4.6 大项目的开发过程 4.7迭代与敏捷4.7 迭代迭代与敏捷与敏捷 4.7.1 增量式迭代开发 4.7.2 渐进式迭代开发 4.7.3 敏捷方法4.7.1 增量式迭代开发 增量式增量式(incremental)开发是指在开发过程中,先实现那些需求明确的功能。随着系统开发进展,人们会对一些需求不明确的需求逐渐清晰起来,那么在后续的第二次,第三次等迭代中,可以更容易地实现这些需求功能。由于需求的实现是一个个“增量”叠加的,将这种模型称为增量式的开发。4.7 迭代迭代与敏捷与敏捷 4.7.1 增量式迭代开发 4.7.2 渐进式迭代开发 4.7.3 敏捷方法4.7.2渐进式迭代开发 渐进式

    37、渐进式(evolutional)开发,或进化式开发,与增量式开发一样也是需要多次迭代的过程。渐进式开发模型可以假定第一次迭代时整个需求都是模糊的。随着开发的进行,人们对系统的需求越来越清晰。几次迭代后,要求的功能和性能全部清晰,可以向客户提交可使用的版本。4.7 迭代迭代与敏捷与敏捷 4.7.1 增量式迭代开发 4.7.2 渐进式迭代开发 4.7.3 敏捷方法4.7.3 敏捷方法 良好的源代码胜过冗长的文档,因为文档并不能把问题讲清楚,很多时候也说不清楚。用户只要看到了你的系统运行,才能知道是否适合他们的需求。与其这样,不如先开发一个(可演示的、原型的)系统,用比前面的增量式和渐进式更快的迭代

    38、频率(例如,周或几天),实现快速迭代,俗称为“小步快跑!”常用的方法有:极端编程 SCRUM 特征驱动等。主人:“把XX东西给我运过去.”-主人表达不清XX是啥?龟:跑的慢,一次必须弄明白主人的真实意思!兔:跑的快,可以多跑几趟!结果:谁赢?谁输?总结 程序开发,需要相应的工具,工具可以提高效率 编译器、链接器(装配器)、调试器 人的能力有很大的差异 不同的项目组织方式,充分发挥每个人的作用 当然,收入也有很大差别 开发过程 瀑布式:需求分析、产品设计、编代码、集成(组装)测试,发布等 应对需求变化:迭代和敏捷 整理中间文档(产品):换人时,容易理解、继承和追溯作业 1)假设有三个人一起一个项目,打印一个三角函数的图形(类似于PPT64页的)1.1)模拟三个人分别写自己的C程序,单独编辑和存放。1.2)画出该项目的(子)程序调用关系图 1.3)说明文件之间的包含(#include)关系 1.4)然后,说明该项目的创立、编译、链接和执行步骤。1.5)说明这样的项目划分,带来的好处 2)瀑布式开发模型有那几个工作阶段组成?每个阶段的主要工作是什么?

    展开阅读全文
    提示  163文库所有资源均是用户自行上传分享,仅供网友学习交流,未经上传用户书面授权,请勿作他用。
    关于本文
    本文标题:《软件工程导论》课件ch04-软件开发环境与过程.pptx
    链接地址:https://www.163wenku.com/p-5900441.html

    Copyright@ 2017-2037 Www.163WenKu.Com  网站版权所有  |  资源地图   
    IPC备案号:蜀ICP备2021032737号  | 川公网安备 51099002000191号


    侵权投诉QQ:3464097650  资料上传QQ:3464097650
       


    【声明】本站为“文档C2C交易模式”,即用户上传的文档直接卖给(下载)用户,本站只是网络空间服务平台,本站所有原创文档下载所得归上传人所有,如您发现上传作品侵犯了您的版权,请立刻联系我们并提供证据,我们将在3个工作日内予以改正。

    163文库