浅谈如何做好软件项目

如何做好软件项目,这是摆在软件实施团队每个人面前的关键问题。笔者在此提出一些浅见,供大家参考。欢迎在评论区交流!

目录

【摘要】

【正文】

一、树立正确的需求调研理念

二、谋定而后动的开发工作

三、大道至简的系统设计

四、专注项目管理的项目经理

五、打造高执行力的项目团队


【摘要】

本文阐述了做好软件项目的五个关键方面。首先,需树立正确的需求调研理念,深入挖掘用户需求,避免后期修改带来的高成本。其次,设计阶段需进行详细设计并与用户多次论证,确保设计成熟后再进入开发阶段。第三,系统设计应遵循“大道至简”原则,避免过度设计以提高系统性能、可靠性和可维护性。第四,项目经理应专注于项目管理要素,将设计、研发等工作交给核心成员,保持清醒头脑做好监督与把控。最后,强调团队凝聚力的重要性,项目经理需积极进行人力资源建设,培养团队精神,降低项目成败对人员的依赖。

【正文】

一、树立正确的需求调研理念

在软件系统需求分析阶段,我们需要尽量详尽、彻底的挖掘用户需求,通过与客户的多种沟通方式了解用户需求。

在很多项目中的需求分析阶段存在着一种情况:需求分析人员即便根据自身经验,结合用户提出的需求,即便想到了一个很好的功能,能够完善或改进用户现有流程,但往往出于项目成本考虑,不会和用户沟通此功能的实现。因为他们担心:如果说了,用户肯定要实现,这会提高开发成本。

需求分析人员的这种做法,出发点是无可厚非的。但是经过许多项目开发过程,我们发现有很多用户提出的后期修改需求,在前期需求调研阶段需求分析组就已经考虑了,只是没有就这些需求与用户沟通。而用户经过使用系统,逐渐认知到信息化改善传统工作的能力后,会自发提出此类需求变更。这给项目带来的改动成本更高,不少需求分析人员对此后悔不迭。

因此,在软件需求分析阶段,应该树立正确的需求开发理念,要想用户所想,做好需求挖掘的工作,替用户规划尽量完善的系统功能,再结合项目进度要求与用户沟通,进行需求的裁剪,或推迟到二期实现。那种由需求分析人员自作主张砍掉某些对系统有价值的功能需求的做法,是不可取的。

二、谋定而后动的开发工作

在软件系统设计阶段,我们需要进行详细的设计,包括界面设计、流程设计等,并以原型方式展现给用户。在与用户进行原型设计稿的多次论证,建立需求基线,再进入下一阶段。

我们看到有很多项目,项目经理或设计人员考虑时间紧、任务重等情况,将设计工作草草收场,过早的使项目进入开发阶段。这些不成熟的设计很可能成为项目失败的主要因素,而且由此导致的后期修改也将投入更大的人工成本和时间成本,因此用户很不满意。

另外,有些公司的需求分析、设计文档要么过于简单、要么过于偏向“八股文”式的形式,与实际需求脱节。用户根据这些需求分析及设计文档,无法“认知”到系统投入应用后的场景,提出修改意见无从谈起。因此需求确认与审核工作草草收场。这给系统上线后,带来了大量的需求变更。

因此,在项目对于需求分析、系统设计要严格实行评审程序,即便是由此可能会耽误项目进度,也要向诸位项目干系人说明情况,争取理解项目真实情况,认可项目组需求分析工作。对于软件开发来说,设计阶段的“纸上谈兵”比开发过程中被迫“埋头苦干”要好得多。要知道很多系统缺陷,越早发现,解决得越彻底,成本越低。详细而负责进行设计的论证,是组织与用户双赢的唯一途径,此阶段一定要做到谋定而后动。

三、大道至简的系统设计

