软件工程 的教材..... By 沈前卫(300分)

  • 主题发起人 沈前卫
  • 开始时间

沈前卫

Unregistered / Unconfirmed
GUEST, unregistred user!
我现在对"软件工程"很感兴趣,我想知道在北大,清华等高校中
的研究生(研究方向是软件工程)所使用的教材的书名及作者。
知道的网友,能麻烦您们告诉一下么?谢谢。

我知道Hubdog是北大的,Hubdog如果看见此贴,请鼎力相助。 :)

沈前卫 2-10 23:32
 
你应该问supermmx,他是cs系的
hubdog是chem系的
 
清华大学的是张海藩的《软件工程导轮》
 
你为什么不给他们留言?
 
他想大家共同进步。因此在这里问。
 
张海藩的《软件工程导论》不错,去买最新版本的,有很多面向对象的东西
 
沈前卫想考研么
 
elan 好像也是 pku 的说,可以问他。这大富翁上 pku 的兄弟还真不少。
 
张海藩的不错,又便宜
 
如果你是初学者读张海藩的《软件工程导论》-----通俗易懂得很
如果你是资深者,读《软件工程—实践者的研究方法》(中文版,机械工业出版社 )
(英文原书名: Software Engireering-A Practitioner's Approach)------这可是
晦涩得很的喔(兄弟深表同情)

 
各位:
谢谢
呵呵。我希望知道北大,清华等高校中的研究生(研究方向是软件工程)<font color=red>所有</font>使用的教材,
不只是《软件工程》这一本书。拜托,再帮帮忙!
To 大海无量:
谢谢,你说的这两本书我已经有了,我还有其他比较好的软件工程的书籍。我只是想
知道<font color=red>还有</font>那些软件工程可能涉及到的知识,比如《离散数学》。。。。
 
elan是文科的
给superMMX留言吧
 
这种问题,当然是要找北大清华的人问了,
 
老沈要负责工程?理论是其次,给你推荐一本书:微软的秘密,对微软的开发组织有详细的
讨论,很值得学习。
 
哎呀,北大清华的兄弟怎么都不来了! :)
To 阿朱:
好久不见!
不是负责工程,是为将来作打算.
还有,理论与实践,两者缺一不可。 :)
谢谢你的建议,我会去认真看看《微软的秘密》这本书。
与大家分享我遭到的一篇与微软有关的文章。

