软件工程及软件方法学
-
软件工程基础(意)Carlo Ghezzi,(意)Mehdi Jazayeri,(意)Dino Mandrioli著;施平安译;施平安译本书介绍了软件工程的基本原则,说明了这些原则在软件开发的不同阶段的应用,强调了严格的方法对软件工程实践的重要性。全书提供了350多个练习,以帮助理解书中的资料。20多个全面深入的案例分析说明了如何应对现实问题的复杂性。本书体现了我们使用基本原理的信条以及理论在工程实践中的重要性。我们同时在大学和各方面软件工程专业课中使用过书中的材料。本书通过严格的形式化方法和非形式化方法阐述了软件工程原则和方法的重要性,有选择地介绍了软件工程基础;强调并确定了适用于整个软件生命期的基本原则,全面深入地介绍了这些基本原则在软件设计、规范、验证、软件生产过程和管理活动中的运用;书中提供了大量的练习和案例分析,既有助于理解书中介绍的理论知识,又可以让读者亲身体验如何应对复杂的实现问题。本书可以作为大专院校计算机科学系和计算机工程系的本科生和研究生教材,也可以作为计算机软件人员和计算机用户的参考书。 -
嵌入式系统固件揭秘(美)Ed Sutter著;张晓林等译;张晓林译本书通过一个完整的嵌入式系统设计全过程,向读者展示嵌入式系统的基本框架,以及设计、编程、调试等技术细节。书中详细讲述了嵌入式系统中的存储器、微处理器与微控制器、数据总线与地址总线等基本概念,以及在设计中要考虑的要素。另外还给出了关键程序的源代码,使读者通过本书学会如何看懂嵌入式系统的原理图,了解系统是如何工作的,掌握嵌入式系统开发平台的主要固件。本书适于从事嵌入式系统研发的技术人员以及高校相关专业的师生阅读。前言嵌入式系统是嵌入到其他产品内部的计算机。奇怪的是,虽然人们知道许多关于编程和计算机的知识,但却在神秘的嵌入式系统世界中感到迷惑。在嵌入式系统编程世界中,大量的细节(包括硬件和软件)使开发过程像是在探险,甚至感到“难于”生存下来。软件、硬件、固件到底有何区别?怎样将10万条程序嵌入到比指甲还小的器件中?什么是闪存?为什么需要高速缓存(cache)?任务和进程之间有什么区别?要不要考虑可重入性?在阅读这本《嵌入式系统固件揭秘》的过程中,读者将逐步了解这些问题,不再像起初那样感到迷惑。嵌入式系统编程覆盖了从最具体的底层编程到最抽象的高层UNIX编程的各个方面。它引起了近20年来工业界爆发的革命性变化。在20世纪70年代后期,汇编程序已被认为是够丰富多采了。一般的嵌入式系统可以使用小于64Kb(位,不是字节)的系统内存。没有什么硬件要留给固件开发者去处理。一般由同一个人完成画图、焊接样品、写固件,把所有的事拉拢到一起。当Intel公司引入8085芯片时,很明显那些复杂的微处理器还停留在这个水平上。在20世纪80年代,Motorola与Intel展开了CPU大战,C语言成为了少数敢于用高级语言编程并烧制EPROM的人普遍采用的编程语言。今天,微处理器随处可见,范围从在工业界占主导地位的4位和8位微处理器家族到1GHz的几乎需要冷却设备(当然也是由微处理器控制的)冷却的64位微处理器。多年来,这些系统的复杂度像滚雪球式的增大。工业界已经从在前台用二进制代码对DECPDP机器编程发展到给烤面包机的微控制器提供面向对象的设计。系统的发展速度非常迅猛,已有的微处理器、微控制器、RAM、DRAM、SDRAM、管道、超标量体系结构、EPROM、闪存、RISC和CISC、RAS、CAS及高速缓存等,也仅仅是一个开始。现在,从牙刷(不是开玩笑,是事实)到喷气式战斗机都由某种微处理器控制着。这种趋势自然产生许多工具和技术。这些可供选择的硬件(固件必须使用的集成电路)和软件(用于建立固件应用程序的工具)使人眼花缭乱。本书的目标是通过一个完整的嵌入式系统设计过程将你带入真正的嵌入式系统工程。而且,这个工程的源代码包括一些固件(一个嵌入式启动平台),可以简化你今后的工程。本书使用一个包括CPU、内存及一些外部设备的小硬件系统设计实例,给出了基本原理结构图并讲解如何将指令从内存中取出,同时也将讲到设备的概念。本书将讲述闪存与EPROM、SRAM与DRAM、微处理器与微控制器、数据总线与地址总线,还将讲述如何将C语言和汇编语言源代码转换成二进制映像,并装入设备存储器中以便在CPU引导(引导闪存)时使用。本书用几章的内容讲述启动嵌入式系统并执行一个应用程序(包括在汇编程序中的基本引导程序)的基本概念,先不涉及句柄、闪存驱动程序、闪存文件系统、串行和以太网连接等。这样可以使读者理解嵌入式系统工程如何启动、如何建立起支持嵌入式系统的平台。这些听起来让人兴奋吗?美妙吗?恐慌吗?事实并非如此。本书的目的并不是要讨论最新出现的超标量体系结构和在印刷电路板上的铜线所产生的天线辐射效果,也不想涉及高级的抽象设计过程(高级的体系结构和传输线的效果固然重要,但这些不是本书的主题)。本书是面向那些不想被一大堆工业行话和特殊技术细节所烦恼的、又想尽快了解系统的读者撰写的。读完本书,读者将学会如何看原理图、了解引导闪存器件是如何工作的、掌握完整的嵌入式系统开发平台的主要组件。本书的本书的读者应有一些C语言编程经历和基本的汇编语言概念。本书并不要求读者有电子技术或硬件知识背景。因此,只要读者有一些编程知识背景将会发现本书大有益处。计算机科学或电子工程专业方面的学生不需要有固件开发的背景,只要有兴趣,就可以从本书中获益。初级固件开发者将发现本书中的例子很有帮助,因为本书中的例子包括文档和代码注释,可以将其扩展到固件开发平台。书中将详细讲解引导新硬件和CPU与外部设备的交互方式。涉及到从小文件传输协议(TrivialFileTransferProtocol,TFTP)到以太网的底层引导过程。读者可以将本书中的代码或一部分代码引入到自己的固件平台中。硬件开发者将发现本书讲述的平台有助于在复杂的CPU上分析并调试硬件,也会出于好奇,将注意力从硬件上转到学习固件过程上。本书提供了不脱离硬件而进入固件学习的起点(硬件设计者会自然地过渡到固件/软件的编程世界中)。项目主管也会发现本书非常有用,因为这里呈现的固件包是一个成熟的平台。这个平台可广泛地应用到实时操作系统(RTOS)和目标体系结构中,而且很容易放到新系统中。这个平台是面向目标的,且独立于RTOS,这使得它很容易转到各种目标或RTOS系统中。浏览本商品所属分类图书计算机/网络计算机理论 -
数据结构习题解析与实训张世和编著本书是与教育部高职高专规划教材《数据结构》配套的习题解析与实训用书。对应教材中的各章节,包括线性表、链式存储结构、串、数组、二叉树、图、排序和查找等,给出了上机习题的源程序,还增加了很多教材中没有的习题。源程序全部用C语言编写。本书的习题大部分是比较简单的,也有一些技巧性较强或综合性的习题。每一章最后还给出若干实训题目,可供在学习过程中上机编程,独立完成。本书配有一张光盘,各章习题的源程序对应放在同名的子目录下。用到的各类数据结构说明的头文件在光盘根目录下。本书可以同《数据结构》教材配套使用,也可作为非计算机专业学生和工程技术人员的自学参考书。本书前言高职高专计算机专业系列教材。特色及评论文章节选 -
UML面向对象结构设计与应用施昊华,张朝辉编著统一建模语言(UML)是一种通用的可视化建模语言,用于对软件进行描述、可视化处理、构造和建立软件系统制品的文档。它记录了对必须构造的系统的决定和理解,可用于对系统的理解、设计、浏览、配置、维护和信息控制。UML适用于各种软件开发方法、软件生命周期的各个阶段、各种应用领域以及各种开发工具,是一种总结了以往建模技术的经验并吸收当今优秀成果的标准建模方法。本书按照从初级到高级、从基本概念到应用实例的顺序,逐渐由浅人深地对UML进行了详细地讲述,具有层次清楚、思路清晰、讲解透彻、实例丰富的特点。适合于广大软件开发人员、系统分析人员、开发人员以及相关专业的科技人员自学使用,同时也适合于广大高等院校的师生作为教材或自学参考使用。 -
使用UML(英)Perdita Stevens,(英)Rob Pooley著;包晓露,赵晓玲译本书旨在介绍使用UML进行面向对象和组件软件开发所必需的知识。本书共20章,分为四个部分。第一部分包括前4章,介绍软件工程和面向对象开发的概念。第二部分包括第5~14章,这些章节对UML语言进行了详述。第15、16、17章是第三部分,主要是三个用例学习。还包括有可能进一步扩展的提示。最后3章是第四部分,讨论质量和质量保证、验证、确认和测试、软件项目管理及团队开发等问题。本书强调理论和设计相结合,列举了大量用例。通过本书的学习,读者能够掌握面向对象、基于组件的设计及软件工程的概念,并可进行详细设计,进一步可探索分析设计中更困难的问题。本书可作为高等院校计算机科学、软件工程及相关专业高年级学生的教科书,也可作为从事软件开发的管理者、系统分析员、程序员进行面向对象软件工程设计时的参考书。 -
实用软件测试指南(美)James A.Whittaker著;马良荔,俞立军译;马良荔译本书所给出的测试并非传统意义上基于书面测试计划实施的循规蹈矩的测试,也没有讨论艰深的测试理论,而是直接面向实际应用,使测试员进行“自由”的测试,提出了对软件进行攻击的思想,从软件的用户界面、文件系统接口和操作系统接口三个最易于攻击的方面来实施攻击,并利用了所开发的软件,帮助测试员简单地捕获异常并强制执行一般错误,最终能更快、更多地发现软件中的错误,改进软件,提高软件质量。本书可作为计算机专业高年级本科生、计算机专业研究生的软件测试教材或参考书,也可作为软件开发人员、软件测试人员和软件管理人员的参考手册。前言关于本书本书基本上没有包含测试理论。阐述测试理论的书很多,但讲述一个好的测试员如何开展实际测试的书基本上没有。所以我写了这样一本书。我试图进入我所遇到过的最佳测试员的大脑并把最好的技术形成文字,指出隐错在什么地方以及如何最有效地找到这些隐错的方式继而获得可发布的高质量产品。我写本书的第二个目的是使它阅读起来充满趣味性并且包含的技术应用起来也很有趣。我爱中断软件。我希望我的热情将为软件测试行业增添光彩的一页。关于本书读者听起来有点像推销,但每一个读者都可以从本书中获得一些他所需要的知识。它以一种吸引初学者的指导风格书写,而最老练的测试人员可能欣赏本书独特的内容。当然,目前我作为大学教授也意味着我在写作本书时要把学生放在心上。我把本书用于本科生和研究生测试课程。学会如何成为一个优秀的测试员并超越基础理论是很重要的。关于本书的例子本书给出了来自实际应用软件的真实错误消息和奇异行为(我敢说是“隐错”吗?)的屏幕显示。包含这些例子用来描述本书所讲述的攻击技术。其中有些是大隐错,而有些只是小麻烦。例子的主要目的是教学和说明。这并不意味着仅仅作为大隐错的例子(尽管其中的一些确实如此),也不意味着我们取笑生产该应用程序的公司。实际上,我精心选择了市场领头羊的应用程序,所以能够被绝大多数读者立即认可。更进一步,每个例子都来自我平常交往的、其开发实践和文化是我所推崇的公司生产的应用程序。我提醒读者在应用本书中的技术或再现屏幕显示的隐错时要谨慎。许多攻击会使应用程序崩溃。确信在尝试攻击之前保存了你的工作,确保不丢失任何重要的数据。关于本书的组织本书由四部分组成。第一部分是对软件中断研究领域的介绍,以适应讲授对软件和它所工作的复杂环境的理解。对软件测试人员而言,理解软件环境很重要,这样他们就注意到软件内部在做什么以及它是如何与环境交互的。没有这样的理解,很难成为一个成功的软件中断者。第二部分详细介绍了能通过用户接口应用的特定攻击。无论接口是GUI或是程序的API,这一部分将会给出如何从接口攻击软件,何时应用每个攻击,攻击在破坏软件时为什么会成功以及是怎样成功的。这一部分可能成为在对你的软件目标进行攻击行动时最常引用的部分。第三部分讨论了非人类系统接口的测试问题(即如何测试应用程序的文件系统、操作系统、软件接口)。讨论了攻击策略。介绍了一个新的称为HEAT的工具,即不利环境应用程序测试器(HostileEnvironmentApplicationTester)。你可以在本书选配光碟中找到“CannedHEAT”。CannedHEAT允许测试员以一种称为运行期故障植入的技术来测试系统接口。第四部分是结论,结论是软件测试永远不能真正地掌握。相反,它要求不断地学习并获取新的技能。这部分我们描述了在Florida技术学院发生的两件有趣的充满教训的事。你可以把它们用在你?氖笛槭依铩K潜Vつ馨蜒昂陀槔止餐谌氲饺魏稳砑馐苑绞街校?附录B~附录D为软件中断者提供了特定的资源。附录B讨论了运行期故障植入。附录C描述了CannedHEAT的使用,CannedHEAT是选配光碟上的一个易于使用的故障植入工具。附录D重印了在“IEEESoftware”上已发表过的一篇文章,它描述了一般的软件测试过程。这些附录补充了本书的内容,可以单独阅读或作为本书的附加材料阅读。附录A包含了常用编程术语的定义。关于本书的内容本书脱离了传统的测试。在传统测试中,测试员准备好书面测试规划并把它作为测试软件时的脚本,测试提前规划好并以一种机械的方式执行。本书中的测试技术是灵活的,而传统测试是严格的。如果在一个软件项目中,需求改变了,隐错变成特性,进度压力强制计划重新评估时,就需要灵活性。软件测试并不是可以预先确定测试什么、执行计划并按计划来实施的一门精确的科学,这需要上帝般的远见。不是靠计划,而是靠智能、洞察力、经验以及对隐错隐藏位置的敏锐判断等来指导测试人员。本书会帮助测试员开发这种洞察力。作为测试规划和自动测试执行的一个长期拥护者,我对这种自由形式测试的第一个感觉是怀疑。但是,事实简单地驳倒了我。聪明的人做的探索测试找到了所有我见过的最佳隐错。同样是这些聪明的人在最佳测试自动化上也做得更好,不是一个小的零头而是一个数量级。当项目需做困难的、认真的测试时,往往是调入最聪明的测试员而不是测试计划或测试自动化。当需要做出关键的运载决定时,聪明的管理员会忽略测试计划的部署而注重最有经验的测试员的意见。我不久就确信我那宏大的全自动测试研究议程需要认真地重新考虑。我对那些知道产品并找出了所有隐错的人表示出强烈的兴趣。我可以证实这些民间方法没有脚本并设法抛开了压在桌上文档下的正式的测试计划。被提问时,他们总是回答:“那份计划并未瞄准隐错所在之处。”本书中体现的技术不仅允许测试员脱离脚本,也鼓励他们这么做。不要盲目相信文档,它们可能是过期的或在产品可测试之前写的。相反,应该开动脑筋!睁大眼睛!想一点,测试一点,再想一点。但是,不要认为我反对计划或文档。本书简单地讲授测试中的紧张工作计划。不要认为测试自动化是令人沮丧的。有许多重复复杂的任务需要好的工具(确实,收录在本书选配光碟上的就是这样的工具)。但是,工具永远不能代替智能使用。测试员思考并使用工具收集数据,以帮助他们更加快速有效地探究应用程序。如果给本书一句题词,则可以是:熟悉你的产品,考虑你的步调,并让经验引导你。甚至可以更简单:开动脑筋,睁开眼睛……测试!我长期热衷于研究这样的测试。我通过观察人们以及研究他们的隐错来做这项工作。为找出隐错,最好的测试员在做些什么?最佳隐错有什么共同之处?有没有方法推广有经验的测试员的行动使得缺乏经验的测试员能做得更好?我的意图是捕捉我所遇到的最优秀的测试员的最好思想,并把这些思想形成文字,以这种方式使测试新手能够学到有用的知识并变得更好。如果本书内容未能达到这个目标,那只是因为我个人的沟通技巧不足所致,而不是我的研究主体本身的技巧的反映。本书中好的内容都出自同事们细致研究过的工作。我感谢他们公开了他们找出的隐错以及他们的洞察力。本书中的错误全都归咎于我。把测试的辉煌景象形成文字对于像我这样的凡人来说是很困难的事。关于本书的补充材料本书提供了一张选配光碟,它包含了两个非常有用的工具,它们是Florida技术学院的教员和学生编写的。CannedHEAT和HolodeckLite是运行期监视和故障植入工具,运行于WindowsNT系列的平台上。两个工具都很容易使用,在本书的第三部分和附录中有详细的解释。另外,www.HowToBreakSoftware.com是获得最近的工具更新、隐错故事和与破坏软件原理相关的技术公告等信息的在线通道。JamesA.WhittakerMelbourne,FloridaAugust2001 -
软件工程习题与解答李代平,王昌元编著本书介绍了软件工程的基本理论、可行性研究、软件需求分析与概念模型、总体设计、软件细节设计、面向对象方法学、面向对象分析、面向对象设计、形式化方法、用户界面设计、软件质量、软件实现、软件测试、软件维护、软件项目管理与计划等。 -
软件能力成熟度模型(CMM)与软件开发技术单银根,王安,黎连业编著软件能力成熟度模型(CMM)是卡内基—梅隆大学软件工程研究院为了满足美国联邦政府评估软件供应商能力的要求,于1986年开始研究的模型,并于1991年正式推出了CMM10版.CMM自问世以来备受关注,在一些发达国家和地区得到了广泛应用,已成为衡量软件公司对软件开发管理水平的重要参考因素和软件过程改进事实上的工业标准软件能力成熟度模型,它的基础就是软件开发技术.所谓软件就是应用计算机科学数学和管理科学的知识,通过某种表达方式(语言)编制程序,在计算机上实现人们预定的工作目标由于软件不同于硬件的制造过程,它是逻辑产品的开发,是人的智力的高度发挥.尽管人是聪明的,但也容易犯错误,软件中的许多错误都是由于人的认识.知识和经验不足或开发过程中的疏忽或交流不够造成的如何解决这一问题?如何提高软件开发技术水平?这是我们所关心的问题为此,中国科学院计算所(二部)网络研究开发中心培训部组织在软件开发方面有一定造诣的专家.学者编写了《软件能力成熟度模型(CMM)与软件开发技术》一书.本书可供从事软件开发的科技人员学习和参考,现作为北京中科天地网络技术有限公司的培训教材建议有关培训机构采用全书分为上下两篇上篇重点介绍软件能力成熟度模型,由前七章组成下篇为软件开发技术,由后八章组成上篇的内容是:能力成熟度模型(CMM)概述,软件过程评估的国际标准,可重复级(等级2),已定义级(等级3),已管理级(等级4),优化级(等级5),能力成熟度模型(CMM)的提问单简要地向读者介绍了目前国际上对软件开发技术规范的要点,衡量软件开发水平,即能力成熟度模型下篇的内容是:软件产业实施CMM的对策与分析,与CMM相关的软件工程技术,与CMM相关的可行性分析与项目立项,与CMM相关的系统分析及其设计,与CMM相关的程序设计及其编码,与CMM相关的系统测试,与CMM相关的系统试运行与维护,与CMM相关的系统验收与鉴定.向读者介绍软件开发过程中具体怎么去做软件开发是一个“软件学”技术,长期以来给刚刚从事软件工作的同志一种神秘的感觉.这种“软件学”知识,一直存在于少数从事设计人员的头脑中,成为一种“艺术”和经验为了使这种“艺术”和经验能够为多数人掌握与借鉴,使人的“艺术”和经验成为一种工艺,对它进行“硬化”,变为“硬技术”说白了,就是把“糊在窗户上的一层纸给桶开”,揭开软件开发技术的神秘面纱.本书同时也给从事软件人员提供一个参考依据:国际上对软件开发有哪些要求和规范?在具体开发过程中又怎样去实现?这就是我们编写这本书的目的所在本书作为“艺术”和经验的硬化,是新鲜的,但带有作者的个人观点和主张(读者可以从书中看出).因此,作者希望能起到抛砖引玉的作用,把软件开发工作做得更好,培养出更多的走向国际化的软件人才作为最主要的问题,哪些人使用这本书?本书适合下列几种不同工作类型的人员阅读:(1)需要了解软件开发建设全过程的人员,(2)从事软件开发的技术人员,(3)已有软件编程经验,也有大中型工程项目经验的人员,(4)大.中型软件项目的管理人员和设计人员,(5)科研企事业单位的软件人员,(6)从事系统分析.设计的人员,(7)从事出口软件劳务的技术开发人员,(8)软件开发培训班的教师和学员本书在编写过程中,参考了大量的技术参考资料技术规范和有关书籍,并先后得到了许多同志的支持和帮助李淑春黎娜王月冬张维.单银根陈建华王兆康.王长富对本书稿提出了许多修改意见,北京中科天地网络技术有限公司的王刚刘春阳滕华.梁艳刘占全张静.张洪波张黎明顾寿筠等同志为本书的写作提供了许多方便,在此对上述同志一并表示感谢!由于作者水平有限,书中的错误和不当之处,欢迎读者批评.指正作者于中科院计算所二部2003年元月这是一本介绍软件能力成熟度模型CMM(CapacityMaturityMode1)与软件开发技术的参考教材。全书由十五章组成。各章内容分别是:软件能力成熟度模型(CMM)概述;软件过程评估的国际标准;可重复级(等级2);已定义级(等级3);已管理级(等级4);优化级(等级5);能力成熟度模型(CMM)的提问单;软件产业实施CMM的对策与分析;与CMM相关的软件工程技术;与CMM相关的可行性分析与项目立项;与CMM相关的系统需求分析及其设计;与CMM相关的程序设计及其编码;与CMM相关的系统测试;与CMM相关的系统试运行与维护;与CMM相关的系统验收与鉴定。本书的特点是:在叙述上由浅入深、循序渐进;在内容上系统全面、重点突出;在概念上清晰易懂。它是一本掌握软件能力成熟度模型(CMM)与软件开发技术很好的书籍,对提高我国软件行业及软件产品会有很大帮助。本书是北京中科天地网络技术有限公司的培训教材,也可供软件技术开发人员、软件设计人员、科研管理人员以及大专院校有关专业的师生参考。 -
掌握需求过程(英)Suzanne Robertson,(英)James Robertson著;王海鹏译本书是为那些希望得到正确需求的人而写的。《掌握需求过程》一书用一个接一个的步骤、一个接一个的模板、一个接一个的例子,向我们展示了一个经过业界检验的需求收集和验证过程。它为精确地发现顾客所需所想提供了技巧和深刻见解。本书共分14章。第1章介绍了需求说明规范的模板与需求框架。第2章概述了Volere过程。第3章介绍了让需求项目有一个成功和有效的开始所需的东西。第4章介绍了如何确定产品的合适组成部分以及如何确定要构造的最好产品。第5章至第7章节介绍了如何网罗需求以及功能性需求和非功能性需求。第8章至第13章介绍了需求说明编写,以及相关内容,如验收标准、质量关、原型和场景、重用需求、鉴定需求规格说明书等。最后一章讨论了写好需求之后该做的事。两个附录给出了完整的需求过程模型和编写需求说明规范的模板。本书论述了软件开发中的重要课题——如何得到正确需求。本书可作为计算机专业高年级本科生及研究生掌握需求过程的教材,也可作为软件开发人员在开发过程中随时参考手册。 -
ADSP SHARC系列DSP应用系统设计刘书明,罗军辉编著数字信号处理技术的迅猛发展,使DSP产品广泛地应用于通信、图像处理、生物医学、自动控制等领域。本书选定ADI公司最新的高性能DSP器件,简要介绍了ADSP SHARC系列芯片的基本工作原理及性能指标,并着重阐述了应用ADSP SHARC系列芯片组成数字信号处理系统时,在外围硬件接口、软件设计、系统设计等方面必须解决的问题。书中还提供了大量的设计实例,介绍了很多设计经验,同时也提供了系统设计范例,可供相关技术人员参考。本书面向广大电子工程设计人员,可供大专院校通信工程、电子工程、计算机应用、工业自动化、自动控制等专业的教师、研究生和高年级本科学生作为教材使用,也可供通信和电子领域从事DSP芯片开发应用的广大科技人员阅读参考。