大道至简意味着“少而精小而美”。在系统设计、开发阶段对于需求的实现,应尽量化繁为简,轻巧地进行系统实现。在很多失败的项目中,项目经理或者设计人员更多关注的是尽可能提供完善系统功能、提高项目的扩展性和灵活性。因此,在设计阶段往往出现了许多“过度设计”的情况。项目组往往花费几天甚至几星期对设计方案进行微调,仅仅为了增加过度的灵活性或者不必要的复杂性。这样做“看上去很美”,但实际效果往往与期望背道而驰。其结果往往是背离了系统需求的主线,将造成客户和公司成本的提高。在项目总结时,设计人员才会意识到这样做,减少了用来实现必要需求、排除系统缺陷的时间,而这对项目而言才是更重要的。试想,如果设计人员假想中的场景是小概率事件根本不可能出现,那么按此场景进行的大量的需求分析、设计论证及代码开发工作又有什么用呢?其结果无疑会导致大量无用的代码充斥系统之中,白白增加了系统的复杂程度。直接导致系统性能、可靠性及可维护性的下降。

也许有人会说,我们可以采用不断重构地方法,删除这些无用的代码。但是,实际情况是,发现存在多余代码的时候往往是项目后期阶段,此时项目组时间和压力很可能不允许有重构的时间,项目干系人也可能不会允许这样去做。因此项目组往往自我安慰的想:已经开发出来了,继续留着吧。于是随着这些无用代码的堆积,项目经理、设计人员和其他开发人员,尤其是那些新成员,就得在毫无必要的庞大而且复杂的代码基础上工作了,或许这样的代码的唯一好处就是降低千行Bug率。有人戏称这样的项目为“粪坑”。为了避免这一问题,人们决定分头负责系统的各个部分,比如每个人单独负责一个模块,而这看似能使工作更容易,但是副作用又产生了。因为每个人都在自己的小天地里工作,很少看看别处的代码是否已经完成了自己需要的功能,最后生成大量重复的代码。过于复杂设计下的代码会影响生产率,因为当其他人接手一个过度设计的方案时,必须先花上一些时间了解设计中的许多微妙之处,然后才能自如地扩展或者维护它。另一方面,作为用户使用系统时,过于复杂的设计往往带来过于复杂的操作和控制,用户要牢记许多步骤才能完成操作,这时操作失误往往成为必然。如此设计带来了大量的用户抱怨和维护工作量。

许多设计人员和开发人员在进行过度设计时甚至自己都不曾意识到。而当公司发现团队的生产率下降时,又很少有人知道是过度设计在作怪。因此作为项目经理、设计人员,我们心中要时刻牢记“大道至简”的道理,谨记过度设计总在不知不觉之中出现。

四、专注项目管理的项目经理

在许多公司中中,项目经理在承担项目管理工作,管控项目计划、成本等要素的同时,还承担着系统设计、关键技术的研发工作。项目经理必须具备“博大而精深”的各方面能力才能很好的完成使命。而其实博大和精深是存在着悖论的。面对繁杂多类别的工作,往往难以做好每件事,经常顾此失彼,摁下葫芦又起瓢,这样的项目经理经常疲于奔命的在项目中工作,成了项目的“超级消防队员”。

因此项目经理一定要保持清醒的头脑,把握好工作核心:管控好项目进度等项目管理要素,对于设计、研发等工作尽量交给其他核心成员去做,不要什么事情都是亲力亲为,只要做好过程监督、关键点把控和结果检查即可。

五、打造高执行力的项目团队

电影《天下无贼》中的黎叔抱怨:“人心散了,队伍不好带啊”。技术素质较高的软件开发团队尤其如此:在很多项目中,建设伊始群情激昂。可随着工作压力增大,建设时间延续,团队成员人心涣散,缺乏核心凝聚力,致使项目后期问题百出,甚至无法通过项目验收。究其根本原因就是缺乏团队精神的培养与塑造。一个群体不能形成团队,就是一盘散沙;一个团队没有共同的价值观,就不会有统一意志、统一行动,当然就不会有战斗力。如此下去,项目到了后期,往往人员离散,给项目维护工作带来难度。因此作为项目带头人的项目经理,必须要时刻如何带好队伍,建设团队精神,积极进行人力资源建设。

