XXXX项目管理目标(某项目实施后基于软件工程的总结)
(注:此文作于2007年,算是个缅怀,或者是个吐槽。所有注都是本次发表新加的。原文中的省略号就是原文,并非删减。)
目录
一、序
二、态度问题
三、问题点
3.1 项目过程管理的问题
3.2 配置管理的问题
3.3 资源管理的问题
3.4 软件设计和编码的问题
3.5 交流和协作问题
3.6 其他问题
四、目标
4.1 明确项目管理机制
4.2 明确小组负责人的责任
4.3 明确使用版本控制进行配置管理
4.4 资源管理问题
4.5 设计和编码问题
4.6 交流和协作问题
4.7 其他问题
一、序
XXXX项目已经完成YF上线及……,这个项目是……对……具有重大的意义,在……的正确领导下……全体同志……艰苦奋斗……不怕牺牲……深入贯彻……三个……八X八X……,取得……重大成就……获得……经济效益……社会效益……精神文明和经济建设双丰收(热烈鼓掌)!
在项目开发和施工过程中也暴露出的一些管理和技术上的问题,考虑到未来的产品升级和全省推广,这些问题会对工作的顺利进行带来更大的影响,我们认为有必要加强项目管理、改进管理手段、规范开发过程。
二、态度问题
态度决定一切
——米卢蒂若维奇(唯一带领中国国家男子足球队进入世界杯决赛圈的主教练)
本文不打算讨论长征胜利的伟大意义,也不打算讨论女排精神曾经在社会生活中发挥的巨大作用,更不打算讨论高速增长的GDP与全球能源危机的关系。本文仅讨论XXXX项目目前存在的问题和期望的目标以及探讨一些达成目标所涉及的技术。
注意,本文不打算谈论任何我们已经获得的成就和已经付出的汗水,本文只讨论存在的问题,如果讨论问题让你觉得不快,那么是你打开了错误的文件,请关闭本文件然后删除(技巧:删除文件时按住Ctrl键将不经过回收站而直接删除)。
尽管本文谈论的都是问题,但没有人应当被指责。平心而论(微软拼音输入法推荐这个词,也许微软错了……),我们做得不算够好,但也不算够糟。至少我们看到周围很多项目做得比我们糟糕,也有一些做得比我们好。我们还要考虑政治因素,以我们的企业性质,我们受到比别人更多的政治因素的影响,在难以改变的政治环境之下,也许我们还有提高的空间。
无论如何,承认问题是解决问题的第一步。
三、问题点
3.1 项目过程管理的问题
1. 项目进度不清楚,有最终上线日期,但缺少(可验证的)阶段目标。
2. 任务缺乏有效安排,工作强度在0%(完全空闲)和400%(不吃饭不睡觉也无法按时完成)的范围内波动。
3. 争吵不足。缺乏设计阶段的讨论和评审使设计缺陷在整合阶段才发现,难以纠正。
4. 缺乏有效文档。文档不是为了后续工作,而是为了应付客户(客户喜欢被糊弄?这是个政治问题)。
5. 一个子系统对接口做了变更,没能有效地通知到其他子系统。
3.2 配置管理的问题
1. CVS成了摆设,有些人什么也不放。
2. CVS成了垃圾堆,有些人把什么都往上放。
3. 源代码没有受控,多人共享一个拷贝,并不以CVS为准。
4. 新写的代码在不同服务器同步数据时被错误覆盖,只能重写。(有人郁闷得想自杀)
3.3 资源管理的问题
1. 关键表数据被误清除,而且无法知道是谁做的,只能重新运行程序。
2. 系统中的垃圾越来越多,没人认领,又不敢删除。
3. 因空间不足有些人擅自删除了别人的东西。
4. 怀疑关键程序被随意运行。
5. 怀疑关键进程被手工终止。
6. 开放建表权限时随意建表,不要的不删除。
7. 限制建表权限时建表过程过于繁琐。
3.4 软件设计和编码的问题
1. 编码不规范,编程风格从58年到99年不等,缺少命名规则。
2. 手工工作太多,缺乏辅助程序。当你要分别去查多张表的时候,你就需要一个辅助程序,比如一个视图或存储过程。
3. 系统缺少总体设计,在很大程度上仍沿延续了旧系统的各自独立的设计方法。比如一批、二批这样的划分。
4. 前后台脱节,前台总是依据数据模型开发,错了,前台要依据业务模型。
5. 先实现子系统,然后才讨论系统的整合。可预见的后果。
6. 测试不足,缺乏管理,测试过于随意。
3.5 交流和协作问题
1. 两人用不同的方法修正同一个配置,结果还是错的。
2. 信息共享不足,有些人会开发别人已经开发过的小功能。
3. 知识共享不足,有些人会为某个问题困挠一整天甚至好几天,另一个人知道为什么。
3.6 其他问题
1. 法律问题:源代码的版权声明基本上都是胡写的。
2. 没人性,让女生通宵熬夜。
四、目标
上述所有的问题都不是孤立的,管理投入的不足……技术经验的不足……缺乏正规训练……政治问题……制度问题……态度问题……文化问题……历史问题……美中关系问题……登月计划……
1. 企业不是搞民主的地方
2. 要自上而下的改革
3. 没有人的参与,一切自动化管理工具都是扯淡
4. 历史是个包袱,改革永远面临大多数人的阻力
4.1 明确项目管理机制
项目经理对项目进度进行管理,项目被分为可验证的几个阶段,每个阶段的完成都要有有效的验证。使用较细致的任务分解结构。项目经理管理小组负责人。
重要设计由项目经理组织评审,重要争议应在评审会议上解决,评审结论在评审会议上做出。不能议而不决。评审会议参与人员应尽可能扩大化。评审会议之前应有若干个小型讨论会议。
项目经理(责成各小组负责人制定小组的开发规范并汇总)制作项目开发规范。各小组的开发以项目开发规范为准,不可随意变更。项目经理监督项目开发规范的执行。
需要一个版本控制系统管理员、UNIX管理员和一个ORACLE管理员。
据说从CMM1级到CMM2级需要18个月加上50万美元成本,天知道是谁说的……
4.2 明确小组负责人的责任
小组负责人对项目经理负责,安排小组工作计划,核实小组工作进度,检查小组工作产出。小组负责人应清楚地了解本小组的所有模块、设计、产出,并大致了解所有代码。
重要设计应进行讨论、评审,形成正规文档。小组负责人应审核本小组的所有产出(包括代码、文档、数据等)。
4.3 明确使用版本控制进行配置管理
配置管理员(SCM工程师)通过版本控制系统管理项目的所有产出,包括但不仅限于代码、可执行程序、数据库结构、数据、脚本、可执行程序、文档、会议记要、评审报告、培训材料、重要邮件。
版本控制系统是获取项目文件的唯一方式。
SCM工程师复负责审查版本控制系统的数据是否符合要求,存在于版本控制系统的每个文件都应有说明,不允许随意添加文件,应能正确区分当前有效的和已过期的文件。
每个人都要理解版本控制系统里的东西才是被认可的,任何东西在提交之前都不被承认,要想理解这一点必须让每个人都使用独立的身份在独立的位置进行开发,不能共享同一个拷贝。
VSS比CVS好用得多,但DCN接入时不能访问Windows网络,可考虑责成系统组解决这个问题(理论上不应有此限制)。
SAMBA服务也可能提供有效的帮助。Samba是UNIX服务,可将UNIX机器加入Windows网络。
ORACLE的版本控制可通过导出数据库脚本的方式进行,脚本可以方便地用版本控制软件比较差异。原则上PowerDesigner或VISIO文件属于设计文档,不应该用来做版本控制。(PowerDesigner我不是很懂,也许我说的不对……)。静态数据也可以通过导出脚本或SQL*Loader的导出文件进行版本控制。
4.4 资源管理问题
必须能够正确区别用户身份。每个人拥有唯一的UNIX主机用户、ORACLE数据库用户、版本控制系统用户、其他。如果能够统一这三+X者当然是最理想的,至少微软公司的产品可以做到。
UNIX主机用户可以使用组获得适当的权限,在自己的主目录工作,源代码来自版本控制系统。这个容易做到而且(理论上)必须做到。
ORACLE数据库用户可以通过角色和同名获得适当的资源,也许需要编写很多管理脚本,ORACLE愚蠢不是我的错……
版本控制系统用户一般只能有提交权,删除和添加都是受限的,销毁历史的权限只能由管理员掌握。
不允许不设密码。密码被盗用至少要负连带责任。
4.5 设计和编码问题
使用编码规范。
统一命名约定。
任何全局名称的命名必须经过评审。全局名称包括代码里的模块名、类名、全局变量名、全局函数名、数据库的表名、过程名等。
加强设计。对设计草案进行讨论,对设计进行评审。尽可能扩大参与范围(CMM3级称之为同行评审)。
前台参与业务。以业务需求为依据进行前台设计。
要有起码的文档。
改进测试。
4.6 交流和协作问题
定期会议。了解相互的工作,提出技术问题。
可共享的信息文档化。项目的公共库必须文档化。
4.7 其他问题
法律问题由项目经理解决。
加班问题由项目经理以上级解决。
(完,不过后面还有个隐藏内容)
----------------------------------------------------------------------------
直接删除文件的技巧不是按住Ctrl键,我是故意写错的,如果你删掉了下午要提交给总裁的报告,我可不想让你把责任推卸给我。
(这里是结束)
相关文章:

