变量命名规则

一、匈牙利命名法(the Hungarian notation):

 

         广泛应用于象Microsoft Windows这样的环境中。

         Windows 编程中用到的变量(还包括宏)的命名规则匈牙利命名法,这种命名技术是由一位能干的 Microsoft 程序员查尔斯·西蒙尼(Charles Simonyi) 提出的。

匈牙利命名法通过在变量名前面加上相应的小写字母的符号标识作为前缀,标识出变量的作用域,类型等。这些符号可以多个同时使用,顺序是先m_(成员变 量),再指针,再简单数据类型,再其他。例如:m_lpszStr, 表示指向一个以0字符结尾的字符串的长指针成员变量。

匈牙利命名法关键是:标识符的名字以一个或者多个小写字母开头作为前缀;前缀之后的是首字母大写的一个单词或多个单词组合,该单词要指明变量的用途。

匈牙利命名法中常用的小写字母的前缀:

前 缀             类  型
a                     数组 (Array)
b                     布尔值 (Boolean)
by                   字节 (Byte)
c                     有符号字符 (Char)
cb                   无符号字符 (Char Byte,没有多少人用)
cr                    颜色参考值 (ColorRef)
cx,cy               坐标差(长度 ShortInt)
dw                   Double Word
fn                    函数
h                     Handle(句柄)
i                      整型
l                      长整型 (Long Int)
lp                    Long Pointer
m_                  类的成员
n                     短整型 (Short Int)
np                   Near Pointer
p                     Pointer
s                     字符串型
sz                    以null做结尾的字符串型 (String with Zero End)
w                     Word

二、骆驼命名法(camelCase notation):

骆驼式命令法,正如它的名称所表示的那样,是指混合使用大小写字母来构成变量和函数的名字。例如,下面是分别用骆驼式命名法和下划线法命名的同一个函数:

printEmployeePaychecks();

print_employee_paychecks();

第一个函数名使用了骆驼式命名法——函数名中的每一个逻辑断点都有一个大写字母来标记;第二个函数名使用了下划线法—-函数名中的每一个逻辑断点都有一个下划线来标记。

骆驼式命名法近年来越来越流行了,在许多新的函数库和Microsoft Windows这样的环境中,它使用得当相多。另一方面,下划线法是c出现后开始流行起来的,在许多旧的程序和UNIX这样的环境中,它的使用非常普遍。

三、帕斯卡命名法(the pascal notation)

与骆驼命名法类似。只不过骆驼命名法是首字母小写,而帕斯卡命名法是首字母大写

如:public void DisplayInfo();

string UserName;

二者都是采用了帕斯卡命名法.

在C#中,以帕斯卡命名法和骆驼命名法居多。

简单说

MyData 就是一个帕斯卡命名的示例
而myData是一个骆驼命名法,它第一个单词的第一个字母小写,后面的单词首字母大写,看起来像一个骆驼 而iMyData是一个匈牙利命名法,它的小写的i说明了它的类型,后面的和帕斯卡命名相同,指示了该变量的用途.

 

南怀瑾给的药/刘澜

那天晚上,彼得.圣吉的喉咙很痛。南怀瑾给了他两包药,一包吃下去,另一包含在嘴里。圣吉是提出“学习型组织”的西方管理学大师,却每年都来中国向这位国学大师求教。他们主要谈禅、生命和认知,就是没有谈过管理。

那天晚上,圣吉的嗓子说不出话来,另外有人把话题扯到管理上,说想帮助企业家提高人文素质。南怀瑾泼了盆冷水,说中国现在没有企业家,都在乱搞,在投机取巧。

企业这个定义,以中文来讲,做一件事业,做一个工作,前途有无限的希望,对社会是有贡献的,而且是永久的,不是做了几十年就没有了,一代一代相传,那个才叫企业。”现实是什么呢?“现在没有这个企业的观念,只要开个公司,做个生意,怎么去赚钱,就叫做企业,根本就是错误。”

圣吉应该同意这个观点。同一天上午他在浙江大学演讲,就批评了以市场经济作为宗教指导人的价值,反对每个人都在寻求看得见的利益、什么都用利益来衡量,提出了如何把企业家从经济动物转变成社会动物的课题。