在项目管理实际工作中,项目经理一方面应提高项目内在凝聚力,打磨个性化的“螺丝钉”,把所有生产步骤尽量流程化,使任何一个工作岗位成为可按部就班的“螺丝帽”,强调员工的“螺丝钉”精神,让其在尽快时间内能取代别人或被别人取代,降低项目成败对人员的依赖,在维持团队正常运作的前提下,尽量鼓励成员的个性发挥,让死气沉沉的“螺丝钉”尽情欢歌。另一方面,要注意培养核心成员,尽早培养一些有潜力的核心成员当项目人才流失时,及时有后备人才跟进降低人员流动给项目带来的风险。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/618148.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

hcip实验6:BGP综合实验

实验拓扑: 实验配置: ip地址配置: #R1 [R1]int g0/0/0 [R1-GigabitEthernet0/0/0]ip add 12.1.1.1 24 [R1-GigabitEthernet0/0/0]int l0 [R1-LoopBack0]ip add 172.16.0.1 32 [R1-LoopBack0]int l1 [R1-LoopBack1]ip add 192.168.1.1 24#R2…

算法笔记——数位DP

一、前置知识 1.DP小知识 D P DP DP 是一种算法思想,用递推方程的方式解决问题。但是使用它要满足如下性质: 最优子结构: 子结构优秀,整个就优秀。无后效性:当前决策不会影响后面。 2.DP实现方法 众所周知&#xf…

环境变量(全)

概念 环境变量(environment variables)一般是指在操作系统中用来指定操作系统运行环境的一些参数 如:我们在编写C/C代码的时候,在链接的时候,从来不知道我们的所链接的动态静态库在哪里,但是照样可以链接成功,生成可执…

2024中国(重庆)机器人展览会8月举办

2024中国(重庆)机器人展览会8月举办 邀请函 主办单位: 中国航空学会 重庆市南岸区人民政府 招商执行单位: 重庆港华展览有限公司 2024中国重庆机器人展会将汇聚机器人全产业链知名企业,世界科技领先的生产制造企业与来自多个国家和地区…

Python | Leetcode Python题解之第78题子集

题目: 题解: class Solution:def subsets(self, nums: List[int]) -> List[List[int]]:self.res []self.backtrack([], 0, nums)return self.resdef backtrack(self, sol, index, nums):self.res.append(sol)for i in range(index, len(nums)):self…

2024中国(重庆)无人机展览会8月在重庆举办

2024中国(重庆)无人机展览会8月在重庆举办 邀请函 主办单位: 中国航空学会 重庆市南岸区人民政府 招商执行单位: 重庆港华展览有限公司 报名:【交易会I 59交易会2351交易会9466】 展会背景: 为更好的培养航空航天产业和无人…

鸿蒙内核源码分析(Shell编辑篇) | 两个任务,三个阶段

系列篇从内核视角用一句话概括shell的底层实现为:两个任务,三个阶段。其本质是独立进程,因而划到进程管理模块。每次创建shell进程都会再创建两个任务。 客户端任务(ShellEntry): 负责接受来自终端(控制台)敲入的一个个字符&…

OFDM802.11a的FPGA实现(十二)使用FFT IP核添加循环前缀

原文链接(相关文章合集):OFDM 802.11a的xilinx FPGA实现 目录 1.前言2.循环前缀3.硬件实现4.ModelSim仿真 1.前言 为了能够消除传输过程当中的符号间干扰,在IFFT处理完毕之后还要加上循环前缀。 2.循环前缀 实际通信信道中,由于接…

HTML表单创建学习

文章目录 1、创建HTML框架2.body标签CSS3.表单创建3.1、添加fieldset与label标签3.2、为label标签添加css样式3.3、添加input标签3.4、添加提交按钮3.5、在input标签中添加required3.6、添加minlength属性3.7、pattern属性3.8、设置表单单选按钮无法同时选中3.9、添加链接3.10、…

机器人系统ros2-开发实践06-将静态坐标系广播到 tf2(Python)-定义机器人底座与其传感器或非移动部件之间的关系