微软公司软件开发模式简介
Smalllamb
北京大学出版社96年底所出的《微软的秘密》一书是目前我所见到的对微软公司软件产品开发过程介绍的最专业、最深入的一本书。通过本书,我们可以看到微软公司是如何对科学地对软件产品开发进行有效地管理,我想这些经验对于中国的广大软件开发人员,尤其是关心中国软件产业发展的各位朋友是大有益处的。所以特将此书中涉及软件产品开发的部分内容摘录出来(第四章“产品定义与开发过程”),加上我在微软中国工作的实际经验总结出这篇文章,希望与大家共同分享。本文作为摘录,自然是挂一漏万,所以建议大家若有时间还是找来原书一读。
在微软的产品定义与开发过程中,微软软件开发遵循着一种可称之为“靠改进特性(Feature)与固定资源(Resource)来激发创造力”的战略。该战略可分为五个原则:
将大项目分成若干里程碑式(Milestone)的重要阶段,各阶段之间有缓冲时间,但不进行单独的产品维护。
运用想象描述和对特性的概要说明(Program Specification)指导项目。
根据用户行为(User Behavior)和有关用户的资料确定产品特性及其优先顺序。
建立模块化的和水平式的设计结构,并使项目结构反映产品结构的特点。
靠个人负责和固定项目资源实施控制。
原则一:将大项目分成若干里程碑式的重要阶段,各阶段之间有缓冲时间,但不进行单独的产品维护。
项目进度安排与里程碑
微软通常采用“同步-稳定产品开发法”。典型项目的生命周期包括三个阶段:
计划阶段:完成功能的说明和进度表的最后制定
开发阶段:写出完整的的源代码
稳定化阶段:完成产品,使之能够批量生产(Roll Out)
这三个大阶段以及阶段间内在的循环方法与传统的“瀑布”(Water Fall)式开发方式很不相同,后者是由需求、详尽设计、模块化的代码设计与测试、集成测试以及系统测试组成的。而微软的三个阶段更像是风险驱动的、渐进的“螺旋”式的生命周期模型。
计划阶段的产品是想象性描述与说明文件,用来解释项目将做什么和怎么做。在管理人员拟定进度表、开发员写出代码之前,这些东西都促进了人们对设计问题的思考与讨论。开发阶段围绕三次主要的内部产品发布来进行;稳定化阶段集中于广泛的内部与外部测试。在整个产品生产周期中,微软都使用了缓冲时间的概念。缓冲时间使开发组能够对付意外的困难和影响到时间进度的变故,它也提供了一种手段,可以缓和及时发货与试图精确估计发货时间之间的矛盾。
在开发和稳定化阶段的所有时间中,一个项目通常会将2/3的时间用于开发,1/3的时间用于稳定化。(Office部门副总裁曾这样概述通常的进度:“一般说来,在总的进度表中,用一半的时间写出产品,留下另一半的时间调试或应付意外事故。这样,如果我有一个两年的项目,我会用一年来完成事先想好的东西……如果事情有点麻烦,我便去掉我认为不太重要的特性。”)。这种里程碑式的工作过程使微软的经理们可以清楚地了解产品开发过程进行到了哪一步,也使他们在开发阶段的后期有能力灵活地删去一些产品特性以满足发货时期的要求。
计划阶段
计划阶段是在一个项目的生命周期中,所有于开发前进行的计划所占用的时间。计划阶段产生出想象性描述、市场营销计划、设计目标、一份最初的产品说明、为集成其他组开发的构件而规定的接口标准、最初的测试计划、一个文档策划(印刷品和联机帮助形式的)以及一份可用性问题清单(Usability List)。计划阶段从想象性描述开始。想象性描述来自产品经理以及各产品单位的程序经理;它是对规划产品的市场营销设想,包括了对竞争对手产品的分析以及对未来版本的规划。想象性描述也可能讨论在前一次版本中发现面必须解决的问题以及应添加的主要功能。所有这些都基于对顾客和市场的分析以及从产品支持服务组处得到的资料。
说明文件从一个大纲开始,然后定义出新的或增加的产品特性,并对其赋以不同的优先级。说明文件只是产品特性的一个预备性概览;从开始开发到项目完成它要增加或变化20% - 30%。虽然在生命周期的后期说明变化一般较小,但越到后期,开发员就越是必须具充分的理由来作改变。
通常程序经理使用VB创建项目原型。他们也开展设计可行性研究以了解设计中的取舍情况,尽快做出涉及产品说明的决定。对于重要产品的说明需由公司高层领导进行复审。对于不太重要的产品,则由部分经理去完成。
开发阶段
开发阶段的计划对三四个主要的里程碑版本都逐个分配一组特性,规定出特性的细节和技术上的相关性,记录下单个开发员的任务以及对进度的估计。在开发阶段中,开发员在功能性说明的指导下写源代码,测试员写出测试项目组以检查产品的特性与工作范围是否正常,用户教育人员(User Education)则编写出文档草案。
当测试员发现错误时,开发员并不是留待以后处理,而是马上改正,并在整个开发阶段内使测试不断地、自动地进行。这就改善了产品的稳定性并且使版本发布日期更易估计。当达到项目中的一定阶段点后(40%时),开发员就试图“锁定”产品的主要功能要求或特性,从此只允许小范围的改动。如果在此点之后开发员想作大的改动,他们必须与程序经理以及开发经理进行讨论协商,也许还要征求产品部门经理的意见。
一个项目是围绕着3或4个主要的内部版本,或“里程碑子项目”来组织开发阶段的。一般用2至4个月来开发每一个主要的里程碑版本。每个版本都包括其自身的编码、优化、测试以及调试活动。项目为意外事故保留总开发1/3的时间,即“缓冲时间”(Padding Time)。(苹果公司的小组是割裂的、独立的,各自开发各自的东西。在还有3个月就要发货时,才会将所有的东西集成起来;Borland公司以一种渐近的方式进行开发,即把工作分成许多小的部分,并且总是让开发的东西能够运转。看起来似乎这种渐进的方法费时,但实际上几乎没有用过很长时间,因为这使你总是能掌握住事情真实的情况。)
当对最后一个主要的里程碑版本做了测试与稳定化之后,产品就要进行“外观固定”(UI Freeze),即确定产品的主要用户界面,如菜单、对话框以及文件窗口等。此后有关用户界面将不再进行大的改动,以免引进同步修改相应文档的困难。
稳定化阶段
稳定化阶段着重于对产品的测试与调试。项目在此阶段尽量不再增加新的功能,除非是竞争产品或者市场发生了变化。稳定化阶段也包括了缓冲时间,以应付不可预见的问题或者延迟。
下面我将Micosoft开发软件的模式用以下这张简图加以描述:(这张图对微软的测试进行了比较详细的描述,我个人认为微软的测试是Microsoft软件产品开发中一个十分重要也是十分有特色的分工。这是通过在微软将近一年的观察和与国内同类企业的分析,我才得出这样的结论。大家都很明白,国内的软件开发商在这方面做得很不够,尤其不重视软件的内部测试,在他们的思想中,可能有一个误区:认为测试应该完全去由用户去负责,其实不然,在软件的开发流程中,软件的测试与开发是一种“矛与盾”的关系,互为补充,缺一不可。在微软,可能这种关系发挥到了极至:有时开发部门与测试部门互相较着劲,开发经理和测试经理的地位是相同的,有时甚至测试经理的地位甚至凌驾于开发经理之上,但他们之间没有根本的利益冲突,只有一个共同的目标:将产品的质量提高。)
补充一点:(对微软的测试流程加以简要的描述一下)微软内部,专门有一个小组负责为微软的工程师们提供日常工作和管理的工具软件,他们是非盈利机构,其主要任务是开发微软内部所需要的工具软件:例如:
SLM(Source Library Tree),源代码管理工具,负责管理软件开发过程中各个程序员的源码,各个程序员负责写自己的模块,每天将完成的代码Check-in到一个中央服务器的SLM树中,这个SLM树由预先定义好的脚本在固定的时间开始编译,通常这个过程需要好几个小时,所以微软内部根据各个项目组的情况有各自的规定:比如开发员必须在下班前(比如下午6:00)之前将当天修改的代码Check-in进去,这样SLM才开始编译。
第二天,QA组的各个测试员从服务器上下载前一天的一个Build开始测试,将测试的情况及时的反映到另外一个工具软件中:RAID(Raid is a tool for entering, tracking, analyzing, and reporting product defects during development and maintenance.).这个工具负责管理产品的BUG情况,每个BUG包含很多属性:比如状态(活动的、解决的、关闭的)、严重级、优先级、哪个区域、哪个版本出现的、发现者、要将这个BUG赋给哪一个开发员等等一系列属性。还可以根据这个工具查询哪个开发员当天的BUG活动的、解决的数量,哪个测试员的BUG质量数目等等一些基本的产品质量情况,这样项目经理可以很容易的掌握该项目的具体进展情况。如果在项目的开发中期,发现的BUG数目比解决的BUG数目持续的多(意味着该产品的活着的BUG越来越多),可能意味着这个项目出现了问题,决策者可以迅速的作出相应的决策,及时的纠正产品开发中出现的失误(微软曾经有很多产品因为这样的因素被Cancel了)。还有项目经理可以根据这个工具,及时的掌握、了解每个测试员和开发员的工作状态,这一点很重要。有很多人曾经说过:Microsoft凭借着SLM和RAID打败了无数的竞争对手,通过我在微软的经历,我看这话一点也不假。这两个工具确实是非常杰出的工具,微软将它们使用到了十分艺术的程度上,对微软的成功起着非常重要的作用。更难能可贵的是,目前这些工具在功能上还在不断的进行改进、升级,使得微软的工程师们工作起来更加如虎添翼、虎虎生风,这样的企业哪有不成功的道理?
在测试过程中,也不是随便的对软件产品毫无目的的瞎使用、乱使用,微软也有一套十分先进的方法和工具支撑着测试的每个方面:比如ATCM( Access Test Case Management),一种基于Test Case(测试用例)的测试管理工具就承担着这方面的工作。
微软也许正是靠着“程序员的聪明和测试员的勤奋”构建起软件帝国的大厦、谱写着软件事业的辉煌。