南怀瑾显然把陈峰这样的“优秀企业家”也一棍子打死了。海航集团董事长陈峰也算南怀瑾的学生,但是老师说他修养工夫还没有入门。南怀瑾说这个话,是在103f陈峰邀请他做的讲演上。这个讲演,据说来自全国各地的工商巨子都赞不绝口,都说这才真正懂得什么叫“事业”。

南怀瑾说:“你们现在工商业做得好,很发财,或者官做得很大,这不是事业,这个是职业。中国文化,什么叫做事业呢?出在孔子著的《易经系传》的一句话,叫做:‘举而措之天下之民,谓之事业。’一个人一辈子,做一件事情对社会大众有贡献,对国家民族、对整个的社会,都是一种贡献,这才算是事业。”

把企业作为真正的企业——也就是事业——来办,才算是真正的企业家。南怀瑾给的这包药,企业家们不能只含在嘴里,而是要实实在在吃下去。

文章引用自:

VC制作系统服务/zz/

本文主要介绍了 OpenSCManager、CreateService、OpenService、ControlService、DeleteService、RegisterServiceCtrlHandler、SetServiceStatus、StartServiceCtrlDispatcher等操作服务程序的主要几个API的用法,具体的函数参数大家可以查阅MSDN。

为什么要使用服务应该程序呢?服务程序就像系统的一些服务一样,能够自动地启动,并执行相应的操作;而且因为服务程序的在层次上和一般的应用程序不同,其能够在系统启动时就自动地运行,而不像一般的应用程序那样一定要在登陆后才能运行,这些就是服务的一些好处了,如果你也想你的程序具有这样的功能,那么你就可以建立一个服务应用程序了。下面就跟着我一步一步地教你怎么去创建一个服务应用程序吧。

一、建立 Win32 Application 应用程序(当然你也可以建立其它的应用程序,但服务一般是没有用户界面的),并命名为 ServiceTest。

二、定义全局函数变量。这里主要是设置服务句柄和状态。 BOOL IsInstalled(); BOOL Install(); BOOL Uninstall(); void LogEvent(LPCTSTR pszFormat, …); void WINAPI ServiceMain(); void WINAPI ServiceStrl(DWORD dwOpcode); TCHAR szServiceName[] = _T(“ServiceTest”); BOOL bInstall; SERVICE_STATUS_HANDLE hServiceStatus; SERVICE_STATUS status; DWORD dwThreadID;

三、添加Init初始化函数。 void Init() { hServiceStatus = NULL; status.dwSer103fviceType = SERVICE_WIN32_OWN_PROCESS; status.dwCurrentState = SERVICE_STOPPED; tatus.dwControlsAccepted = SERVICE_ACCEPT_STOP; status.dwWin32ExitCode = 0; status.dwServiceSpecificExitCode = 0; status.dwCheckPoint = 0; status.dwWaitHint = 0; }

四、添加安装和删除服务函数。这里主要是用到了五个函数 OpenSCManager,CreateService,OpenService,ControlService和DeleteService 。
OpenSCManager 用于打开服务控制管理器;CreateService 用于创建服务;OpenService用于打开已有的服务,返回该服务的句柄;ControlService则用于控制已打开的服务状态,这里是让服务停止后才删除;DeleteService 用于删除指定服务。

BOOL Install(); { //这里列出主要的两个函数,其它的可以在代码里找。
//打开服务控制管理器
OpenSCManager(NULL, NULL, SC_MANAGER_ALL_ACCESS); //创建服务
SC_HANDLE hService = ::CreateService( hSCM, szServiceName, szServiceName, SERVICE_ALL_ACCESS, SERVICE_WIN32_OWN_PROCESS, SERVICE_DEMAND_START, SERVICE_ERROR_NORMAL, szFilePath, NULL, NULL, _T(“”), NULL, NULL);
::CloseServiceHandle(hService);

::CloseServiceHandle(hSCM); }

BOOL Uninstall(); { //这里列出主要的两个函数,其它的可以在代码里找。
//打开服务控制管理器
OpenSCManager(NULL, NULL, SC_MANAGER_ALL_ACCESS);

//打开服务
OpenService(hSCM, szServiceName, SERVICE_STOP | DELETE);

//停止服务
ControlService(hService, SERVICE_CONTROL_STOP, &status);

//删除服务
DeleteService(hService); … }

五、添加服务主线程函数和控制函数。这里调用 RegisterServiceCtrlHandler 来注册服务的控制函数,这里要设置status.dwControlsAccepted 为 SERVICE_ACCEPT_STOP,否则你不能控制这个服务的状态。

