系统分析与设计hw_01

系统分析与设计hw_01

软件工程的定义

软件工程是研究和应用如何以系统性的、规范化的、可定量的过程化方法去开发和维护软件,以及如何把经过时间考验而证明正确的管理技术和当前能够得到的最好的技术方法结合起来。

解释 software crisis、COCOMO 模型。

software crisis

软件危机是指在计算机软件的开发和维护过程中所遇到的一系列严重问题。

软件危机是落后的软件生产方式无法满足迅速增长的计算机软件需求, 从而导致软件开发与维 护过程中出现一系列严重问题的现象。 这些严重的问题阻碍着软件生产的规模化、商品化以及生产效率,让软件的开发和生产成为制约软件产业发展的“瓶径”。

COCOMO 模型

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

构造性成本模型由三个不断深入和详细的层次组成:
“基本COCOMO”,适用对软件开发进行快速、早期地对重要的方面进行粗略的成本估计,但因其缺少不同的项目属性(“成本驱动者”)的因素,所以准确性有一定的局限性。
“中级COCOMO”中考虑进了这些成本驱动者。
“详细COCOMO”加入了对不同软件开发阶段影响的考量。

软件生命周期

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

生命周期是事物发展的客观规律,软件同样存在生命周期。早期的软件生命周期往往是说“软件从计划、需求开始,经历分析设计、实现、部署、维护,直到最后逐渐消亡的”。这是受到了第一个软件生命周期模型—瀑布模型1影响,上述语句实质上简要的描述了瀑布型生命周期。 现在的软件生命周期不再只考虑瀑布型生命周期,另外常见的软件生命周期模型有原型模型、螺旋模型2、迭代模型。所以现在的软件生命周期说明应当不再包括瀑布型生命周期中的典型阶段。

SWEBok 的 KA 划分

SWEBOK = Software Engineering Body of Knowledge

  • 软件需求(Software requirements)
  • 软件设计(Software design)
  • 软件建构(Software construction)
  • 软件测试(Software test)
  • 软件维护与更新(Software maintenance)
  • 软件构型管理(Software Configuration Management, SCM)
  • 软件工程管理(Software Engineering Management)
  • 软件开发过程(Software Development Process)
  • 软件工程工具与方法(Software Engineering Tools and methods)
  • 软件质量(Software Quality)

CMMI 的五个级别

  1. Level 1 - Initial:
    初始级。软件过程是无序的,有时甚至是混乱的,对过程几乎没有定义,成功取决于个人努力。管理是反应式的。

  2. Level 2 - Managed:
    可管理级。建立了基本的项目管理过程来跟踪费用、进度和功能特性。制定了必要的过程纪律,能重复早先类似应用项目取得的成功经验。

  3. Level 3 - Defined:
    已定义级。已将软件管理和工程两方面的过程文档化、标准化,并综合成该组织的标准软件过程。所有项目均使用经批准、剪裁的标准软件过程来开发和维护软件,软件产品的生产在整个软件过程是可见的。

  4. Level 4 - Quantitatively Managed:
    量化管理级。分析对软件过程和产品质量的详细度量数据,对软件过程和产品都有定量的理解与控制。管理有一个作出结论的客观依据,管理能够在定量的范围内预测性能。

  5. Level 5 - Optimizing: 优化管理级。过程的量化反馈和先进的新思想、新技术促使过程持续不断改进。

SWEBok

SWEBok列出了软件工程的核心知识的各个方面,包括 软件需求、软件设计、软件建构、软件测试、软件维护与更新、 软件构型管理、软件工程管理、软件开发过程、软件工程工具与方法、软件质量。
这对于让软件工程成为一个正式的、被认可的工程职业有着里程碑式的意义。明确的知识体系指南可以引导全球各个地方有意的软件行业步入规范化的运行状态,而不是无序自发式的发展。
同时,一个完整的知识架构可以使软件工程对应的基础教育和专业教育相对迅速地发展起来,也对软件开发的评测提供了方向。


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

系统分析与设计hw_01

所需技能成长

  1. 知识: 对具体技术的掌握, 动手能力
    例如: 对Java, C/C++/C#, 诊断/提高效能的技术, 对device driver, kernel debugger 的掌握;对于某一开发平台的掌握。

  2. 经验: 对问题领域的知识和经验的积累 (例如: 对于医疗行业的了解, 对于金融行业的了解)。

  3. 通用的软件设计思想, 软件工程思想的提高
    这一方面就比较虚,什么是好的软件设计思想, 什么是好的软件工程思想? 一个工程师开了博客, 转发了很多别人的文章, 这算有思想么? 另一个工程师坚持任何设计都要画 UML 图, 这算有思想么? 我个人比较重视一个程序员原创的博客, 在面试的时候, 我们别空口吹思想, 一起来看看你写的原创博客吧。

  4. 职业技能 (区别于技术技能)
    职业技能包括: 自我管理的能力; 表达和交流的能力; 与人合作的能力; 把任务按质按量完成的执行力; 这些能力在IT 行业和其它行业都很重要。

打算如何统计每项数据

利用代码管理平台Github和一些共享文档平台(可多人共同编辑保存)进行代码的管理和文档的管理,可以清晰地获取每次管理操作的时间,到项目结束时可方便统计并观察项目各个阶段的情况。