700 likes | 888 Views
授课安排. 系统工程 软件项目计划 软件需求分析 软件设计 编程 软件测试 软件维护 面向对象方法、软件复用和构件技术等. 软件项目管理. 软件工程管理是对软件项目的开发管理,是对整个软件生存期的所有活动进行管理。 任何工程的成败,都与管理的好坏密切相关, 软件工程更不例外。尤其是软件产品的特殊性,软件工程的管理对于保证软件产品的质量也具有极为重要的作用。 任何技术先进的大型项目的开发如果没有一套科学的管理方法和严格的组织领导,是不可能取得成功的 。. 软件项目管理.
E N D
授课安排 • 系统工程 • 软件项目计划 • 软件需求分析 • 软件设计 • 编程 • 软件测试 • 软件维护 • 面向对象方法、软件复用和构件技术等 SOFTWARE ENGINEERING
软件项目管理 • 软件工程管理是对软件项目的开发管理,是对整个软件生存期的所有活动进行管理。任何工程的成败,都与管理的好坏密切相关,软件工程更不例外。尤其是软件产品的特殊性,软件工程的管理对于保证软件产品的质量也具有极为重要的作用。 • 任何技术先进的大型项目的开发如果没有一套科学的管理方法和严格的组织领导,是不可能取得成功的 。 SOFTWARE ENGINEERING
软件项目管理 • 4P:人员(People)、产品(product)、过程(Process)和项目(Rroject)。 • 将人员组织起来以有效地完成工作; • 和客户及其他共利益者很好地沟通,以便了解产品的目标和范围,方案和限制等; • 选择合适于人员和产品的过程; • 估算工作量和工作时间,制定项目计划,包括:定义工作产品,建立质量检查点以及确定一些机制以监控计划所规定的工作。 SOFTWARE ENGINEERING
软件项目管理 • 要让软件项目失败很容易,只要符合下列条件之一即可:(1)项目经理对软件一无所知;(2)技术负责人对编程不感兴趣;(3)真正编写代码的程序员是临时雇用的。 • 如果上述三个条件同时具备,就请放心失败好了。 • 让我们少幻想自己是比尔·盖茨,先当好程序员和程序经理再说。 SOFTWARE ENGINEERING
The Definition Phase System Engineering Software project planning Software scope Software requirements analysis Refined SOFTWARE ENGINEERING
Software Project Planning 软件项目计划 • 软件项目计划包括五项主要活动:估算、进度安排、风险分析、质量管理计划和变更管理计划。 • 很多技术人员宁愿从事技术工作,而不愿花费时间制定计划。很多管理者也对计划的效果没有信心,所以很多软件项目就经常不制定计划。 SOFTWARE ENGINEERING
Software Project Planning 软件项目计划 • 在可行性分析之后,项目计划与质量管理将贯穿需求分析、系统设计、程序设计、测试、维护等软件工程环节。 • 项目计划是要提供一份合理的进程表,让所有开发人员任务明确、步调一致,最终共同准时地完成项目。项目计划是要付诸实施的,不象喊政治口号。软件的项目计划重在“准确”而非“快速”。 SOFTWARE ENGINEERING
Software Project Planning 软件项目计划 • 在做软件的项目计划时,应屏弃一切浮夸作风。只有“知已知彼”才能做出合理的项目计划。这里“知彼”是指要了解项目的规模、难度与时间限制。“知已”是指要了解有多少可用资源,如可调用的软件人员有几个?他们的水平如何?软硬件设施如何?等 SOFTWARE ENGINEERING
软件项目计划 • 如有进行系统定义,则“系统规格说明书”的功能描述和约束所有有关软件的信息几乎都是可用的,否则计划人员必须起系统分析员的作用。 确定软件的作用范围 资源需求估计 工作量和成本估计 进度安排(里程碑) 系统规格 说明书 ==》软件计划 不确定性 SOFTWARE ENGINEERING
Software Scope(范围) • The first activity in software project planning is the determination of software scope.Function and perform-ance allocated to software during system engineering should be assessed to establish a project scope that is unambiguous and understandable at management and technical levels. SOFTWARE ENGINEERING
Software Scope • Software scope describes function, performance,constraints,interfaces,and reliability. • Functions described in the statement of scope are evaluated and in some cases refined to provide more detail prior to the beginning of estimation.Because both cost and schedule estimates are functionally oriented,some degree of decomposition is often useful. SOFTWARE ENGINEERING
Software Scope • The most commonly used technique to bridge the communication gap between the customer and developer and to get the communication process started is to conduct a preliminary meeting or interview. • The analyst start by asking “context free questions.” SOFTWARE ENGINEERING
Project Planning Objectives • The objective of software project planning is to provide a framework that enables the manager to make reasonable estimates of resources,cast, and schedule.These estimates are made within a limited time frame at the beginning of a software project and should be updated regularly as the project progresses. In addition, estimates should attempt to define “best case” and “worst case” scenarios so that project outcomes can be bounded. SOFTWARE ENGINEERING
Software Project Planning • The software project planner must estimate three things before a project begin:how long it will take,how much effort will be required, and how many people will be involved.In addition,the planner must predict the resources (software and hardware) that will be required and the risk involved. SOFTWARE ENGINEERING
Estimating(估算) • The estimating is as much art as it is science. • A leading executive was once asked what single characteristic was most important when selecting a project manager.His response: “a person with the ability to know what will go wrong before it actually does.”We might add: “and the courage to estimate when the future is cloudy.” SOFTWARE ENGINEERING
Estimating • Estimation of resources,cost,and schedule for a software development effort requires experience,access to good historical information,and the courage to commit to quantitative measures when qualitative data are all that exist. SOFTWARE ENGINEERING
Estimating Risk(风险) • Project complexity • Project size • The degree of structural uncertainty • The availability of historical information • If project scope is poorly understood or project requirements are subject to change,uncertainty and risk become dangerously high. SOFTWARE ENGINEERING
Software Project Estimation • In the early days of computing,software costs comprised a small percentage of overall computer-based system cost.An order of magnitude error in estimates of software cost had relatively little impact. • Software cost and effort estimation will never be an exact science. SOFTWARE ENGINEERING
Software Project Estimation • To achieve reliable cost and effort estimates, a number of options arise: • Delay estimation until late in the project. • Base estimates on similar projects that have already been completed. • Use relatively simple “decomposition techniques” to generate project cost and effort estimates. • Use one or more empirical models for software cost and effort estimation. SOFTWARE ENGINEERING
(Estimate of) Resources • The second task of software planning is estimation of resources required to accomplish the software development effort. • Each resource is specified with four characteristics:description of the resource, a statement of availability, chronological time that the resource will be required,and dur-ation of time that the resource will be applied. SOFTWARE ENGINEERING
Resources(资源) People 可复用的软构件 Reusable Software Components 软件工程环境 Hardware&Software Tools SOFTWARE ENGINEERING
Resources---People SOFTWARE ENGINEERING
Resources---People • 人是最有价值的资源。项目计划的制定者要确定开发人员的名单,要根据他们的专长进行分工。 • 工作在第一线的软件开发人员是程序员和程序经理,他们决定着软件的命运。良好的程序员队伍和出色的管理是软件项目成功的必要条件。 SOFTWARE ENGINEERING
软件开发组织 • 开发小组的组织有以下原则: • 软件开发小组的规模不宜太大,人数不能太多,一般3-5人左右为宜。 • 切忌在开发过程中增加人员,这将因增加人员之间的联系而降低效率。 • 常见的三种组织形式:主程序员组、民主制小组、层次式小组 SOFTWARE ENGINEERING
软件项目小组—主程序员组 主程序员 支持或取代主程序员 后援 技术人员 (2至5人) 专家 (1至多人) 支持人员 (1至多人) 资料员1人 SOFTWARE ENGINEERING
软件项目小组—主程序员 • 主程序员是指一支软件开发队伍的领导者,不管他的职务是开发组长,项目经理,还是部门经理。主程序员是技术性的基层或中层干部,是软件企业得以发展的生力军。 • 好的主程序员至少应具备以下几个条件: • 技术水平是程序员队伍中的最高级别 • 能做最多且最难的工作 • 有人格魅力等 SOFTWARE ENGINEERING
软件项目小组—现代程序员组 SOFTWARE ENGINEERING
Resources (Reusable software components) • 软构件并非一定要用自己的,可以向专业的软件供应商购买。 • 为了促成软件的复用,以提高软件的生产率和软件产品的质量,应建立可复用的软件部件库。对于软件的复用,人们经常忽略,但这却是相当重要的一环。 SOFTWARE ENGINEERING
Resources (Reusable software components) • Bennatan suggests four software resource categories that should be considered as planning proceeds: • Off-the-shelf components • Full-experience components • Partial-experience components • New components SOFTWARE ENGINEERING
Environmental Resources • The environment that supports the software project,often called a software engineering environment(SEE), incorporates software and hardware. • A project planner must prescribe the time window required for software and hardware and verify that these resources will be available. SOFTWARE ENGINEERING
Environmental Resources • 软硬件(开发、运行)环境虽然不是最重要的资源,却是必需的资源。原则上软硬件环境只要符合项目的开发要求即可。有些项目可能要用到特殊的设备,则要事先作好准备,以免用时找不到而担搁了开发进程。 SOFTWARE ENGINEERING
Cost and Effort Estimation • 成本估算是软件可行性分析的重要依据,也是软件管理的重要内容,直接影响到软件开发的风险。 • 软件开发成本主要是指软件开发过程中所花费的工作量及相应的代价,即主要是人的劳动的消耗。因此,软件产品开发成本的计算方法不同于其他物理产品的成本的计算。 SOFTWARE ENGINEERING
Cost and Effort Estimation • 软件产品不存在重复制造过程,它的开发成本是以一次性开发过程所花费的代价来计算的。因此软件成本估算,应以软件计划、需求分析、设计、编码到测试的软件开发全过程所花费的代价为依据。 • 对于大型软件项目来说,由于项目的复杂性,成本估算并不单纯是一个计算过程,还需要进行一系列的估算处理,处理手段主要是分解和类比。 SOFTWARE ENGINEERING
Cost and Effort Estimation • 自顶向下和自底向上的估算 • 专家估算、类推估算、算式估算 • LOC(Line Of Code)-Based Estimation • FP(Function Points)-Based Estimation • Process-Based Estimation • Empirical Estimation Model • Automated Estimation Tools SOFTWARE ENGINEERING
Cost and Effort Estimation • 软件成本估算通常是对以下量进行估算 • 源代码行(LOC):是指机器指令行/非机器语言的执行步 • 开发工作量:常用的单位是:人-月(PM)、人-年(PY)、人-日(PD) • 软件生产率:单位劳动量所能完成的软件数量,LOC/PM、¥/LOC、¥/PM • 软件开发时间 SOFTWARE ENGINEERING
Estimation----代码行技术 • 估计出有多少行的代码(code),再乘以每行的开发成本(cost)和复杂度(complexity),即可估算出开发成本。有时对代码行的估计有一定的难度(利用专家估算等)。 SOFTWARE ENGINEERING
Estimation----任务分解技术 • 把软件开发工程分解成若干个相对独立的任务,再分别估计每个任务的开发成本,最后累加起来就是总成本(人/年)估计工作量 。一般可按阶段划分任务,再按阶段把每个阶段划分成更小的任务。 可行性研究 5% 需求分析 15% 设计 20% 编码和单元测试 40% 综合测试 20% SOFTWARE ENGINEERING
Estimation----自动估算 • 可以更快、更客观地估计成本。但需要有长期的经验积累、强大的数据库(data base)、以及决策支持系统软件(decision support system)。 SOFTWARE ENGINEERING
Cost and Effort Estimation 估算模型 • Halstead估算模型 • IBM估算模型 • SLIM估算模型 • PRICE-S估算模型 • Putnam 估算模型 • COCOMO估算模型 • Balley-Basili估算模型 • Schneider估算模型 SOFTWARE ENGINEERING
Cost and Effort Estimation • Accurate project estimates generally make use of at least two of the techniques noted above.By comparing and reconciling estimates derived using different techniques, the planner is more likely to derive an accurate estimate. • Software project estimation can never be an exact science,but a combination of good historical data and systematic techniques can improve estimation accuracy. SOFTWARE ENGINEERING
Software Project Scheduling 软件项目进度安排 • Scheduling is the culmination of a planning activity that is a primary component of software management. When combined with estimation methods and risk analysis, scheduling establishes a road map for the project manager. SOFTWARE ENGINEERING
Software Project Scheduling 软件项目进度安排 • 同意执行一个他本人都认为有缺点的计划的指挥官应该受到谴责。 • 过于乐观的进度安排并不会缩短实际进度,反而会拖后进度。 • 完成一个项目的时间与投入该项目的人员工作量之间是高度非线性的关系。 • 通过略为延长时间可以使用较少的人员实现同样的目标。 SOFTWARE ENGINEERING
Software Project Scheduling 软件项目进度安排 • 如果最乐观的估算都表明截止期限是不现实的,一个胜任的项目管理者就应该“保护其队伍免受不适当的[进度安排]的压力[并]将这种压力反映给施加压力的一方”。 SOFTWARE ENGINEERING
Software Project Scheduling 软件项目进度安排 • 虽然软件延期交付的原因很多,但大多数都可追溯到下面列出的一或多个根本原因上: • 一个不现实的截止期限,由软件开发组以外的某人所设立并强加给软件开发组内的管理者和项目开发者 • 客户需求发生变化,而需求的变化没有能够反映在项目进度的变化上 • 对工作量和/或完成该工作所需的资源数量估计不足 SOFTWARE ENGINEERING
Software Project Scheduling 软件项目进度安排 • 在项目开始时,没有将可以预测的和/或不可预测的风险考虑在内 • 事先无法预计的技术困难 • 事先无法预计的人力困难 • 由于项目组成员之间的交流不畅而导致的延期 • 项目管理者未能发现进度拖后,也未能采取行动解决这一问题 SOFTWARE ENGINEERING
Software Project Scheduling • 两种进度:最后交付日期已经确定;有大致时限,但最后交付日期由软件机构指定。 • 有时进度安排的正确性比价格估算的正确性更为重要。 • 软件无法按时完成~软件工程试图解决的一个主要问题(提高估算、时间安排的准确性,加强项目管理等)。 SOFTWARE ENGINEERING
Software Project Scheduling • 项目落后于进度表乃是家常便饭,不必大惊小怪。以下一些事件经常会导致项目被延误: • 上级领导主管臆断,制定了不现实的期限。项目经理与程序员们被迫按照不合理的进度表开展工作。 • 客户的需求发生了变化,但没有对进度表作出相应的修改。 • 低估了项目的规模与难度,导致投入的人力和物力不足。 • 并未预见到存在难以克服的技术障碍。 • 并未预见到开发人员会发生问题,如生病,辞职等。 • 开发人员之间不能很好的交流、协作,导致各阶段任务难以如期完成。 SOFTWARE ENGINEERING
Software Project Scheduling • Although there are many reasons why software is delivered late,most can be traced to one or more the following root causes: • An unrealistic deadline • Changing customer requirements • An honest underestimate(低估) • Predictable and/or unpredictable risks • Technical difficulties • Human difficulties • Miscommunication among project staff SOFTWARE ENGINEERING
Software Project Scheduling • 以下是对进度安排的一些有益的建议(一): • 制定进度表的人最好就是项目负责人,他最了解项目和开发人员。 • 进度表要经过开发小组的讨论,在得到大部数人的支持后才能实施。 • 进度安排并不见得一定要符合逻辑顺序。应尽可能地先做技术难度高的事,后做难度低的事。 • 开发一个大的软件项目,应该将进度表分为若干个里程碑。 • 进度表中必须留有缓冲时间,并将缓冲时间用到不确定的事情上。 SOFTWARE ENGINEERING
Software Project Scheduling • 以下是对进度安排的一些有益的建议(二): • 如果发现项目应交付的期限非常不合理,就要跟领导或跟客户据理力争,请求放宽期限、调整进度。 • 当客户的需求发生变化时,就要对进度表作出相应的修正。不要觉得修改进度表很困难很麻烦,不修改才会产生真真的麻烦。很多人认为戒烟很困难,但马克·吐温曾说:“戒烟很容易,我一年就戒几十次。” SOFTWARE ENGINEERING