void WINAPI ServiceMain() { // Register the control request handler
status.dwCurrentState = SERVICE_START_PENDING;
status.dwControlsAccepted = SERVICE_ACCEPT_STOP;//这个要使用,否则你不能控制
//注册服务控制
hServiceStatus = RegisterServiceCtrlHandler(szServiceName, ServiceStrl);
if (hServiceStatus == NULL) { LogEvent(_T(“Handler not installed”));
return; }
SetServiceStatus(hServiceStatus, &status);
status.dwWin32ExitCode = S_OK;
status.dwCheckPoint = 0;
status.dwWaitHint = 0;
status.dwCurrentState = SERVICE_RUNNING;
SetServiceStatus(hServiceStatus, &status);
//模拟服务的运行,10后自动退出。应用时将主要任务放于此即可
int i = 0; while (i < 10) { Sleep(1000); i++; } //
status.dwCurrentState = SERVICE_STOPPED;
SetServiceStatus(hServiceStatus, &status);
LogEvent(_T(“Service stopped”)); }

六、在主线程函数里注册控制函数和程序执行主体。这里主要是说明这就是程序的执行体。
void WINAPI ServiceMain() { …
//模拟服务的运行,10后自动退出。应用时将主要任务放于此即可
int i = 0; while (i < 10) { Sleep(1000); i++; } … }

七、最后,要在main函数里注册添加安装、删除、注册主函数。

int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) { Init(); dwThreadID = ::GetCurrentThreadId(); SERVICE_TABLE_ENTRY st[] = { { szServiceName, (LPSERVICE_MAIN_FUNCTION)ServiceMain }, { NULL, NULL } }; if (stricmp(lpCmdLine, “/install”) == 0) { Install(); } else if (stricmp(lpCmdLine, “/uninstall”) == 0) { Uninstall(); } else { if (!::StartServiceCtrlDispatcher(st)) { LogEvent(_T(“Register Service Main Function Error!”)); } } return 0; }

八、总结。其实做一个服务程序并不难,主要是懂得程序的执行体放于哪里?和注册程序的主函数和注册控制函数,如果这两个没有注册的话,你就程序就不知道如何去控制了。statu103fs.dwControlsAccepted = SERVICE_ACCEPT_STOP;这个也重要,如果你没有设置的话,那么服务就不会受你控制了。

Windows SharePoint Services的备份与还原/zz/

不久前在MICROSOTE网站上看到一份关于WSS的备份与恢复,在这里,我在简单的引用一下,已便大家共享。移动、备份和还原站点内容或整个站点的选项包括:
。列表或站点模板
。Web 数据包
。FrontPage
。SQL Server
。Windows SharePoint Services 工具

1、列表和库模板

您可以获取 Windows SharePoint Services 列表或库,将其转换为模板,用于创建新列表或新库。列表和库模板保存在每个站点中,您可以选择是将列表或库数据保存到模板中,还是只保存列表或库结构。列表和库模板大小只能限制在 10 MB。

2、站点模板

您可以获取使用 Windows SharePoint Services 创建的站点,将其转换为模板,用于在同一站点集合中创建新站点。您可以选择是将站点数据作为模板的一部分保存,还是只保存站点结构。站点模板创建后,该模板将显示在站点模板选取页上,用户可从该页跳转开始创建新站点。站点模板大小只能限制在 10 MB。

3、Web 数据包

Microsoft Office Front103fPage 2003 包括新型 Web 数据包功能,该功能允许您将基于 FrontPage 2003 或 Windows SharePoint Services 创建的站点中的全部或某些文件及结构放在一起,放入一个数据包中,然后便可以使用此数据包在其他子站点或服务器上创建相同的站点。Web 数据包可以包含站点中所有内容,或仅包含一些指定元素;例如,您可以选择忽略特定网页、列表或库。Web 数据包可以包含网页内容和列表及库结构,但不能包含特定的站点内容 (如列表和库数据或文档) 及站点导航结构。不过,它们却可以包含自定义链接栏。

4、数据库备份和还原

因为基于 Windows SharePoint Services 创建的站点包含在 SQL Server 数据库中,因此,如果备份然后还原数据库,也就备份和还原了站点。要具有备份和还原 SQL Server 数据库的能力,需要具有访问服务器的管理权限。这个选项可备份和还原所有站点内容,包括安全性和权限。

