tags: 博客

软件工程的定义

软件工程:(1)将系统化、规范化、可度量的 方法应用与软件的开发、运行和维护的过程, 即将工程化应用于软件中。(2)对(1)中所述方法 的研究

software crisis

六十年代以来,随着计算机应用需求的驱动,系统 软件和应用软件有很大的发展,如操作系统,编译系 统和大型应用软件等。由于软件生产的复杂性和高成 本,使大型软件的生产出现了很大的困难,即出现软 件危机。 软件危机(英语:Software Crisis)是早期计算机科学的一个术语[1],是指在软件开发及维护的过程中所遇到的一系列严重问题,这些问题皆可能导致软件产品的寿命缩短、甚至夭折。

软件危机其原因,衔接到硬件的整体复杂度,与软件开发流程。危机表现在几个方面:

  • 项目运行超出预算。
  • 项目运行超过时间。
  • 软件质量低落。
  • 软件通常不匹配需求。
  • 项目无法管理,且代码难以维护。

人月神话提到 IBM OS/360操作系统是一个典型的软件危机案例,它是第一个超大型的软件项目,它使用了1000人左右的程序员,在作者管理这个项目中,犯了一个价值数百万美元的错误。

COCOMO 模型(Constructive Cost Model)

构造性成本模型(COCOMO,英文全称为Constructive Cost Model)是由巴里·勃姆(Barry Boehm)提出的一种软件成本估算方法。这种模型使用一种基本的回归分析公式,使用从项目历史和现状中的某些特征作为参数来进行计算。 估算软件规模

软件生命周期(Software Develop Life Cycle/SDLC)

是指软件的产生直到成熟的全部过程。

瀑布模型 Waterfall model

软件从计划、需求开始,经历分析设计、实现、部署、维护,直到最后逐渐消亡的。瀑布模型要求软件严格按照上述的流程进行。它具有严格的流程,若软件按照流程执行,则会有很强的执行力和逻辑性,然而,一旦回溯,所花费的时间会爆炸性增长。

其余常见模型

  • 螺旋模型:它兼顾了快速原型的迭代的特征以及瀑布模型的系统化与严格监控。螺旋模型在每个迭代阶段都植入软件测试,使每个阶段的质量得到保证。但同样,在每次迭代过程中都需要通过风险分析,一旦风险分析出现偏差将造成重大损失。
  • 迭代模型:是一种与传统的瀑布式开发相反的软件开发过程,它弥补了传统开发方式中的一些弱点,具有更高的成功率和生产率。

SWEBok

The published version of SWEBOK V3 has the following 15 knowledge areas (KAs) within the field of software engineering:

  • Software requirements
  • Software design
  • Software construction
  • Software testing
  • Software maintenance
  • Software configuration management
  • Software engineering management
  • Software engineering process
  • Software engineering models and methods
  • Software quality
  • Software engineering professional practice
  • Software engineering economics
  • Computing foundations
  • Mathematical foundations
  • Engineering foundations

本课程关注的key area有

  • software requirements
  • software construction
  • Software engineering process
  • Software engineering models and methods

CMMI 能力成熟度模型

  • L1:CMMI一级,完成级。在完成级水平上,企业对项目的目标与要做的努力很清晰。项目的目标得以实现。因此,任务是完成了。 但是由于任务的完成带有很大的偶然性,企业无法保证在实施同类项目的时候仍然能够完成任务。企业在一级上的项目实施对实施人员有很大的依赖性。
  • L2:CMMI二级,管理级。在管理级水平上,企业在项目实施上能够遵守既定的计划与流程,有资源准备,权责到人,对相关的项目实施人员有相应的培训,对整个流程有监测与控制,并与上级单位对项目与流程进行审查。企业在二级水平上体现了对项目的一系列的管理程序。这一系列的管理手段排除了企业在一级时完成任务的随机性,保证了企业的所有项目实施都会得到成功。
  • L3:CMMI三级,定义级。在定义级水平上,企业不仅仅能够对项目的实施有一整套的管理措施,并保障项目的完成;而且,企业能够根据自身的特殊情况以及自己的标准流程,将这套管理体系与流程予以制度化。这样,企业不仅能够在同类的项目上得到成功的实施,在不同类的项目上一样能够得到成功的实施。科学的管理成为企业的一种文化,企业的组织财富。
  • L4:CMMI四级,量化管理级。在量化管理级水平上,企业的项目管理不仅仅形成了一种制度, 而且要实现数字化的管理。对管理流程要做到量化与数字化。通过量化技术来实现流程的稳定性,实现管理的精度,降低项目实施再质量上的波动。
  • L5:CMMI五级,优化级。在优化级水品上, 企业的项目管理达到了最高的境界。企业仅仅能够通过信息手段与数字数手段来实现对项目的管理, 而且能够充分利用信息资料,对企业在项目实施的过程中可能出现的次品予以预防。能够主动地改善流程,运用新技术,实现流程的优化。
  • 由上述的五个台阶我们可以看出,每一个台阶都是上面一阶台阶的基石。要上高层台阶必须首先踏上较低一层台阶。企业在实施CMMI的时候,路要一步一步地走。一般地讲,应该先从二级入手。在管理上下功夫。争取最终实现CMMI的第五级。

简述SWEBok

SWEBok,软件工程知识体系,是一个IEEE计算机协会颁布的国际标准,对软件工程所需的知识结构化。最新的V3标准相比以前关注的软件工程工具,更突出架构设计、模型和管理部分。SWEBok提供了入门化课程的内容,软件工程的认证标准,完成度定义和评价,软件产业的具体归类,以及最终实践的标准。作为一个软件工程师,应当知晓SWEBok的完整结构,对软件工程有一个整体性的认识,并按照SWEBok给出的KA学习。

解释 PSP 各项指标及技能要求

PSP2.1

  • Planning 计划
    • Estimate 估计这个任务需要多少时间
  • Development 开发
    • Analysis 分析需求
    • Design Spec 生成设计文档
    • Design Review 设计复审
    • Coding Standard 代码规范
    • Design 具体设计
    • Coding 具体编码
    • Code Review 代码复审
    • Test 代码测试
  • Record Time Spent 记录时间花费
  • Test Report 测试报告
  • Size Measurement 计算工作量
  • Postmortem 事后总结
  • Process Improvement Plan 提出过程改进计划

一个软件工程师在接到一个任务后,首先对整个任务进行评估,也即是规划,对任务的难度,可行性进行分析。接下来具体设计任务,对任务进行具体编码和测试。最后,对任务完成的情况以及待改进的地方进行说明。

在具体的执行中,可以对每一项事情所花费的时间进行统计。

Ref

https://en.wikipedia.org/wiki/COCOMO https://en.wikipedia.org/wiki/Software_Engineering_Body_of_Knowledge https://en.wikipedia.org/wiki/Capability_Maturity_Model_Integration http://www.cnblogs.com/name-lh/archive/2006/03/13/349232.html