XXXX项目管理目标(某项目实施后基于软件工程的总结)
(注:此文作于2007年,算是个缅怀,或者是个吐槽。所有注都是本次发表新加的。原文中的省略号就是原文,并非删减。) 目录 一、序 二、态度问题 三、问题点 3.1 项目过程管理的问题 3.2 配置管理的问题 …...

连新手小白都知道的电子画册一键生成器,你还不知道吗?
相信大家平时见得比较多的是纸质画册,而对于电子画册大家又了解多少呢?电子画册近年来倍受众多企业青睐,制作一本好的电子画册能够让企业在市场竞争中脱颖而出,给人以深刻印象。如何制作呢? 其实很简单,关…...

JAVAEE初阶 操作系统
操作系统的相关知识 一.操作系统的定位二.操作系统的作用三.什么是进程/任务1.进程在系统中如何操作和管理 四.PCB中的核心属性1.pid2.内存指针3.文件描述符表 五.CPU1.cpu的特性:分时复发 六.PCB中进行调度的属性1.状态2.优先级3.记账信息 一.操作系统的定位 二.操作系统的作用…...

第四代智能井盖传感器:万宾科技智能井盖位移监测方式一览
现在城市化水平不断提高,每个城市的井盖遍布在城市的街道上,是否能够实现常态化和系统化的管理,反映了一个城市治理现代化水平。而且近些年来住建部曾多次要求全国各个城市加强相关的井盖管理工作,作为基础设施重要的一个组成部分…...