5、管理员通过 Stsadm.exe 备份和还原

Windows SharePoint Services 中包含一个被称为 Stsadm.exe 的强大命令行管理工具。此工具允许管理员添加或删除用户、创建或删除站点、备份或还原站点,等等。还允许备份和还原站点集合,包括所有的站点内容及安全性和权限。使用 Stsadm.exe 需要具有访问服务器 (运行 Windows SharePoint Services) 的管理权限。

我只使用了其中最后的两种方式,在这之中用STSADM.EXE工具是最方便而且不容易出现错误的,如果想知道具体还原的做法,大家只要上网搜索一下就可以看到更为详细的内容了。

[转载&支持]开源爱好者致招商银行的公开信

开源爱好者致招商银行的公开信

发表: zeuux
时间: 2007/01/31 21:53:51

作者:徐继哲

大概在一年以前,我有了写这篇文章的想法,由于诸多事情,一拖再拖。最近,终于下决心要完成这封公开信。可我却用了三周的业余时间才完成这个短小的文章,这和我以前的写作经历相比,简直是蜗牛的速度。为什么这么艰难呢?因为在这篇文章里,我试图和大家讨论一个很多人被迫接受的、不合理的、甚至已经习以为常的事实,并期望和大家一起努力来改变这个事实。

多年以来,我一直都是招商银行的用户,同时也一直在忍受招商银行不平等的网上银行服务。无论是什么网络服务,都要遵循互联网的行业标准和技术标准,这是大家都知道的基本道理。可是不知为何,招商银行的网上银行服务却没有遵守W3C等互联网标准,而是采用了微软公司的专有软件技术,ActiveX。采用微软的ActiveX专有软件技术103f提供公共服务意味着什么?这意味着用户只有使用微软专有的IE(Internet Explorer)浏览器才能正常使用招商银行的网上银行服务;这意味着用户在使用网上银行时,招商银行将用户限制到了专有的、昂贵的、漏洞百出的专有软件Windows上,时下正在肆虐的“熊猫烧香”病毒不知又折磨了多少微软Windows用户;这意味着招商银行极大地提高了用户使用网上银行的成本,因为你只有花费上千元人民币购买微软的Windows操作系统才能使用招商银行的网上银行;这意味着招商银行引导用户降低了自己的道德水准,同时增加了用户的法律诉讼风险,因为我不认为我们普通老百姓有足够的财力去购买微软的Windows操作系统,绝大多数用户最终会选择盗版;这意味着像我这样的只使用GNU/Linux、*BSD、Firefox(大量的 Windows用户也在使用Firefox,因为它更安全)的大量自由软件用户无法正常使用我们应得的网上银行服务,因为我们拒绝专有软件,我们抵制软件专利,我们需要使用、学习、修改、再发行软件的自由;这意味着招商银行正在不公平地对待你的每一位用户,正在歧视自由软件用户;这意味着招商银行是一家业余的、虚弱的、不负责任的公司。

现在,作为一名招商银行用户和自由软件用户,我请求招商银行立刻放弃微软的专有软件技术,而是采用符合W3C、RFC等开放的、自由的互联网标准来开发网上银行服务。使用开放的、自由的标准意味着每个人都可以使用你的服务,无论他使用的是微软的专有软件还是GNU/Linux、*BSD、 Firefox等自由软件;意味着招商银行平等对待了每一位用户、无论是自由软件用户还是专有软件用户;意味着招商银行真的有能力“因您而变”,而不是空喊口号、欺骗大家;意味着招商银行是一家专业的、有责任感的公司;意味着现有的自由软件用户会继续使用招商银行,而不是转投其他银行,或者因为使用盗版专有软件而被起诉;意味着招商银行是一家心胸开阔、善于进取、值得信任的公司。