Product Developing Process in Microsoft
上图中: QA是微软大的产品部门下设的一个比较专业的测试部门(Quality Assurance Dept)
项目进度表中的缓冲时间(Padding Time)
微软使用缓冲计划,以在最高的效率与较好地对未来作预计之间求得平衡。这种应付突发事件的时间在开发和稳定化过程中是每一个主要里程碑的一部分。缓冲时间主要用于弥补由于对特性(Feature)的不完全理解,或者是技术困难或是由于疏忽而忘记把任务写入进度,或者是未料到的难题而形成的漏洞。缓冲时间有助于一个项目适应意料之外的事件。
原则二:运用想象性描述和对特性的概要说明指导项目
为了给出足够的开发框架以使工作能持续进行,并且能容纳开发过程中出现的变化并保持足够的灵活性,微软采用想象性描述和概要的说明来指导项目开发,而不是在一开始就努力写出一份完整和详细的说明。所谓想象性描述是由程序经理和来自市场营销组的产品计划人员共同编写的一份非常短的文件,在其中主要是定义产品开发的目标(不涉及产品的具体细节!)。通常对一个全新的产品,想象性描述一般会相对较详细,在其中还含有一份粗略的说明文件。总的来说,微软对于想象性描述的要求是:
越短越好,尽量说明"产品不做什么"(而不是"产品要做什么"!)。
运用想象性描述,程序经理开始编写功能说明文件,该文件解释产品的特性是什么以及这些特性如何与其他特性及产品发生关系。最初它只是一个概要性的说明文件,随着项目的进展,程序经理会随时向其中添加更多的细节,最终的说明文件将变得象用户手册一样。完整的说明不只起着对产品最新功能的描述作用,而且它还是在产品投产与发货之前进行测试与评估的主要依据。
想象性描述有助于决定删除哪些特性。
微软内的各个开发组采用想象性描述帮助细化产品版本的规定主题,然后以此主题来决定是否需要增加产品各个可能的特性。通常不要轻易改变所确定的主题,否则可能造成产品开发上的混乱。
编写说明文件
说明文件在产品小组的所有成员之间,产品小组之间以及产品小组与管理部门之间起着传递产品的设想与要求的作用。在说明文件中必须清楚地描述产品特性(描述每个特性如何工作,外观如何以及从用户的角度出发如何与用户交互。如果特性有一个界面,还应包括一张示意图,以显示出界面的效果),并赋于其相应的优先级。程序经理据此建立起项目的开发进度表。此外在其中还应包括以下各项内容:用一句话表示的项目开发目的,关于产品是什么与不是什么的清单,对顾客的定义,对竞争产品的定义,产品对系统的要求(包括操作系统版本、最小内存要求、硬盘空间、处理器速度以及显示器分辩率),对第三方(如打印机驱动程序、组件)的任何依赖性。程序经理负责协调并"写下"说明
程序经理(Program Manager)应考虑以下问题:
这项特性的要点是什么?
用户如何使用该特性?
这项特性有意义吗?
该产品中或微软的其他产品中有类似的特性吗?
有哪些问题被遗漏了?
组内的交流令人满意吗?
最终程序经理通过与组内开发人员的共同讨论决定有关特性的内容,并将其写下来。
构造原型
构造原型是程序经理具体说明一件新产品或一个新版本的最好方法,这从许多方面来说都使开发前测试成为可能,尤其在可用性方面,并且有助于对与用户交互情况作出好的理解,它也能使产品说明更紧凑。
微软的开发人员通常采用VB构造用户界面原型,但是对于构造计算机屏幕模型之类的工作,画笔(Paint brush)也是一个很好用的工具。死板的说明变成有生命的文件,说明不应过于详细以至限制了发明创造。在项目开发过程中,说明文件的早期版本会有相当大的增加与改变。由于说明的变动可能会导致相应开发工作的极大变动,所以微软通常是将精力首先集中于那些没有什么用户界面的特性上,因为在完成开发前不必去了解用户对它们有何反应,也就是说这些特性不大可能改变。然后再面对其它特性。但是当产品开发到一定程序后,例如40%之后,程序经理必须严格控制对特性的修改(主要是指增加新的特性),否则不光会造成开发延迟,而且会压缩可用的测试时间。
原则三:根据用户行为和有关用户的资料确定产品特牲及其优先顺序
对于一个开发项目而言,如何确定最终产品中应包含什么特性通常是比较困难的一件事。为此微软采用了一个称之为“基于行为制定计划”的方式来进行特性选择与优先级安排。
基于行为制定计划法从对用户行为,诸如写信或做预算,做系统研究开始。然后,根据某一特性在支持重要的或者是经常的用户行为上的程序对其进行评价。这样做的优点是对特性取舍更具理性:讨论对顾客想要做什么加以更好的安排,对某个给定特性是否方便了特定任务的更集中的辩论,可读性更强的说明,以及在市场营销、用户教育和产品开发中更好地同步。
特性选择和优先级安排中的基于行为制定计划
基于行为制定计划法中的关键点在于按用户行为、产品特性以及行为和特性之间的内部联系来分析产品。程序经理和产品计划者把产品试图支持的用户任务或方案分成大约20个“行为”,然后他们努力把行为(以及任何子行为)映射入微软的现行特性和竞争对手产品的特性中去。他们也把行为映射到不同的顾客形象或不同的市场部分中去。
当说明产品的新版本时,基于行为制定计划法帮助程序经理和开发员集中他们的精力与创造力。象Excel之类的项目,争取在每个新版本中加入的主要行为不超过四个。绝大多数特性直接映射入这些行为之中。该做法使项目可以按特性对用户的价值来进行分级。通过分级,促使程序经理和开发人员都行动起来,使他们的特性支持尽可能多的行为。这种良性竞争对于用户有益,同时也利于提高生产率。
为顾客行为而非产品特性准备资料
基于行为制定计划进度,项目在计划阶段首先集中于行为,其次才是特性。程序经理和市场营销人员并不去思考和排除他们喜爱的特性,再围绕它们搞出想象性描述的草案。他们真正做的是列出一份顾客都做些什么的清单,然后把想象性描述集中于支持那些行为的特性上。
以行为为中心对产品进行全面考虑
由于基于行为制定计划法是从整个产品的观点着眼,因此有助于在不同职能上工作的项目成员理解产品做什么,以及其他产品的相应特性如何可能支持那些需要或不需要其他应用软件产品的行为。
做市场营销研究以支持基于行为制定计划法
为支持基于行为制定计划法,从市场营销组来的产品经理与程序经理、开发人员一起开展一些联合的研究,如指导对用户的研究工作。然而,一般来说是产品经理做大多数的研究,并可使其更明确地影响微软产品的演进。
原则四:建立模块化的和水平式的设计结构,并使项目结构反映产品结构的特点
微软产品设计中的一个关键概念是产品的基础结构(Infrastructure),尤其是生命周期短的应用软件,应随项目的进展变得更加单一(而不是错综复杂)。当开发组构造产品的第一版时,他们更多地使用分级式结构,好为产品设计规定出一个最初的架构。随着时间推移,他们向单一的结构迈进,以使项目能集中于特性开发。微软越来越强调不同产品间的特性共享。共享有助于使不同产品的“性能与感觉”(Look and Feel)都统一协调起来;它也方便了需要不只一个应用软件的用户,减少了代码的重复书写,缩小了单独一个应用软件的规模。
微软用特性小组组织产品开发,这种方法使得每个人都容易明白小组是如何与整个产品相关联的。项目从规定概要说明开始。概要说明的形式是一份已确定了优先级安排的内容清单,涉及产品下一版本将要开发的相对独立的特性,以便由分开的特性小组加以开发。
程序经理和开发员把项目分成特性子集,再将之分配给每个特性小组,让他们在3到4个主要的内部项目里程碑中进行生产。这种产品组织与开发方法使微软能靠简单地增加开发员和创建一个大的小组来渐进地增加产品的功能。
把特性(与函数)作为开发单位
微软软件产品的特性是用户最终可见的相对独立的功能单位,就如建筑材料一般,对应用软件产品更是如此。系统软件产品,如NT或者95的特性,对最终用户通常不直接可见。微软和其他公司有时简单地称这些不直接可见的特性为“函数”。
程序经理承担开发一组特性或函数,实现从说明经测试、文档化直到最后完成的过程。他们必须与开发员合作,后者负责估计进度表与完善每个特性。开发员还要在一台联网开发计算机上存储一到几个文件,用以保存特性的程序源代码。大多数特性的开发与改进只要一名开发员,而有的大型特性则要一个小的小组。
产品结构是决定其长期结构完整性的基石
产品结构是产品内部的基干,它规定了重要的结构构件以及这些构件如何组装到一起。产品结构及用于组装结构的构件,提供了实现产品特性(即做详细设计与编码)的支柱。产品的结构对最终用户而言,通常并非直接可见。只有结构要实现的特性是可见的。产品结构也是决定产品长期结构完整性的基石。产品功能的任何改变都不应造成潜在的产品结构散架。
产品的层次结构
对于产品,也可以采用层次结构的方法加以分析。通常定义良好的层次结构有助于对产品特性进行灵活的增加、删除与改进。此外良好的层次结构有助于产品在不同平台上的移植。(例如Excel总共定义了五层,其中只有最底层的操作系统层是与平台相关的,其它各层均是通过调用其下层所提供的API接口加以实现的,所以其移植极其方便。而在Windows 95中通过“虚拟机”的概念实现了对16位、32位以及DOS程序的支持。)
小的结构文档:源代码是唯一文件
除了API文档,微软不对其产品结构生成相应的文档,虽然有时高级开发员可能会写下高层结构。对复杂的特性,许多开发员在某些点记录并复查特定于他们所负责的结构细节,但此工作是可选的,并不强制执行。除了源代码文件与特性说明,为数不多的组为新程序员准务了描绘某层结构的文档(主要的数据结构,如何工作等等)。但是这些文件并不时常更新,经理们也不要求项目组生成此类内部文档。在有关的说明文件中,并不涉及实现问题。开发员应该知道如何去实现,或者能够去学会。记录的关于结构的文档如此之少是因为“一个开发员的工作是编写我们要卖的代码,而不是花时间写高水平的设计文件”,“设计文件不应与源代码分离”。分割代码与“保持事情的简单”。
特性小组和作为"内容专家"的小组领导
特性小组一般由一个领导和3至8名开发人员组成,工作于相关的特性领域。小组的规模常常视小组领导的经验和能力而定。特性小组领导向项目开发领导汇报并负责项目的全部开发工作;而项目开发领导则拥有对产品的更为全局性的观点,从而最有可能发现不互相关联的问题。在特性小组中的每个人均是此领域的“专家”,他们了解如何使用产品、了解竞争对手的产品、了解未来将向何处去。通常为便于交流,提高软件的组织结构(软件倾向于映射出构造它的组织的结构),应保持特性小组的小规模。
原则五:靠个人负责和固定项目资源实旋控制
对于软件项目而言,精确估计产品的开发与交付进度是很困难的。对此微软采取的方法是将进度安排和工作管理的责任推到最底层,即单个的开发人员和测试人员那儿去。这保证了每个人除了作为小组的一部分外,还负有个人的责任。单独的开发人员设立他们自已的进度表,程序经理把单独的进度表汇总起来,再加上缓冲时间,以制定出一个全面的项目进度表。顶层的总经理也固定人员与时间等基本资源,以确保项目集中并限制其努力与创造程序。
关键的目标,尤其对应用软件,是指明产品的目标出品日并争取尽可能长久地坚持它。程序经理和开发员从出品日回溯,规定中间的项目里程碑的日期。这个“固定的出品日法“的中心在开发员身上。以避免因为项目没有固定的结束点,导致在最终无用的设计、再设计和测试的循环中消耗一年或更多的时间。
开发人员做出他们自已的进度估计
“日期设定方法"。但是开发人员一般会做出较乐观的估计,因此开发经理还需对他们所提供的日期进行调整并加上缓冲时间以避免因因信息不完全而出现的问题。微软这种制定进度的方法的优点在于:它从人们那儿得到更多的合作,因为日期是自已定的,不是经理定的;进度总是富有进取性,因为开发人员不可避免地会低估他们真正需要的时间。
对细致的任务的进度估计
微软的第二个进度安排方法是:对要完成的任务做非常详尽的考虑,在此基础上请开发人员给出他们对“实现”的估计,以此力图“促使”更加现实主义并避免过度低估。
通常微软把任务细化到4小时(半天)到3天之间。对于准确进度的安排,微软的经理是这样认识的:“任何任务只要超过一星期,那人们就一定没有充分地全盘考虑它。任何任务某人估计只用少于半天就可完成,则他对它考虑得太多了。他应该用更多的时间去编程,更少的时间来考虑”。对于类似类于Windows NT之类的操作系统而言,进度安排更加困难,对其一般以几天或者半周为工作单位进行进度估计。
安排开发人员与小组进度时的心理学
当项目变大时,微软把员工分成小组。然后经理把进度的责任和所有权尽可能地分发下去,直到小组和个人;这使二者都产生了一种拥用工作的感觉。它还在小组中,个人中,尤其是小组领导中造成强烈的跟上其它同事预计进度的压力,因为经理可能再平衡进度,从落后的小组或个人手中拿走工作。这样,同事间的压力使经理不需要太多的努力就可以对个人或单个小组的进程实施严格控制。
"固定的"出品日( RTM: Release To Manufacture)
为了把创造力约束在时间限制之中,微软现在在新产品或者产品新版本开始前争取固定出品日,至少是有出品日的内部目标。这给人们施加砍去特性和集中在一个项目上的压力,逼迫他们去苦苦思考应将哪个新特性加入产品中。虽然最终产品的交付目标可能是由高级执行人员设定,但是开发人员与小组仍然设定他们自已的进度表。
微软一般根据预先的时间进度的大致估计出一个RTM日期,然后向前回溯相应的各个Milestone日期,如RC、Beta、Tree Lock、UI Freeze、Feature Complete以及CC(Code Complete)等等各个Milestone的相应日期。制定出十分详尽的产品研究开发时间进度表,产品开发组的各个成员以这个进度表为目标统一协调工作。微软十分强调软件开发过程中的Teamwork Spirits,这种理念贯穿在微软各个产品开发的各个阶段。这也是微软得以成功的一个十分重要的原因。
小结:同步-稳定开发法
计划阶段
定义产品的想象性描述、说明与进度
想象性描述 产品和程序管理部门运用广泛的顾客意见来确定和优化产品的特性。
说明文件 基于想象性描述,程序管理部门与开发组定义特性的功能,结构问题,以及各部分间的相关性。
制订进度表与构造特性小组 其于说明文件,程序管理部门协调进度表,安排出特性小组,每个小组包括大约1名程序经理,3 - 8个开发员,3 - 8个测试员(以1:1比例与开发员平行工作。)
开发阶段
用3 - 4个顺序的子项目,每个产生一个里程碑式的产品发送,来完成特性的开发。程序经理协调开发过程。开发员设计、编码、调试。测试员与开发员配对,不断进行测试。
子项目1 前1/3的特性:最重要的特性与共享的构件。
子项目2中间1/3的特性。
子项目3最后1/3的特性:最不重要的特性。
 
