View on GitHub

软件系统分析与设计指南

The documents about Software Analysis & Design Team Work

软件的本质与软件工程科学

1、基本概念

1.1 软件工程定义

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

1.2 软件危机与软件工程历史

software crisis/软件危机 术语在 1968 年第一届软件工程大会提出。计算机的发展导致软件危机,软件工程的目标就是克服软件危机,构建生产软件的方法与知识体系。 1972年,Edsger Dijkstra 指出计算能力约强大,编程越是大问题。

“Cost Model” 软件规模(Software Size)估算模型由 Barry W. Boehm 在 1970 年首次提出, COCOMO又称为(Constructive Cost Model)成为估算衡量成本(复杂性)的重要工具。该模型是指数模型,即软件成本与代码行或功能点数量成指数关系。

计算能力按摩尔定律发展,软件处理的问题也越来越广、越来约复杂,因此软件生产不只是编程技术问题,需要有系统化、与时俱进的软件工程方法,才能规避 software crisis !

1.3 软件的本质

Fred Brooks 是 IBM 360 计算机架构师,负责 360/OS 与工具的开发。它总结了大型软件开发的经验,在 1975 年出版了 “The Mythical Man-Month” 软件工程的经典著作,中文翻译 人月神话。首次分析了软件生产的本质以及当时适用解决“大型”软件开发问题的的实践,又称为“ Brooks’ law”。

软件的本质决定了软件开发的困难,Brook 总结其本质特性为四个:

  1. complexity 复杂性
  2. conformity 一致性
  3. changeability 可变性
  4. invisibility 不可视性

在上述基础上 IEEE 强调了 软件工程与其他工程相比的特殊性,这里仅给出一些与课程相关的特点

前3条指出在不一致、不可视、易于变化的环境下定义软件定义(需求)风险。
接着3条是需要面对的各种设计风险,不仅要能满足软件的变化,而且软件的非功能性需求的实现成本远远高于功能实现成本。
最后一条是做工程做要理解的之一,软件分析不是发现更多的功能与需求,而是确认有效的功能与需求,去伪存真不断满足客户需要。软件设计也不是追求最先进技术,而是控制变化附加的成本,使得软件生产的预算、时间等能在掌控之中。

1.4 软件工程知识体系(SWEBoK)

为了克服软件危机,IEEE Computer Society 构建软件生产的最佳实践与相关知识的框架,称为 Software Engineering Body of Knowledge。指导软件工程人才的培养与学科建设。

2014 V3 版的 SWEBoK 将知识分为软件工程实践和基础教育两个部分,共 15 个知识域(knowledge areas / KAs)。Software Requirements,Software Design 是其中最重要的两个领域。

从实践的角度,Software Engineering Process 从时间维度给出了项目的过程模型(Process Models),其它则从内容角度给出了原则与方法。这样,就得到沿时间轴的二维表,这样软件工程就变成了在什么时刻、工作目标、应该做什么、怎么做的 最佳实践指南

软件生命周期(Life Cycle):在时间维度,对软件项目任务进行划分,又成为软件开发过程。常见有瀑布模型、螺旋模型、敏捷的模型等。

因此,软件工程实践包含过程、方法、工具三个要素:

1.5 能力成熟度模型集成(CMMI)

SWEBoK 不合适度量一个企业的软件工程能力。出于成本的因素,企业在不同阶段难以完全遵循软件工程规范去做事。例如:

软件能力成熟度模型(Capability Maturity Model for Software / CMM)或 CMMI,正好迎合和企业发展的需求。它通过使用知识(能力)的不同,用不同级别表示开发企业的成熟性,不仅给出了企业能力提升的路径,也给出了企业能力评估的事实标准。

1.6 软件工程相关标准

ISO 9000 系列 质量管理体系。基本思想是通过标准化生产行为,保障并提升产品质量。其核心是 PDCA 循环模型的建立与实施。

案例研究:假设有企业为学校提供课堂教学设备保障和打扫厕所业务,使用如下方法,可以检查该企业是否达到 ISO 9000 要求:

PDCA 检查 设备巡检 厕所清洁
Plan 检查巡检流程和标准文档 检查清洁的流程与标准文档
Do 访谈工作人员,现场观摩 访谈工作人员,现场观摩
Check 检查巡检记录,设备故障等记录 检查清洁日志
Act 检查每月故障分析统计与问题分析 检查督察记录与问题分析

如果这个企业都能按 自己制定 的标准生产产品或提供服务,则质量是可信的。教室内一个打勾的简单表格、厕所内打卡记录,这些简单、可行的标准化措施提升了无数企业的能力。

ITIL IT服务管理标准,支持IT服务的持续改进。企业购买软件和硬件,并不关注它的技术先进,而是关注能否帮助企业达成业务目标(见效果)。特别是在线业务的发展,软件开发与软件服务的收益差距日益变大,IT行业的顶层企业 99% 都是业务或技术服务企业。利用标准化提升IT设施的服务能力,有效支撑业务目标实现。

COBIT (Control Objectives for Information and Related Technologies)框架,一种以目标管理为核心的方法,比较合适IT为核心的服务企业的治理。COBIT5 简介

内容包括:

The process focus of COBIT is illustrated by a process model that subdivides IT into four domains (Plan and Organize; Acquire and Implement; Deliver and Support; and Monitor and Evaluate) and 34 processes inline with the responsibility areas of plan, build, run, and monitor.

软件工程文档标准

1.7 最佳实践管理工具

最佳实践管理工具属于知识管理工具。在知识密集型企业(如 IT企业、咨询服务企业、行政服务等)、人力资源流动频繁的企业,尤其重要。常用的有:

  1. 维基(Wiki)
  2. 论坛(BBS),或问答(如 StackOverflow,知乎)
  3. 博客(Wordpress)

2、作业

1、简答题

2、PSP 2.1 (不需要提交)

3、系统化与标准化实践(思考题,不需要提交)

参考软件工程系统化、规范化的建设思路,如图所示:

设计 XX 社团系统化、规范化管理方案。如何搭建社团最佳实践平台支持规范的实施?

参考资料

  1. Software engineering, https://en.wikipedia.org/wiki/Software_engineering
  2. SWEBoK,https://www.computer.org/web/swebok/index
  3. Fred Brooks《人月神话》
  4. 邹欣,《现代软件工程讲义》,https://www.cnblogs.com/xinz/archive/2011/11/27/2265425.html