虽然使用ActiveX专有软件技术来提供公众服务是错误的,但我们也能看到招商银行的动机是好的:试图保障用户的帐户安全。在技术方面, ActiveX是微软专有的、过时的、兼容性极差的技术;任何采用ActiveX的网站都是人为地给用户引入一个潜在的入侵通道,为用户埋下了一个地雷。最近也有很多网友在讨论现有招商银行网上银行的安全隐患,比如:直接采用了某个可公开下载的二进制动态库文件,在发行自己的软件的时候没有做数字签名,这种低级的技术手段直接导致了用户的电脑可能被植入木马,等等。可是我认为我们根本没有必要讨论现有的技术实现是否安全。为什么呢?因为招商银行解决安全问题的思路是完全错误的,所以即使是安全的,我们也不能接受。下面我举个例子来说明招商银行解决安全问题的思路对于用户来说是多么的不方便、不友好和荒谬。招商很行宾馆创始于1999年,一直以来生意还不错,不过最近旅店发生了几起客房被盗的刑事案件,被盗旅客损失惨重,其他的旅客也都认为这是一个很严重的安全问题,敦促招商很行宾馆立即采取有效的安全措施,保障旅客的生命财产安全。招商很行宾馆的管理层召开了紧急会议,讨论解决之道,想来想去,管理者们一致认为:“向每个客房派驻一名训练有素的职业保镖是个万全之策!”。于是他们如获至宝,没有查阅国家对于宾馆行业制订的相关管理办法,也没有调查国际知名的宾馆都是如何解决这类问题的,就决定这么干了。并连夜联系到了城里最有名的保安公司:微硬公司。第二天,微硬公司经过积极努力,为

北京公交--每天都要肉搏的鏖战!

今天迟到,我早就知道今天肯定要迟到了。当我早上一出校门就看见车站上成堆等车的人群的时候,我就知道今天必迟到无疑!

站了半天,来了趟632,没有挤,因为根本已经爆满了。不一会第2辆也来了,我扎好架式,但是由于一手提着电脑,又没有多少空间调在哪了半天,最后脚还让车关门的时候还夹了,手也擦烂了,还是给挤了下来,55555555555。悲惨的世界呀。。。。

第3辆,来了离我很远根本没有可能挤上,没有动。接着是第4辆,停都没有停,一晃而过。

这是已经是必迟到了,多么的郁闷呀!心里面咒骂北京公交的同时,第5辆车远远的来了。。

我想这次一定要上,干脆把电脑包给背上,腾出双手来肉搏。。

等快要停的时候我冲到了门前面人群的最前面,终于挤上来了。

北京现在倡导排队,每个月还弄个排队日。排队么,我赞成,但是在上班时间根本不实际,那些个领导头头学者教授门早上起来挤挤公交车就知道了怎么回事了。。。我再此也就不说了。早上挤过车的人肯定

北京3级甲等医院

中国医学科学院北京市协和医院 首都医科大学附属北京同仁医院 卫生部北京医院 北京中医院 北京地坛医院(原北京市第一传染病医院) 北京中医药大学东直门医院 北京中日友好医院 北京朝阳医院 首都儿科研究所附属儿童医院 北京妇产医院北京市妇幼保健院 中国医学科学院肿瘤医院 首都医科大学附属北京安贞医院 北京大学人民医院 北京市急救中心 北京大学第一医院(北大医院) 首都医科大学附属北京儿童医院 中国医学科学院阜外心血管病医院 首都医科大学附属北京安定医院 北京积水潭医院/北京大学第四临床医学院 北京大学第三医院 中国中医研究院西苑医院 北京大学第六医院北京大学精神卫生研究所 北京肿瘤医院 北京大学临床肿瘤学院 北京铁路总医院 中国医学科学院整形外科医院 首都医科大学附属北京口腔医院 首都医科大学附属北京天坛医院 中国中医研究院北京广安门医院 首都医科大学宣武医院 首都医科大学附属北京友谊医院 北京中医药大学东方医院 首都医科大学附属北京佑安医院 中国康复研究中心(北京博爱医院) 北京回龙观医院 北京胸部肿瘤结核病医院 中国人民解放军总医院(三O一医院) 中国人民解放军三O二医院1037 中国人民解放军三O四医院 中国人民解放军第三O五医院 中国人民解放军第三O六医院 中国人民解放军三O七医院军事医学院附属医院 中国人民解放军第三O九医院 海军总医院 空军总医院 北京军区总医院 武警总医院 中国人民解放军第二炮兵总医院(原中国人民解放军二六二医院) 中国人民解放军四六六医院

从一则笑话分析需求的陷阱/zz/