发布静态变换对于定义机器人底座与其传感器或非移动部件之间的关系非常有用。例如,最容易推断激光扫描仪中心框架中的激光扫描测量结果。 1. 创建包 首先,我们将创建一个用于本教程和后续教程的包。调用的包learning_tf2_py将依赖于geometry_msgs、pyth…

简约在线生成短网址系统源码 短链防红域名系统 带后台

简约在线生成短网址系统源码 短链防红域名系统 带后台 安装教程:访问 http://你的域名/install 进行安装 源码免费下载地址抄笔记 (chaobiji.cn)https://chaobiji.cn/

刨析YOLOv8的改进模块

1、YOLOv5回顾 这里粗略回顾一下,这里直接提供YOLOv5的整理的结构图吧:Backbone:CSPDarkNet结构,主要结构思想的体现在C3模块,这里也是梯度分流的主要思想所在的地方;PAN-FPN:双流的FPN,必须香,也必须快,但是量化还是有些需要图优化才可以达到最优的性能,比如cat前后…

支持视频切片的开源物联网平台

软件介绍 MzMedia开源视频联动物联网平台是一个简单易用的系统,该平台支持主流短视频平台(如抖音、快手、视频号)的推流直播功能,同时提供视频切片等功能。系统后端采用Spring Boot,前端采用Vue3和Element Plus,消息服…

构建教育新未来:智慧校园平台的深度解读与全景呈现

引言 在全球数字化转型的大潮中,智慧校园平台作为教育信息化的重要载体,正以前所未有的姿态颠覆传统的教育模式,引领教育行业步入一个崭新的时代。这个融合了大数据、人工智能、云计算、物联网等一系列前沿科技的平台,以其强大的功…

python算法demo0512

最长回文数 代码 class Solution:def longestPalindrome(self, s: str) -> str:n len(s)if n < 2:return smax_len 1begin 0# dp[i][j] 表示 s[i..j] 是否是回文串dp [[False] * n for _ in range(n)]for i in range(n):dp[i][i] True# 递推开始# 先枚举子串长度fo…

pycharm本地文件更新至虚拟机

tools–>deployment–>configuration root path的路径要跟远程路径对齐&#xff0c;方便后续运行 mapping映射&#xff0c;本地路径和远程路径 点击Browse 可以在右侧同步查看更新情况

llama3 发布!大语言模型新选择 | 开源日报 No.251

meta-llama/llama Stars: 53.0k License: NOASSERTION llama 是用于 Llama 模型推理的代码。 提供了预训练和微调的 Llama 语言模型&#xff0c;参数范围从 7B 到 70B。可以通过下载脚本获取模型权重和 tokenizer。支持在本地快速运行推理&#xff0c;并提供不同规格的模型并…

Vue报错:TypeError: Cannot read property ‘upgrade‘ of undefined

Vue报错&#xff1a;TypeError: Cannot read property ‘upgrade’ of undefined 前言 最近打开一个很就之前的开发项目&#xff0c;因为扫描包&#xff0c;所以删除了部分代码&#xff0c;后来就一直报错&#xff0c;现在总结一下。 报错原因&#xff1a;vue.config.js中 d…

探索数据结构:树与二叉树

✨✨ 欢迎大家来到贝蒂大讲堂✨✨ &#x1f388;&#x1f388;养成好习惯&#xff0c;先赞后看哦~&#x1f388;&#x1f388; 所属专栏&#xff1a;数据结构与算法 贝蒂的主页&#xff1a;Betty’s blog 1. 树 1.1. 树的定义 树是一种非线性的数据结构&#xff0c;它是由n&a…

设计模式 六大原则之开放封闭原则

文章目录 定义理解 小结 定义 开闭原则规定软件中的对象、类、模块和函数对扩展应该是开放的&#xff0c;但对于修改是封闭的。这意味着应该用抽象定义结构&#xff0c;用具体实现扩展细节&#xff0c;以此确保软件系统开发和维护过程的可靠性。 理解 怎么理解这个呢&#x…