稳定化阶段
全面的内外部测试,最后的产品稳定化以及发货。程序经理协调OEM与ISV,监督从顾客得到的信息反馈。开发员进行最后的调试与代码稳定化。测试员发现并清除错误。
内部测试 公司内部对整个产品做详尽的测试。
外部测试 公司外在的"β"测试点,象OEM,ISV以及最终用户处对整个产品做详尽的测试。
发货准备 为批量生产准备发布最后的“金盘”(Golden Disk)与文档,制作之前,还需要进行各种严格的检查:如政治敏感性术语检查、病毒检查、文件相关性检查等。
 
 
软件工程?
在黑屋子里逮黑猫,还是在没有黑猫的屋子里逮黑猫?
兄弟是二流大学的,所以开个玩笑.
见谅
 
沈前卫:
钱5哥。。软工DR。
http://166.111.14.196/qlw/Teaching/teaching.htm
 
除上面所说的两本外,
软件工程方面,机工的《设计模式--可复用面向对象软件的基础》
和《软件需求》都不错;
数据库方面,萨师煊、王珊的《数据库系统概论》是经典了,但似乎老了些,
还有一本《数据库系统导论》是我正在读的也不错。
----------------我想沈前卫是想考水平与资格考试的系统分析员吧(高级
程序员?老沈早过了吧 :) )。
 