某日,老师在课堂上想考考学生们的智商,就问一个男孩:“树上有十只鸟,开枪打死一只,还剩几只?”
男孩反问:“是无声枪么?”
“不是。”
“枪声有多大?”
“80~100分贝。”
“那就是说会震的耳朵疼?”
“是。”
“在这个城市里打鸟犯不犯法?”
‘不犯。”
“您确定那只鸟真的被打死啦?”
“确定。”老师已经不耐烦了,”拜托,你告诉我还剩几只就行了,OK?”
“OK。鸟里有没有聋子?”
“没有。”
“有没有关在笼子里的?”
“没有。”
“边上还有没有其他的树,树上还有没有其他鸟?”
“没有。”
“方圆十里呢?”
“就这么一棵树!”
“有没有残疾或饿的飞不动的鸟?”
“没有,都身体倍棒。”
“算不算怀孕肚子里的小鸟?”
“都是公的。”
“都不可能怀孕?”
“………,决不可能。”
“打鸟的人眼里有没有花?保证是十只?”
“没有花,就十只。”
老师脑门上的汗已经流下来了,下课铃响起,但男孩仍继续问:“有没有傻的不怕死103f的?”
“都怕死。”
“有没有因为情侣被打中,自己留下来的?”
“笨蛋,之前不是说都是公的嘛!”
“同志可不可以啊!”
“…………,性取向都很正常!”
“会不会一枪打死两只?”
“不会。”
“一枪打死三只呢?”
“不会。”
“四只呢?”
“更不会!”
“五只呢?”
“绝对不会!!!”
“那六只总有可能吧?”
“除非你他妈的是猪生的才有可能!”
“…好吧,那么所有的鸟都可以自由活动么?”
“完全可以。”
“它们受到惊吓起飞时会不会惊慌失措而互相撞上?”
“不会,每只鸟都装有卫星导航系统,而且可以自动飞行。”
“恩,如果您的回答没有骗人,”学生满怀信心的回答,“打死的鸟要是挂在树上没掉下来,那么就剩一只,如果掉下来,就一只不剩。”
老师当即倒!

正值六一儿童节之际,用这篇笑话故事来做开头,笑过之后可能不少能会认为这个小朋友是需求调研的最佳人选。回顾软件开发上的许多案例,软件开发失败率一直居高不下,特别在外包开发这个领域中,这个值可能会更高一筹。在分析项目失败的原因的时候,需求的因素可能是失败的关键原因、需求不明确,客户对需求的变更频频等等。

1.需求的调研

需求调研是为需要说明书做前期工作,可以说需要说明书是从需求调研表中得到或抽取而出。需求调研是要了解客户希望所要开发的系统能够解决他们的问题,以及了解他们对系统的期望等等。需求调研是整个开发的基础,经过需求调研的结果整理出需求说明书作为后续开发使用。

如果做的项目是一个陌生的一个行业(专业),这是往往需要专家或者顾问等角色的协助,但是作为调研人员最少要想办法了解个专业,或许你需要成为这个行业的专家,但最少要了解一定的专业知识(最少专业词汇你要知道)。这样客户的沟通才能达到顺畅,不会出现牛头不对马嘴的现象。

在某些难度不是很大的行业或者项目,做需求调研的时候可以通过自学的方式了解行业的特点,这些项目往往因为规模比较小,也不会有专家的影子出现。但是作为调研的时候我们最需要了解的一些问题如:

1):客户目前的问题与苦难
2):客户现在的工作模式
3):客户对系统的期望
4):客户哪些要求是自己能做到的,那些是依靠系统来做
5):还有客户对系统开发方式以及时间的要求等等

其实做需求调研的时候最重要的目的在于资料收集,或许小孩的那种打破砂锅的方式会引起客户的反感,但是实际项目中往往需要的就是这些比较周全的调研方式,能够考虑到的问题点都需要和客户确认,尽量避免想当然的做法,只是采用的方式可能需要优化一下,采用良好的方式,尽量得到客户的最大配合。

2.需求的描述和确认

对于需求的调研内容需要进行整理和分类,分清有用功能、可选用功能、无用功能及不可实现功能。对于这些功能和客户再次确认之后才能最终形成开发的需求文档。对于需求的描述有很多的方法和工具,但是无论采用那种方法和工具都是相对抽象的方式,如何让客户能够理解需求的实际内容,需要客户有良好的理解能力,毕竟系统还只是纸面上的内容,客户还是很难完全了解到真实的系统。

如何对需求进行103f描述在项目开发中是一个很难定夺的题目,有些公司采用Demo的方式,有些采用传统的功能树的方式,有些采用界面的描述方式,有些采用UML建模的方式,形式多种多样。各种方式都有其好坏。但是对于方式的选择需要注意一些问题:

