软件项目管理课程总结
叹岁月流逝太快,转眼间便到了年底,一年的辛苦工作中,我们留下了太多的难忘时刻,也在不断的工作积累中,成长为更好的自己。为了记录这一年的工作成长,我们需要写一份总结,以下是小编收集整理的《软件项目管理课程总结》,欢迎阅读,希望大家能够喜欢。
第一篇:软件项目管理课程总结
软件过程与管理-课程总结
软件过程与管理结课报告
学生姓名:
X X
学
号:
XXXXXXXXXX 班
号:
116122
指导教师:
罗显刚
中国地质大学(武汉)信息工程学院
在学习完这门课后,我对于软件过程与管理有了一定的理解,下面介绍一下我的心得。 软件过程
软件过程是指一套关于项目的阶段、状态、方法、技术和开发、维护软件的人员以及相关Artifacts(计划、文档、模型、编码、测试、手册等)组成。软件过程是指软件生存周期所涉及的一系列相关过程。过程是活动的集合;活动是任务的集合;任务要起着把输入进行加工然后输出的作用。活动的执行可以是顺序的、重复的、并行的、嵌套的或者是有条件地引发的。
软件过程可概括为三类:基本过程类、支持过程类和组织过程类。基本过程类包括获取过程、供应过程、开发过程、运作过程,维护过程和管理过程。支持过程类包括文档过程、配置管理过程、质量保证过程、验证过程、确认过程、联合评审过程、审计过程以及问题解决过程。组织过程类包括基础设施过程、改进过程以及培训过程。
软件过程主要针对软件生产和管理进行研究。为了获得满足工程目标的软件,不仅涉及工程开发,而且还涉及工程支持和工程管理。对于一个特定的项目,可以通过剪裁过程定义所需的活动和任务,并可使活动并发执行。与软件有关的单位,根据需要和目标,可采用不同的过程、活动和任务。
软件过程是指软件整个生命周期,从需求获取,需求分析,设计,实现,测试,发布和维护一个过程模型。一个软件过程定义了软件开发中采用的方法,但软件过程还包含该过程中应用的技术——技术方法和自动化工具。过程定义一个框架,为有效交付软件工程技术,这个框架必须创建。软件过程构成了软件项目管理控制的基础,并且创建了一个环境以便于技术方法的采用、工作产品(模型、文档、报告、表格等)的产生、里程碑的创建、质量的保证、正常变更的正确管理。
软件过程的成熟等级有五级,分别为初始级,可重复级,定义级,定量管理级,优化级。 (1)在初始级,企业一般不具备稳定的软件开发与维护的环境。常常在遇到问题的时候,就放弃原定的计划而只专注于编程与测试。处于这一等级的企业,成功与否在很大程度上决定于有杰出的项目经理与经验丰富的开发团队。因此,能否雇请到及保有能干的员工成了关键问题。项目成功与否非常不确定。虽然产品一般来说是可用的,但是往往有超经费与不能按期完成的问题。
(2)在可重复级,建立了管理软件项目的政策以及为贯彻执行这些政策而定的措施。基于过往的项目的经验来计划与管理新的项目。企业实行了基本的管理控制。符合实际的项目承诺是基于以往项目以及新项目的具体要求而作出的。项目经理不断监视成本、进度和产品功能,及时发现及解决问题以便实现所作的各项承诺。
通过具体地实施这一级的各个关键过程领域的要求,企业实现了过程的规范化、稳定化。因而,曾经取得过的成功成为可重复达到的目标。
(3)在定义级,有关软件工程与管理工程的一个特定的、面对整个企业的软件开发与维护的过程的文件将被制订出来。同时,这些过程是集成到一个协调的整体。这就称为企业的标准软件过程。
这些标准的过程是用于帮助管理人员与一般成员工作得更有效率。如果有适当的需要,也可以加以修改。在这个把过程标准化的努力当中,企业开发出有效的软件工程的各种实践活动。
同时,一个在整个企业内施行的培训方案将确保工作人员与管理人员都具备他们所需要的知识与技能。
非常重要的一点是,项目小组要根据该项目的特点去改编企业的标准软件过程来制订出为本项目而定义的过程。
一个定义得很清楚的过程应当包括:准备妥当的判据,输入,完成工作的标准和步骤,审核的方法,输出和完成的判据。因为过程被定义得很清楚,因此管理层就能对所有项目的技术过程有透彻的了解。
(4)在定量管理级,企业对产品与过程建立起定量的质量目标,同时在过程中加入规定得很清楚的连续的度量。作为企业的度量方案,要对所有项目的重要的过程活动进行生产率和质量> 一个企业范围的数据库被用于收集与分析来自各项目的过程的数据。这些度量建立起了一个评价项目的过程与产品的定量的依据。项目小组可以通过缩小他们的效能表现的偏差使之处于可接受的定量界限之内,从而达到对过程与产品进行控制的目的。
因为过程是稳定的和经过度量,所以在有意外情况发生时,企业能够很快辨别出特殊的原因并加以处理
(5)在优化级,整个企业将会把重点放在对过程进行不断的优化。企业会采取主动去找出过程的弱点与长处,以达到预防缺陷的目标。同时,分析有关过程的有效性的资料,作出对新技术的成本与收益的分析,以及提出对过程进行修改的建议。整个企业都致力于探索最佳软件工程实践的创新。
项目小组分析引起缺陷的原因,对过程进行评鉴与改进,以便预防已发生的缺陷再度发生。同时,也把从中学到的经验教训传授给其他项目。
降低浪费与消耗也是这个等级的一个重点。
处于这一等级的企业的软件过程能力可被归纳为不断的改进与优化。它们以两种形式进行。一种是逐渐地提升现存过程,另一种是对技术与方法的创新。虽然在其他的能力成熟度等级之中,这些活动也可能发生,但是在优化级,技术与过程的改进是作为常规的工作一样,有计划地在管理之下实行的。
软件管理
同样,在项目开发过程中,还有一个非常重要的方面,就是软件管理 同其他任何工程项目一样,软件项目同样存在一个非常重要的问题,这就是软件管理的问题,而这一问题通常容易被一般的软件开发人员所忽视。在一般的软件工程资料中所讨论的重点也只是软件开发方法,对软件管理问题大多一笔带过。在一个小的软件开发项目中也许还无所谓,但一个大型的软件开发项目如果没有优秀的软件管理人员来领导和协调整个项目,其失败的可能性就很大了。因此有必要引起大家对此问题的重视,这也是本文的目的所在。
作为软件管理人员,应该站在高处来俯瞰整个项目,如果有不识庐山真面目的感觉就不太好了。有了俯瞰全局的意识这一前提,采用适当的管理技术,项目开展就会容易。软件项目的管理工作可以分位四个方面:软件项目的计划、软件项目的组织、软件项目的领导和软件项目的控制,下面对这四个方面进行详细的介绍。
软件开发项目的计划包括定义项目的目标,以及达到目标的方法。他涉及到项目实施的各个环节,带有全局的性质,是战略性的。计划应力求完备,要考虑到一些未知因素和不确定因素,考虑到可能的修改。计划应力求准确,尽可能提高所依据的数据的可靠程度。主要工作集中在软件项目的估算、软件开发成本的估算和软件项目进度安排。软件项目计划的目标是提供一个能使项目管理人员对资源、成本和进度做出合理估算的框架。这些估算应在软件项目开始时的一段有限时间内作出,并随着项目的进展进行更新。
软件项目管理过程开始于项目的计划,在做项目计划时,第一项活动是估算。已经使用的使用技术是时间和工作量的估算。因为估算是其他项目计划活动的基石,而且项目计划又未软件工程过程提供了工作方向,所以我们不能没有计划就着手开发,否则就会陷入盲目性。
估算本身带有风险,估算资源、成本和项目进度时需要经验、有用的历史信息、足够的定量数据和作定量度量的勇气。估算的精确程度受到多方面的影响。首先,项目的复杂性对于增加软件计划的不确定性影响很大,复杂性越高,估算的风险就越高。复杂性是相对度量的,他与项目参加人员的经验有关,比如如果让搞MIS的项目组去搞操作系统设计显然增加了复杂性。其次,项目的规模对于估算的精确性和功效的影响也比较大,因为随着软件规模的扩大,软件相同元素之间的相互依赖、相互影响也迅速增加,因而估算时进行问题分解也会变得更加困难。还有项目的结构化程度也影响项目估算的风险,这里的结构性是指功能分解的简便性和处理信息的层次性,结构化程度提高,进行精确估算的能力就提高,相应风险将减少。此外,历史信息的有效性也影响估算的风险,在对过去的项目进行这综合的软件度量之后,就可以借用来比较准确地进行估算。影响估算的因素远不止这些,比如用户需求的频繁变更给估算带来非常大的影响。
估算的依据是软件的范围,包括功能,性能、限制、接口和可靠性。在估算开始之前,应对软件的功能进行评价,并对其进行适当的细化以便提供更详细的细节。由于成本和进度的估算都与功能有关,因此常常采用功能分解的办法。性能的考虑主要包括处理和响应时间的需求。约束条件则标识外部硬件、可用存储和其他现有系统对软件的限制。
另外软件项目计划还要完成资源估算,包括人力资源、硬件资源和软件资源。在考虑各种软件开发资源时最重要的是人,必须考虑人员的技术水平、专业、人数以及在开发过程各阶段对各种人员的需要。硬件资源作为一种工具投入。软件资源包括各种帮助开发的软件工具,比如数据库等。
工作两估算是最普遍使用的技术。经过功能分解之后,可以估计出每一个项目任务的分解都需要花费若干人年,总计之后就知道软件项目总体工作量。下面就是一个示意性工作量估算表。
软件开发成本主要是指软件开发过程所花费的工作量及其相应的代价。它不同于其他物理产品的成本,它主要包括人的劳动的消耗,人的劳动的消耗所需的代价就是软件产品的开发成本。
开发成本的估算方法有很多种,象简单的代码行技术,任务分解技术,自动估计成本技术,专家判定技术,还有参数方程法,标准值法,以及COCOMO模型法。其中COCOMO (Constructive Cost Model)模型法是一种精确、易于使用的成本估算方法,该模型按其详细程度分为三级:基本COCOMO模型、中间COCOMO模型和详细COCOMO模型。
软件项目的进度安排主要是考虑软件交付用户使用的这一段开发时间的安排。进度安排的准确程度可能比成本估计的准确程度更重要。软件产品可以靠重新定价或者靠大量的销售来弥补成本的增加,但进度安排的落空会导致市场机会的丧失或者用户不满意,而且也会导致成本的增加。因此在考虑进度安排时要把人员的工作量与花费的时间联系起来,合理分配工作量,利用进度安排的有效分析方法严密监视软件开发的进展情况,以使得软件开发的进度不致被拖延。
在进行进度安排时要考虑的一个主要问题是任务的并行性问题。当参加项目的人数不止一人是软件开发工作就会出现并行情况。因为并行任务是同时发生的所以进度计划表必须决定任务之间的从属关系,确定各个任务的先后次序和衔接,确定各个任务完成的持续时间。另外还应注意关键路径的任务,这样可以确定在进度安排中应保证的重点。常用的进度安排方法有两种,即甘特图法和工程网络法。
一个软件项目的组织方式主要有两种。软件项目可以是一个单独的开发项目,也可以与产品项目组成一个完整的软件产品项目。如果是订单开发,则成立软件项目组即可;如果是产品开发,需成立软件项目组和产品项目(负责市场调研和销售),组成软件产品项目组。公司实行项目管理时,首先要成立项目管理委员会,项目管理委员会下设项目管理小组、项目评审小组和软件产品项目组。
①项目管理委员会项目管理委员会是公司项目管理的最高决策机构,一般由公司总经理、副总经理组成。主要职责如下:(1)依照项目管理相关制度管理项目;(2)监督项目管理相关制度的执行;(3)对项目立项、项目撤消进行决策;(4)任命项目管理小组组长、项目评审委员会主任、项目组组长. ②项目管理小组项目管理小组对项目管理委员会负责,一般由公司管理人员组成。主要职责如下:(1)草拟项目管理的各项制度;(2)组织项目阶段评审;(3)保存项目过程中的相关文件和数据;(4)为优化项目管理提出建议。
③项目评审小组项目评审小组对项目管理委员会负责,可下设开发评审小组和产品评审小组,一般由公司技术专家和市场专家组成。主要职责如下:(1)对项目可行性报告进行评审;(2)对市场计划和阶段报告进行评审;(3)对开发计划和阶段报告进行评审;(4)项目结束时,对项目总结报告进行评审。
④软件产品项目组软件产品项目组对项目管理委员会负责,可下设软件项目组和产品项目组。软件项目组和产品项目组分别设开发经理和产品经理。成员一般由公司技术人员和市场人员构成。主要职责是:根据项目管理委员会的安排具体负责项目的软件开发和市场调研及销售工作。
同样,项目的组织结构同样重要。开发组织采用什么形式由软件项目的特点决定,同时也与参加人员的素质有关。通常有三种组织结构模式:
按课题组划分的模式:把开发人员按课题组成小组,小组成员自始至终承担课题的各项任务。该模式适用于规模不大的项目,并且要求小组成员在各方面有技术专长。
按职能划分的模式:把开发项目的软件人员按任务的工作阶段划分为若干工作小组。要开发的软件在每个专业小组完成阶段加工后沿工序流水线向下传递。这种流水作业的方式使用于多项目并行的情况。
矩阵形模型:这种模式是以上两种模式的复合。一方面按工作性质成立一些专门小组,另一方面每一个项目都有它的经理人员负责。每一个软件开发人员属于某一个专门小组,有参加某一个项目的工作。该模式的优点有一方面参加专门组的成员可以在组内交流在各个项目中取得的经验,这更有利于发挥专业人员的作用;另一方面,各个项目有专门的人员负责,有利于软件项目的完成。这种模式比较适合于规模比较大的项目。
组织结构的最后一层是程序设计小组的组织形式。通常认为程序设计工作是按独立的方式进行的,程序人员独立地完成任务。但这并不意味着相互之间没有联系。一般在人数比较少时组员之间的联系比较简单,但随着人数的增加,相互之间的联系变得负责起来。小组内部人员的组织形式对对生产率有着十分重要的影响。
在软件管理中的组织形式方面,常见的小组组织形式有三种,这三种形式可以灵活使用。 1. 主程序员制小组:相当于组长负责制,小组的核心由一位主程序员,另外配备两到三位技术员、一位后援工程师组成。这种组织结构突出主程序员的领导,强调主程序员与其他技术人员的联系。
2. 民主制小组:在民主制小组中,遇到问题可以在组员之间平等地交换换意见,工作组目标的制定以及决定的作出都由全体人员参加。这种组织形式强调发挥每个成员的积极性,并要求每个成员发挥主动精神和协作精神。
3. 层次式小组:在层次式小组中,组内人员分位三级:组长(项目负责人)一人负责全组工作,他直接领导两到三名高级程序员,每位高级程序员通过基层小组,管理若干位程序员。这种结构比较适合于项目本身就是层次结构的课题。
在另一个方面来说,合理地配备人员是成功地完成软件项目的切实保证。所谓合理地配备人员应包括按不同阶段适时运用人员,恰当掌握用人标准。一般来说,软件项目不同阶段不同层次技术人员的参与情况是不一样的。下图是典型的软件开发人员参与情况曲线。
在人力配备问题上,由于配置不当,很容易造成人力资源的浪费,并延误工期。特别是采用恒定人员配备方案时在项目的开始和最后都会出现人力过剩,而在中期又会出现人力不足的情况。
第二篇:软件项目管理的课程学习体会(共)
经过一个学期对软件项目管理的学习,通过这次分工做任务,真正对项目管理有了比较深刻的理解和认识,感触很多。
一. 项目要进行整体管理,善始善终
整个项目开始要做好项目整体计划,在项目的整个过程中,始终要按照项目计划执行,如若遇到项目发生变更,要进行影响分析,得到批准后制定变更计划,并按变更计划执行。变更的影响情况,如:费用,时间进度等要通知相关的项目利益干系人,说明变更的原因和产生的影响。
变更计划在软件项目中经常遇到。控制好软件项目的变更,首先需要做好项目的开始目标基准的确定,基准的用户需求明确,才能衡量出哪些是需要变更的。否则变更的东西和开始要求的东西混在一起,变更计划就无从制定,变更的界限也无从划清。
二. 项目范围管理的重要性
需求管理是项目范围管理中的问题,这是因为它实际上是开发过程中的所有管理原则的先决条件。只有在开发的目标被清楚明白地表述和理解的情况下,软件开发才能以一种有计划的有序的方式进行。实际上,没有文档化的需求,在开发工作完成前后都很有可能发生产品与要求的偏离。计划、追踪、配置管理以及软件质量保证这些在其他关键过程中涉及的原则,都是从一个稳定的基础开始的,那就是文档化的需求基线。
三.项目时间管理理论指导我们在项目管理中怎样抓主要矛盾
项目管理的实施最为直观的就是缩短项目时间。利用项目管理理论、方法,有许多缩短时间的例子。美国路易斯维化工厂检修时把检修流程精细分解,按导向图建立起控制关系。他们惊奇地发现,检修过程选择不同路径总时间是有差别的。通过反复压缩最长路径上的任务,将工期反复优化,最后只用78个小时就完成了通常需125小时完成的检修,节省时间38%。这就是至今项目管理工作者还在应用的著名的时间管理技术CPM,即“关键路径法”。
所以我们在软件的项目管理中,也要将时间控制理论运用进来,结合软件工程的实际,将任务分解的更加详细,并用网络图将整个工作过程建立起来,估算好每个阶段的历时,找出关键路径,并通过快速跟进方法,将关键路径的工期缩短,以提高工效。
体会还有很多,总之通过这次学习自己对项目的管理又有了新的认识,我会将这些理论知识运用到实际工作中去的。以提高项目的管理水平,提高项目的质量,降低项目的成本,降低项目的风险,最终提高企业的效益。
第三篇:软件工程课程总结
学习软件工程这门课程已经有一个学期了,整整一个学期下来,应该说还是有许多值得肯定的地方的。其实在我看来,软件工程与其说是一门课程,不如说是一门思想,是一个如何去分析和处理问题的过程,应该说其范畴已经远远不止局限于该门课程,成为了一个综合的能够解决问题的思想集合。
学习软件工程能够加强人的整体思维能力,对人的综合素质有所提高,培养良好的分析规划和团队意识。学习了软件工程,我们可以在给定成本、进度的前提下,开发出具有适用性、有效性、可修改性、可靠性、可理解性、可维护性、可重用性、可移植性、可追踪性、可互操作性和满足用户需求的软件产品。追求这些目标有助于提高软件产品的质量和开发效率,减少维护的困难。
在这学期的软件工程课上,我每次都认真听老师讲课,跟着老师的脚步,领悟老师的思想,学习态度还算认真。一刚开始还觉得这门课有点枯燥乏味,但后来静下心来看这本书感觉书上的知识对以后无论是在生活、学习还是在工作上都有很大的好处,对自身也是一种完善,因为这里面的思想博大精深,值得学习。从此我就认真地学习这门课程。尽管在学习的过程中遇到了很多困难,但经过与老师和同学的积极交流终于把问题解决了,从中学到了更深层次的知识,而这些知识又是对书本知识的补充,对学习书本知识有很大的好处。当然,学习理论知识就是用来指导实践的,也只有把理论知识运用到实践才能充分发挥理论的作用。所以在业余时间,我们尝试着把所有知识串起来,并根据自身的实践经验完成了相关的系统分析报告,让知识能更加驻留我心。
在本学期的软件工程课程的学习中,我们学习了十章的内容。第一章软件工程概述,这一章主要讲解的是一些概念性和基础性的内容,例如软件的概念、特性,软件危机的主要表现。了解软件工程的的工作对象、发展背景、内容、目标。还介绍了三个常用的软件工具Microsoft Visio、PowerDesigner和Rational Rose。第二章软件开发过程模式,这一章主要让我们了解软件生存周期,认识到了软件开发过程,熟悉了几种常用的软件过程模式的特点与用途。此章介绍了6种模式:瀑布模式、原型进化模式、增量模式、螺旋模式、迭代模式和组件复用模式。第三章软件项目管理,本章详细介绍了项目管理内容(对项目的管理、对项目成果的管理),让我们学会如何制定项目计划,并学习使用甘特图、任务网络图(由Microsoft Project创建)制定项目计划。第四章计算机系统工程,这一章让我们熟悉如何从全局的计算机系统角度考察软件问题,熟悉如何对软件项目做可行性分析。该章还涉及系统初步建模,其中的系统框架图、系统流程图,可由Microsoft Visio中的基本流程图创建。第五需求分析,这一章重点讲解了需求分析任务及过程,让我们学会如何获取业务需求、建立业务模型、进行需求验证。可通过Microsoft Visio中的组织图创建业务树,通过Rational Rose创建业务用例、业务活动。第六章结构化分析建模,这一章重点讲解了使用变换型映射方法和事务型映射方法生成初始的模块结构以及模块结构的改进。说明了建立分析建模的原因和方法。我们可通过PowerDesigner创建实体联系图,通过Microsoft Visio创建数据流图,通过Rational Rose创建事件状态图。第七章基于UML的面向对象分析建模,本章详细介绍了UML的基本模式、事物、关系及建模时用到的各种图进行了介绍。可通过Rational Rose进行面向对象分析建模。第八章概要设计,这一章主要讲解了概要设计任务及过程,介绍了系统构架、数据结构、程序结构等概要设计内容。第九章结构化设计建模,本章介绍了结构化设计建模的工具,让我们学会如何基于数据流进行程序结构映射和如何对程序结构进行优化。该章中的程序结构图由Microsoft Visio创建。第十章基于UML的面向对象设计建模,本章讲解了面向对象设计建模内容,让我们学习使用UML建立面向对象设计模型(逻辑结构、动态过程、物理装配与部署)。通过Rational Rose进行设计建模。
学习了这门课程之后,我发现无论是在上课,还是在学校里面做学生工作,技术性的工作就好比变魔术。其实原理是非常简单的,甚至可以说简单的可笑,但是当你就是做出这么一个简单的东西出来之后,一些外行们有时候会用崇拜的眼光看着你,觉得你很厉害,很高深莫测。但是制作的过程他们却不知道,也许知道之后他们只是会哑然失笑,原来这个东西的制作过程是如此的简单,这个可以说就是技术的魅力了。就比如说软件工程中所谓的需求获取,从字面上来看好像是一件很难的事,而其实就是一个谈判,辩论,交流的过程,只不过这个交流过程可能针对性比较强。 所以说软件工程就是对生活的平凡小事的升华,它来自于生活却高于生活。当我们在毕业之后,软件工程是我们实际要运用的一项非常有用的技能,而且不仅仅局限于软件工程的范畴,即使我们是从事其它行业,不也是要从需求获取开始,一直有条有理地到最后成品的出炉吗?应该说这就是这门课的价值所在,它让我们既学会了管理又学会了技术。
在整个学期的学习过程中,我收获了不少,能够解决一些较为简单的问题,在建模方面的能力有所加强。原来一直以为学好这门课程最重要的是会编写程序,其实则不然。我了解到软件并非是一些代码这么简单,在开发软件的过程中,编写代码的工作量其实只占不到所有工程量的30%,而后期的管理和维护更是占了60%到80%之多。一个完整的项目规划须包括:软件的定义、可行性分析报告、项目开发计划、软件需求说明书、概要设计说明书、详细设计说明书、用户操作手册、测试计划、测试分析报告、开发进度报告、项目开发总结报告、软件维护手册、软件问题报告、软件修改报告等多个文档,每个文档都要上级验收审查,而文档数量众多,要做好这点真的不是很容易,而恰恰写好文档正能保证完成软件工程其中一个目的的关键,既研究如何用最小的开销做出生存期较长的软件,再加上各个阶段都要进行周密的策划、详细的分工部署和人员安排,且各阶段要据具体情况不断的反复才能达成,所以代码只是开发软件这个浩大的工程的一个小小的过程。当然自己也有很多的不足之处,比如自己动手操作能力比较弱,实践经验匮乏,思维不紧密,不注重细节,耐心不够,每次遇到问题就去问老师,实战精神不强,所以导致很多知识学得也只是模模糊糊的。所以在以后的学习中我要加强自身综合素质的培养,要注意多看多练要注意结合实际,更要多思考,面对错误不要一范就问,要尝试自己去解决,这样才能学到这门课程的精华。我觉得学好软件工程首先要明白自己的学习目标究竟是什么,根据自己的实际工作出发,有针对性地在相应的学习方向上进行提高,制定出详细的学习规划。还要注意与其他科目的相辅相成,就像我们在学习语言时,要看看与C语言的联系,多思多想,把从各个科目学到的知识融汇贯通。
在本学期我们班每位同学都做了管理信息系统分析报告,其中就用到了软件工程中的不少知识。比如项目来源,项目任务,项目规划,系统需求分析,系统结构设计,系统详细设计,系统测试,系统维护等等。而我做的是酒店客房管理信息系统的分析报告,其中涉及到了以上几个方面,需要明确任务目标,准备相应的项目资源,对项目实施合理的规划,进行业务需求和功能需求分析,制定出数据字典,设计出软件结构,并对其进行详细设计,比如算法设计,数据库设计和界面设计。画出进度安排表,组织结构图,业务流程图,数据流图,利用UML建模画出图形,通过这些图形能更直观地看出各个实体之间的关系,对系统有个比较整体的体现。
总之,在今后的学习中要注意多读书、多思考、多练习、多讨论,不断熟悉书本的基础,并以此为基础将其扩散开来,应用于今后的实践。不断锻炼自己,成为社会的可用之才,回馈社会。
第四篇:项目管理的基本思想在软件工程课程教学
目录
一、 引言
二、课程特点及项目管理核心概念
三、项目管理的重要思想
四、过程管理应用于组织教学的方法
五、结语 参考文献 摘要 关键词
一、 引言
软件工程是计算机相关专业一门重要专业必修课程,具有很强的实践性。软件工程中的技术、方法和原理往往比较复杂,难以掌握,从而导致学生在学的过程中极易产生枯燥乏味的感觉和学不会、不想学的思想,教师也会觉得该课程教起来相当困难,要想达到较好的教学效果、培养学生较强的实践能力十分困难。 笔者在讲授软件工程专业课程时,将软件工程中项目管理的原理和方法应用于软件工程教学,注重学生人员的组织、任务划分、学习过程管理以及结果考核,在教学内容、教学方法和手段以及考核等方面进行了一些尝试和探究,取得了很好的效果。
二、课程特点及项目管理核心概念 1.软件工程课程特点
本课程是为了解决软件开发和维护过程中所遇到的一系列严重问题,而产生的一门新兴的工程型学科,目的在于提高软件的质量与生产率,最终实现软件的工业化生产。软件工程课程中所讨论的原理、方法和技术来源于软件开发和维护的实践和经验,并且是经过时间的检验而证明是正确的或者是当前最好的技术和方法,具有抽象性、复杂性和高度的时效性。正因如此,软件工程课程不同于一般的计算机专业课程,它具有自身的特点。
(1)综合性。软件项目开发是一项综合的系统工程,是对所学专业知识和能力的综合运用,包括:程序设计、数据结构、操作系统、数据库等,同时,还涉及工程学、管理学、经济学、数学、心理学等多个领域的知识。
(2)时效性。随着IT行业的飞速发展,新的软件工程的原理、方法和工具也是层出不穷。为了使学生所学的软件工程知识和技能在软件行业中能真正发挥作用,因此,在授课时,除了讲解基本概念、原理和方法外,更重要的是,对一些不再流行的方法和技术需要进行大量的裁减,而补充一些最新的方法和技术,以适应技术的发展。
(3)实践性。软件工程包括大量的软件开发实践的经验和教训,具有很强的实践性。因此,在教学过程中,不仅要注重基本的概念、原理和方法,而且要进行具体的软件开发实践活动,这样才能将理论与实践相结合,使学生真正学以致用。 2.项目管理的核心概念
软件项目管理主要包括4个要素:人员(People)、产品(Product)、过程(Process)和项目(Project),正好构成软件项目管理的“4P”要素。
(1)人员。相对于开发工具和技术来说,软件人员的素质和组织管理显得尤为重要。对于大型的软件项目更是需要整个团队的共同努力和协作,因此对开发人员的组织和管理将是一项十分重要的工作,组织和管理的好坏直接影响到整个项目的成败。
(2)产品。作为软件项目的最终目标,必须在规定的时间和预算内完成产品。经验表明,影响软件产品的主要因素是软件需求的不确定和需求规格说明的不准确。
(3)过程。软件产品从无到有,需要经过一系列复杂的过程,对这些过程中所使用的技术、方法、活动和工具进行有效的管理、跟踪和控制,必要时进行有效复用,是管理学中的一个重要目标。
(4)项目。为了实现项目的目标,项目管理者需要在有限的资源约束下,运用系统的观点、方法和理论,对软件项目的全过程进行计划、组织、协调、控制和评价。
三、项目管理的重要思想
所谓的软件项目管理,就是指通过计划、组织和控制等一系列活动,合理地配置和使用各种资源,以便在预定成本和期限内开发出符合客户需求的软件。[1]其重要思想在于:开展任何活动,必须在事前进行认真计划和规划,在执行过程中进行过程跟踪和控制,在活动完成后进行相应的质量评价。
在计划时期,首要的任务是要明确当前活动的目标,据此设计活动的具体过程、步骤、人员组织形式以及监控和评价方式。 在活动的执行过程中,要有相应的评价指标,据此对活动过程的各个环节进行有效地监控和管理。 在结束阶段,要对活动的执行情况进行质量的评审,确保得到的是合格的中间产品,或者说,达到了预先设定的活动目标。
四、过程管理应用于组织教学的方法 在软件工程课程的教学实践活动中,根据软件项目管理中的核心概念和重要思想来设计教学内容和方法,一方面,教学本身体现了软件工程思想,另一方面,使得教学活动易于设计和实现,同时增加了教学的趣味性和教学质量的可管理性。 1. 教学设计的指导原则
根据项目管理的核心概念和基本思想,在我们的实践教学活动中,制定了以下教学指导原则。
(1)学时比例:讲授和实践比例达到1:1,对于一次2学时的课程,讲授和课堂实践各占一半; (2)组织形式:针对实践环节,教师充当客户,学生以自愿形式组成开发团队,每组5~6人,每组推选组长一名,成员要有不同的分工和角色,包括项目组长、编码员、测试员、分析员、设计员、质检员等角色;
(3)实践题目:为了强化实践训练的目的,实践性环节分为课堂实践和课后综合训练:课后综合训练,以一个完整的软件项目作为实训内容,与教学进度相应,进行任务的阶段划分和实施。课堂实践以小型的单元实践为主,题目要有相对独立性,避免前后依赖,增加可操作性,类型可以包括分析型、设计型、训练型、讨论以及争议性的话题等。选题必须切合学生的专业背景和实际情况,且具有一定的实践价值和社会意义。
(4)管理与考核:管理过程采用模拟公司的分级管理方式,各个小组组长向教师负责项目的完成和进展,而组内每个成员向小组组长负责自己所担当角色的任务完成。考核可采用多种形式,如答辩、交叉考核、展示、提问或者综合评审等。 2.具体实施方案 (1)教学内容规划 在正式课程开始教学之前,需要根据教学计划和大纲进行认真的教学规划,包括学时分配、教学进度安排、阶段性教学目标和实践内容的设计,如表1所示。在正式教学之前,将此教学
第五篇:软件工程课程设计 (个人账本管理系统)
软件工程课程设计报告 ---个人帐本管理
一、需求分析
1、 系统开发背景
当今社会是一个信息与科技并行的时代,在社会中消费时每个人都有的社会行为,消费与人的日常生活是息息相关的,一个人如果有一个很好的消费观的话能给自己带来很到好处。鉴于此目的,编写了一个小型的个人账本管理系统。此系统是一个简单的系统,可以管理个人的日常消费,可以为一般人所使用。对于业务较多的用户来说此系统就不是一个很好的选择。
2、 软件主要组成及功能
收入模块
功能:录入收入
任何时间录入你所得到的收入(共有以下几种选择:
1、工资;
2、奖金;
3、其他收入;);
输入你所的到的金额; 录入金额的原因(可选);
支出模块
功能:支出的记录
什么时候
什么类型的支出(
1、生活费;
2、日常用品;
3、休闲娱乐;
4、社交应酬;
5、交通费;
6、通讯费;
7、医疗保健;
8、其他支出) 输入支出的金额 什么原因的支出
查询模块 功能:查询
以选择查询的类型(
1、支出;
2、收入;
3、全部)
时间(
1、今天;
2、昨天;
3、本周;
4、上周;
5、本月;
6、上月;
7、本年;
8、去年;
9、全部;) 以及什么类别
消费的金额在什么范围之类的记录 将时间,类别,金额,备注显示出来
统计模块 功能:统计
选择统计的类型(
1、支出;
2、收入;)
时间(
1、今天;
2、昨天;
3、本周;
4、上周;
5、本月;
6、上月;
7、本年;
8、去年;
9、全部;) 什么类别
统计的方式(
1、总和;
2、平均值;
3、最大值;
4、最小值;) 将时间,类别,方式,数值显示出来
管理模块
功能:完成系统相应的管理
可以对数据库进行备份 数据库的还原 查看日志操作。
修改模块
功能:对已有数据进行修改更新操作
对记录进行修改 对记录删除。
退出模块 退出此系统
3、
4、 用户特点及一般约束 功能需求(DFD图)
收入 顶层图:
填写相应的信息收入录入事务确认成功录入成功
一层图: 收入录入事务填写相应的信息返回确认信息确认成功录入成功D:添加收入信息
支出 顶层图:
填写相应的信息支出录入事务确认成功录入成功
一层图:
填写相应的信息支出录入事务返回确认信息确认成功录入成功D:添加支出信息
查询 顶层图:
填写相应的信息查询命令输入事务确认成功查询成功
一层图: 查询命令输入事务填写相应的信息返回确认信息确认成功显示查询结果D:查询信息
统计 顶层图:
填写相应的信息统计命令输入事务确认成功显示统计结果
一层图:
填写相应的信息统计命令输入事务返回确认信息确认成功显示统计结果D:查询信息
管理 顶层图:
填写相应的信息管理命令输入事务确认成功管理成功
一层图: 管理命令输入事务填写相应的信息返回确认信息确认成功处理成功D:记录 查询
修改 顶层图:
填写相应的信息修改命令输入事务确认成功修改成功
一层图:
填写相应的信息修改命令输入事务返回确认信息确认成功修改成功D:查询数据库
5、 外部接口需求
在用户界面方面要求对每一个操作都以主界面为前提弹出相应的对话框,硬软件接口方面没有特别的需求,一般用户都可以直接使用。
6、 性能需求
因为系统本身较小,实际使用的人群的特点,响应时间可能有不同的要求。
7、 软件属性需求
在数据的检索、数据的增删改方面必须做到丝毫不差,满足软件开发的正确性的要求。 必须充分考虑软件的异常处理机制以及软件的复用性,以增强软件的健壮性。
在软件的保密性方面可以不用考虑,此软件主要是面向小型用户,对系统的保密没有要求。
所开发出来的软件必须是可维护的,要有可以升级的空间,要预留接口,方便后面软件的升级。
8、
二、项目概要设计
1、 总体设计(系统总流程图)
个人账本管理系统数据需求(ER图)
收入管理模块支出管理模块查询功能模块统计模块管理模块修改模块退出模块
2、 各个界面的截图及相应的操作规则
在第一次运行是要首先运行此文件对控件进行注册。
第一次运行的结果如图所示
收入
支出
查询
统计
管理
退出
三、详细设计
1、 进行项目详细设计工作;
2、 写出详细设计说明书。
四、编 码
1、此系统用MFC来编写。
2、编码分工:
3、各个模块核心代码 查询模块:
// CSelect 消息处理程序
void CSelect::OnBnClickedOk() { // TODO: 在此添加控件通知处理程序代码
UpdateData(true); CString type,date,kind,count,start,end; m_type.GetLBText(m_type.GetCurSel(),type); m_date.GetLBText(m_date.GetCurSel(),date); m_kind.GetLBText(m_kind.GetCurSel(),kind); m_count.GetLBText(m_count.GetCurSel(),count); CTime t = CTime::GetCurrentTime(); int tyear,tmonth,tday; CString year,month,day; tyear=t.GetYear(); tmonth=t.GetMonth(); tday=t.GetDay(); if(date=="今天") {
year.Format(_T("%d"),tyear);
if(tmonth<10)
month.Format(_T("0%d"),tmonth);
else
month.Format(_T("%d"),tmonth);
if(tday<10)
day.Format(_T("0%d"),tday);
//确定查询
else
day.Format(_T("%d"),tday);
start=year+_T("-")+month+_T("-")+day;
end=year+_T("-")+month+_T("-")+day; }
CString str,str1,str2,str3,str4; ADOConn m_AdoConn; m_AdoConn.OnInitADOConn(); CString sql;
if(type==_T("0")&&kind!=_T("所有收入"))
sql.Format(_T("select 时间,类别,金额,备注from mymoney where 类型= "+type+" and 类别= +kind+ and 时间>= +start+and 时间<= +end+ and 金额>= "+count+" order by 时间asc"));
_RecordsetPtr m_pRecordset; m_pRecordset = m_AdoConn.GetRecordSet((_bstr_t)sql); m_list.DeleteAllItems(); while(m_AdoConn.m_pRecordset->adoEOF==0) {
m_list.InsertItem(0,_T(""));
m_list.SetItemText(0,0,(_bstr_t)m_pRecordset->GetCollect(_T("时间")));
m_list.SetItemText(0,1,(_bstr_t)m_pRecordset->GetCollect(_T("类别")));
m_list.SetItemText(0,2,(_bstr_t)m_pRecordset->GetCollect(_T("金额")));
m_list.SetItemText(0,3,(_bstr_t)m_pRecordset->GetCollect(_T("备注")));
m_pRecordset->MoveNext(); }
str=m_list.GetItemText(0,0); if(str==_T("")) {
m_list.DeleteAllItems();
m_date.GetLBText(m_date.GetCurSel(),str1);
m_kind.GetLBText(m_kind.GetCurSel(),str2);
m_count.GetLBText(m_count.GetCurSel(),str3);
str4=_T("无此记录");
m_list.InsertItem(0,_T(""));
}
} m_list.SetItemText(0,0,str1); m_list.SetItemText(0,1,str2); m_list.SetItemText(0,2,str3); m_list.SetItemText(0,3,str4); 管理模块:
void CManage::OnBnClickedButton1() //数据库备份 { // TODO: 在此添加控件通知处理程序代码
m_button1.EnableWindow(false); m_button2.EnableWindow(true); m_static.SetWindowTextW(_T("请选择备份目录:")); m_static.ShowWindow(SW_SHOW); m_button.ShowWindow(SW_SHOW); m_edit.ShowWindow(SW_SHOW); m_edit.SetWindowTextW(_T("")); flag=1; strname=_T(""); UpdateData(false); Invalidate(true); }
void CManage::OnBnClickedButton2() //数据库还原 { // TODO: 在此添加控件通知处理程序代码
m_button2.EnableWindow(false); m_button1.EnableWindow(true); m_static.SetWindowTextW(_T("请选择还原文件目录:")); m_static.ShowWindow(SW_SHOW); m_button.ShowWindow(SW_SHOW); m_edit.ShowWindow(SW_SHOW); m_edit.SetWindowTextW(_T("")); flag=-1; strname=_T(""); UpdateData(false); Invalidate(true); }
void CManage::OnBnClickedButton3() //察看日志 { // TODO: 在此添加控件通知处理程序代码
CFile file; CTime t=CTime::GetCurrentTime(); int tyear,tmonth,tday,thour,tmin,tsec; CString year,month,day,hour,min,sec; tyear=t.GetYear(); tmonth=t.GetMonth(); tday=t.GetDay(); thour=t.GetHour(); tmin=t.GetMinute(); tsec=t.GetSecond(); year.Format(_T("%d"),tyear); month.Format(_T("%d"),tmonth); day.Format(_T("%d"),tday); hour.Format(_T("%d"),thour); min.Format(_T("%d"),tmin); sec.Format(_T("%d"),sec);
CString str; str=year+_T("")+month+_T("")+day+_T(" ")+hour+_T(":")+min+_T(" 察看日志 "); }
void CManage::OnBnClickedButton4() //浏览 { // TODO: 在此添加控件通知处理程序代码
if(flag==1) {
UpdateData(true);
TCHAR szDir[MAX_PATH];
BROWSEINFO bi;
ITEMIDLIST *pidl;
bi.hwndOwner = this->m_hWnd;
bi.pidlRoot = NULL;
bi.pszDisplayName = szDir;
bi.lpszTitle = _T("请选择目录");
bi.ulFlags = BIF_RETURNONLYFSDIRS;
bi.lpfn = NULL;
bi.lParam = 0;
bi.iImage = 0;
pidl = SHBrowseForFolder(&bi);
if(pidl == NULL) return;
if(!SHGetPathFromIDList(pidl, szDir)) return;
else strname=szDir;
UpdateData(false); } else if(flag==-1) {
CFileDialog dlg(TRUE,NULL,NULL,OFN_HIDEREADONLY,_T("数据库文件|moneyback.db||"));
if(dlg.DoModal()==IDOK)
{
strname=dlg.GetPathName();
}
if(strname!=_T(""))
{
UpdateData(false);
} } }
收入模块:
// CIncome 消息处理程序
void CIncome::OnBnClickedOk() //确定按钮 { // TODO: 在此添加控件通知处理程序代码
UpdateData(true); if(m_count.IsEmpty()) {
MessageBox(_T("金额不能为空"));
return ; }
ADOConn m_AdoConn; m_AdoConn.OnInitADOConn(); _bstr_t sql; sql = "select * from mymoney"; _RecordsetPtr m_pRecordset; m_pRecordset=m_AdoConn.GetRecordSet(sql); CString mydate,mykind; m_date.GetLBText(m_date.GetCurSel(),mydate); m_kind.GetLBText(m_kind.GetCurSel(),mykind); mydate.Remove(); try {
m_pRecordset->AddNew();//添加新行
m_pRecordset->PutCollect("类型",(_bstr_t)_T("0"));
m_pRecordset->PutCollect("时间",(_bstr_t)mydate);
m_pRecordset->PutCollect("类别",(_bstr_t)mykind);
m_pRecordset->PutCollect("金额",(_bstr_t)m_count);
m_pRecordset->PutCollect("备注",(_bstr_t)m_remark);
m_pRecordset->GetFields()->GetItem("类型")->Value = (_bstr_t)_T("0");
m_pRecordset->GetFields()->GetItem("时间")->Value = (_bstr_t)mydate;
m_pRecordset->GetFields()->GetItem("类别")->Value = (_bstr_t)mykind;
m_pRecordset->GetFields()->GetItem("金额")->Value = (_bstr_t)m_count;
m_pRecordset->GetFields()->GetItem("备注")->Value = (_bstr_t)m_remark;
m_pRecordset->Update();
m_AdoConn.ExitConnect(); } catch(...) {
MessageBox(_T("操作失败"));
return; } }
统计模块:
// CCount 消息处理程序
void CCount::OnBnClickedOk() //确定统计 { // TODO: 在此添加控件通知处理程序代码
UpdateData(true); CString type,date,kind,way,start,end; m_type.GetLBText(m_type.GetCurSel(),type); m_date.GetLBText(m_date.GetCurSel(),date); m_kind.GetLBText(m_kind.GetCurSel(),kind); m_way.GetLBText(m_way.GetCurSel(),way);
if(type=="支出")
type=_T("1"); else
type=_T("0");
CTime t = CTime::GetCurrentTime(); int tyear,tmonth,tday; CString year,month,day; tyear=t.GetYear(); tmonth=t.GetMonth(); tday=t.GetDay();
if(date=="今天") {
year.Format(_T("%d"),tyear);
month.Format(_T("%d"),tmonth);
day.Format(_T("%d"),tday);
start=year+_T("-")+month+_T("-")+day;
end=year+_T("-")+month+_T("-")+day; } ADOConn m_AdoConn; m_AdoConn.OnInitADOConn(); CString sql;
if(kind!=_T("所有收入")&&kind!=_T("所有支出")&&way==_T("总和"))
sql.Format(_T("select sum(金额) as my from mymoney where 类型= "+type+" and 类别= +kind+ and 时间>= +start+and 时间<= +end+ "));
_RecordsetPtr m_pRecordset; m_pRecordset = m_AdoConn.GetRecordSet((_bstr_t)sql);
while(m_AdoConn.m_pRecordset->adoEOF==0) {
m_list.InsertItem(0,_T(""));
m_list.SetItemText(0,0,date);
m_list.SetItemText(0,1,kind);
m_list.SetItemText(0,2,way);
try
{ m_list.SetItemText(0,3,(_bstr_t)m_pRecordset->GetCollect(_T("my")));
}
catch(...)
{
m_list.SetItemText(0,3,_T("0"));
}
m_pRecordset->MoveNext(); } } 支出模块:
// COutlay 消息处理程序
void COutlay::OnBnClickedOk() { // TODO: 在此添加控件通知处理程序代码
UpdateData(true); if(m_count.IsEmpty()) {
MessageBox(_T("金额不能为空"));
return ; } ADOConn m_AdoConn; m_AdoConn.OnInitADOConn(); _bstr_t sql; sql = "select * from mymoney"; _RecordsetPtr m_pRecordset; m_pRecordset=m_AdoConn.GetRecordSet(sql); CString mydate,mykind; m_date.GetLBText(m_date.GetCurSel(),mydate); m_kind.GetLBText(m_kind.GetCurSel(),mykind); mydate.Remove();
try {
m_pRecordset->AddNew();//添加新行
m_pRecordset->PutCollect("类型",(_bstr_t)_T("1"));
m_pRecordset->PutCollect("时间",(_bstr_t)mydate);
m_pRecordset->PutCollect("类别",(_bstr_t)mykind);
m_pRecordset->PutCollect("金额",(_bstr_t)m_count);
m_pRecordset->PutCollect("备注",(_bstr_t)m_remark);
m_pRecordset->GetFields()->GetItem("类型")->Value = (_bstr_t)_T("1");
m_pRecordset->GetFields()->GetItem("时间")->Value = (_bstr_t)mydate;
m_pRecordset->GetFields()->GetItem("类别")->Value = (_bstr_t)mykind;
m_pRecordset->GetFields()->GetItem("金额")->Value = (_bstr_t)m_count;
m_pRecordset->GetFields()->GetItem("备注")->Value = (_bstr_t)m_remark;
m_pRecordset->Update();
m_AdoConn.ExitConnect(); } catch(...) {
MessageBox(_T("操作失败"));
return; } }
五、项目测试
1、
2、
3、
4、 黑盒测试用例: 白盒测试用例: 黑盒测试记录: 白盒测试记录: