软件工程的定义

1993年,电气电子工程师学会(IEEE)给出了一个定义:"将系统化的、规范的、可度量的方法用于软件的开发、运行和维护的过程,即将工程化应用于软件开发中"。

阅读经典名著“人月神话”等资料,解释 software crisis、COCOMO 模型。

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

软件开发是一项高难度、高风险的活动,由于它的高失败率,故有所谓“软件危机”之说。软件危机的本源是复杂、期望和改变。这个术语用来描述正急遽增加之电脑的力量带来的冲击和可能要处理的问题的复杂性。

危机表现在几个方面:

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

软件危机的原因:

  • 软件是计算机的逻辑部件而不是物理部件。软件问题是在开发时期引入的而在测试阶段没能测出来的故障,修改软件故障要修改软件原来的设计。

  • 软件不同于一般程序,它的一个显著特点是规模庞大,而且程序复杂性将随着程序规模的增加而呈指数上升。为了在预定时间内开发出规模庞大的软件,必须由许多人分工合作,软件开发工作量随软件规模增大非线性增长。

  • 与早期软件开发个体化特点有关:认为软件开发就是写程序并设法使之运行,轻视需求分析和软件维护。也就是说是和软件开发和维护有关的许多错误认识和作法的形成,可以归因于在计算机系统发展的早期阶段软件开发的个体化特点。

  • 缺乏正确的理论指导。缺乏有力的方法学和工具方面的支持。由于软件开发不同于大多数其他工业产品,其开发过程是复杂的逻辑思维过程,其产品极大程度地依赖于开发人员高度的智力投入。由于过分地依靠程序设计人员在软件开发过程中的技巧和创造性,加剧软件开发产品的个性化,也是发生软件开发危机的一个重要原因。

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

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

软件生命周期

软件生命周期是指软件的产生直到成熟的全部过程。软件生命周期模型是指人们为开发更好的软件而归纳总结的软件生命周期的典型实践参考。

生命周期的每一个周期都有确定的任务,并产生一定规格的文档(资料),提交给下一个周期作为继续工作的依据。按照软件的生命周期,软件的开发不再只单单强调“编码”,而是概括了软件开发的全过程。软件工程要求每一周期工作的开始只能必须是建立在前一个周期结果“正确”前提上的延续;因此,每一周期都是按“活动 ── 结果 ── 审核 ── 再活动 ── 直至结果正确”循环往复进展的。

典型划分GB8567(4个时期7个阶段):

  1. 软件分析时期:问题定义、可行性研究、需求分析
  2. 软件设计时期:总体设计、详细设计
  3. 编码与测试时期:编码、测试
  4. 运行与维护时期

按照 SWEBok 的 KA 划分,本课程关注哪些 KA 或 知识领域?

ACM与IEEE Computer Society联合修定的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)
  • 软件工程专业实践(Software Engineering Professional Practice)
  • 软件工程经济(Software Engineering Economics)
  • 计算基础(Computing Foundations)
  • 数学基础(Mathematical Foundations)
  • 工程基础(Engineering Foundations)

本课程关注软件设计、软件测试、软件构型管理、软件工程管理、软件开发过程、软件质量等核心知识。

解释 CMMI 的五个级别。例如:Level 1 - Initial:无序,自发生产模式。

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

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

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

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

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

用自己语言简述 SWEBok 或 CMMI (约200字)

SWEBok描述了在软件工程中被普遍接受的知识。这些知识被分类为15个知识领域,涵盖了软件工程相关的基本概念,并附上了详细介绍这些知识的链接。SWEBok可以视为一个软件工程知识的菜单,由SWEBok我们可以知道“有什么方法可供使用”,再来决定“使用什么方法”。

CMMI是能力成熟度模型,被用来衡量团队能力。CMMI等级评价了软件开发团队的开发能力、项目管理水平。CMMI等级越高的团队,越有能力开发大型项目。值得注意的是,越高的CMMI等级,越是注重项目管理,如:

CMMI第5级包含第2级到第4级的20个流程领域外,增加:

  1. OPM:(Organizational Performance and Management)组织的绩效与管理,选择并推展渐进创新的组织过程和技术改善,改善应是可度量的,所选择及推展的改善需支持基于组织业务目的的质量及过程执行目标。
  2. CAR:(Causal Analysis and Resolution)因果分析与解决。识别缺失的原因并进行矫正,进一步的防止未来再次发生。

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

阅读《现代软件工程》的 PSP: Personal Software Process 章节。 http://www.cnblogs.com/xinz/archive/2011/11/27/2265425.html
按表格 PSP 2.1, 了解一个软件工程师在接到一个任务之后要做什么,需要哪些技能,解释你打算如何统计每项数据? (期末考核,每人按开发阶段提交这个表)

PSP 2.1

  • 计划(Planning)

    • 估计这个任务需要多少时间(Estimate)
  • 开发(Development)
    • 分析需求(Analysis)
    • 生成设计文档(Design Spec)
    • 设计复审 (和同事审核设计文档)(Design Review)
    • 代码规范 (为目前的开发制定合适的规范)(Coding Standard)
    • 具体设计(Design)
    • 具体编码(Coding)
    • 代码复审(Code Review)
    • 测试(包括自我测试,修改代码,提交修改)(Test)
  • 记录时间花费(Record Time Spent)
  • 测试报告(Test Report)
  • 计算工作量(Size Measurement)
  • 事后总结(Postmortem)
  • 提出过程改进计划(Porcess Improvement Plan)

需要的技能: 编写代码、单元测试、效能分析、编写文档

统计数据的方法:使用集中的时间段来做上述的步骤,方便计时。

系统分析与设计HW1的更多相关文章

  1. FPGA最小系统分析与电路设计

    <FPGA最小系统分析与电路设计> 部分节选自<FPGA应用开发入门与典型.pdf > FPGA最小系统包括:FPGA芯片.下载电路.外部时钟.复位电路和电源. 如果使用NIO ...

  2. 系统分析与设计个人作业:WordCount

    本次作业gitee地址:https://gitee.com/ackary/WordCount 一.项目简介 1.基础功能 基础功能部分主要实现的功能是统计一个程序设计语言源文件的字符数.单词数.行数, ...

  3. 文献综述十六:基于UML的中小型超市管理系统分析与设计

    一.基本信息 标题:基于UML的中小型超市管理系统分析与设计 时间:2016 出版源:Journal of Xiangnan University 文件分类:uml技术系统的研究 二.研究背景 开发一 ...

  4. 系统分析与设计lesson6

    | 分类 作业  | 1.用例建模 a. 阅读 Asg_RH 文档,绘制用例图. 按 Task1 要求,请使用工具 UMLet,截图格式务必是 png 并控制尺寸 b. 选择你熟悉的定旅馆在线服务系统 ...

  5. 奖学金评分系统(系统分析与设计版与Delphi实现代码)

    一.系统规划 1.1 项目背景介绍 在奖学金评比过程中,学生综合测评是学校普遍采用的评比手段.对学生实施综合素质测评的目的在于正确评价学生的综合素质,为评奖学金提供依据,实现学生教育管理工作的标准化. ...

  6. 系统分析与设计 homework2

    1. 简述瀑布模型.增量模型.螺旋模型(含原型方法)的优缺点. 瀑布模型 优点: 降低了软件开发的复杂度,提高软件开发过程中的透明性,提高软件开发的可管理性. 为项目提供了按阶段划分的检查点. 当前一 ...

  7. 系统分析与设计HW2

    简答题 1. 简述瀑布模型.增量模型.螺旋模型(含原型方法)的优缺点. 瀑布模型 优点: 定义了软件开发基本流程与活动. 为项目提供了按阶段划分的检查点. 当前一阶段完成后,只需关注后续阶段. 缺点: ...

  8. WordCount系统分析与设计作业

    Gitee项目地址 https://gitee.com/gitdq/homework psp表 PSP2.1 PSP阶段 预估耗时 (分钟) 实际耗时 (分钟) Planning 计划 10 10 · ...

  9. 系统分析与设计 homework-1

    1.软件工程的定义 软件工程是将系统化.规范化.可度量的方法应用于软件的开发.运营和维护上,也就是将工程方法应用于软件上,并对这些方法的研究. 2.软件危机(software crisis) 软件危机 ...

随机推荐

  1. 关于 i++ 和 ++ i

    先看一下代码,猜想一下输出值 @Testpublic void test() { int i =1; int a,b=0; i++; a=(i++); System.out.println(a); S ...

  2. Transposed Convolution 反卷积

    Transposed convolutions也称作fractionally strided convolutions(本人比较喜欢这个称呼,比较直观),Upconvolution,deconvolu ...

  3. container_of机制

    #include <stdio.h> #include <stdlib.h> /* 计算成员变量首部相对于结构变量首部的偏移量 */ #define offsetof(TYPE ...

  4. 【leetcode】1189. Maximum Number of Balloons

    题目如下: Given a string text, you want to use the characters of text to form as many instances of the w ...

  5. 25.复杂链表的复制(python)

    题目描述 输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针指向任意一个节点),返回结果为复制后复杂链表的head.(注意,输出结果中请不要返回参数中的节点引用,否 ...

  6. 015:URLs分层模块化

    URLs分层模块化: 经过上面的14节课程,大伙有没有发现一个问题:那就是随着的项目功能模块越来越多,所有url匹配都写在一个urls.py文件中,其结果是:文件长,看着心累——需要分门别类:因此能不 ...

  7. css-div中文字过多(内容超出div宽度)后自动换行

    故事是这样的: 买家秀:(refuse)                                                                                ...

  8. jQuery_完成表格的隔行换色

    表格的颜色一样不利于区分,而利用jQuery则可以很方便的进行表格的隔行换色操作,原表如下: 这样看着很不方便,但是隔行换色之后非常便捷清楚. 代码如下: <!DOCTYPE html> ...

  9. sqli-labs(11)

    基于登录点的注入(小编这里傻逼了 可以直接用group_concat函数绕过显示问题我还在用limit绕过) 0X01这里我们的参数就不是在get的方法里面提交的了  我们遇到了全新的问题 那么该怎么 ...

  10. the path component: '/var' is world-writable

    java.io.IOException: the path component: '/var' is world-writable.  Its permissions are 0666.  Pleas ...