1)了解客户是否能够理解所描述的问题,
2)避免先入为主,
3)避免形式主义,

有些公司采用UML描述需求,但是客户的能力达不到能够理解UML所描述的问题,甚至公司内部的开发人员也无法很好的理解UML,可能只有需求人员懂 UML,这种需求结果就值得思考,客户是否知道你在说什么?如果你先入为主使用这种方式来描述问题,难道也期望客户去学习这些知识吗?

3.需求的控制

客户往往很难知道他们需要什么样的系统,有时候系统做到一半的时候客户会提出一些新的想法,更甚至等系统上线的时候客户才发现系统和他们脑子里想的东西完全不是一回事。对于这些可能会说当初需求定义的时候不是签字下来说是做成这样,怎么不是你想要的呢?问题可能会归根于与客户沟通的方式和手法上,但是对于需求的控制来说,对如何避免需求的反复,客户脑门一热就有新点子出来,还有许多不切实的要求等等,都在需求的控制范围内。

有些人会说我们和客户说好了,协议也签订说:除了纸上描述的东西之外,其余的都是变更追加。但是这个观点固然好,也是完全归于一方有利来考虑,而且有很多时候我们签署在合同内的需求文档也比较含糊,而且双方在问题的理解上可能会有歧义,一旦真正要将合同拿出来对峙的时候,我想彼此都很难说服对方。就像树上有十只鸟一样,没有说好环境,状态等等的假设,一切的结果应该说都可能是合理的。

如何控制需求,我想除了软件工程上提出的那些理论之外,也很难有新的观点,但是在实际的操作过程中,我们可能一方面要维护和客户的关系,另一方面也要考虑系统的开发时间和整体工数等等,做一个权衡。不过我个人更趋向使用问题具体化的方式来控制,尽量将能够想出的问题通通罗列出来和客户确认,同时采用换位思考的方式,尽量能够让客户理解我们所描述的系统的状况,如果在调研和需求的确认阶段能够把工作做得很好,在后期的开发过程中变更的内容就会比较少,变更的内容也就容易控制。

和客户进行良好的沟通,多为客户做一个考虑,避免将自己以一个高调姿态介入和客户的沟通中,说一些客户很难懂的专业术语,将客户喷的云里雾里,自以为自己的专业领域多么了不起,这种和客户的共通方式最容易造成需求空洞,后期翻盘的概率很高。如果客户不懂你口中所说的内容,可能问题出于客户,另外更大的程度出于你,我们需要考虑采用的沟通的方式以及内容是不适通俗易懂,能将复杂的问题讲的简单就表示你不简单。

需求分析–一些好的参考资料

几本好书

《软件需求管理》   机械工业出版社
《有效需求实践》  机械工业出版社
《编写有效用例》   机械工业出版社
《软件需求》    机械工业出版社
《掌握需求过程》    人民邮电出版社

几个好的网站    系统分析之窗    IT之源    UML中国   中国软件工程网

计算农历的函数汇编原码(1)/zz/

;>>>>>>>>>>>农历计算函数原代码<<<<<<<<<<<<<<<<<
;=============检测阳历对应年份是否闰年==========
;       输入:年份
;       输出:eax = 1 是闰年,否则 eax = 0
_IsLeapYear proto dwYear:dword
;=============取阳历对应年月的天数==============
;       输入:年份,月份
;       输出:eax = 天数
_GetMonthDays proto dwYear:dword,dwMonth:dword
;=============取阳历对应星期几==================
;       输入:年份,月份,日
;       输出:eax=星期,星期日=0,星期一=1…
_GetWeekDay proto dwYear:dword,dwMonth:dword,dwDay:dword
;=============取对应阳历月的节气日==============
;       输入:年份,月份
;       输出:al =第一节气日,ah =第二节气日
_sTermOff proto dwYear:dword,dwMonth:dword
;=============取对应阳历日期的节气序号==========
;       输入:年份,月份,日
;       输出:eax=节气序号,小寒=1,大寒=2…
_GetHolDay proto dwYear:dword,dwMonth:dword,dwDay:dword
;=103f============取两个阳历日期之间的天数==========
;       输入:年份1,月份1,日1,年份2,月份2,日2(第一个为被减数)
;       输出:天数

继续阅读