简单题
软件工程的定义
Software engineering is “(1) the application of a systematic, disciplined, quantifiable approach to the development, operation, and maintenance of software, that is, the application of engineering to software,” and “(2) the study of approaches as in (1).” – IEEE Standard 610.12
阅读经典名著“人月神话”等资料,解释 software crisis、COCOMO 模型。
- Software crisis:
Software crisis is a term used in the early days of computing science for the difficulty of writing useful and efficient computer programs in the required time. The software crisis was due to the rapid increases in computer power and the complexity of the problems that could not be tackled. With the increase in the complexity of the software, many software problems arose because existing methods were insufficient.
- COCOMO模型:
COCOMO,英文全称为constructive cost model,中文为构造性成本模型.它是一种精确、易于使用的,基于模型的成本估算方法,最早由勃姆 (Boehm) 于 1981 年提出。从本质上说是一种参数化的项目估算方法,参数建模是把下那个目的某些特征作为参数,通过建立一个数字模型预测项目成本。
在COCOMO模型中,工作量调整因子(Effort Adjustment Factor, EAF)代表多个参数的综合效果,这些参数使得项目可以特征化和根据COCOMO数据库中的项目规格化.每个参数可以定位很低,低,正常,高,很高.每个参数都作为乘数,其值通常在0.5到1.5之间,这些参数的乘积作为成本方程中的系数.
软件生命周期
软件的生命周期,亦称软件的生存周期。它是按开发软件的规模和复杂程度,从时间上把软件开发的整个过程(从计划开发开始到软件报废为止的整个历史阶段)进行分解,形成相对独立的几个阶段,每个阶段又分解成几个具体的任务,然后按规定顺序依次完成各阶段的任务并规定一套标准的文档作为各个阶段的开发成果,最后生产出高质量的软件。
软件生命周期共有6个阶段:
问题的定义及规划
需求分析
软件设计
程序编码
软件测试
运行维护
按照 SWEBok 的 KA 划分,本课程关注哪些 KA 或 知识领域?
15个领域中我们需要关注的是前三个领域:
Software requirements
Software design
Software construction
解释 CMMI 的五个级别。
Level 1 - Initail: 软件过程是无序的,有时甚至是混乱的,对过程几乎没有定义,成功取决于个人努力。管理是反应式的。
Level 2 - Managed: 建立了基本的项目管理过程来跟踪费用、进度和功能特性。制定了必要的过程纪律,能重复早先类似应用项目取得的成功经验。
Level 3 - Defined: 已将软件管理和工程两方面的过程文档化、标准化,并综合成该组织的标准软件过程。所有项目均使用经批准、剪裁的标准软件过程来开发和维护软件,软件产品的生产在整个软件过程是可见的。
Level 4 - Quantitatively managed: 分析对软件过程和产品质量的详细度量数据,对软件过程和产品都有定量的理解与控制。管理有一个作出结论的客观依据,管理能够在定量的范围内预测性能。
Level 5 - Optimizing: 过程的量化反馈和先进的新思想、新技术促使过程持续不断改进。
用自己语言简述 SWEBok 或 CMMI。
CMMI的全称是Capability Maturity Model Integration,中文翻译为能力成熟度模型。什么是能力成熟度模型呢?在我的理解里,它大概就是一系列的评估标准。它从各个方面对一个企业进行衡量,如果这个企业达到了它的标准,那么这个企业就是有能力的,成熟的企业。CMMI的前身是CMM,都是由SEI(Software Engineering Institute)制定的。
CMMI包括了5个等级,等级越高,成熟度越高,综合软件能力越强。所有的企业都满足第一等级,而从第二级到第五级,则有对应的指标去判断该企业能不能够达到这个等级。每达到一个等级,说明该企业满足了该等级以下的所有等级的所有要求。而每个等级之间的跨越难度也是不一样的。我认为这非常符合事物的发展规律,总有一段时期是比较艰难的,一旦你跨过去了,后面的发展又会相对轻松起来。每一个等级有若干个PA(Process Area),而每一个PA又有对应的若干目标(Goal),这意味着,一个企业要达到一个新的级别,必须满足这个级别的所有PA里面的所有目标。可以说,这不是一件容易的事。但我认为,正是这样的详细的标准,能够给一个企业最全面而细致的评估。
解释 PSP 各项指标及技能要求。
PSP有7个大指标:Planning, Development, Record Time Spent, Test Report, Size Measurement, Postmortem, Process Improvement Plan. 其中Development下面还有8个子指标:Analysis, Design Spec, Design Review, Coding Standard, Design, Coding, Code Review, Test.
Planning: 估计这个任务需要多少时间
-
Development:
Analysis:分析需求
Design Spec:生成设计文档
Design Review:设计复审 (和同事审核设计文档)
Coding Standard:代码规范 (为目前的开发制定合适的规范)
Design:具体设计
Coding:具体编码
Code Review:代码复审
Test:测试(包括自我测试,修改代码,提交修改)
Record Time Spent:记录时间花费
Test Report:测试报告
Size Measurement:计算工作量
Postmortem:事后总结
Process Improvement Plan:提出过程改进计划
因此一个软件工程师在接到任务之后,就应该按照上面的顺序和要求,进行工作。而为了这些工作,他除了需要编程的技能之外,还需要时间计划的技能;需要数据分析的技能以得出需求;需要扎实的文字技能,起码能够写出清晰明了的设计文档;还需要高效的沟通技能,不会沟通的工程师绝不是一个好的工程师;了解设计和编程规范;有足够的耐心记录时间并且善于总结。这些都是一个软件工程师应该具有的技能。
我打算使用大概的时间估计来记录这些数据。在每次工作的时候大概记录所用的小时数,特别的是,具体编码这一块则按照天数记录,以每天工作8小时为标准。