清华大学计算机科学技术系研究生生课程
计算机科学与技术系

课程名称:组合数学
课程编号:60240013 课内学时: 48 开课学期: 秋
任课教师:黄连生
【主要内容】
主要介绍组合数学的基本内容,包括基本记数方法、母函数与递推关系、容斥原理与鸽巢原理、Burnside引理与Polya定理、区组设计与编码的初步概念、线性规划问题的单纯形算法。

课程名称:数据结构
课程编号:60240023 课内学时: 48 开课学期: 春秋
任课教师:严蔚敏
【主要内容】
线性表、树、图等各种基本类型数据结构的结构特性、存储表示及基本操作实现的算法;查找表的各种表示方法;各种内排序算法的设计与分析;文件组织方法的简单介绍。

课程名称:软件工程技术和设计
课程编号:60240033 课内学时: 48 开课学期: 春
任课教师:周之英
【主要内容】
1、软件开发技术发展史;2、软件工程技术方法的基本原则;3、软件过程改进;4、需求工程;5、软件体系结构;6、面向对象设计方法;7、Design Pattern;8、分布式系统对象模型:CORBA及DCOM/COM(OLE)等;9、实例分析(实时系统的设计)等。

课程名称:专家系统
课程编号:60240043 课内学时: 48 开课学期: 春
任课教师:艾海舟
【主要内容】
讲解专家系统的基本原理、构造方法、应用实例、开发工具和发展趋势,介绍人工智能原理和知识工程的相关内容,包括产生式系统、搜索技术、知识表示、知识获取、推理机、不确定推理方法等内容。