了解JS中的混个对象“类”
类是面向对象的设计模式,它包括实例化、继承和多态 1、理论 面向对象变成强调的是数据和操作的行为本质上是相互关联的,因此好的设计就是把数据以及和他相关的行为打包(封装)起来,我们也叫他数据结构。 类的一个核心…...

在Sprinng Boot中使用Redis充当缓存
关于我们使用EhCache可以适应很多的应用场景了,但是因为EhCache是进程内的缓存框架,在集群模式下,我们在我们的应用服务器或者云服务器之间的缓存都是独立的。故而在不同的服务器之间的进程会存在缓存不一致的情况,就算我们的EhCa…...

【网络】TCP协议的相关实验
TCP协议的相关实验 一、理解listen的第二个参数1、实验现象2、TCP 半连接队列和全连接队列3、关于listen的第二个参数的一些问题4、SYN洪水Ⅰ、什么是SYN洪水攻击Ⅱ、如何解决SYN洪水攻击? 二、使用Wireshark分析TCP通信流程 一、理解listen的第二个参数 在编写TCP…...

微服务测试怎么做
开发团队越来越多地选择微服务架构而不是单体结构,以提高应用程序的敏捷性、可扩展性和可维护性。随着决定切换到模块化软件架构——其中每个服务都是一个独立的单元,具有自己的逻辑和数据库,通过 API 与其他单元通信——需要新的测试策略和新…...

