《软件工程导论》课件ch04-软件开发环境与过程.pptx
- 【下载声明】
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:把把员工员工的工作意识潜移默化到工作中,让员工的工作成为的工作意识潜移默化到工作中,让员工的工作成为无意识的
展开阅读全文