课程名称:人工智能
课程编号:60240052 课内学时: 32 开课学期: 秋
任课教师:陈群秀
【主要内容】
人工智能的定义、发展历史及研究的课题;人工智能的典型系统结构--产生式系统;搜索技术(盲目搜索、启发式搜索、博奕树搜索);谓词演算(知识表示);人工智能语言程序设计。

课程名称:微型计算机系统接口技术
课程编号:60240063 课内学时: 48 开课学期: 春
任课教师:李 芬
【主要内容】
本课程是全部用PC机控制的以硬件为主的软硬件结合的综合接口技术。通过使用EDA,掌握先进的设计手段,结合磁盘接口技术、多媒体接口、通讯接口及虚拟现实接口技术的设计。旨在使学生从硬件方面对计算机技术及应用有较深的了解和提高。

课程名称:计算机图形学基础
课程编号:60240073 课内学时: 48 开课学期: 春
任课教师:胡事民,周登文
【主要内容】
本课程主要讲授计算机图形学的基本概念、原理、算法和基本系统。主要内容包括:计算机图形设备及系统、扫描转换、区域填充、裁剪、曲线曲面、实体造型、消隐、光照模型、明暗效果、纹理、光线跟踪、反走样等。

课程名称:高等计算机系统结构
课程编号:70240013 课内学时: 48 开课学期: 秋
任课教师:郑纬民
【主要内容】
本课程系统介绍了现代计算机系统结构的理论、技术、结构和工具环境。具体包括程序划分、可扩展性原理、互连和通信、存储器模型、Cache一致性算法、并行计算机结构等。

课程名称:计算机网络体系结构
课程编号:70240023 课内学时: 48 开课学期: 秋
任课教师:史美林
【主要内容】
本课程分两个阶段讲授。第一阶段主要讲授网络高层协议;第二阶段主要讲授网络低层协议。结合协议的讲授,两个阶段中还会介绍一些当前流行的或先进的网络技术和组网方法。

课程名称:人工智能原理
课程编号:70240033 课内学时: 48 开课学期: 秋
任课教师:朱小燕
【主要内容】
本课程主要是面向计算机系的研究生针对几个主题展开讨论。主要教学内容有:1、推理方法:归结推理、不确定推理方法;2、知识表示:知识表示观,知识表示方法;3、机器学习:机器学习的传统方法,神经网络方法;4、自然语言理解。