第9章 K8s进阶篇-持久化存储入门
9.1 k8s存储Volumes介绍 Container(容器)中的磁盘文件是短暂的,当容器崩溃时,kubelet会重新启动容器,但最初的文件将丢失,Container会以最干净的状态启动。另外,当一个Pod运行多个Container时&…...

MathType2024最新word公式编辑器
使用word进行论文编写时,常需要使用公式编辑器,但有些word中并没有公式编辑器,这时应该怎么办呢?本文将围绕word里没有公式编辑器怎么办,word中的公式编辑器怎么用的内容进行介绍。 一、word里没有公式编辑器怎么办 …...

英语语法 - 主语从句
[ 主语从句 ] 没有时态要求 | 三单 1. 从属连词 that 引导的主语从句 | 不做句子成分 | 没有意义 That a monster attacked a ship last week shocked the world. That I bought a house in Beijing shocks many people. That Oscar is rich makes us upset. That he didnt wa…...

千梦网创:实现自动化“挂机躺盈”的三种方法
在互联网众多行业中,有很多人一直在寻找所谓的“挂机躺盈”的项目,在理财领域这种收入被称为“被动收入”。 天上不会掉馅饼这是一句讲烂掉的话了,躺在家里吃白食等着钱进账是一件不可能的事情。 然而如果你看到身边有“被动收入”的例子&a…...

微信小程序页面传递参数方法
说明 页面跳转方法有很多中,但经常会通过一个页面传递参数给另一个页面,非常的常见。但数据量大的时候,通常用字符串传递,但会显得过于臃肿,下面介绍页面传递参数的各种方式。 一、页面跳转链接携带参数 例如…...

出行类app如何提升广告变现收益?
出行类APP已经成为越来越多人们出行的首选,出行类app在变现方式上存在以下痛点:APP功能单一、使用场景单一;用户使用时间集中,粘性低...这些痛点使得开发者获取收益的提升面临极大的挑战。 https://www.shenshiads.com 如何让出…...

万能在线答题考试小程序源码系统 既能刷题 又能考试 带完整的搭建教程
现如今,线上学习和考试已经成为一种趋势。近年来,移动端的普及以及微信小程序的兴起,使得在线答题考试系统变得更加便捷和高效。今天罗峰就来给大家介绍一款万能在线答题考试小程序源码系统,既能刷题,又能考试…...

《Linux从练气到飞升》No.30 深入理解 POSIX 信号量与生产消费模型
🕺作者: 主页 我的专栏C语言从0到1探秘C数据结构从0到1探秘Linux菜鸟刷题集 😘欢迎关注:👍点赞🙌收藏✍️留言 🏇码字不易,你的👍点赞🙌收藏❤️关注对我真的…...

高防IP可以抵御哪些恶意攻击
高防IP协议可以隐藏用户的站点,使得攻击者无法发现恶意攻击的目标网络资源,从而提高了源站的安全性。能够有效抵御常见的恶意攻击类型ICMPFlood、UDPFlood、 TCPFlood、SYNFlood、ACKFlood等,帮助游戏、金 融、电子商务、互联网、政企等行业抵…...

vivado产生报告阅读分析6-时序报告2
1、复查时序路径详情 单击“ OK ”运行报告命令后 , 将打开一个新窗口。这样您即可复查其中内容。在其中可查看执行选定的每种类型 (min/max/min_max ) 的分析之后所报告的 N 条最差路径。 下图显示的“Report Timing ” ( 时序报告 ) 窗口…...