课程名称:计算机控制理论及应用
课程编号:70240043 课内学时: 48 开课学期: 秋
任课教师:孙增圻,朱纪洪
【主要内容】
计算机控制系统的常规设计方法;基于状态方程和传递函数模型的极点配置与最优控制的设计方法;系统辩识和自适应控制;计算机控制系统仿真和性能计算;采样周期选择和量化效应分析等。

课程名称:计算语言学
课程编号:70240052 课内学时: 32 开课学期: 春
任课教师:苑春法
【主要内容】
计算语言学的研究对象是人类的自然语言,研究目标是使计算机能象人一样读、写、听、说。通过建立自然语言的数学模型,用一定的数据结构和算法来表达语言信息,进而使语言信息可以被计算。本课程讲授计算语言学的基本理论、研究方法和近年来的新进展。

课程名称:分布式数据库系统
课程编号:70240063 课内学时: 48 开课学期: 秋
任课教师:周立柱
【主要内容】
分布式数据库的设计;查询分解与数据定位;分布式查询处理的优化方法;事务的语义模型与可串行化理论;分布式并发控制;分布式数据库管理系统的可靠性问题;以及目前数据库研究的某些新进展。另外还要求设计、实现一个具备分布式查询处理功能的实验系统。

课程名称:智能控制
课程编号:70240073 课内学时: 48 开课学期: 春
任课教师:孙增圻,张再兴
【主要内容】
该课程系统介绍智能控制的理论和主要技术内容,主要包括:模糊逻辑控制、神经网络控制、专家控制、学习控制、分层递阶智能控制及遗传算法等。

课程名称:计算机视觉
课程编号:70240083 课内学时: 48 开课学期: 秋
任课教师:徐光祐
【主要内容】
本课程研究根据图象信息识别和理解景物中物体的性质,类别及其空间关系的原理和方法。重点研究根据图象获取关于物体表面性质和形状信息,以及根据图象线索进行聚类,视觉建模和视觉推理的方法。将为开发计算机视觉的应用提供理论基础。

课程名称:数据安全
课程编号:70240093 课内学时: 48 开课学期: 秋
任课教师:郭保安
【主要内容】
主要讲述信息系统中数据的加密,数字签名,用户的身份认证,秘密分存以及各种安全协议等内容。以信息论、复杂性理论、数论和代数为基础,重点讲述RSA、DSA、DES、IDEA、MD5、SHA等密码算法和现代密码分析技术,进而阐述现代密码算法的设计理论以及其应用等。

课程名称:知识工程
课程编号:70240103 课内学时: 48 开课学期: 春
任课教师:王克宏
【主要内容】
知识工程与知识处理技术的有关理论知识、网络计算模式与环境下知识处理问题的研究与实现技术、知识的系统化管理与组织、知识处理技术、解结果的综合机制、知识查询与处理语言、处理结果的可视化可听化可操化、知识处理系统的实现、机器学习与知识获取更新。

课程名称:VLSI设计基础
课程编号:70240113 课内学时: 48 开课学期: 秋
任课教师:蔡懿慈
【主要内容】
VLSI设计及IC CAD的发展及展望,VLSI工艺介绍,器件及电路设计基础,逻辑及系统设计基础,版图设计基础,半定制及全定制设计方法,EDA的发展及系统介绍等等。

课程名称:语音信号数字处理
课程编号:70240123 课内学时: 48 开课学期: 春
任课教师:吴文虎
【主要内容】
包括语言产生的机理、人类发声的数学模型、语音的时域特征与线性预测分析、语音的频谱、倒谱、矢量量化、隐马尔可夫模型、人工神经网络、语音合成技术与识别技术等。

课程名称:多媒体计算机技术
课程编号:70240133 课内学时: 48 开课学期: 春
任课教师:钟玉琢,蔡莲红
【主要内容】
该课程从研究、开发和应用角度出发,综合讲述多媒体计算机的基本原理、关键技术及其开发应用。主要内容包括:多媒体技术现状及其发展趋势、视频和音频获取技术、多媒体数据压缩编码技术、多媒体计算机硬件及软件系统结构、多媒体数据库与基本内容检索等。

课程名称:计算机辅助几何设计技术
课程编号:70240143 课内学时: 48 开课学期: 春
任课教师:秦开怀
【主要内容】
主要介绍计算机辅助几何造型的理论和方法。包括:1、曲线和曲面的基本原理,2、多项式样条曲线曲面,3、自由曲线和曲面造型技术,4、几何模型表示技术,5、以实体造型为主的几何造型的理论和方法。

课程名称:软件复用及面向对象的软件工程环境
课程编号:70240153 课内学时: 48 开课学期: 春
任课教师:蒋维杜
【主要内容】
1)软件工程回顾:软件工程发展的背景、主要成就及传统软件工程中的主要问题;2)软件复用:软件复用和可复用软件,软件的模块化,软件模块的品质因素;3)面向对象软件的构造:面向对象方法论,面向对象技术,面向对象软件工程方法。

课程名称:超大规模集成电路布图理论与算法
课程编号:70240162 课内学时: 32 开课学期: 春
任课教师:洪先龙
【主要内容】
本课程介绍了超大规模集成电路布图设计过程中的各种自动布图算法,包括布图规划、布局、线网布线、总体布线、详细布线、过点分配及通孔最少化等。为了适应深亚微米工艺下布图技术发展的需要,我们还介绍了性能驱动的布图算法。

课程名称:数字系统自动设计
课程编号:70240173 课内学时: 48 开课学期: 春
任课教师:薛宏熙
【主要内容】
本课程介绍开发EDA(Electronic Design Automation)工具的基本原理和方法,包括:硬件描述语言、综合、模拟、故障诊断、测试、形式验证等。课程的实践环节包括习题和实验。

课程名称:计算几何
课程编号:70240183 课内学时: 48 开课学期: 秋
任课教师:邓俊辉
【主要内容】
计算几何学、组合几何学的主要问题:1、Introduction 2、Arrangement and Configuration 3、Semispace of Configuration 4、Dissection of Point Set 5、Convex Hull 6、Visibility 7、Intersection 8、Point Location 9、Voronoi Diagram 10、Triangulation 等。

课程名称:算法与算法复杂性理论
课程编号:70240193 课内学时: 48 开课学期: 春
任课教师:黄连生
【主要内容】
主要介绍算法的时间复杂性和空间复杂性概念,DFS算法和WFS算法,分治策略和优先策略,整数规划与动态规划,FFT算法,分类与查找,NP完全理论等内容。

课程名称:分布式多媒体系统与技术
课程编号:70240203 课内学时: 48 开课学期: 秋
任课教师:刘斌,徐光祐,史元春
【主要内容】
分布式多媒体技术与系统概述;分布式多媒体应用的性能要求及对网络的要求;子网技术;通信协议;client-server计算;RAID盘阵列技术;支持分布式多媒体应用等。

课程名称:工程数据库设计与应用
课程编号:70240213 课内学时: 48 开课学期: 春
任课教师:叶晓俊,赵致格
【主要内容】
工程数据库的基本概念、组织结构、建模工具、版本管理等;工程数据库系统的开发工具及开发方法;工程数据等在企业的应用技术;基于Web技术的工程数据库的设计与应用等内容。

课程名称:计算机支持的协同工作CSCW
课程编号:70240223 课内学时: 48 开课学期: 春
任课教师:史美林
【主要内容】
1、CSCW的基本概念、体系结构、协同控制机制;2、CSCW的基本技术、群组通信支持、群件、多媒体会议系统、工作流系统、协同协作系统等;3、CSCW的应用支持及应用系统。

课程名称:微计算机系统设计
课程编号:70240233 课内学时: 48 开课学期: 春
任课教师:唐瑞春
【主要内容】
介绍计算机系统设计领域最新的技术发展,讲授微机系统中有关CPU接口、DRAM系统、PLD、总线、显示系统等的设计技术及相关的调试技术,通过具体的作业和实验解决设计中的实际问题,并学习微机系统设计中的最新工具。

课程名称:计算机图形学
课程编号:70240243 课内学时: 48 开课学期: 春
任课教师:胡事民
【主要内容】
本课程主要讲授真实感图形的生成与处理算法。包括:绪论、局部光照模型、整体光照模型、光线跟踪及其加速、辐射度算法、轴变形/FFD与计算机动画、自然景物模拟、科学计算可视化、基于图象绘制与制造、小波方法与多分辨率网格造型等。

课程名称:计算机网络和计算机系统的性能评价
课程编号:70240253 课内学时: 48 开课学期: 春
任课教师:林闯
【主要内容】
排队论, 随机Petri网和模拟技术。在排队论中讲述随机过程、马尔可夫过程、排队网络模型、自相似数据传输模型等。在随机Petri网中讲述基本概念和性能分析技术、随机网模型方法及分解与压缩技术。在模拟中讲述模拟模型技术、程序软件、结果分析。

课程名称:并行计算
课程编号:70240262 课内学时: 32 开课学期: 春
任课教师:杨广文
【主要内容】
讨论并行计算机的结构模型、并行算法、并行程序的设计原理与方法等。从计算的角度,简单介绍当代主流计算机的结构及平行计算的性能评测方法;介绍常用的几种并行计算模型;讨论并行算法的设计方法、设计技术及设计过程;讨论几个数值问题的并行算法。

课程名称:ATM交换技术与B-ISDN原理
课程编号:80240013 课内学时: 48 开课学期: 秋
任课教师:刘斌
【主要内容】
现代电信网络与计算机网的发展及传统技术;ATM的基本概念与B-ISDN的思想;ATM用户-网络接口;ATM交换技术;B-ISDN中的业务量控制;ATM与IP互连技术;ATM组网与应用技术;宽带网络技术的新进展。

课程名称:计算机视觉专题
课程编号:80240023 课内学时: 48 开课学期: 春
任课教师:林学?,白雪生
【主要内容】
本课程以跟踪计算机视觉近期研究新方向为目的,着重选择近期提出的典型新算法,联系其数学基础知识等,进行讲解和讨论。如射影几何及其在计算机视觉中的应用、优化算法在图像序列中的运用等。

课程名称:多媒体技术基础与应用
课程编号:80240083 课内学时: 48 开课学期: 秋
任课教师:林福宗
【主要内容】
(1)采用"教师-学生"+"教师-网络-学生"的教学模式。(2)内容包括:多媒体的计算、多媒体的存储、多媒体网络应用(含应用特点、因特网、多目标广播和通信系统)和多媒体网页编辑语言。(3)设计制作一个有中等难度的多媒体网页。

课程名称:科学计算可视化
课程编号:80240103 课内学时: 48 开课学期: 春
任课教师:唐泽圣,唐龙,柴建云
【主要内容】
了解掌握将科学计算、工程计算的中间数据或结果数据转换为图象的基本理论、方法和技术,并结合学生本人的专业完成一个大作业。
 
非常感谢各位,特别感谢 tangcheng .
 

Similar threads

D
回复
0
查看
1K
DelphiTeacher的专栏
D
S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
顶部