电脑怎么备份文件?简单几步,轻松备份!
电脑中存储着大量的个人和工作文件,包括照片、文档、音乐和视频等。但突发状况,如硬件故障、病毒感染或误删文件,可能会导致数据丢失。因此,备份文件至关重要。在本文中,我们将介绍三种电脑怎么备份文件的方法…...

获得不同干扰程度的模糊图像
同时对一共父级文件夹遍历。获得对应不同干扰程度的模糊图像 # This isimport cv2 import numpy as npdef reduce_resolution(image, factor):height, width, _ image.shape # 获取原始图像的宽度和高度new_width int(width / factor) # 计算新的宽度和高度new_height i…...

spring为什么要使用三级缓存来解决循环依赖
出现循环依赖的原因 AService依赖BService Service("aService") public class AService {AutowiredBService bService; } BService依赖AService Service("bService") public class BService {AutowiredAService aService; } 此时就出现了循环依赖 想…...

【自留地】前端 - uniapp - Vue - React - Flutter
uniapp uniapp自用速查表 - 我的常用组件 uniapp自用速查表 - 我的常用组件_uniapp static/customicons.css-CSDN博客文章浏览阅读1.8k次。uniapp项目登录退出、全局变量与状态、本地存储、Tabbar标签栏、顶部导航栏、下拉刷新、触底刷新、Ajax交互、内置组件样式修改、自定义…...

深度学习损失函数
Loss 是深度学习算法中重要的一部分,它的主要功能是评价网络预测的准确性和指导权重更新。合适 Loss 可以让网络收敛更快,预测更准。这个项目介绍了损失函数的基本概念以及7种常用损失函数的形式,性质,参数,使用场景及…...

百度智能云正式上线Python SDK版本并全面开源
文章目录 前言一、SDK的优势二、千帆SDK:快速落地LLM应用三、如何快速上手千帆SDK3.1、SDK快速启动3.2. SDK进阶指引 3.3. 通过Langchain接入千帆SDK4、开源社区 前言 百度智能云千帆大模型平台再次升级!在原有API基础上,百度智能云正式上线…...

Elasticsearch的配置学习笔记
文/朱季谦 Elasticsearch是一个基于Lucene的搜索服务器。它提供一个分布式多用户能力的全文搜索引擎,基于RESTful web接口,Elasticsearch是用Java语言开发的。 关于Elasticsearch系列笔记,主要从Elasticsearch的配置、核心组件、架构设计、使…...

LeetCode(25)验证回文串【双指针】【简单】
目录 1.题目2.答案3.提交结果截图 链接: 验证回文串 1.题目 如果在将所有大写字符转换为小写字符、并移除所有非字母数字字符之后,短语正着读和反着读都一样。则可以认为该短语是一个 回文串 。 字母和数字都属于字母数字字符。 给你一个字符串 s&…...

Android设计模式--工厂模式
一,定义 工厂模式与Android 设计模式--单例模式-CSDN博客,Android设计模式--Builder建造者模式-CSDN博客,Android设计模式--原型模式-CSDN博客 一样,都是创建型设计模式。 工厂模式就是定义一个用于创建对象的接口,让…...

EasyExcel入门使用教程
文章目录 简介一、工程创建🎑二、读操作🎊二、写操作🎄总结 简介 数据导入导出意义 后台管理系统是管理、处理企业业务数据的重要工具,在这样的系统中,数据的导入和导出功能是非常重要的,其主要意义包括以下…...

Golang实现一个一维结构体,根据某个字段排序
package mainimport ("fmt""sort" )type Person struct {Name stringAge int }func main() {// 创建一个一维结构体切片people : []Person{{"Alice", 25},{"Bob", 30},{"Charlie", 20},{"David", 35},{"Eve…...

python语言实现背包问题动态规划
背包问题是一个经典的动态规划问题,实现方式如下: 假设有一个背包,容量为 W,有 n 个物品,每个物品有两个属性:体积 v 和价值 w。要求在不超过背包容量的情况下,选取一些物品放入背包࿰…...